Накопилось несколько вопросов по BPM Online которых я не нашел подобных вопросов на комюнити(или плохо искал).
1. Несовпадение выполнения кода! Есть кнопка по нажатие на которую выполняется некоторый функционал. Когда просто нажимаю - работает неверно(в коде есть много if конструкций) и идет по неверной ветке. Когда начинаю дебажить в отладчику и просматривать код, то выполняется все верно!!! Я такого больше нигде не видел и не знаю что делать. Могу добавить что много используются запросы в БД. Также заметил что с утра работает одинаково через отладчик и напрямую по нажатию на кнопку. Куш чистил - непомогло.
2. Как вывести значение из функции запроса в главную функцию? вот пример кода:

esq.filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
        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. Какието странные ошибки. Вчера утром срабатывало отлично, теперь ошибки. Прилагаю скрин:


Вот код который делает удаление:

var deleteQuery = Ext.create("Terrasoft.DeleteQuery", {
        rootSchemaName: "UsrSplit"
});
deleteQuery.filters.add("userFilter",
deleteQuery.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,     "UsrInvoice", InvoiceId));
deleteQuery.execute(function() {});

Заранее благодарен.

Нравится

5 комментариев

Здравствуйте, Виталий.

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();
}

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