Добрый день
Поставлена задача контролировать статус активностей по обращению на момент перехода в статус "IsResolved". Сделал на CasePage в methods 2 функции:
asyncValidate: function(callback, scope) {
this.callParent([function(response) {
if (!this.validateResponse(response)) {
return;
}
Terrasoft.chain(
function(next) {
this.validateActivities(function(response) {
if (this.validateResponse(response)) {
next();
}
}, this);
},
function() {
callback.call(scope, response);
}, this);
}, this]);
},
validateActivities: function(callback, scope) {
var result = {success: true};
if (this.get("Status").IsResolved===true) {
var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Activity" });
esq.addColumn("Status.Finish", "Isfinished");
esq.filters.addItem(esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"Status.Finish", "0"));
esq.filters.addItem(esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"Case", this.get("Id")));
esq.getEntityCollection(function(response) {
if (response.success && response.collection.getCount() > 0) {
result.message = this.get("Resources.Strings.CantChangaStatus");
result.success = false;
}
callback.call(scope || this, result);
}, this);
}
}
Если обращение существует, то все отлично. Проверка идет, сохранять обращение не дает.
Возникла проблема с созданием обращения. Все намертво подвисает и ошибок в логах нет. Подскажите куда копать
Алексей, не пробовали отладку в этом коде и просмотр уходящих к серверу HTTP-запросов. Зависание может означать или цикл, или рекурсию, когда эта логика будет повторяться снова и снова.
А если заменить проверку с ESQ на заглушку, тоже зависает? Может, дело в асинхронности получения ответа от него, а выполнение проверки в asyncValidate ожидало результата сразу?
Если разобраться не получится, как обходной вариант можно создать в основном объекте служебное поле, заполнять его в БП на событиях добавления, изменения и удаления связанных записей на детали и логику проверки в карточке связать с ним.