Add code below into methods section and bind openInputBox method.
Example: lookup fields to Contact and Account tables.
Pre-condition: add localizableStrings to your schema (UsrContactCaption, UsrAccountCaption, UsrInputBoxCaption).
openInputBox: function() { this.set("UsrContactCollection", new Terrasoft.Collection()); this.set("UsrAccountCollection", new Terrasoft.Collection()); this.set("UsrContact", null); this.set("UsrAccount", null); var controls = { "UsrContact": { dataValueType: Terrasoft.DataValueType.ENUM, isRequired: true, caption: resources.localizableStrings.UsrContactCaption, value: { bindTo: "UsrContact" }, customConfig: { tag: "Contact", list: { bindTo: "UsrContactCollection" }, prepareList: { bindTo: "getCollectionValues" }, loadNextPage: { bindTo: "loadCollectionNextPage" } } }, "UsrAccount": { dataValueType: Terrasoft.DataValueType.ENUM, isRequired: true, caption: resources.localizableStrings.UsrAccountCaption, value: { bindTo: "UsrAccount" }, customConfig: { tag: "Account", list: { bindTo: "UsrAccountCollection" }, prepareList: { bindTo: "getCollectionValues" }, loadNextPage: { bindTo: "loadCollectionNextPage" } } } }; Terrasoft.utils.inputBox(resources.localizableStrings.UsrInputBoxCaption, this.openInputBoxHandler, [Terrasoft.MessageBoxButtons.OK, Terrasoft.MessageBoxButtons.CANCEL], this, controls ); Terrasoft.each(Terrasoft.MessageBox.controlArray, function(item) { item.control.bind(this); }, this); }, getCollectionValues: function(filter, list, tag) { if (Ext.isEmpty(list)) { return; } list.clear(); var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: tag, isPageable: true, rowCount: 20 }); this.buildCollectionQuery(esq, list, filter, tag); }, loadCollectionNextPage: function(listParams, tag) { if (!this.get("CanLoadMore" + tag)) { return; } var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: tag, isPageable: true, rowCount: 20, rowsOffset: listParams.listView.collectionItemsCount }); this.buildCollectionQuery(esq, listParams.list, listParams.filterValue, tag); }, buildCollectionQuery: function(esq, list, filter, tag) { esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_COLUMN, "value"); var orderColumn = esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_DISPLAY_COLUMN, "displayValue"); orderColumn.orderDirection = Terrasoft.OrderDirection.ASC; esq.filters.addItem(esq.createPrimaryDisplayColumnFilterWithParameter( Terrasoft.ComparisonType.START_WITH, filter, Terrasoft.DataValueType.TEXT)); esq.getEntityCollection(function(response) { if (response && response.success) { var preObject = {}; response.collection.each(function(item) { preObject[item.get("value")] = item.values; }, this); list.loadAll(preObject); this.set("CanLoadMore" + tag, response.collection.getCount() === 20); } }, this); }, openInputBoxHandler: function(returnCode, controlData) { if (Terrasoft.MessageBoxButtons.OK.returnCode === returnCode) { // TODO: your code here } }
Dear Akshit,
In order to apply filtration over a lookup field in the InputBox please add the following code to the “buildCollectionQuery” method:
buildCollectionQuery: function(esq, list, filter, tag) {
esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_COLUMN, "value");
var orderColumn = esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_DISPLAY_COLUMN, "displayValue");
orderColumn.orderDirection = Terrasoft.OrderDirection.ASC;
esq.filters.addItem(esq.createPrimaryDisplayColumnFilterWithParameter(
Terrasoft.ComparisonType.START_WITH, filter, Terrasoft.DataValueType.TEXT));
esq.filters.addItem(esq.createColumnInFilterWithParameters("Name",
["Australia", "United States"]));
esq.getEntityCollection(function(response) {
if (response.success) {
var preObject = {};
response.collection.each(function(item) {
preObject[item.get("value")] = item.values;
}, this);
list.loadAll(preObject);
this.set("CanLoadMore" + tag, response.collection.getCount() === 20);
}
}, this);
},
Please see the screenshot with the result https://prnt.sc/rtvqvm
Additionally, please find more information about filtration in esq in the article by the link below:
https://academy.creatio.com/documents/technic-sdk/7-15/entityschemaquery-class-filters-handling
Best regards,
Norton