...

Запуск процесса с использованием внешнего WEB API

Тема в разделе "Вопросы по функционалу", создана пользователем Сергей, 17 апр 2017.

  1. Сергей

    Сергей New Member

    Подскажите пожалуйста пример составленного WebData для запуска процесса с использованием сервиса http://127.0.0.1:8000/API/Workflow, с входным параметром.

    Насколько я понял, для возможности запуска процесса нужно его опубликовать как Web сервис, как показано в https://www.elma-bpm.ru/kb/article-399.html, т.е.присваивается процессу токен, получаю токен авторизации и сессии, из примера в статье https://www.elma-bpm.ru/kb/article-137.html, кусок моего кода составления WebData ниже:

    ElmaWorkflowServiceRef.WorkflowClient wf_client = new ElmaWorkflowServiceRef.WorkflowClient(new BasicHttpBinding() { MaxReceivedMessageSize = Int32.MaxValue },
    new EndpointAddress("http://127.0.0.1:8000/API/Workflow"));

    var tasks = wf_client.ChannelFactory.CreateChannel();
    using (new OperationContextScope((IContextChannel)tasks))
    {
    WebOperationContext.Current.OutgoingRequest.Headers.Add("AuthToken", AuthToken.ToString());
    WebOperationContext.Current.OutgoingRequest.Headers.Add("SessionToken", SessionToken);

    //var t = WebOperationContext.Current.OutgoingRequest.Headers.ToString();

    var data = new EleWise.ELMA.Common.Models.WebData();
    data.Items = new EleWise.ELMA.Common.Models.WebDataItem[4] {
    new EleWise.ELMA.Common.Models.WebDataItem() { Name = "ProcessToken", Value = "ad3e9bf8-fb58-4285-8efa-4e7e0af254da" },
    new EleWise.ELMA.Common.Models.WebDataItem() { Name = "ProcessName", Value = "test777" },


    new EleWise.ELMA.Common.Models.WebDataItem() { Name = "Initiator", Value = ""},
    new EleWise.ELMA.Common.Models.WebDataItem() { Name = "AccNo", Value = "40701840600000052010"}
     
  2. pushkarev

    pushkarev Active Member

    По моему вы немного спутали 2 возможности запуска процесса, а их 2:
    1. Первая, это через SOA коннектор, который генерируется автоматически на каждый процесс у которого указана галочка, запускать через web сервис, описана в статье https://www.elma-bpm.ru/kb/article-399.html Это самый простой способ запустить процесс снаружи, тут не нужно заводить токен приложения и получать токен авторизации, просто вызываете web сервис и можно прямо в нем передать логин, пароль и все реквизиты к процессу.
    2. Второй способ это использование ELMA Web API. С помощью него можно не только запускать процессы, но и работать с объектной моделью и т.д. Это описано в https://www.elma-bpm.ru/kb/article-137.html но в статье нет к сожалению примера по запуску процесса. Описание API можете посмотреть по ссылке: (адрес вашего сервера ELMA)/API/Help/Service?uid=1d194d40-feb4-4f5a-9b17-4ff350e3db82
    В WebData должны попадать только входные параметры контекста процесса. Остальное указывается отдельно.
     
  3. Сергей

    Сергей New Member

    Не думаю, что я спутал, в описании API указаны параметры указанные в моем примере:

    new EleWise.ELMA.Common.Models.WebDataItem() { Name = "ProcessToken", Value = "ad3e9bf8-fb58-4285-8efa-4e7e0af254da" },
    new EleWise.ELMA.Common.Models.WebDataItem() { Name = "ProcessName", Value = "test777" },

    без них ошибка:
    "Не задан идентификатор заголовка процесса и не указан токен для запуска процесса"

    "В WebData должны попадать только входные параметры контекста процесса. Остальное указывается отдельно." - может пример какой дадите?
    передавая new EleWise.ELMA.Common.Models.WebDataItem() { Name = "AccNo", Value = "40701840600000052010"} ошибка:
    "Процесс не может быть запущен, т.к. не установлены соответствующие настройки" - чего-то не хватает.
     
  4. gimntut

    gimntut New Member

    Тут точно ошибка. Для объектов ELMA ожидает Id.
    Насколько я помню, в JSON это записывается так {"Initiator":{"Id":"1"}}
    Это в формате API 2.0.

    К сожалению, пока не могу привести пример запуска процесса, нет ELMA под рукой.
    Но если у вас не получится, то могу подготовить пример.
    Один из моих запросов сгенерированный PostMan:
    Код:
    var client = new RestClient("http://localhost:8000/API/REST/Workflow/TasksInfo");
    var request = new RestRequest(Method.POST);
    request.AddHeader("postman-token", "a8ab0342-a00b-4072-c77a-8f04f5dc621d");
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("webdata-version", "2.0");
    request.AddHeader("content-type", "application/json");
    request.AddHeader("authtoken", "df6bc693-2607-482a-abcc-e3cf6761dc4a");
    request.AddParameter("application/json", "{\"Ids\":[{\"Id\":150986}]}", ParameterType.RequestBody);
    IRestResponse response = client.Execute(request);
    На всякий случай, он же в формате HTTP:
    Код:
    POST /API/REST/Workflow/TasksInfo HTTP/1.1
    Host: localhost:8000
    AuthToken: df6bc693-2607-482a-abcc-e3cf6761dc4a
    Content-Type: application/json
    WebData-Version: 2.0
    Cache-Control: no-cache
    Postman-Token: 6336512f-1a69-7b38-a9cf-cd95a760bb7f
    
    {"Ids":[{"Id":150986}]}
     
    1 это нравится
  5. gimntut

    gimntut New Member

    Если нужно только запустить процесс, то возможно стоит воспользоваться SOA коннектором, который упомянул pushkarev, иначе устанете бороться с созданием правильных WebDataItem.
     
    Последнее редактирование: 20 апр 2017
    1 это нравится
  6. Koshkarov

    Koshkarov New Member

    Добрый день!
    Приведите пожалуйста пример кода для вызова метода StartProcess используя REST запрос с заполнением контекстных переменных (строка, число и документ). Разобрался только с авторизацией, дальше не получается (((
     
    1 это нравится

Поделиться: