Отслеживание нажатия на кнопку "Завершить" в SectionActionsDashboard

Здравствуйте.
Стоит задача сохранить карточку Лида при нажатии на кнопку "Завершить" активности в LeadSectionActionsDashboard.
При нажатии кнопки вызывается метод onExecuteButtonClick схемы ActivityDashboardItemViewModel.
Но как отследить нажатие кнопки Завершить из карточки Лида непонятно.
Заранее спасибо за ответ.

Нравится

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

Здравствуйте!
Отследить нажатие кнопки "Завершить" можно попробовать с помощью пробрасывания события.

В методе onExecuteButtonClick добавить публикацию события "SomeEvent" в ActivityDashboardItemViewModel:
this.sandbox.publish("SomeEvent", []);

На странице LeadPageV2 в messages добавить подписку на событие "SomeEvent" :
"SomeEvent": {
mode: Terrasoft.MessageMode.PTP,
direction: Terrasoft.MessageDirectionType.SUBSCRIBE
}

На странице LeadPageV2 в методе subscribeSandboxEvents добавить вызов метода "someMethod" по событию "SomeEvent":
this.sandbox.subscribe("SomeEvent", this.someMethod, this, ...);

На странице LeadPageV2 написать метод "someMethod" , в котором вызывать сохранение Лида.

"Demchenko Olha" написал:В методе onExecuteButtonClick добавить публикацию события "SomeEvent" в ActivityDashboardItemViewModel:
this.sandbox.publish("SomeEvent", []);

Придётся полностью заместить схему ActivityDashboardItemViewModel? Есть ли возможность наследования от неё как от родителя?

Заместил ActivityDashboardItemViewModel. Добавил в метод onExecuteButtonClick публикацию события. В свойствах ActivityDashboardItemViewModel в Messages добавил своё сообщение (Публикация, Адресное). В LeadPageV2 в блок messages добавил сообщение, в метод subscribeSandboxEvents добавил subscriber.
При публикации сообщения возникает ошибка: Message UsrOnExecuteButtonClick is not defined in BaseSchemaModuleV2.
Нужно замещать ещё BaseSchemaModuleV2?

И ещё вопрос, существует ли подробная инструкция по использованию сообщений в BPMOnline7.x?

Добрый день!
Вот поправки в решение:
В схеме ActivityDashboardItemViewModel:
1. Добавить блок messages
messages: {
/**
* @message ReloadDashboardItems
* Reloads dashboard items.
*/
"SomeEvent": {
mode: this.Terrasoft.MessageMode.PTP,
direction: this.Terrasoft.MessageDirectionType.PUBLISH
}
}

2. В методе execute:
execute: function(options) {
this.sandbox.publish(“SomeEvent”, {});
var elementUId = this.get("ProcessElementId");
var recordId = this.get("Id");
var schemaName = this.get("EntitySchemaName");
if (this.isActivity() && this.hasMiniPage(schemaName)) {
this.showMiniPage(options);
} else {
if (elementUId) {
ProcessModuleUtilities.tryShowProcessCard.call(this, elementUId, recordId);
} else {
this.callParent(arguments);
}
}
},

В схеме SectionActionsDashboard:
3. Блок messages:
messages: {
/**
* @message ReloadDashboardItems
* Reloads dashboard items.
*/
"SomeEvent": {
mode: this.Terrasoft.MessageMode.PTP,
direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
}
}

4. В методе subscribePublisher:
subscribePublisher: function(moduleId) {
this.sandbox.subscribe("GetPropertiesByName", this.onGetPropertiesByName, this, [moduleId]);
this.sandbox.subscribe("SomeEvent", this.someEventExecuted, this);
},

5. Добавить метод someEventExecuted:
someEventExecuted: function() {
this.saveMasterEntity();
}

Мне нужно отслеживать сообщение в карточке Лида, а не в SectionActionsDashboard

Т.к. активность можно Завершить не только по нажатию на кнопку "Завершить", но и при переходе по ссылке активности, поэтому Вам было предложено сделать через SectionActionsDashboard.
Если делать через LeadPageV2 то можно сделать только по клику на кнопку.

Выполнил эти пункты:

"Demchenko Olha" написал:В схеме ActivityDashboardItemViewModel:
1. Добавить блок messages
messages: {
/**
* @message ReloadDashboardItems
* Reloads dashboard items.
*/
"SomeEvent": {
mode: this.Terrasoft.MessageMode.PTP,
direction: this.Terrasoft.MessageDirectionType.PUBLISH
}
}

2. В методе execute:
execute: function(options) {
this.sandbox.publish(“SomeEvent”, {});
var elementUId = this.get("ProcessElementId");
var recordId = this.get("Id");
var schemaName = this.get("EntitySchemaName");
if (this.isActivity() && this.hasMiniPage(schemaName)) {
this.showMiniPage(options);
} else {
if (elementUId) {
ProcessModuleUtilities.tryShowProcessCard.call(this, elementUId, recordId);
} else {
this.callParent(arguments);
}
}
},


По идее после этих настроек ошибка при публикации должна была уйти, но при публикации сообщения ошибка " Message UsrOnExecuteButtonClick is not defined in BaseSchemaModuleV2." опять появляется.

вот мой ActivityDashboardItemViewModel: activitydashboarditemviewmodel.js_.txt

В связи с особенностями реализации ActivityDashboardItemViewModel, вариант с событиями всё-таки не получится.
Поэтому, в качестве обходного решения, можно сделать вот так:

define("SectionActionsDashboard", function() {
return {
methods: {
createDashboardItemViewModel: function() {
var viewModel = this.callParent(arguments);
var baseExecute = viewModel.execute;
viewModel.execute = this.someEventExecuted.bind(this, baseExecute, viewModel);
},

someEventExecuted: function(callback, scope) {
this.Ext.callback(callback, scope);
this.saveMasterEntity();
}
},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
};
}
);

Заместить необходимо только SectionActionsDashboard

В моём случае, наверно правильнее будет наследовать LeadSectionActionDashboard?
При замещении столкнулся с проблемой, заголовок для LeadSectionActionDashboard как и для SectionActionDashbord равен BaseActionDashboard и не понятно какую из схем наследовать

"Demchenko Olha" написал:В связи с особенностями реализации ActivityDashboardItemViewModel, вариант с событиями всё-таки не получится.
Поэтому, в качестве обходного решения, можно сделать вот так:

define("SectionActionsDashboard", function() {
return {
methods: {
createDashboardItemViewModel: function() {
var viewModel = this.callParent(arguments);
var baseExecute = viewModel.execute;
viewModel.execute = this.someEventExecuted.bind(this, baseExecute, viewModel);
},

someEventExecuted: function(callback, scope) {
this.Ext.callback(callback, scope);
this.saveMasterEntity();
}
},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
};
}
);

Заместить необходимо только SectionActionsDashboard

Спасибо!!! То, что надо!

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