none
Проблема при программном запуске одного рабочего процесса из другого. RRS feed

  • Вопрос

  • Есть рабочий процесс 1 - запускается при добавлении элемента в целевой список.

    Есть рабочий процесс 2 - он выполняет определенные действия и его вызов программно реализован в коде процесса 1, при помощи SPWorkflowAssociation и метода StartWorkflow менеджера рабочих процессов.

    Так вот - при добавлении элемента в целевой список, было обнаружено, что процесс 2 не выполняет нужных действий. Я зашел в рабочие процессы - и увидел что статус РП1 - выполнен, а РП2 - запуск. При отмене РП2 и его повторном запуске вручную - все срабатывает. В чем тут может быть дело?

    11 ноября 2013 г. 6:54

Ответы

  • Запускайте новые РП в новых потоках. Иначе они буду работать по таймеру.
    11 ноября 2013 г. 7:56
  • Еще раз спасибо за совет - все получилось!

    Сделал при помощи первого найденного способа, а именно при помощи асинхронного вызова.

    public delegate void SomeWork(SPListItem item)

    //процедура вызова дочернего РП public static void CreateProc(SPListItem item) { System.Threading.Thread.Sleep(3000); Guid wfGuid = new Guid("9a08b0d7-124e-4a51-9c4d-e2c9e7ae70b4"); var association = (from SPWorkflowAssociation spwfa in item.ParentList.WorkflowAssociations where spwfa.BaseId == wfGuid select spwfa).FirstOrDefault(); if (association != null) { SPWorkflowManager wfMan = item.ParentList.ParentWeb.Site.WorkflowManager; wfMan.StartWorkflow(item, association, association.AssociationData, true); } } //действия основного РП private void MainWorkflowActions(object sender, EventArgs e) { //набор действий //... SomeWork sw = CreateProc; IAsyncResult asyncres = sw.BeginInvoke(workflowProperties.Item, null, null); sw.EndInvoke(asyncres); }



    12 ноября 2013 г. 1:41

Все ответы

  • добрый  день

    какая версия SP?

    сколько времени висел рабочий процесс в статусе "Запуск"?

    11 ноября 2013 г. 7:49
    Модератор
  • Запускайте новые РП в новых потоках. Иначе они буду работать по таймеру.
    11 ноября 2013 г. 7:56
  • Версия SP Server - 2010. Такая штука происходит, только если вызывать РП программно из других процессов. Все остальные РП, срабатывающие при добавлении/изменении элементов в списках работают нормально.

    Сколько висел процесс в статусе "запуск" я не проверял - но явно больше нескольких минут.

    11 ноября 2013 г. 10:15
  • Благодарю за совет - обязательно попробую.

    И стало интересно насчет таймера. То есть пока не истечет определенное время - дочерний процесс так и будет висеть? Сколько это может длиться?

    11 ноября 2013 г. 10:17
  • у меня бывало так, что когда запускаем одним РП подряд много РП одновременно (сразу по многим элементам), время могло достигать и более 20 мин.
    11 ноября 2013 г. 12:47
    Модератор
  • Еще раз спасибо за совет - все получилось!

    Сделал при помощи первого найденного способа, а именно при помощи асинхронного вызова.

    public delegate void SomeWork(SPListItem item)

    //процедура вызова дочернего РП public static void CreateProc(SPListItem item) { System.Threading.Thread.Sleep(3000); Guid wfGuid = new Guid("9a08b0d7-124e-4a51-9c4d-e2c9e7ae70b4"); var association = (from SPWorkflowAssociation spwfa in item.ParentList.WorkflowAssociations where spwfa.BaseId == wfGuid select spwfa).FirstOrDefault(); if (association != null) { SPWorkflowManager wfMan = item.ParentList.ParentWeb.Site.WorkflowManager; wfMan.StartWorkflow(item, association, association.AssociationData, true); } } //действия основного РП private void MainWorkflowActions(object sender, EventArgs e) { //набор действий //... SomeWork sw = CreateProc; IAsyncResult asyncres = sw.BeginInvoke(workflowProperties.Item, null, null); sw.EndInvoke(asyncres); }



    12 ноября 2013 г. 1:41