...

Служба "EleWise.ELMA.Web.Service.v1.IFilesService" не найдена

Тема в разделе "Проблемы/ошибки", создана пользователем Jercy_vz, 29 ноя 2019.

  1. Jercy_vz

    Jercy_vz New Member

    Добрый день!
    Имеется задача интеграции, нужно из одной системы перенести файлы в Элма.
    Для того чтобы попробовать создать тестовый файл я использую данный код


    Код:
     public string PushTestFile()
            {
                byte[] bytes = System.IO.File.ReadAllBytes("C:\\LogImportContractor.txt");
                MemoryStream ms = new MemoryStream(bytes);
                BinaryFile file = new BinaryFile();
                file.Name = "Test.txt";
                var fileManager = Locator.GetServiceNotNull<IFilesService>();
                fileManager.Upload(ms);
                Guid fileId = fileManager.Upload(ms);
                Logger.Log.Log(LogLevel.Information, new Exception("File id ="+ fileId));
                /*
                //IFile file = EntityManager<IFile>.Instance.Load(fileId);
    
    
                IAttachment attach = EntityManager<IAttachment>.Instance.Create();
                IDocument doc = EntityManager<IDocument>.Instance.Create();
                Iesi.Collections.Generic.ISet<IAttachment> attachments = new Set<IAttachment>();
                attachments.Add()
                doc.Attachments = */
                return "1";
            }
    Компиляция просиходит без ошибок, но при запуске получаю следующую ошибку
    <Message>Служба "EleWise.ELMA.Web.Service.v1.IFilesService" не найдена</Message>
    <StackTrace><![CDATA[в EleWise.ELMA.Services.Locator.GetService(Type type, String name, Boolean checkNotNull)
    в EleWise.ELMA.Services.Locator.GetServiceNotNull[T]()
    в PacketELMASend.RTDynamicsELMAPacketService.PushTestFile() в c:\Windows\Temp\GlobalScriptProjects\RTFileCatchService\Модули\AccessPoint.cs.cs:строка 76
    в SyncInvokePushTestFile(Object , Object[] , Object[] )
    в System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
    в EleWise.ELMA.Web.Service.AuthorizeOperationBehavior.SecurityOperationInvoker.<>c__DisplayClass3.<Invoke>b__2()
    в EleWise.ELMA.Web.Service.AuthorizeOperationBehavior.SecurityOperationInvoker.InvokeWithCheck(Action callIfOk)
    в EleWise.ELMA.Web.Service.AuthorizeOperationBehavior.SecurityOperationInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
    в System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
    в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
    в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
    в System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)]]></StackTrace>
    Подскажите пожалуйста, что здесь не так ? Почему сервис недоступен ?
    И если код неправильный, каким образом я еще могу "стрим" запросить в Файлы Элма?
    Также попутный вопрос, пояснить: в каком виде Элма хранит файлы ? и где ? Если где то есть документация по этому вопросу, дайте пожалуйста ссылочку, с удовольствием ознакомлюсь!

    Заранее благодарен за ответы!
     
  2. Юлия

    Юлия Member

    1 это нравится
  3. Jercy_vz

    Jercy_vz New Member

    Спасибо Вам большое за ответ!
    Но в примерах идёт обращение в файловой системе диска. То есть BinaryFile инициализируется именно данными с диска.
    В этом случае мне нужно будет получить Stream, сохранить его на диск в виде файла, а дальше загружать его в Элма.
    Есть ли варианты, создания файла, чтобы исключить обращения к диску ?
     
  4. pushkarev

    pushkarev Active Member

    Ошибка на которую ругается система, в том что вы обращаетесь к сервису IFilesService, а нужно к IFileManager. Но я рекомендую использовать PublicAPI. Если я правильно понял, вы откуда-то получаете стрим с файлом и вам нужно его записать в ELMA в виде вложения (attachment). Для этого я бы предложил примерно следующий код (я его не проверял, так что могут быть синтаксические ошибки):
    Код:
    public Attachment SaveStreamToELMA(Stream stream)
    {
        var attachment = PublicAPI.Portal.Objects.Common.Attachment.Create();
        attachment.File = InterfaceActivator.Create<BinaryFile>();
        attachment.File.Name = "FileName.docx";
        attachment.File.CreateDate = DateTime.Now;
        attachment.File.InitializeContentFilePath();
        using (var fileStream = new FileStream(attachment.File.ContentFilePath, FileMode.Create, FileAccess.Write))
        {
            stream.CopyTo(fileStream);
        }
        PublicAPI.Services.File.SaveFile(context.Report.File);
        return attachment;
    }
    По вопросу как хранятся файлы в ELMA. Файлы хранятся в файловой системе, все в одной папке (папка эта задается в файле конфигурации, по умолчанию: {папка с ELMA}\UserConfig\Files\. Файлы обезличены и называются порядковыми номерами с расширением (при скачивании им присваивается правильное имя).
     

Поделиться: