Отслеживание нажатия на кнопку "Завершить" в SectionActionsDashboard
Здравствуйте.
Стоит задача сохранить карточку Лида при нажатии на кнопку "Завершить" активности в LeadSectionActionsDashboard.
При нажатии кнопки вызывается метод onExecuteButtonClick схемы ActivityDashboardItemViewModel.
Но как отследить нажатие кнопки Завершить из карточки Лида непонятно.
Заранее спасибо за ответ.
Нравится
Здравствуйте!
Отследить нажатие кнопки "Завершить" можно попробовать с помощью пробрасывания события.
В методе 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
Спасибо!!! То, что надо!