Подписка на разблокировку карточки

В процессе исполнения бизнес-процесса возникают ситуации, когда процессу необходимо получить доступ к карточке, у которой установлена блокировка, но принудительная разблокировка является нежелательной. В таком случае можно воспользоваться механизмом подписки, который предлагает шлюз к Docsvision. Далее приведён пример оформления такой подписки.

using System;
using System.Xml;
using DocsVision.Workflow.Objects;
using DocsVision.Workflow.Runtime;
using DocsVision.Workflow.Gates;
using DocsVision.Platform.HelperAPI;
using DocsVision.Workflow.Functions;

namespace DVScriptHost
{
 class DVScript
 {
  public ExecResultEnum Execute (ProcessInfo process, PassState passInfo)
  {
   try
   {

    DVGate dvGate = (DVGate)process.Gates[DVGate.GateID]; (1)

    ProcessVariable cardVar = process.GetVariableByName("Карточка"); (2)

    Guid cardId = new Guid(((DVCard)cardVar.Value).ID); (3)

    var cardData = dvGate.UserSession.CardManager.GetCardData(cardId); (4)

    if ((int)cardData.LockStatus != 0) (5)
    {
     process.LogMessage("Ожидание разблокировки карточки");

     dvGate.SubscriptionChannel.Subscribe((int)DocsVisionSubscriptionType.ObjectUnlock, process.ID, passInfo.FunctionID, cardId); (6)

     return ExecResultEnum.WaitForMessage; (7)
    } else
    {
     process.LogMessage("Карточка разблокирована.");

     return ExecResultEnum.Done; (8)
    }
   } catch (Exception ex)
   {
    process.LogMessage("Ошибка выполнения скрипта:" + ex.Message);

    return ExecResultEnum.Error; (9)
   }
  }
 }
}
1 Получение шлюза к Docsvision.
2 Получение карточки из переменной процесса.
3 Получение идентификатора карточки.
4 Получение данных карточки.
5 Выполнение проверки наличия блокировки карточки. Если карточка является заблокированной, то будет выполнена подписка на событие разблокировки шлюза.
6 Выполнение подписки.
7 Ожидание наступления события.
8 Возвращает признак успешного выполнения функции.
9 Возвращение ошибки.
Подписка осуществляется путем передачи в метод Subscribe:
  • Типа подписки — DocsVisionSubscriptionType (DocsVisionSubscriptionType.ObjectUnlock).

  • Идентификатора бизнес-процесса (process.ID).

  • Идентификатора текущей функции (passInfo.FunctionID).

  • Идентификатора карточки (cardId), на события которой осуществляется подписка.