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