Подписка на разблокировку карточки
В процессе исполнения бизнес-процесса возникают ситуации, когда процессу необходимо получить доступ к карточке, у которой установлена блокировка, но принудительная разблокировка является нежелательной. В таком случае можно воспользоваться механизмом подписки, который предлагает шлюз к 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
), на события которой осуществляется подписка.