Hello All,
I have a question, is that possible to provide helptoolTip in textfield that each item has to be shown different helptool,like I have decision for each parameter different HoverOver_desc (placed screenshot) has to be shown, how that can be shown in textfield?
a!textField( readOnly:index( rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ), "isReadOnly_bool", {} ), value: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ).parameters, saveInto: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ).parameters, helpTooltip: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ).HoverOver_Desc, ),
Discussion posts and replies are publicly visible
Since you haven't shared the whole code, I'm assuming you are forming a loop on something. So Yes you can do this to get different parameters of a textField for multiple fields. I would suggest not calling the decision again and again for each parameter instead save it in a local variable outside textField and then property the fields from that.
Could you brief me or can u share sample code?
According to what I have understood from your explanation
a!forEach( items: local!data, expression: a!localVariables( local!parameters: rule!decision( Param_description: fv!item.parameterId_int ), a!textField( value: property(local!parameters, "parameters", null), saveInto: property(local!parameters, "parameters", null), helpTooltip: property(local!parameters, "HoverOver_Desc", null), readOnly: property( local!parameters, "isReadOnly_bool", null ) ) ) )
I have used a!forEach already.How could I use one more a!foreach?
a!localVariables( local!parameterId: cons!CR_RISKMITIGATION_PARAMETERS, local!AddedBusinessRiskAndMitigates_cdt: 'type!{urn:com:appian:types:NBF}CR_BP_RiskMitigation'( cif_int: "" ), local!RemoveButton, local!ParameterDescription, local!InfoIcon, { a!gridLayout( label: cons!CR_LAB_BUSINESS_MODULE_ALL_FIELDS[2], labelPosition: "ABOVE", helpTooltip: rule!CR_DSC_getBusinessProfileToolTipsByFields( FieldName: cons!CR_LAB_BUSINESS_MODULE_ALL_FIELDS[2] ), headerCells: { a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[1], showWhen: false() ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[1] ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[3] & cons!CR_TXT_DISPLAY_ASTERISK ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[4] & cons!CR_TXT_DISPLAY_ASTERISK ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[5] & cons!CR_TXT_DISPLAY_ASTERISK ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[6] ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[7] & cons!CR_TXT_DISPLAY_ASTERISK ), /* For the "Remove" column */ a!gridLayoutHeaderCell( label: "", showWhen: if( local!RemoveButton, true(), false() ) ) }, columnConfigs: { a!gridLayoutColumnConfig( width: "NARROW", weight: 1, showWhen: false() ), a!gridLayoutColumnConfig( width: "NARROW", ), a!gridLayoutColumnConfig( width: "DISTRIBUTE", weight: 1 ), a!gridLayoutColumnConfig( width: "NARROW" ), a!gridLayoutColumnConfig( width: "NARROW" ), a!gridLayoutColumnConfig( width: "NARROW", weight: null ), a!gridLayoutColumnConfig( width: "DISTRIBUTE", weight: 1 ), /* For the "Remove" column */ a!gridLayoutColumnConfig( width: "ICON", showWhen: if( local!RemoveButton, true(), false() ) ) }, rows: { a!forEach( items: ri!BusinessRiskAndMitigates_cdt, expression: a!gridRowLayout( contents: { a!textField( showWhen: false(), readOnly: true(), value: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ).parameters, saveInto: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ).parameters ), a!textField( readOnly:index( rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ), "isReadOnly_bool", {} ), value: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ).parameters, saveInto: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ).parameters, helpTooltip: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ).HoverOver_Desc, ), a!paragraphField( label: "Overview", placeholder: "", validations: rule!CR_FN_setMaximumCharactersValidation( comments_txt: fv!item.overview_txt ), required: true(), readOnly: if( isnull( ri!IsReadOnly_boolean ), false, ri!IsReadOnly_boolean ), value: fv!item.overview_txt, saveInto: fv!item.overview_txt, height: "SHORT" ), a!radioButtonField( choiceLayout: "COMPACT", label: "Probability", required: true(), disabled: if( isnull( ri!IsReadOnly_boolean ), false, ri!IsReadOnly_boolean ), choiceLabels: cons!CR_PROBABILITY_IMPACT_VALUES, choiceValues: cons!CR_PROBABILITY_IMPACT_VALUES, placeholderLabel: "Select", value: fv!item.probability_txt, saveInto: { fv!item.probability_txt, if( not( or( isnull( fv!item.impact_txt ), isnull( fv!item.probability_txt ) ) ), a!save( fv!item.risks_txt, rule!CR_DCS_getRiskByImpactAndProbability( impact: fv!item.impact_txt, probability: fv!item.probability_txt ).valueOutput ), {} ) } ), a!radioButtonField( choiceLayout: "COMPACT", label: "Impact", required: true(), disabled: if( isnull( ri!IsReadOnly_boolean ), false, ri!IsReadOnly_boolean ), choiceLabels: cons!CR_PROBABILITY_IMPACT_VALUES, choiceValues: cons!CR_PROBABILITY_IMPACT_VALUES, placeholderLabel: "Select", value: fv!item.impact_txt, saveInto: { fv!item.impact_txt, if( not( or( isnull( fv!item.impact_txt ), isnull( fv!item.probability_txt ) ) ), a!save( fv!item.risks_txt, rule!CR_DCS_getRiskByImpactAndProbability( impact: fv!item.impact_txt, probability: fv!item.probability_txt ).valueOutput ), {} ) } ), a!imageField( label: "Risk", images: a!documentImage( showWhen: not( or( isnull( fv!item.impact_txt ), isnull( fv!item.probability_txt ) ) ), document: a!iconIndicator( rule!CR_DCS_getRiskByImpactAndProbability( impact: fv!item.impact_txt, probability: fv!item.probability_txt ).iconOutput ) ) ), a!paragraphField( label: "Mitigants", required: true(), height: "SHORT", validations: rule!CR_FN_setMaximumCharactersValidation( comments_txt: fv!item.mitigants_txt ), readOnly: if( isnull( ri!IsReadOnly_boolean ), false, ri!IsReadOnly_boolean ), value: fv!item.mitigants_txt, saveInto: fv!item.mitigants_txt ), a!textField( readOnly: true(), showWhen: if( local!RemoveButton, if( fv!index <= count( cons!CR_RISKMITIGATION_PARAMETERS )-1 , true(), false() ), false() ) ), a!imageField( label: "delete " & fv!index, images: a!documentImage( document: a!iconIndicator( "REMOVE" ), altText: "Remove Item", caption: "Remove", /*& fv!item.CIF,*/ link: a!dynamicLink( value: fv!index, saveInto: { if( isnull( fv!item.id_int ), a!save( ri!BusinessRiskAndMitigates_cdt, remove( ri!BusinessRiskAndMitigates_cdt, save!value ) ), a!deleteFromDataStoreEntities( dataToDelete: { entity: cons!CR_ENTITY_BP_RISK_MITIGATION, identifiers: fv!item.id_int }, onSuccess: a!save( ri!BusinessRiskAndMitigates_cdt, remove( ri!BusinessRiskAndMitigates_cdt, save!value ) ) ) ) } ) ), size: "ICON", showWhen: if( local!RemoveButton, if( fv!index > count( cons!CR_RISKMITIGATION_PARAMETERS )-1 , if( ri!IsReadOnly_boolean, false(), true() ), false() ), false() ) ) } ) ) }, addRowLink: a!dynamicLink( label: "Add Item", value: { addValue: + 1 }, saveInto: { a!save( ri!BusinessRiskAndMitigates_cdt, append( ri!BusinessRiskAndMitigates_cdt, 'type!{urn:com:appian:types:NBF}CR_BP_RiskMitigation'( requestId_int: ri!requestId_Int, cif_int: ri!cif_int, parameterId_int: cons!CR_BP_RISK_PARAMETER_IDS[7], addedOn_dt: now(), addedBy_txt: loggedInUser() ) ) ), a!save( local!AddedBusinessRiskAndMitigates_cdt, ldrop( ri!BusinessRiskAndMitigates_cdt, count( local!parameterId ) ) ), a!save( local!RemoveButton, true() ) }, showWhen: if( isnull( ri!IsReadOnly_boolean ), true, not( ri!IsReadOnly_boolean ) ) ), selectionSaveInto: {}, validations: {}, shadeAlternateRows: true ) } )
sid said:How could I use one more a!foreach?
You wouldn't. You'd put Sanchit's logic (which i agree with) inside your existing a!foreach() loop that you're launching at line 87 in the above code. You would simply declare a new a!localVariables() declaration inside the "expression" parameter, above / containing the a!gridRowLayout() call.
a!localVariables( local!parameterId: cons!CR_RISKMITIGATION_PARAMETERS, local!AddedBusinessRiskAndMitigates_cdt: 'type!{urn:com:appian:types:NBF}CR_BP_RiskMitigation'( cif_int: "" ), local!RemoveButton, local!ParameterDescription, local!InfoIcon, { a!gridLayout( label: cons!CR_LAB_BUSINESS_MODULE_ALL_FIELDS[2], labelPosition: "ABOVE", helpTooltip: rule!CR_DSC_getBusinessProfileToolTipsByFields( FieldName: cons!CR_LAB_BUSINESS_MODULE_ALL_FIELDS[2] ), headerCells: { a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[1], showWhen: false() ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[1] ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[3] & cons!CR_TXT_DISPLAY_ASTERISK ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[4] & cons!CR_TXT_DISPLAY_ASTERISK ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[5] & cons!CR_TXT_DISPLAY_ASTERISK ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[6] ), a!gridLayoutHeaderCell( label: cons!CR_GD_LAB_KEYRISKS_MITIGANTS[7] & cons!CR_TXT_DISPLAY_ASTERISK ), /* For the "Remove" column */ a!gridLayoutHeaderCell( label: "", showWhen: if( local!RemoveButton, true(), false() ) ) }, columnConfigs: { a!gridLayoutColumnConfig( width: "NARROW", weight: 1, showWhen: false() ), a!gridLayoutColumnConfig( width: "NARROW", ), a!gridLayoutColumnConfig( width: "DISTRIBUTE", weight: 1 ), a!gridLayoutColumnConfig( width: "NARROW" ), a!gridLayoutColumnConfig( width: "NARROW" ), a!gridLayoutColumnConfig( width: "NARROW", weight: null ), a!gridLayoutColumnConfig( width: "DISTRIBUTE", weight: 1 ), /* For the "Remove" column */ a!gridLayoutColumnConfig( width: "ICON", showWhen: if( local!RemoveButton, true(), false() ) ) }, rows: { a!forEach( items: ri!BusinessRiskAndMitigates_cdt, expression: a!localVariables( local!parameters: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ), a!gridRowLayout( contents: { a!textField( showWhen: false(), readOnly: true(), value: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ).parameters, saveInto: rule!CR_RISK_PARAMETER_MAPPING( Param_description: fv!item.parameterId_int ).parameters ), a!textField( readOnly: property( local!parameters, "isReadOnly_bool", null ), value: property( local!parameters, "parameters", null ), saveInto: property( local!parameters, "parameters", null ), helpTooltip: property( local!parameters, "HoverOver_Desc", null ), ), a!paragraphField( label: "Overview", placeholder: "", validations: rule!CR_FN_setMaximumCharactersValidation( comments_txt: fv!item.overview_txt ), required: true(), readOnly: if( isnull( ri!IsReadOnly_boolean ), false, ri!IsReadOnly_boolean ), value: fv!item.overview_txt, saveInto: fv!item.overview_txt, height: "SHORT" ), a!radioButtonField( choiceLayout: "COMPACT", label: "Probability", required: true(), disabled: if( isnull( ri!IsReadOnly_boolean ), false, ri!IsReadOnly_boolean ), choiceLabels: cons!CR_PROBABILITY_IMPACT_VALUES, choiceValues: cons!CR_PROBABILITY_IMPACT_VALUES, placeholderLabel: "Select", value: fv!item.probability_txt, saveInto: { fv!item.probability_txt, if( not( or( isnull( fv!item.impact_txt ), isnull( fv!item.probability_txt ) ) ), a!save( fv!item.risks_txt, rule!CR_DCS_getRiskByImpactAndProbability( impact: fv!item.impact_txt, probability: fv!item.probability_txt ).valueOutput ), {} ) } ), a!radioButtonField( choiceLayout: "COMPACT", label: "Impact", required: true(), disabled: if( isnull( ri!IsReadOnly_boolean ), false, ri!IsReadOnly_boolean ), choiceLabels: cons!CR_PROBABILITY_IMPACT_VALUES, choiceValues: cons!CR_PROBABILITY_IMPACT_VALUES, placeholderLabel: "Select", value: fv!item.impact_txt, saveInto: { fv!item.impact_txt, if( not( or( isnull( fv!item.impact_txt ), isnull( fv!item.probability_txt ) ) ), a!save( fv!item.risks_txt, rule!CR_DCS_getRiskByImpactAndProbability( impact: fv!item.impact_txt, probability: fv!item.probability_txt ).valueOutput ), {} ) } ), a!imageField( label: "Risk", images: a!documentImage( showWhen: not( or( isnull( fv!item.impact_txt ), isnull( fv!item.probability_txt ) ) ), document: a!iconIndicator( rule!CR_DCS_getRiskByImpactAndProbability( impact: fv!item.impact_txt, probability: fv!item.probability_txt ).iconOutput ) ) ), a!paragraphField( label: "Mitigants", required: true(), height: "SHORT", validations: rule!CR_FN_setMaximumCharactersValidation( comments_txt: fv!item.mitigants_txt ), readOnly: if( isnull( ri!IsReadOnly_boolean ), false, ri!IsReadOnly_boolean ), value: fv!item.mitigants_txt, saveInto: fv!item.mitigants_txt ), a!textField( readOnly: true(), showWhen: if( local!RemoveButton, if( fv!index <= count( cons!CR_RISKMITIGATION_PARAMETERS ) - 1, true(), false() ), false() ) ), a!imageField( label: "delete " & fv!index, images: a!documentImage( document: a!iconIndicator( "REMOVE" ), altText: "Remove Item", caption: "Remove", /*& fv!item.CIF,*/ link: a!dynamicLink( value: fv!index, saveInto: { if( isnull( fv!item.id_int ), a!save( ri!BusinessRiskAndMitigates_cdt, remove( ri!BusinessRiskAndMitigates_cdt, save!value ) ), a!deleteFromDataStoreEntities( dataToDelete: { entity: cons!CR_ENTITY_BP_RISK_MITIGATION, identifiers: fv!item.id_int }, onSuccess: a!save( ri!BusinessRiskAndMitigates_cdt, remove( ri!BusinessRiskAndMitigates_cdt, save!value ) ) ) ) } ) ), size: "ICON", showWhen: if( local!RemoveButton, if( fv!index > count( cons!CR_RISKMITIGATION_PARAMETERS ) - 1, if( ri!IsReadOnly_boolean, false(), true() ), false() ), false() ) ) } ) ) ) }, addRowLink: a!dynamicLink( label: "Add Item", value: { addValue: + 1 }, saveInto: { a!save( ri!BusinessRiskAndMitigates_cdt, append( ri!BusinessRiskAndMitigates_cdt, 'type!{urn:com:appian:types:NBF}CR_BP_RiskMitigation'( requestId_int: ri!requestId_Int, cif_int: ri!cif_int, parameterId_int: cons!CR_BP_RISK_PARAMETER_IDS[7], addedOn_dt: now(), addedBy_txt: loggedInUser() ) ) ), a!save( local!AddedBusinessRiskAndMitigates_cdt, ldrop( ri!BusinessRiskAndMitigates_cdt, count( local!parameterId ) ) ), a!save( local!RemoveButton, true() ) }, showWhen: if( isnull( ri!IsReadOnly_boolean ), true, not( ri!IsReadOnly_boolean ) ) ), selectionSaveInto: {}, validations: {}, shadeAlternateRows: true ) } )
I have written like this ,still I dont see the helptool for each parameter
Thanks Mike for clearing that out.
Can you show us what you can see? I'm still not sure what you mean by each parameter.
And also what is the value in ri!BusinessRiskAndMitigates_cdt
JS0001 Without knowing the whole references like CDT structure etc. it is difficult to point out the root cause. To debug the issue, you can verify what values are being populated in the local variables and based on the analysis you will understand the root cause.
value in ri-
and each parameter means-1)Technology Risk -?help tool->Is business dependent on technology solutions which if impacted would negatively affect performance?
2)Competitive Risk(parameter) and helptooltip-Are there low barriers to entry and multiple existing competitors in the sector?........
7)other and helptooltip-Add any other risk specific to this business
How's that even possible with the current implementation. Your fv!item.parameterId_int will have a single value for each iteration and you are using the same local (local!parameter) on different fields to get different data but it only has the current id data.
For this you need to declare a!localVariable() for each component and pass the parameterId_int directly for that component.
like this:
a!localVariables( local!parameters: rule!CR_RISK_PARAMETER_MAPPING(Param_description: 2), a!textField( readOnly: property( local!parameters, "isReadOnly_bool", null ), value: property(local!parameters, "parameters", null), helpTooltip: property(local!parameters, "HoverOver_Desc", null), ) )
And in the code you shared, I can't see any helptooltip configured for your 1)Technology Risk textfield() and 7)other paragraphField()