Вопрос

JS наполнение массива для фильтрации

Добрый день.

Прошу помочь.

Задача: Деталь с сложным фильтром. Необходимо вернуть в фильтр массив 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

 

Есть подозрения на асинхронность, но как правильно сделать не пойму.

Прошу совета.

Спасибо.

 

Нравится

3 комментария
Лучший ответ

Здравствуйте.

 

Реализуйте на серверной стороне сервис, который будет возвращать нужные значения Id.

 

Либо ещё другой вариант использовать chain на клиенте. Пример обсуждения смотрите по этой ссылке.

 

Здравствуйте.

 

Реализуйте на серверной стороне сервис, который будет возвращать нужные значения Id.

 

Либо ещё другой вариант использовать chain на клиенте. Пример обсуждения смотрите по этой ссылке.

 

Попробуйте перенести строчку var filterById и return в блок if (result.success) {, поле цикла, когда у вас массив с id заполнился.

Алла Савельева,

Спасибо!

Реализовал при помощи chain.

За основу взял пример по ссылке.

 

Показать все комментарии