Hi Community,
How can i make checkbox visible/hidden based on previous DropDown value.
For ex - I have dropdown field as Product having values - KFC, Pizzahut.
I have different checkboxes values if user selects KFC or Pizzahut.
How can i show different checbox dynamically after user selects dropdwon value.
I don't want to show all checkbox value and then hide. Based on the choice KFC/Pizzahut corresponding Checkbox options should dynamically come in form.
Here is the code that i am trying. Please help me with this.
if( ri!readOnly, a!textField( label: "Product", labelPosition: "ADJACENT", value: ri!record.productGroupAffected.value, readOnly: true ), a!dropdownField( label: "Product", labelPosition: "ABOVE", instructions: "", helpTooltip: "", placeholderLabel: "--- Select a Value ---", choiceLabels: local!productGroupAffectedOptions.value, choiceValues: local!productGroupAffectedOptions, value: ri!record.productGroupAffected, saveInto: ri!record.productGroupAffected, required: false ) ), if( ri!record.productGroupAffected = "KFC", a!textField( label: "Tools Affected KFC", labelPosition: "ADJACENT", value: if( or(isnull(ri!record.toolsAffected), count(ri!record.toolsAffected.value)=0), "", joinarray(ri!record.toolsAffected.value, ", ") ), readOnly: true ), a!checkboxField( label: "Tools Affected KFC", labelPosition: "ABOVE", instructions: "", helpTooltip: "", choiceLabels: local!checkbox1Value, choiceValues: local!checkbox1Value, value: ri!record.toolsAffected, saveInto: ri!record.toolsAffected, required: false ) ), if( ri!record.productGroupAffected = "PizzaHut", a!textField( label: "Tools Affected PizzaHut", labelPosition: "ADJACENT", value: if( or(isnull(ri!record.toolsAffected), count(ri!record.toolsAffected.value)=0), "", joinarray(ri!record.toolsAffected.value, ", ") ), readOnly: true ), a!checkboxField( label: "Tools Affected PizzaHut", labelPosition: "ABOVE", instructions: "", helpTooltip: "", choiceLabels: local!checkbox2Value, choiceValues: local!checkbox2Value, value: ri!record.toolsAffected, saveInto: ri!record.toolsAffected, required: false ) ),
Discussion posts and replies are publicly visible
Here is the XSD of the CDT -
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:com:appian:types:CCCD" targetNamespace="urn:com:appian:types:CCCD"> <xsd:complexType name="CCC_Details"> <xsd:annotation> <xsd:documentation><![CDATA[Information]]></xsd:documentation> </xsd:annotation> <xsd:sequence> <xsd:element name="CCCNumber" nillable="true" type="xsd:int"> <xsd:annotation> <xsd:appinfo source="appian.jpa">@Id @GeneratedValue</xsd:appinfo> </xsd:annotation> </xsd:element> <xsd:element name="Approved" nillable="true" type="xsd:string"> <xsd:annotation> <xsd:appinfo source="appian.jpa">@Column(length=50)</xsd:appinfo> </xsd:annotation> </xsd:element> <xsd:element name="ApprovalDate" nillable="true" type="xsd:date" /> <xsd:element name="PRNumber" nillable="true" type="xsd:int" /> <xsd:element name="ProductGroupAffected" nillable="true" type="xsd:string" /> <xsd:element maxOccurs="unbounded" minOccurs="0" name="ToolsAffected" nillable="true" type="xsd:string" /> <xsd:element maxOccurs="unbounded" minOccurs="0" name="NodesAffected" nillable="true" type="xsd:string" /> <xsd:element name="ApprovedBy" nillable="true" type="xsd:string"> <xsd:element name="Bundled" nillable="true" type="xsd:string"> <xsd:annotation> <xsd:appinfo source="appian.jpa">@Column(length=5)</xsd:appinfo> </xsd:annotation> </xsd:element> <xsd:element name="CreatedBy" nillable="true" type="xsd:string"> <xsd:annotation> <xsd:appinfo source="appian.jpa">@Column(length=100)</xsd:appinfo> </xsd:annotation> </xsd:element> <xsd:element name="CreatedOn" nillable="true" type="xsd:dateTime" /> <xsd:element name="UpdatedBy" nillable="true" type="xsd:string"> <xsd:annotation> <xsd:appinfo source="appian.jpa">@Column(length=100)</xsd:appinfo> </xsd:annotation> </xsd:element> <xsd:element name="UpdatedOn" nillable="true" type="xsd:dateTime" /> </xsd:sequence> </xsd:complexType> </xsd:schema>
My problem is same as earlier. Still if i click one of the Nodes Affected ( Product Sizes in earlier examples ) and then select the some other from list of checkboxes, my previous selection gets removed. However it is working fine for the code you mentioned above using local variables but not working with rule inputs.
Hi Thank you for your help. Here are the details -
Something like the below attached screenshot i am trying to achieve on my interface -
Where Product Group Affected has a dropdown value coming from constant, Tools affected values are coming from an expression rule based on Product Group affected selection and finally foreach() loop for Nodes Affected for each Tool. But Nodes Affected checkbox selections are not working for me. Below is the code for it which i am using by replacing local variables with rule input.
a!dropdownField( label: "Product Group Affected", labelPosition: "ABOVE", placeholderLabel: "--- Select a Value ---", choiceLabels: cons!CCCProductGroupAffectedOptions, choiceValues: cons!CCCProductGroupAffectedOptions, value: ri!CCC.ProductGroupAffected, saveInto: { ri!CCC.ProductGroupAffected, /* the below will clear the previous Tools Affected Selection when the Product Group Affected is changed */ a!save( ri!CCC.ToolsAffected, {} ) }, validations: {} ), a!checkboxField( label: "Tools Affected", labelPosition: "ABOVE", choiceLabels: rule!CCCToolsAffectedOptions(ri!CCC.ProductGroupAffected), choiceValues: rule!CCCToolsAffectedOptions(ri!CCC.ProductGroupAffected), value: ri!CCC.ToolsAffected, saveinto: ri!CCC.ToolsAffected, /*ChoiceLayout: "COMPACT",/*STACKED*/ showwhen: not(isnull(ri!CCC.ProductGroupAffected)), validations: {} ), a!columnsLayout( columns: a!forEach( ri!CCC.ToolsAffected, with( local!currentIndex: wherecontains( fv!item, touniformstring(property(ri!CCC.NodesAffected, "Tool", {})) ), a!columnLayout( contents: { a!checkboxField( label: "Nodes Affected for : '" & fv!item & "'", labelPosition: "ABOVE", /*instructions: "current index: " & local!currentIndex,*/ choiceLabels: cons!CCCNodesAffectedOptions, choiceValues: cons!CCCNodesAffectedOptions, value: tointeger( property( index( ri!CCC.NodesAffected, local!currentIndex, null() ), "Nodes", null() ) ), saveInto: { a!save( ri!CCC.NodesAffected, append( if(isnull(local!currentIndex), ri!CCC.NodesAffected, remove(ri!CCC.NodesAffected, local!currentIndex) ), if( rule!APN_isEmpty(save!value), /* indicates all size choices have been de-selected, so we'll save an empty set here to remove this menu choice from the saved data set */ {}, { Tool: fv!item, Nodes: save!value } ) ) ) } ) } ) ) ), showwhen: not(isnull(ri!CCC.ProductGroupAffected)) ),
I am using a interface input named CCC of type CDT. To get the checkbox values Tools Affected and Nodes Affected i have made as an Array.
Let me know if you need any other information. I tried a lot to debug the issue but wasn't able to figure out and looking for help.
prais1852 First of all, migrating from Higher Version to Lower version is never a good approach. Because this require lot of changes to be done in your application. Now coming back to your requirement, there are no alternative for a!columnsLayout(). Till 17.1 version, we had max 2 columns for each UI, while UI designing, whereas from 17.2 on-wards a!columnsLayout() added more flexibility to have multiple columns as per our need. So, if you have switched from 17.2 to 17.1, i recommend change your layouts and their contents. And also replace all those functions which are introduced in 17.2 with their similar one in 17.1 as already been discussed above