IDocumentService.AddSignature — метод (Document, X509Certificate2, SignatureLabel, StaffEmployee, String, Boolean, ICollection<CardFieldSetting>)
Данный метод предназначен для выполнения подписания операции в документе.
-
Пространство имён:
DocsVision.BackOffice.ObjectModel.Services
-
Сборка:
DocsVision.BackOffice.ObjectModel.dll
Синтаксис
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
Созданная подпись
Исключения
Исключение | Условие |
---|---|
Ошибка возвращается в случае, если не задан параметр |
Заметки
Чтобы использовать возможность выполнять подписание операций, необходимо добавить соответствующую настройку в Справочнике видов карточек. Она регистрируется во вкладке Подпись в разделе Подписание операций.
Примеры
Ниже приведён пример использования метода 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;
}