Ваш браузер устарел, не поддерживает современные веб-стандарты и представляет угрозу Вашей безопасности. Для комфортной работы с порталом, пожалуйста, установите современыый браузер.
Портал технической поддержки

Подпись сразу нескольких документов

С ответом

Комментарии

Комментариев: 10

  • Официальный комментарий

    2 - с учетом всех тонкостей:
    public static X509Certificate2 SelectCertificate(ref bool cancel, ObjectContext objectContext)
    {
     IKeyContainer keyContainer = null;
     try
     {
      cancel = false;
      X509Certificate2 certificate = SelectCertificateForm.SelectCertificate(ref cancel, objectContext, false, out keyContainer);

      return cancel ? null : certificate;
     }
     finally
     {
      IDisposable disposable = keyContainer as IDisposable;
      disposable?.Dispose();
     }
    }

    3 - а это в документации:
    http://docsvision.com/docs/DeveloperManual/index.html#DV_Class_libary/DocsVision/BackOffice/ObjectModel/Services/IDocumentService.AddSignature_MT.html

    Действия с комментариями Постоянная ссылка
  • Евгений, спасибо большое!

    0
    Действия с комментариями Постоянная ссылка
  • поделитесь механизмом наложения штампа в pdf документ

    0
    Действия с комментариями Постоянная ссылка
  • Константин,

    пока как такового механизма нет, но есть идея.

     

    Во всяком случае текст вниз листа PDF мы вставлять уже научились. Скорее всего можно вставить что-то типа куска html.

    Пока до этого места я не дошла. Как дойду, расскажу.

    0
    Действия с комментариями Постоянная ссылка
  • Добрый день!

     

    Можно еще спрошу, как быть с иконкой? никак не хочет в навигаторе отображаться. В расширении в VS добавила ее как ресурс, в коде просто указала путь к ней:

     

    NavCommand myCommand = new NavCommand()
    {
    CommandType = NavCommandTypes.ToolBar,
    Name = "Подписать",
    Description = "Подписывает все карточки папки ЭП",
    Icon = Resources.sign32
    };

     

    В card manager тоже отдельно прописала как иконку карточки. Ошибок в логе навигатора при этом нет. Уже не представляю, куда смотреть еще.

    0
    Действия с комментариями Постоянная ссылка
  • Для картинки тип надо выставить в NavCommandTypes.ToolBar | NavCommandTypes.Picture

    0
    Действия с комментариями Постоянная ссылка
  • Евгений, спасибо большое) картинка появилась.

    И еще вопросик в ту же кучу, если можно:

    ObjectContext в расширении навигатора приходится создавать:

    private ObjectContext CreateObjectContext(UserSession session)
    {
    // Инициализация сервис-провайдера
    var sessionContainer = new System.ComponentModel.Design.ServiceContainer();
    sessionContainer.AddService(typeof(DocsVision.Platform.ObjectManager.UserSession), Session);

    // Инициализация контекста объектов
    // В качестве контейнера может выступать компонент карточки, унаследованный от DocsVision.Platform.WinForms.CardControl
    ObjectContext objectContext = new ObjectContext(sessionContainer);

    // Получение сервис-реестра и регистрация фабрик преобразователей
    IObjectMapperFactoryRegistry mapperFactoryRegistry = objectContext.GetService<IObjectMapperFactoryRegistry>();
    mapperFactoryRegistry.RegisterFactory(typeof(SystemCardsMapperFactory));
    mapperFactoryRegistry.RegisterFactory(typeof(BackOfficeMapperFactory));

    // Получение сервис-реестра и регистрация фабрик сервисов
    IServiceFactoryRegistry serviceFactoryRegistry = objectContext.GetService<IServiceFactoryRegistry>();
    serviceFactoryRegistry.RegisterFactory(typeof(SystemCardsServiceFactory));
    serviceFactoryRegistry.RegisterFactory(typeof(BackOfficeServiceFactory));

    // Регистрация сервиса для работы с хранилищем Docsvision
    objectContext.AddService<IPersistentStore>(DocsVisionObjectFactory.CreatePersistentStore(new SessionProvider(Session), null));

    // Регистрация поставщика метаданных карточек
    IMetadataProvider metadataProvider = DocsVisionObjectFactory.CreateMetadataProvider(Session);
    objectContext.AddService<IMetadataManager>(DocsVisionObjectFactory.CreateMetadataManager(metadataProvider, Session));
    objectContext.AddService<IMetadataProvider>(metadataProvider);


    //IUIService UIservice = (IUIService)GetService(typeof(System.Windows.Forms.Design.IUIService));

    //objectContext.AddService(UIservice);
    ////////////////
    //Interface System.Windows.Forms.Design.IUIService not supported

    //System.NotSupportedException: Interface System.Windows.Forms.Design.IUIService not supported
    //в DocsVision.Platform.ObjectModel.ObjectContext.AddService[T](T service)
    //в Yandex.Money.Docsvision.SignatureExtention.CreateObjectContext(UserSession session)
    //в Yandex.Money.Docsvision.SignatureExtention.InvokeCommand(NavCommand command, NavCommandContext context)
    //в DocsVision.Platform.WinForms.NavExtension.DocsVision.Platform.Extensibility.INavCommandExtension.InvokeCommand(Int32 index, NavFolderControlType folderType, Guid folderId, Guid[] selectionIds)
    //в DocsVision.Platform.Wpf.Navigator.ViewModels.ExtCommandData.<> c__DisplayClass8.< InvokeManagedExtensionCommand > b__7()
    //в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
    //в System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

    return objectContext;
    }

     

    Но при вызове метода 

    X509Certificate2 certificate = SelectCertificateForm.SelectCertificate(ref cancel, objectContext, false, out keyContainer);

    возникает ошибка: System.InvalidOperationException: Unsupported object type 'IUIService'.
    в DocsVision.Platform.ObjectModel.ObjectContext.GetService(Type serviceType)
    в DocsVision.Platform.ServiceUtil.GetService(IServiceProvider serviceProvider, Type serviceType)
    в DocsVision.Platform.ServiceUtil.GetService[T](IServiceProvider serviceProvider)
    в DocsVision.BackOffice.WinForms.Controls.SelectCertificateForm..ctor(ObjectContext objectContext, X509Certificate2Collection certs, String question, String defaultThumbprint)
    в DocsVision.BackOffice.WinForms.Controls.SelectCertificateForm.SelectCertFromDialog(Boolean& cancel, ObjectContext context, X509Certificate2Collection certs, String question, String thumbp, Boolean allowSimple)
    в DocsVision.BackOffice.WinForms.Controls.SelectCertificateForm.SelectCertificateLogic(Boolean& cancel, ObjectContext context, Boolean allowSimple)
    в DocsVision.BackOffice.WinForms.Controls.SelectCertificateForm.SelectCertificate(Boolean& cancel, ObjectContext context, Boolean allowSimple, IKeyContainer& keyContainer)
    в Yandex.Money.Docsvision.SignatureExtention.SelectCertificate(ObjectContext objectContext)
    в Yandex.Money.Docsvision.SignatureExtention.InvokeCommand(NavCommand command, NavCommandContext context)
    в DocsVision.Platform.WinForms.NavExtension.DocsVision.Platform.Extensibility.INavCommandExtension.InvokeCommand(Int32 index, NavFolderControlType folderType, Guid folderId, Guid[] selectionIds)
    в DocsVision.Platform.Wpf.Navigator.ViewModels.ExtCommandData.<>c__DisplayClass8.<InvokeManagedExtensionCommand>b__7()
    в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
    в System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

     

    Я пробовала в момент создания objectXContext добавить IUIService сервис, но ничего хорошего из этого не вышло. В методе создания есть закомментированные строки- попытка и что из нее получилось.

     

    Как же быть? в интернете пока никаких подобных вещей не нашла :(

    0
    Действия с комментариями Постоянная ссылка
  • Нашла, как проще получить  ObjectContext objectContext = this.CreateObjectContext(Session);

    Но ошибка при выборе сертификата осталась прежней :(

    0
    Действия с комментариями Постоянная ссылка
  • 1. Реализуем интерфейс IUIService
    internal class UIService : IUIService
    {
    public void ShowMessage(string message)
    {
    MessageBox.Show(message);
    }
    ... и т.п. для всех прочих методов
    }

    2. Делаем свою фабрику сервисов, в ней создание этого сервиса.
    public class TestServiceFactory : ServiceFactory
    {
    protected override object GetService(Type serviceType)
    {
    if (serviceType == typeof(IUIService))
    return new UIService();

    return null;
    }

    public static void RegisterFactory(ObjectContext objectContext)
    {
    IServiceFactoryRegistry serviceFactoryRegistry = objectContext.GetService<IServiceFactoryRegistry>();
    serviceFactoryRegistry.RegisterFactory(typeof(TestServiceFactory));
    }
    }

    3. Далее в коде подключаем ее в контекст:
    TestServiceFactory.RegisterFactory(objectContext);

    0
    Действия с комментариями Постоянная ссылка
  • Евгений, такого большого спасибо, которое я хочу Вам выразить, в природе не существует.

    :) все отлично получилось. Низкий поклон

    0
    Действия с комментариями Постоянная ссылка

Войдите в службу, чтобы оставить комментарий.