Question
In the [Contacts] section, I created a [Driver's documents] detail, the UsrSchema6Detail schema. I need to display it, if the selected job title is [Driver]. If the job title is different or not selected at all, the detail is hidden.
I added a business rule to the contact schema, but it does not work.
rules: { "UsrSchema6Detail": { BindParametrVisibilePlaceByType: { // Rule type: BINDPARAMETER. ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER, // Rule is regulated by the VISIBLE field value. property: BusinessRuleModule.enums.Property.VISIBLE, conditions: [{ // Expression of the left part of the condition. leftExpression: { //The ATTRIBUTE expression type indicates, that // the view model attribute (column)acts as the expression. type: BusinessRuleModule.enums.ValueType.ATTRIBUTE, // Name of the view model column, whose value was compared in the expression. attribute: "Job" }, // Compare operation type. comparisonType: Terrasoft.ComparisonType.EQUAL, // Expression of the right part of the condition. rightExpression: { type: BusinessRuleModule.enums.ValueType.CONSTANT, value: "703e34d6-4113-43b5-84dc-2e1f8635c6d4" } }] } } }
If I apply this rule to the [Department] column, it works OK.
Answer
Using business rules is not a good solution for your business case.
Below is an example of code for hiding the [Communication options] detail on the edit page of an [Account]. Create the AccountPagev2 replacing module, the following code is added in the diff property:
{ "operation": "merge", "name": "Communications", "values": { "visible" : { "bindTo": "communicationsVisibility" } } }
Declare the method responsible for detail visibility in the methods property:
communicationsVisibility: function(){ var type = this.get("Type"); return !!type && type.displayValue === "Our company"; }
As a result, the detail will be visible only in case the type is specified as "Our company". You can hide any detail similarly.