...

Запуск процесса из сценария

Тема в разделе "Разработчикам", создана пользователем Mary, 20 май 2017.

  1. Mary

    Mary New Member

    Добрый день, есть необходимость запуска опубликованного процесса из сценария, в справке нашла код https://www.elma-bpm.ru/kb/article-23.html, но ни один из предложенных вариантов не работает, по идее нужно было поменять только название своего процесса в строчке var startableProcess = ProcessHeaderManager.Instance.GetStartableProcesses().FirstOrDefault(a=>a.Name == "Тестовый процесс" && a.Published != null);

    Также еще не понятно почему система не предлагает после любых точек в этом коде варианты функций или переменных, будто система не распознает этот код (может ли это связано с тем, что версия системы Community Edition)?

    Заранее спасибо за помощь.
     
  2. arkarimov

    arkarimov Member

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

    Тут причин может быть несколько
    1. Ошибки в коде, часто приводят к отказу этой функции, или неправильной её работе.
    2. Недостатки в работе самого дизайнера, он далеко не идеален. На приведенном участке кода автоподстановка работает при выборе функций PublicAPI и свойств контекста, в остальных случаях у меня также не сработала.
    3. Вы пытаетесь обратиться к свойствам объекта типа dynamic например здесь (instance.Context.AsDynamic()). И в данном случае автоподстановка свойств также работает некорректно это нормально для данного типа, если говорить коротко.
     
  3. Mary

    Mary New Member

    За идею спасибо! удалила контекстную переменную из кода и все заработало, потом добавила свои и тоже все заработало
     
  4. Mary

    Mary New Member

    Возник еще вопрос, никак не получается обратиться в этом же коде к выпадающему списку запускаемого внешнего процесса и либо записать туда строку , либо выбрать уже из выпадающего списка значение
     
  5. fizik

    fizik New Member

    Точно так же, как и с другими переменными. Если вы использовали первый пример по ссылке, то:
    (instance.Context.AsDynamic()).Spisok = context.Spisok;
    где Spisok - переменная типа выпадающий список в обоих процессах.
    Есть только пара моментов, которые следует учесть: 1. во внешнем процессе эта переменная должна быть входной
    2. Если вы хотите записать в нее значение, которого нет среди элементов списка, то убедитесь, что не стоит галка Выбор только из списка.
    А вообще, лично я не люблю эти выпадающие списки, лучше использовать перечисление.
     
  6. Mary

    Mary New Member

    Дело в том, что в выпадающем списке мне нужно просто поставить уже имеющуюся строчку (у меня список клиентов-фирм и нужно на отображение поставить нужную фирму) при запуске этого внешнего процесса.
    Я пыталась обратиться к объекту-справочнику клиентов, нашла его по наименованию и пыталась туда внести, походу это так не делается...
    var d = EntityManager<TaskCategory>.Instance.Find(p => p.Name == "ООО "Свет"");
    foreach (var s in d)
    {
    (instance.Context.AsDynamic()).Klient= s.Name;
    }
     
    Последнее редактирование: 25 май 2017
  7. arkarimov

    arkarimov Member

    Очень много вопросов
    1. Если вы сценарием запускаете процесс, где и что отображать собираетесь?
    2. Зачем выпадающий список для выбора контрагента, если можно просто создать переменную нужного типа (Контрагент) и вывести на форму её?
    3. В коде
    Вы ищете категорию задач по имени, а потом это имя присваиваете выпадающему списку. Опустим ошибки в самом коде, непонятно в чем идея?
    4. Элемент выпадающего списка это составной объект, соотв. его нельзя присваивать так, пример работы с выпадающим списком можно посмотреть тут. Для запуска сценарием придется повозиться, поскольку смысл всей затеи непонятен, неясно стоит ли игра свеч.
     

Поделиться: