Всем доброго времени суток.
Версия 7.9.
На страницу Лида добавили свою кнопку "Распределить", запускающую определённый бизнес-процесс.
Проблема в том, что пользователи иногда меняют информацию на странице, после чего запускают наш БП, но поскольку изменённая информация при этом ещё не сохранена, то БП выполняется при старых данных.
Вопросы в следующем:
1. Правильно ли я понимаю, что просто вызвать метод save перед вызовом БП недостаточно? То есть чтобы сохранить изменения перед вызовом БП нужно полностью выполнить всю операцию, как в методе save из схемы BaseEntityPage:
onRunProcessProdLeadClick: function(config){
this.Terrasoft.chain(
this.saveCheckCanEditRight,
this.saveAsyncValidate,
this.saveEntityInChain,
function() {
this.Ext.callback(callback, scope || this);
// Запуск пользовательского бизнес-процесса.
ProcessModuleUtilities.executeProcess(args);
}, this);
},
Но в этом случае вываливается ошибка в консоли. Как правильно вызвать сохранение, если не через this.save()?
2. Как правильно вызвать сохранение на странице в совмещённом режиме (LeadSection)?
3. Можно ли сделать сохранение прямо внутри БП, с учётом изменённых данных на странице?
Нравится
1) Насколько я помню, есть метод onSaved(), отрабатывает после сохранения.
2) Нажатие кнопки "сохранить". Идет сообщение в карточку
this.sandbox.publish("OnCardAction", tag, [cardModuleSandboxId]);
там отрабатывает save
3) Не уверен. Скорее всего можно собрать измененные данные в объект, кинуть в бп в качестве параметра и там C# распарсить. Такая себе идея, если честно)
Данила,
1. onSaved отрабатывает после сохранения, это да. Но задача-то состоит в том, чтобы вызвать сохранение нажатием по другой кнопке, а сразу после сохранения - БП.
Если я сделаю так:
this.save(); ProcessModuleUtilities.executeProcess(args);
то сохраниться не всегда успевает. Возможно есть какой-нибудь callback у this.save()?
2. Понятно, то есть если решим проблему с переопределением save в карточке, то можно будет вызвать БП из карточки через сандбокс.
"Смородинов Денис" написал:Возможно есть какой-нибудь callback у this.save()?
Не так вас понял. Исправляюсь)
onMyBtnClick: function() { this.save({ callback: function() { debugger; }, isSilent: true }); }
Касательно раздела. Как я уже писал Bpm кидает tag (равен "save"). Можно его подменить. Примерно:
В секции
onCardAction: function() { var tag = arguments[0] || arguments[3]; var cardModuleSandboxId = this.getCardModuleSandboxId(); if (tag === "save") {tag = "saveAndRunProc";} ///или сразу кидать название функции в pageV2, тогда модификация след. блока не потребуется this.sandbox.publish("OnCardAction", tag, [cardModuleSandboxId]); },
В карточке ловить
onCardAction: function() { var action = arguments[0] || arguments[3]; if (action === "saveAndRunProc") { this.onMyBtnClick();} else { this[action](); } },
"Варфоломеев Данила" написал:Касательно раздела. Как я уже писал Bpm кидает tag (равен "save"). Можно его подменить. Примерно:
Уже сделал по другому. Свой sandbox просто добавил и вызываю в карточке свою функцию, внутри которой save и вызов БП.
"Смородинов Денис" написал:Работает.
"Смородинов Денис" написал:Свой sandbox просто добавил и вызываю в карточке свою функцию
Отлично:smile: