Проще, конечно, воспользоваться ф-цией "Подпроцесс", но если очень нужно запустить при помощи сценария, то можно воспользоваться объектом 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)
Михаил, добрый день. Тема действительно актуальная и в ней есть смысл, так как не всегда блок "подпроцесс" уместен. В моем случае процессы на одном сервере должны запускаться из бизнес-процессов, работающих на других серверах...
ОтветитьУдалитьПопытался разобраться с предложенным объектом и функциями и вот что получилось:
==========
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();
==========