none
Рабочие процессы не переходят на следующий этап RRS feed

  • Общие обсуждения

  • Доброе утро. Столкнулся с проблемой в рабочих процессах, многие РП не переходят на следующий этап. Ошибок никаких в журнал не пишется. Вот пример:

    Кому назначено    Название            Срок       Состояние                   Связанный контент     Результат

    Пользователь 1   Разработать КД (ПД)        В процессе выполнения           7                      Завершена

    В чем может быть проблема?

Все ответы

  • Еще актуально.
    8 августа 2017 г. 9:38
  • Очень мало информации, чтобы советовать что либо. Какая версия процессов. В чём сделаны процессы (VS или designer). Код или схему процесса, чтобы можно было найти ошибку.
    8 августа 2017 г. 10:53
  • Очень мало информации, чтобы советовать что либо. Какая версия процессов. В чём сделаны процессы (VS или designer). Код или схему процесса, чтобы можно было найти ошибку.

    Схема процесса не важна. Проблема начинается с момента, когда запускается делегирование прав. При этом задачи, которые затронуло делегирование, начинаются сыпаться (не все, а выборочно). Т.е. у пользователей, которым эти задачи назначены больше не доступны. Чтобы доступ к задаче возобновить, я отслеживаю в базе данных значение tp_WorkflowVersion в таблице AllUserData и меняю это значение на 1. И в таких процессах где было изменение на 1 случается, что рабочий процесс не идет дальше (но не всегда). Понимаю, что это информация тяжело как то адекватно воспринимать. Поэтому у меня вопрос такой. Если какое то общее правило, по которым идет работа рабочего процесса в базе данных, чтобы можно было его "проталкивать" дальше, в случае таких проблем?


    • Изменено delpavel 8 августа 2017 г. 12:32 tp_WorkflowVersion
    8 августа 2017 г. 11:22
  • На мой взгляд в базе вообще не нужно что либо править. Если бы такая ошибка была на уровне системы, то её уже бы поправили в обновлениях, поскольку это очень критично. В основном ошибки рабочих процессов связаны с тем как они написаны (отсюда и вопрос как это написано или создано) . Для примера, рабочий процесс может и не выдать ошибку, если она обработана в секции try except (в том числе в Activity для designer) или не является критичной. А выборочный характер может быть связан c коллизией, когда один и тот же элемент меняют разные процессы одновременно.

    Если у вас сделано в Designer, то попробуйте в рабочем процессе отключить Автоматически изменить состояние рабочего процесса на имя текущей стадии. А в рабочем процессе сами меняйте имя стадии в каждой стадии.

    Проверьте логи sharepoint: C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\LOGS

    8 августа 2017 г. 11:41
  • Еще актуально. Пересмотрел многие процедуры и таблицы, так и не понял по какому алгоритму рабочий процесс переходит на следующий этап. Может на это влияют физические файлы, типа кэша и т.д.? Или отдельная БД этими процессами управляет?
    23 августа 2017 г. 5:49
  • Лично мне нужно больше информации, чтобы попытаться помочь вам... Из того, что вы рассказываете нельзя сделать каких либо выводов о причине остановки процессов. Понятно, что есть какие то конфиденциальные вещи в ваших процессах, но их можно и не показывать. Давайте сначало определимся, в какой момент у вас начинает работать процесс, по какому событию и на чём он написан. 
    23 августа 2017 г. 7:32
  • Лично мне нужно больше информации, чтобы попытаться помочь вам... Из того, что вы рассказываете нельзя сделать каких либо выводов о причине остановки процессов. Понятно, что есть какие то конфиденциальные вещи в ваших процессах, но их можно и не показывать. Давайте сначало определимся, в какой момент у вас начинает работать процесс, по какому событию и на чём он написан. 

    Рабочие процессы написаны через графический интерфейс самой платформы sherepoint, т.е. без Designer. Я не ищу причину остановки, причиной может быть все что угодно, например блокировки в БД, в результате которых какие то данные не записались в нужные таблицы и РП считает что этап не завершен. Я хочу понять принцип работы любого РП для того чтобы любой РП продвинуть дальше при необходимости. Ведь интерфейс это всего лишь оболочка, все данные содержатся в БД. Например как РП "считает" что данный элемент выполнен и нужно переходить на следующий шаг? Я пытался вручную через БД продвигать через хранимые процедуры, но так и не удалось перейти на следующий этап.
    Вот процедуры какие я использовал (все процедуры отслеживал через SQL Profiler в момент закрытия задачи):

    -proc_UpdateListItem
    -proc_UpdateItemInNameValuePair
    -proc_ClearLinks
    -proc_EnsureTranLockNotRequired
    -proc_UpdateListItemCount
    -proc_UpdateDiskUsed
    -proc_GetListItemWorkflowWithInstanceDataAndLock
    -proc_AddWorkItem
    -proc_DeleteEventReceiver
    -proc_DropWorkItem
    -proc_UpdateListItemWorkflowInstanceData
    -proc_RevertInProgressWorkItems

      
    • Изменено delpavel 23 августа 2017 г. 8:49
    23 августа 2017 г. 8:43
  • Рабочие процессы написаны через графический интерфейс самой платформы sherepoint, т.е. без Designer. 

      

    Первый раз слышу о таком способе создания рабочих процессов... 

    Нет, я конечно допускаю, что кто то решил не использовать стандартный подход к созданию РП и создал свой собственный, который доступен через интерфейс sharepoint, но вопрос зачем это всё...

    То, что вы видите запуск процедур в БД - это нормально, но через БД никто эти рабочие процессы не отлаживает. У меня конечно не такой уж большой опыт в SP, но не стандартные вещи обычно заканчиваются использованием web part и javascript. Я очень сомневаюсь, что кто то поможет вам на основе трассировки выполнения SQL процедур.

    Я знаю 3-и способа создания рабочих процессов:

    1. Через sharepoint designer;

    2. С использованием РП из коробки (то есть поставляемым с продуктом);

    3. Написанным в Visual studio, обычно на C#.

    Я знаю, что рабочие процессы делятся на:

    1. Рабочие процессы Сайта - запускаются вручную;

    2. Рабочие процессы списка - запускаются вручную, на изменение записи в списке, на добавление новой записи (внутри процесса можно отлавливать и другие события).

    Поправьте меня более знающие люди, если я несу околесицу... 

    23 августа 2017 г. 9:06
  • Из того что удалось выяснить на данный момент.
    Идея такая, на элементе на котором произошла "ошибка" (ошибки не было, просто РП не пошел дальше) выполнить ряд действия в БД, после которых элемент станет активным для его выполнения.
    Что делаю:
    В рабочем процессе в БД в таблице Workflow меняю значение полей InternalState на 2 (выполняется), LockMachineId на null (в работающих РП такое же значение).
    Для того чтобы элемент списка вновь стал активным в таблице AllUserData в колонке tp_ColumnSet меняю значение <float1>1.000000000000000e+000</float1> на 0, а также убираю строчку <nvarchar9>Завершена</nvarchar9>.
    После чего элемент можно снова выполнить, но ситуация прежняя, РП не идет дальше а поле состояние не меняется, т.е. остается "Не начата". Что еще нужно изменпить в БД, чтобы протолкнуть РП дальше?
    7 сентября 2017 г. 9:31
  • Выяснил, что каждый этап в рабочем процессе имеет два ключевых поля InstanceData и InstanceDataSize. Зная значения этих двух полей, можно управлять РП через БД. Может кто-нибудь знает как собираеются эти поля или может быть хранятся в готовом виде?
    9 октября 2017 г. 12:05