Согласование документа

Для отправки документа на согласование с помощью API необходимо, чтобы в шаблоне, из которого создаётся согласование, был установлен флаг Запускать согласование без показа карточки. Также должен существовать режим создания согласования (в Справочнике видов карточек), который задействует данный шаблон.

  1. Подключите к проекту или скрипту карточки дополнительные сборки: DocsVision.ApprovalDesigner.ObjectModel.dll и DocsVision.DocumentsManagement.ObjectModel.dll, в которых определены преобразователь данных и сервис для отправки согласования.

  2. Подключите дополнительные пространства имён:

    • DocsVision.ApprovalDesigner.ObjectModel.Mapping

    • DocsVision.ApprovalDesigner.ObjectModel.Services

    • DocsVision.BackOffice.ObjectModel.Services

    • DocsVision.DocumentsManagement.ObjectModel.Services

    • DocsVision.Platform.ObjectModel.Mapping

    • System.Linq

  3. Подключите в коде сервисы и преобразователи данных для работы с согласованием:

    IServiceFactoryRegistry serviceFactoryRegistry = context.GetService<IServiceFactoryRegistry>(); (1)
    serviceFactoryRegistry.RegisterFactory(typeof(ApprovalDesignerServiceFactory));
    
    var mapperFactoryRegistry = context.GetService<IObjectMapperFactoryRegistry>(); (2)
    mapperFactoryRegistry.RegisterFactory(typeof(ApprovalDesignerMapperFactory));
    1 Добавляем в контекст фабрику ApprovalDesignerServiceFactory.
    2 Добавляем в контекст преобразовать данных ApprovalDesignerMapperFactory.
  4. Получите идентификатор согласуемого документа, например, так:

    Guid initialCardId = context.GetObjectRef(this.BaseObject).Id; (1)
    1 Получаем идентификатор документа, при в скрипте карточки.
  5. Получите настройки режима создания согласования:

    KindsCardKind cardKind = context.GetObject<KindsCardKind>(new Guid("9C0E5586-41B8-411E-B5CD-C94B605CB7A1")); (1)
    
    KindsCardCreationSetting cardCreationSetting = cardKind.CreationSettings.FirstOrDefault(t => t.ModeName.Equals("СогласованиеПример")); (2)
    1 Получаем настройки вида карточки "Согласование КС".
    2 Получаем настройки режима создания "СогласованиеПример". Режим использует шаблон согласования с флагом Запускать согласование без показа карточки.
  6. Создайте новое согласование для документа:

    Guid reconciliationId = context.GetService<IReconcileService>().CreateReconciliationCard(initialCardId, cardCreationSetting);
  7. Вызовите метод HandleDocumentAfterReconcileCreated, который завершит подготовку согласования и запустит его:

    CardData reconciliationCardData = Session.CardManager.GetCardData(reconciliationId);
    context.GetService<IReconcileService>().HandleDocumentAfterReconcileCreated((Document)this.BaseObject, reconciliationCardData);

    Приведенным способом можно отправлять документы на согласование из скрипта карточки или из внешнего приложения.