Запуск процесса через веб-сервис

Здравствуйте! С помощью веб-сервиса осуществляется запуск БП. По логике БП, необходимо открытие карточки контакта. При запуске процесса через веб-сервис, карточка не открывается, но если запустить процесс из BPM, то все работает корректно. Помогите разобраться!

Нравится

22 комментария

Эмин,

Работа с визуальными элементами при запущенном с помощью веб-сервиса процессе будет возможна только в 7.х, доработка в планах.
На 5.х она спускаться не будет, ввиду больших трудозатрат на адаптацию.

"Maxim Gritsenko" написал:

Эмин,

Работа с визуальными элементами при запущенном с помощью веб-сервиса процессе будет возможна только в 7.х, доработка в планах.

На 5.х она спускаться не будет, ввиду больших трудозатрат на адаптацию.


Тогда подскажите, пожалуйста, как можно реализовать работу с визуальными элементами в BPM 5.4 по сигналу из другого приложения без использования веб-сервиса?
И еще вопрос. Возможен ли следующий алгоритм?
Процесс 1 создает запись о контакте в базе через EntitySchemaQuery при запуске по веб-сервис
Процесс 2 подписан на событие создание контакта с условием, и если условие совпадает, то открывается карточка созданного контакта.
Как нужно добавлять запись в БД, чтобы был запущен процесс по событию?

Эмин,

Риквест процессу2 приходит не от страницы, соотв. нет страницы и рендерить некуда, поэтому никак не получится вызвать визуальный элемент "извне".
Максимум, как можно известить пользователя - это установить ему задачу в расписание.

"Maxim Gritsenko" написал:
Максимум, как можно известить пользователя - это установить ему задачу в расписание.

Хорошо, а возможно прописаться на вызов функции, которая проверяет задачи в расписании и расширить ее функционал, или добавить вызов своей функции?

В процессе страницы MainPage, в PageLoadCOmpleteScriptTask собирается js скрипт по обновлению счетчиков уведомлений. Можете вклиниться в этот процесс и добавить, извещение пользователя по выполнению каких-либо условий.

"Maxim Gritsenko" написал:

В процессе страницы MainPage, в PageLoadCOmpleteScriptTask собирается js скрипт по обновлению счетчиков уведомлений. Можете вклиниться в этот процесс и добавить, извещение пользователя по выполнению каких-либо условий.


Огромное спасибо! Подскажите пожалуйста, как нужно добавить код, который будет затем вызван ajax'ом из javascript'a

Я условие создавал на c# - больше возможностей. А потом просто собирал строку с кодом и вставлял в переменную со скриптом.

"Maxim Gritsenko" написал:

Я условие создавал на c# - больше возможностей. А потом просто собирал строку с кодом и вставлял в переменную со скриптом.


Немного не то)
Опишу ситуацию подробнее. По веб-сервису запускается процесс, который сохраняет задачу и связывает ее с контактом и ответственным. Теперь для пользователя необходимо открыть карточку задачи. Мы выяснили, что визуализация процессов через веб-сервис не возможна.
И появилась следующая идея, дописаться в яваскрипт на MainPage, и каждые n сек вызывать метод, а уже данный метод будет запускать процесс, который найдет новую задачу для пользователя и откроет карточку этой задачи.
Возможно ли это?
Подскажите, пожалуйста, как правильно добавить такой метод, чтобы затем вызвать его из яваскрипта по ajax

В 5.х нет таймера, так что раз в n секунд не получится. PageLoadComplete мейнпейджа отрабатывает при его загрузке, то есть, при переходе между разделами. Вызвать процесс из карточки, который сумеет отобразить визуальный элемент можно так:

var manager = UserConnection.ProcessSchemaManager;
var processSchema = manager.GetInstanceByName("MyProcess");
var process = processSchema.CreateProcess(UserConnection);
process.Execute(Page.UserConnection);

Так что получится уведомлять активных пользователей, которые "ходят" по системе.

"Maxim Gritsenko" написал:

В 5.х нет таймера, так что раз в n секунд не получится. PageLoadComplete мейнпейджа отрабатывает при его загрузке, то есть, при переходе между разделами.

...

Так что получится уведомлять активных пользователей, которые "ходят" по системе.


Спасибо!
В javascript коде, который добавляется на PageLoadComplete есть функция checkRemindingExists() и функция setInterval (checkRemindingExists, " + remindingsCheckInterval + @");
Как я понимаю, данные функции осуществляют проверку напоминаний по интервалу. Мне по аналогии необходимо запустить БП из javascript. Как я могу это сделать?

Эмин,

Нашел такую штуку:

Из клиентского кода можно отправить сообщение в процесс страницы:

window.Terrasoft.AjaxMethods.ThrowClientEvent(processUId, message);

