ITaskService.AddSignature — метод (Task, X509Certificate2, StatesOperation, Guid, IEnumerable<CardFieldSetting>)

Данный метод добавляет новую подпись в список подписей карточки Задание, и устанавливает ЭП на указанные поля карточки.

Синтаксис

BaseCardSignature AddSignature(Task task, X509Certificate2 certificate, StatesOperation operation, Guid signatureType, IEnumerable<CardFieldSetting> fields)
Параметры
task

Тип: Task

Задание, содержащее подписываемые данные

certificate

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

Сертификат сотрудника, которым будет выполнено подписания

operation

Тип: StatesOperation

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

signatureType

Тип: System.Guid

Тип подписи, который может быть получен из TaskOperationSignatureSetting.Name

fields

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

Коллекция подписываемых полей типа CardFieldSetting, определённых для карточки в Справочнике видов карточек

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

Тип: BaseCardSignature

Подпись

Исключения

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

System.ArgumentNullException

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

Заметки

Настройки (подписываемые поля; операция, при которой будет произведено подписание; и т.д.), используемые при подписании, задаются в Справочнике видов карточек.

Примеры

Ниже приведён пример скрипта, который позволяет осуществить подписание операции в карточке Задание. Обычно подписание осуществляется автоматически, в соответствии с настройками вида в Справочнике видов карточек

using System.Linq;
using System.Reflection;

using DocsVision.BackOffice.ObjectModel;
using DocsVision.BackOffice.ObjectModel.Services;
using DocsVision.BackOffice.WinForms.Controls;
using DocsVision.Platform.ObjectModel;

namespace BackOffice
{
 public class CardTaskТестScript : CardTaskНа_ознакомлениеScript
 {
  private void SignOperation_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  {
   ObjectContext objectContext = base.CardControl.ObjectContext;
   Task task = (base.BaseObject as Task);

   ITaskService taskService = objectContext.GetService<ITaskService>(); (1)

   MethodInfo ensureSign = this.CardControl.GetType().GetMethod("EnsureSign", BindingFlags.NonPublic` | BindingFlags.Instance);
   bool result = (ensureSign.Invoke(this.CardControl, null) as bool?).Value;
   if (!result) return; (2)

   bool cancel = false;

   var certificate = SelectCertificateForm.SelectCertificate(ref cancel, base.CardControl.ObjectContext);
   if (cancel) return; (3)

   var taskSetting = taskService.GetKindSettings(task.SystemInfo.CardKind); (4)

   var signatureSetting = taskSetting.OperationSignatures.First(t => t.SignatureName = "SignOperation"); (5)

   taskService.AddSignature(task, certificate, signatureSetting.SignedOperations[0], new System.Guid(signatureSetting.Name), signatureSetting.Fields); (6)
  }
 }
}
1 Получение сервиса для работы с заданиями.
2 EnsureSign — метод проверки данных карточки перед подписанием не является публичным, поэтому используем механизм отражения.
3 Выбор сертификата сотрудника.
4 Получение настроек вида карточки Задания, для получения настроек подписания.
5 Выбор Вида подписи (определена в Справочнике видов карточек, в секции Подпись/Подписание операций) с названием SignOperation.
6 Добавление подписи. Из настроек подписания, для примера, берем первую настройку.