Накопилось несколько вопросов по BPM Online которых я не нашел подобных вопросов на комюнити(или плохо искал).
1. Несовпадение выполнения кода! Есть кнопка по нажатие на которую выполняется некоторый функционал. Когда просто нажимаю - работает неверно(в коде есть много if конструкций) и идет по неверной ветке. Когда начинаю дебажить в отладчику и просматривать код, то выполняется все верно!!! Я такого больше нигде не видел и не знаю что делать. Могу добавить что много используются запросы в БД. Также заметил что с утра работает одинаково через отладчик и напрямую по нажатию на кнопку. Куш чистил - непомогло.
2. Как вывести значение из функции запроса в главную функцию? вот пример кода:
this.Terrasoft.ComparisonType.EQUAL, ColumnRole, true));
var q = 0;
esq.getEntityCollection(function(response) {
if (response.success) {
var collection = response.collection;
if (collection && collection.getByIndex(0)) {
this.set("CountRoles", collection.getByIndex(0).get("Id"));
q = collection.getByIndex(0).get("Id");
}
}
return 5;
}, this);
alert(q);
в отладчику просматриваю вижу что q стает 3(или другой ответ запроса) но по окончанию функции алерт выдает 0. Приходится вытягивать данные через переменную в атрибуте.
3. Какието странные ошибки. Вчера утром срабатывало отлично, теперь ошибки. Прилагаю скрин:
Вот код который делает удаление:
rootSchemaName: "UsrSplit"
});
deleteQuery.filters.add("userFilter",
deleteQuery.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrInvoice", InvoiceId));
deleteQuery.execute(function() {});
Заранее благодарен.
Нравится
Здравствуйте, Виталий.
1) За данное поведение отвечает JavaScript и браузер и оно никак не относится к функционалу Bpm'online. Судя по тому, что Вы делаете запросы к базе данных и глядя на код написанный в пункте 2, могу предположить что пока Вы стоите в дебагере, функции колбека успевают отработать и Вы видите правильный результат. Без дебага же, выполнение идет дальше не успев дождаться результата выполнения колбека.
2) Результат 0 абсолютно корректен в данном коде. Поскольку функция getEntityCollection вызывается асинхронно - сразу же после ее вызова вызывается alert и выдает 0, не дожидаясь ответа от базы данных. Вернуть значение из колбек функции Вы не сможете, возможно только всю логику встроить в функцию обратного вызова или же использовать атрибут.
3) В данном случае, Вам необходимо проверить какой запрос отправляется в базу данных. Для отладки воспользуйтесь программой sql profiler.
Как тогда ставить задержки, что бы функции отработали а потом выполнение двигалось дальше?
Вроде бы решил все проблемы)))
Осталось обновить данные детали, писал так:
this.reloadDetail("имядетали") this.loadDetail("имядетали") UpdateDetail http://www.community.terrasoft.ru/forum/topic/12258
Почти решил с помощью этого? Добавляет все записи детали но старые не удаляет
this.updateDetail( { detail: "MyDetailName",//название детали (как описана в карточке) reloadAll: true } ); this.sandbox.unloadModule(Id); this.sandbox.loadModule("DetailModuleV2", { renderTo: ParentId, id: id });
Даже sandbox передал на деталь сообщение и там вызвал this.reloadGridData(); - далает копии
Как же обновить деталь по нажатии(например) на кнопку в главной карточке
Виталий, вполне достаточно вызвать метод this.updateDetails();
Так, проблему решил. Деталь обновляется!!!
вот так сделал:
отправил sandbox-сообщение на деталь и там
var gridData = this.getGridData();
if (gridData) {
gridData.clear();
this.loadGridData();
}