Question
How can I add filtering by a custom field to a detail? For example, the "Documents" detail in an opportunity does not display the opportunity specified in the document custom field. How can I fix this?
Answer
Here is an example of a filter by the "Opportunity" column and the manually created UsrOpop column for the [Documents] detail on the [Opportunities] section page. The code from the details property:
"Documentd03ac1374493": { "schemaName": "DocumentDetailV2", "entitySchemaName": "Document", "filterMethod": "relationshipDetailFilter", "filter": { "detailColumn": "Opportunity", "masterColumn": "Id" } }
The code of the relationshipDetailFilter() filtering method:
relationshipDetailFilter: function(){ var recordId = this.get("Id"); var filterGroup = new this.Terrasoft.createFilterGroup(); filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.OR; filterGroup.add("DocumentAFilter", this.Terrasoft.createColumnFilterWithParameter( this.Terrasoft.ComparisonType.EQUAL, "Opportunity", recordId)); filterGroup.add("DocumentBFilter", this.Terrasoft.createColumnFilterWithParameter( this.Terrasoft.ComparisonType.EQUAL, "UsrOpop", recordId)); return filterGroup; }
How can i add combination of AND & OR Logical Operators here?
say like (Param>0 AND Type = '') OR (Param>0 AND Type = '') something like this.
Sriraksha KS,
The idea is to make firstly one filter group for AND clause. Then create second filter group for second AND clause. Afterwards, you create a filter group, which combines a first one AND, second AND and other clause. By default filters are added via AND.
Please feel free to use the example below. In the example the filter looks like:
(CITY = 'Los Angeles' AND AddressType="Home") OR (CITY = 'London' AND AddressType="Home")
define("ContactPageV2", [], function() {
return {
entitySchemaName: "Contact",
attributes: {},
modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
details: /**SCHEMA_DETAILS*/{
ContactAddress: {
schemaName: "ContactAddressDetailV2",
filter: {
masterColumn: "Id",
detailColumn: "Contact"
},
filterMethod : "complexFilter"
},
}/**SCHEMA_DETAILS*/,
businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
methods: {
complexFilter: function(){
var recordId = this.get("Id");
var filterGroup = new this.Terrasoft.createFilterGroup();
filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.OR;
var filterAGroup = new this.Terrasoft.createFilterGroup();
filterAGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
filterAGroup.add("LosAngFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "City", "9AAF1EAA-F36B-1410-0099-00155D043204"));
filterAGroup.add("Home1Filter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "AddressType", "4F8B2D67-71D0-45FB-897E-CD4A308A97C0"));
filterAGroup.add("Contact1Filter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Contact", recordId));
var filterBGroup = new this.Terrasoft.createFilterGroup();
filterBGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
filterBGroup.add("LondonFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "City.Name", "London"));
filterBGroup.add("HomeFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "AddressType", "4F8B2D67-71D0-45FB-897E-CD4A308A97C0"));
filterBGroup.add("ContactFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Contact", recordId));
filterGroup.addItem(filterAGroup);
filterGroup.addItem(filterBGroup);
return filterGroup;
}
},
dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
diff: /**SCHEMA_DIFF*/[
]/**SCHEMA_DIFF*/
};
});
The result is here -> https://i.imgur.com/Z6LFEq3.png