Добрый день. Необходимо написать функцию, которая подсчитывает количество значений в записи. Проблема в том, что из-за того что esq выполняется асинхронно, функция всегда возвращает undefined. Нужно как-то вернуть из нее значение, так как функция будет использоваться повторно. Как это пофиксить? Спасибо.
/**
* Подсчет количества продуктов в детали.
*/
checkProductsCount: function() {
var select = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "OpportunityProductInterest"
});
var esqRestaurantFilter = Terrasoft.createColumnFilterWithParameter(
Terrasoft.ComparisonType.EQUAL, "Opportunity.Id", this.get("Id"));
select.filters.add("selectFilter", esqRestaurantFilter);
var selectedProductsCount = select.getEntityCollection(function(result) {
try {
if (!result.success) {
throw new Error("Ошибка запроса данных");
}
return result.collection.getCount();
}
catch (e) {
Terrasoft.showErrorMessage(e.message);
}
}, this);
return selectedProductsCount;
}
Нравится
Результат функции вы можете записать в атрибут либо сразу в поле через this.set
this.set("Filed", value)
Если после вычитки значений нужные еще какие-то действия, можно на атрибут повесить метод-обработчик по изменению атрибута (свойство dependencies). Подробнее про вычисляемые поля тут: https://academy.terrasoft.ru/documents/technic-sdk/7-16/dobavlenie-vych…
Так же вы можете столкнуться с тем, что в callback'е от вызова функции getEntityCollection не будет доступа к полям (на самом деле просто другой контекст в this будет), в этом случае следует перед выполнением запроса записать this в другую переменную:
var self = this.
var self = this; //ну и далее var selectedProductsCount = select.getEntityCollection(function(result) { if (result && result.success) { self.set("Filed", value); } }, this);
Результат функции вы можете записать в атрибут либо сразу в поле через this.set
this.set("Filed", value)
Если после вычитки значений нужные еще какие-то действия, можно на атрибут повесить метод-обработчик по изменению атрибута (свойство dependencies). Подробнее про вычисляемые поля тут: https://academy.terrasoft.ru/documents/technic-sdk/7-16/dobavlenie-vych…
Так же вы можете столкнуться с тем, что в callback'е от вызова функции getEntityCollection не будет доступа к полям (на самом деле просто другой контекст в this будет), в этом случае следует перед выполнением запроса записать this в другую переменную:
var self = this.
var self = this; //ну и далее var selectedProductsCount = select.getEntityCollection(function(result) { if (result && result.success) { self.set("Filed", value); } }, this);