Добрый день.
Прошу помочь.
Задача: Деталь с сложным фильтром. Необходимо вернуть в фильтр массив guid.
Код:
detailFilter: function() { const accountId = this.get("Account").value; let idtList = []; var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Contract" }); esq.addColumn("Account"); var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Account", accountId); esq.filters.add("esqFirstFilter", esqFirstFilter); esq.getEntityCollection(function(result) { if (result.success) { result.collection.each(function(item) { idtList.push(this.get("Id")); window.console.log("Step 1 - " + this.get("Id")); }); } }, this); window.console.log("Step 2 - " + idtList); var filterById = Terrasoft.createColumnInFilterWithParameters("Contract", idtList); filterById.comparisonType = Terrasoft.ComparisonType.EQUAL; return filterById; }
В результате фильтр не срабатывает. В массив не попадают значения.
В консоли такая последовательность:
Step 2 -
Step 1 - bbec9c13-caaa-4db0-8403-33e281c9a35e
Есть подозрения на асинхронность, но как правильно сделать не пойму.
Прошу совета.
Спасибо.
Нравится
Здравствуйте.
Реализуйте на серверной стороне сервис, который будет возвращать нужные значения Id.
Либо ещё другой вариант использовать chain на клиенте. Пример обсуждения смотрите по этой ссылке.
Здравствуйте.
Реализуйте на серверной стороне сервис, который будет возвращать нужные значения Id.
Либо ещё другой вариант использовать chain на клиенте. Пример обсуждения смотрите по этой ссылке.
Попробуйте перенести строчку var filterById и return в блок if (result.success) {, поле цикла, когда у вас массив с id заполнился.