Добрый день
Поставлена задача контролировать статус активностей по обращению на момент перехода в статус "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 ожидало результата сразу?
Если разобраться не получится, как обходной вариант можно создать в основном объекте служебное поле, заполнять его в БП на событиях добавления, изменения и удаления связанных записей на детали и логику проверки в карточке связать с ним.