В процессе можно создать событийный подпроцесс, в нем начальное сообщение и задание-сценарий, в котором вызов бизнес процесса:

var manager = UserConnection.ProcessSchemaManager;
var processSchema = manager.GetInstanceByName("MyProcess");
var process = processSchema.CreateProcess(UserConnection);
process.Execute(Page.UserConnection);

На PageLoadComplete в ScriptManager передавать вызов своей функции с интервалом вызова:

По идее, это то, что вам нужно. Но, мне кажется, открывать окна юзерам - не лучшая практика.

Спасибо огромное! Все работает!
P.S. Не все обращают внимание на колокольчик, а если там уже были какие-то цифры, то иногда не очевидно поступила новая задача или нет. А окно привлечет внимание.

Вам решать =)

"Maxim Gritsenko" написал:

Добрый день, Максим!
Подскажите пожалуйста где в BPMOnline 7.X осуществляется обновление счетчика уведомлений. Насколько я понял, страница MainPage теперь не осуществляет данный функционал (там закомментирован js-код для счетчика)

Также вы писали, что в 7.X планируется открытие страницы через веб-сервис. Реализован ли данный функционал в 7.1. Если да, то как его можно прмиенить. Т.к. при открытие карточки в БП, который запускается по веб-сервису, БП отрабатывает, но страница не открывается.

Здравствуйте, Эмин.

В 7.x расчет счетчика уведомлений действительно изменился. Стало немного запутанней, но работает быстрее.
Теперь это представление в БД (VwRemindingsCount), которое хранит данные по уведомлениям. Из модуля панельки (LeftPanelTopMenuModule) отправляется запрос сервису напоминаний (RemindingService), который запускает процесс (GetRemindingCounters) выполняющий выборку из представления раз в минуту и передающий ответным запросом модулю панельки, который подписан на сообщения от этого процесса и получив сообщение обновляет счетчик.

По открытию страницы через веб-сервис ориентировок нет, это не приоритетная задача и в спринтах разработчиков я ее пока вообще не вижу.

"Maxim Gritsenko" написал:

Здравствуйте, Эмин.

В 7.x расчет счетчика уведомлений действительно изменился. Стало немного запутанней, но работает быстрее.

Теперь это представление в БД (VwRemindingsCount), которое хранит данные по уведомлениям. Из модуля панельки (LeftPanelTopMenuModule) отправляется запрос сервису напоминаний (RemindingService), который запускает процесс (GetRemindingCounters) выполняющий выборку из представления раз в минуту и передающий ответным запросом модулю панельки, который подписан на сообщения от этого процесса и получив сообщение обновляет счетчик.


Спасибо, разобрался.
Не получается открыть страницу по процессу в новом окне. Создал процесс, который по аналогии вызывается в модуле панельки. Данный процесс должен открывать страницу активности. Но страница открывается на основной странице, можно ли как-то в БП указать открыть в новой вкладке, или в новом окне (как это было в 5.4)?

Из процесса открыть в новой вкладке/окне не выйдет. Можно попробовать открыть страницу, которая при загрузке открывает страницу активности в новой вкладке. Правда, пахнет костылем.
Или можно переопределить модуль панельки, чтобы он при получении сообщения кроме изменения счетчика еще и открывал страницу активности в новой вкладке. Но это тоже костыль, потому что при накатке обновлений они не доедут на переопределенный модуль.

"Maxim Gritsenko" написал:

Из процесса открыть в новой вкладке/окне не выйдет. Можно попробовать открыть страницу, которая при загрузке открывает страницу активности в новой вкладке. Правда, пахнет костылем.

Или можно переопределить модуль панельки, чтобы он при получении сообщения кроме изменения счетчика еще и открывал страницу активности в новой вкладке. Но это тоже костыль, потому что при накатке обновлений они не доедут на переопределенный модуль.


Я так понимаю, что при переопределении модуля необходимо полностью перенести код из базового LeftPanelTopMenuModule в новый. Все перенес, но не могу добавить Images(где хранятся картинки этих иконок?)
Возможно ли уменьшить время запуска счетчика активностей?

Перенести код и использовать свои локализированные строки/изображения. Изображения хранятся в файлах ресурсов, так что, скорее всего, придется нарезать собственные.

"Maxim Gritsenko" написал:

Перенести код и использовать свои локализированные строки/изображения. Изображения хранятся в файлах ресурсов, так что, скорее всего, придется нарезать собственные.


Спасибо за помощь, Максим!

Подскажите, КАК запустить процесс по веб-сервису.

Акмаль, вот ссылка на статью в SDK:
http://www.terrasoft.ru/bpmonlinesdk/WorkWithBpmByWebServices.html

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