load( a!gridRowLayout( id: ri!index, contents: { a!textField( label: "Item Number", instructions: "Enter up to 11 numeric characters.", value: if(isnull( ri!newItem_cdt[ri!index].itemNumber), {}, tointeger(ri!newItem_cdt[ri!index].itemNumber) ), saveInto: ri!newItem_cdt[ri!index].itemNumber, required: true(), readOnly: false(), validations: if(len(ri!newItem_cdt[ri!index].itemNumber) > 11, rule!esc_generateFieldLengthValidationText(11),"") ), a!textField( label: "Description", value: if( isnull(ri!newItem_cdt[ri!index].description), {}, ri!newItem_cdt[ri!index].description ), saveInto: ri!newItem_cdt[ri!index].description, required: true(), readOnly: false(), validations: if(len(ri!newItem_cdt[ri!index].description) > 200, rule!esc_generateFieldLengthValidationText(200),"") ), a!textField( label: "Sources", value: if(isnull(ri!newItem_cdt[ri!index].sources), {}, ri!newItem_cdt[ri!index].sources), saveInto: ri!newItem_cdt[ri!index].sources, required: true(), readOnly: false(), validations: if(len(ri!newItem_cdt[ri!index].sources) > 200, rule!esc_generateFieldLengthValidationText(200),"") ), a!dropdownField( label: "Sole Source", choiceLabels: {"Yes", "No"}, choiceValues: {"Yes", "No"}, placeholderLabel: " ", value: ri!newItem_cdt[ri!index].soleSource, saveInto: ri!newItem_cdt[ri!index].soleSource, required: false(), readOnly: false() ), a!integerField( label: "Quantity", value: if(isnull(ri!newItem_cdt[ri!index].quantity), {}, tointeger(ri!newItem_cdt[ri!index].quantity)), saveInto: {ri!newItem_cdt[ri!index].quantity,a!save(ri!newItem_cdt[ri!index].suggestedPrice,if(or(isnull(ri!newItem_cdt[ri!index].quantity), isnull(ri!newItem_cdt[ri!index].unitPrice)), null, dollar(tointeger(ri!newItem_cdt[ri!index].quantity) * todecimal(ri!newItem_cdt[ri!index].unitPrice)) ))}, required: true(), readOnly: false(), /*There has been an syntax error and now it's rectified*/ validations: {if(tointeger(ri!newItem_cdt[ri!index].quantity) < 1 , "Quantity must be greater than 0", if(len(ri!newItem_cdt[ri!index].quantity) > 11, rule!esc_generateFieldLengthValidationText(11), null)) } ), a!textField( label: "Unit Issue", instructions: "Enter up to 25 characters.", value: if(isnull( ri!newItem_cdt[ri!index].unitIssue), {}, ri!newItem_cdt[ri!index].unitIssue), saveInto: ri!newItem_cdt[ri!index].unitIssue, required: true(), readOnly: false(), validations: if(len(ri!newItem_cdt[ri!index].unitIssue) > 25, rule!esc_generateFieldLengthValidationText(25),"") ), a!floatingPointField( label: "Unit Price", value: ri!newItem_cdt[ri!index].unitPrice, saveInto: {ri!newItem_cdt[ri!index].unitPrice,a!save(ri!newItem_cdt[ri!index].suggestedPrice,if(or(isnull(ri!newItem_cdt[ri!index].quantity), isnull(ri!newItem_cdt[ri!index].unitPrice)), null, dollar(tointeger(ri!newItem_cdt[ri!index].quantity) * todecimal(ri!newItem_cdt[ri!index].unitPrice)) ))}, required: true(), readOnly: false(), validation: { if(todecimal(ri!newItem_cdt[ri!index].unitPrice) < 1, "Unit price must be greater than 0", null) } ), /* Why did you take away the saveInto field here? This is the field that should be saving the quantity * unitPrice value. Reason: In SAIL, you can never update a variable under the field which is in read-only mode. So we update the suggestedPrice under Quantity and Unit Price and use the same value in Suggested Price and there isn't a need to update it further as it's already updated under Quantity and Unit Price. */ a!textField( label: "Suggested Price", value: ri!newItem_cdt[ri!index].suggestedPrice, required: true(), readOnly: true() ), a!linkField( label: "delete " & ri!index, align: "CENTER", links: a!dynamicLink( label: char( 10005 ), value: ri!index, saveInto: { a!save( ri!newItem_cdt, remove( ri!newItem_cdt, save!value ) ), /* * When modifying the size of the array used in a!applyComponents, * make the same change in the "token" array variable */a!save( ri!itemToken, remove( ri!itemToken, save!value ) ) } ) ) } ) )