Сохранение страницы в совмещённом режиме

Всем доброго времени суток.

Версия 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. Можно ли сделать сохранение прямо внутри БП, с учётом изменённых данных на странице?

Нравится

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

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:

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