BPMOnline 7. Добавление свой пункт в меню "Действия" карточки задачи
Добрый день!
Необходимо добавить свой пункт в меню "Действия" карточки задачи и написать обработчик события нажатия. Как это можно сделать?
P.S.: информацию по добавлению действия в раздел кое какую нашел, а вот в карточку - нет.
Нравится
Александр, здравствуйте.
В приложении инструкция по созданию действия для стандартного раздела.
Александр,
Принцип добавления действия в карточку раздела аналогичен принципу добавления действия в раздел. Разница только в схемах, в которые добавляется код обработчика. Для добавления действия в раздел обработчик добавляется в схему [Название_объекта_раздела]Section. Если необходимо добавить действие в карточку раздела - изменяется схема [Название_объекта_раздела]Page.
В вашем случае необходимо создать замещающий модуль для страницы ActivityPage и добавить в него код обработчика.
В приложении инструкция по добавлению действия, в которой добавлено описание кейса по добавлению действия в карточку раздела.
Елена,
с добавлением действия справился. Теперь встал вопрос: как из кода обработчика нажатия на кнопку в разделе "Действия" получить доступ к данным на деталях, например к списку файлов?
P.S.: данные с самой карточки получаются легко согласно статье, а вот для деталей аналогичного не нашел.
Александр,
через объект получить доступ к деталям не получится. Можно использовать select и получить данные из базы данных. Например так:
var selectFilevar = new Select(UserConnection) .Column("Name") .From("ActivityFilel") .Where("ActivityId").IsEqual(activity.Id)
Андрей,
все бы хорошо, но вот незадача: ActivityPage - это js-страница. Поэтому, чтобы ее переопределить, приходится писать на js. Код:
this.methods.showAvtivityInfo = function() { var activityTitle = this.get("Id"); var esq = Ext.create('Terrasoft.EntitySchemaQuery', { rootSchemaName: 'ActivityFile' }); esq.addColumn('Id'); esq.addColumn('Name'); esq.addColumn('ActivityId'); /*var filters = esq.filters; var filterNameActivityId = 'ActivityId'; var filterActivityId = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, 'ActivityId', activityTitle); filters.add(filterNameActivityId, filterActivityId);*/ esq.getEntityCollection(function(result) { var collection = result.collection; if (collection && collection.collection.length > 0) { var item = collection.collection.items[0].values; this.showInformationDialog(activityTitle); } }, this); };
Exception выходит на строке
esq.addColumn('ActivityId');
Текст exception: [17:51:16.813] uncaught exception: -;5<5=B :>;;5:F88 A 8<5=5< ActivityId =5 =0945=
P.S.: Поля 'ID' и 'Name' отрабатывают корректно.
Александр, у Вас опечатка:
this.methods.showAvtivityInfo = function() {
Должно быть showActivityInfo.
Попробуйте использовать Select(UserConnection), как я описывал выше.
Андрей,
опечатка не существенна, потому что я вызывал функцию ниже именно по этому имени. Сейчас поменял - не помогло.
Вы описали Select(UserConnection), это применимо для C# кода, в JS коде получаем ожидаемую ошибку.
1. При сохранении (во вложении)
2. В консоли браузера:
[14:42:41.377] ReferenceError: Select is not defined @ http://stnd-bpm-02:88/0//configuration/30e6e6890bd6a8c10768d330b68949d4…
Александр,
прошу прощения, сразу не подумал.
В таком случае, не могли бы Вы скинуть полный код замещающей страницы?
Александр, если я правильно понял, то нужно просто дописать
click: { bindTo: 'showActivityInfo' }
Андрей,
Уверен, Вы меня не правильно поняли. Я получил idшники файлов, круто. Теперь мне нужно вызвать метод, написанный на C#. На сколько я понимаю, мне для этого нужно:
1. Создать проект со сбокой dll в VisualStudio
2. Подключить сборку к dll. Как?
3. Вызвать из js-кода метод из сборки. Как?
Александр,
действительно неправильно понял. Для того чтобы вызвать «свой серверный метод» нужно написать сервис, к которому нужно обратиться из клиента, а внутри сервиса можно вызвать «свой серверный метод».
Александр, веб-сервис пишется на любом языке программирования и регистрируется в IIS.
Потом через API сервиса вызывать его методы. Пример запроса к Google с помощью jQuery:
1) Подключить jQuery в зависимые модули нашей страницы редактирования (в примере ProductPage) модуль jQuery.
2) В коде страницы добавить define('ProductPage', ['ext-base', 'terrasoft', 'sandbox', 'jQuery' …..
function(Ext, Terrasoft, sandbox, jQuery ……
3) В обработчик нажатия кнопки добавить следующий код:
var geocodingAPI = "http://maps.googleapis.com/maps/api/geocode/json?address=Россия+Москва&sensor=true";
window.jQuery.getJSON(geocodingAPI, function (json) {
console.log('json : ', JSON.stringify(json));
});