RSS Подписка на статьи RSS Подписка на комментарии Панель инструментов

Блог профессионалов стал частью сайта технической поддержки DocsVision http://support.docsvision.com. Новые материалы будут появляться уже на этом сайте.

Поиск

Ярлыки

авто генерация кода (1) Администрирование DocsVision (60) Атрибутивный поиск (3) База данных (24) Базы знаний (1) Безопасность (1) Бизнес-процессы (20) Блог (2) Вы увидите это первыми (1) Групповые политики (1) Диаграммы (2) Задания (2) Интеграция (2) Карточки DocsVision (14) Конструктор Решений (11) Маркетинг и продажи (4) Навигатор (3) Новое (3) Новости (32) Опрос (4) Опросы DocsVision (4) Оптимизация (3) Отчеты (2) Ошибки (1) Поддержка (14) Полезные ссылки (1) Представления (4) Производительность (5) Разбор полетов (18) Разработка для Workflow (7) разработка карточек (2) Разработка на платформе DocsVision (41) Разработка решений (43) Расширение платформы (1) Расширенные отчеты (9) Решения на платформе DocsVision (6) Сервисы DocsVision (3) Сканеры (3) Справочник сотрудников (1) Справочник типов (1) Установка (1) Утилиты (13) Шлюз в SharePoint (8) Штрихкод (2) Cкрипты карточек (7) DocsVision внутри (1) DocsVision Live (1) FileStream (1) FireFox (2) Opera (1) Powershell (5) Safari (1) SharePoint2007 (1) SharePoint2010 (2) Silverlight (1) UltraViews (1) Vista (1)

Запуск одного бизнес-процесса из другого при помощи сценария

Проще, конечно, воспользоваться ф-цией "Подпроцесс", но если очень нужно запустить при помощи сценария, то можно воспользоваться объектом DocsVision.Workflow.Objects.Library (из DocsVision.Workflow.Runtime).

У данного объекта есть метод CreateProcess:

Public Function CreateProcess(ByVal Template As DocsVision.Workflow.Objects.Process) As DocsVision.Workflow.Objects.Process


На вход функция принимает шаблон процесса, а на выходе возвращает экземпляр.
У экземпляра нужно вызвать метод Start:

Public Sub Start(ByVal AccountName As String, ByVal Library As DocsVision.Workflow.Objects.Dictionary)

Да, и в конструкторе Library нужно передать сессию, и два параметра 1 и 1 - это размер пула шлюзов и функций.

Public Sub New(ByVal session As UserSession, ByVal SessionPoolSize As Integer, ByVal GatePoolSize As Integer) Читать дальше

1 коммент.:

Netvista комментирует...

Михаил, добрый день. Тема действительно актуальная и в ней есть смысл, так как не всегда блок "подпроцесс" уместен. В моем случае процессы на одном сервере должны запускаться из бизнес-процессов, работающих на других серверах...
Попытался разобраться с предложенным объектом и функциями и вот что получилось:
==========
SessionManager oSessionManager = new SessionManager();
oSessionManager.ConnectAuth("http://ИмяСервера/DocsVision/StorageServer/StorageServerService.asmx", ИмяБазы, Логин, Пароль, 600,false);
UserSession oMainServerSession = oSessionManager.CreateSession();

Library oMSLibrary = new Library(oMainServerSession,10,10);
Dictionary oMSDictionary = oMSLibrary.Dictionary;
Guid oProcessGuid = new Guid(oProcTemplateID);
Process oTemplProc = (Process)oMSLibrary.GetProcess(oProcessGuid);
oTemplProc.Start("домен\\логин",oMSDictionary);
==========
но при выполнении данного кусочка кода, процесс падает с ошибкой:

==========
Не удалось скомпилировать сценарий. Код ошибки: 0. Описание ошибки: Аргумент '1': преобразование типа из 'DocsVision.Platform.ObjectManager.UserSession [c:\WINDOWS\assembly\GAC_MSIL\DocsVision.ObjectManager.Interop\4.1.0.0__7148afe997f90519\DocsVision.ObjectManager.Interop.dll]' в 'DocsVision.Platform.ObjectManager.UserSession [c:\WINDOWS\assembly\GAC_MSIL\DocsVision.Platform.ObjectManager\4.1.0.0__7148afe997f90519\DocsVision.Platform.ObjectManager.dll]' невозможно
==========

Не подскажите в чем может быть проблема?
Удалось, конечно, обойти эту проблему другим способом, но хотелось бы понять почему не получается предложенным способом...

Обходной способ:
==========
SessionManager oSessionManager = new SessionManager();
oSessionManager.ConnectAuth("http://Имя_Сервера/DocsVision/StorageServer/StorageServerService.asmx", Имя_Базы, Логин, Пароль, 600,false);
UserSession oMainServerSession = oSessionManager.CreateSession();

CardData oProcTemplateCardData = oMainServerSession.CardManager.get_CardData(ИД_Шаблона_Процесса);
CardData oProcCardData = oProcTemplateCardData.Copy();
oProcCardData.IsTemplate = false;
SectionData oProcSection = oProcCardData.Sections["{79F5B1F6-6BD0-499B-9093-232989BDCC6E}"];
oProcSection.FindRow("@Name=\"Параметр\"").set_Value("Value",Значение);


WorkflowManagerClass oWFManager = (WorkflowManagerClass)oMainServerSession.WorkflowManager;
DocsVision.Platform.ObjectManager.ProcessInfo oMSProcess = oWFManager.GetProcess(oProcCardData.ID);
oMSProcess.Start();
==========

Отправить комментарий