IDocumentService.AddSignature — метод (Document, X509Certificate2, SignatureLabel, StaffEmployee, String, Boolean, ICollection<CardFieldSetting>)

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

Синтаксис

BaseCardSignature AddSignature(Document document, X509Certificate2 cert, bool signAttachments, ICollection<CardFieldSetting> fields, bool signDocument, StatesOperation operation, Guid signatureType)
Параметры
document

Тип: Document

Документ

cert

Тип: System.Security.Cryptography.X509Certificates.X509Certificate2

Сертификат сотрудника

signAttachments

Тип: System.Boolean

Признак подписания дополнительных файлов документа: true — подписывать, иначе — false

fields

Тип: System.Collections.Generic.ICollection<CardFieldSetting>

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

signDocument

Тип: System.Boolean

Признак подписания основных файлов документа: true — подписывать, иначе — false

operation

Тип: StatesOperation

Подписываемая операция

signatureType

Тип: System.Guid

Идентификатор вида подписи из Справочника видов карточек

Возвращаемое значение

Тип: BaseCardSignature

Созданная подпись

Исключения

Исключение Условие

System.ArgumentNullException

Ошибка возвращается в случае, если не задан параметр document или operation.

Заметки

Чтобы использовать возможность выполнять подписание операций, необходимо добавить соответствующую настройку в Справочнике видов карточек. Она регистрируется во вкладке Подпись в разделе Подписание операций.

Примеры

Ниже приведён пример использования метода AddSignature при подписании операции перехода "Согласован" для карточки типа Документ

(1)

IDocumentService documentService = objectContext.GetService<IDocumentService>();
IStateService stateService = objectContext.GetService<IStateService>(); (2)

Document document = objectContext.GetObject<Document>(new Guid("00000000-0000-0000-0000-000000000000")); (3)

KindsCardKind kind = document.SystemInfo.CardKind;
DocumentSetting documentSetting = documentService.GetKindSettings(kind); (4)

StatesOperation statesOperation = stateService.GetOperations(kind).First(t => t.DefaultName.Equals("Is approved")); (5)

DocumentOperationSignatureSetting operationSignatureSetting = documentSetting.OperationSignatures.First(t => t.SignedOperations.Contains(statesOperation)); (6)

X509Certificate2 certificate = GetCertificate(); (7)

BaseCardSignature signature = documentService.AddSignature(document, certificate, operationSignatureSetting.SignAttachments,
operationSignatureSetting.Fields, operationSignatureSetting.SignDocument, statesOperation, new Guid(operationSignatureSetting.Name)); (8)
objectContext.AcceptChanges();
1 Инициализация контекста объектов.
2 Получение сервисов.
3 Получение документа.
4 Получение вида и настроек данного вида.
5 Получение операции перехода "Согласован" из Конструктора состояний.
6 Получение первой настройки подписания для операции перехода "Согласован".
7 Получение сертификата сотрудника, выполняющего подписание.
8 Подписание операции. Используются параметры подписания, определённые в Справочнике видов карточек.

Для получения сертификата сотрудника используется следующий метод:

static X509Certificate2 GetCertificate()
{
 X509Certificate2 certificate = new X509Certificate2();
 X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
 store.Open(OpenFlags.OpenExistingOnly);
 X509Certificate2Enumerator enumerator = store.Certificates.GetEnumerator();
 while (enumerator.MoveNext())
 {
  if (enumerator.Current.HasPrivateKey)
  {
   return enumerator.Current;
  }
 }
 return null;
}