powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Помогите с примером по Ensemble?
3 сообщений из 3, страница 1 из 1
Помогите с примером по Ensemble?
    #38804758
Mikhail27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь сделать простенький пример.Задача состоит в том, чтобы забрать файл из указанной директории, создать его копию и поместить в заданную директорию. Как это можно реализовать, используя входящий файловый адаптер? Подскажите, в верном направлении иду или это вообще не то?

Создал класс бизнес-службы. Создал класс сообщения-запроса к бизнес-операции, у класса сообщения создал свойство FileContent для хранения содержимого файла. В методе OnProcessInput посылаю запрос бизнес-операции. В бизнес операции есть метод, который должен записывать файл в указанную директорию.Class Test.BusinessService1 Extends Ens.BusinessService
{

  Parameter ADAPTER = "EnsLib.File.InboundAdapter";

  Method OnProcessInput(pInput As %FileBinaryStream, Output pOutput As %RegisteredObject) As %Status
  {
    ///Создаём сообщение:
    set msg=##class(BusinessOperation1RequestMessage).%New()
    //Записываем в поле FileContent, полученный из pInput поток файла 
    set msg.FileContent=..Adapter.GetStream("C:\Users\User\Desktop\TestDirectory\",pInput)
    ///Отправляем сообщение-запрос бизнес-операции
   set st=..SendRequestAsync(Test.BusinessOperation1,msg)
   Quit $$$OK
  }

}

Class Test.BusinessOperation1RequestMessage Extends Ens.Request
{

  /// Поле для хранения содержимого файла
  Property FileContent As %FileBinaryStream;

  Property FilePath As %String

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
</Storage>
}

Class Test.BusinessOperation1 Extends Ens.BusinessOperation
{

  Parameter ADAPTER = "EnsLib.File.OutboundAdapter";

  Property Adapter As EnsLib.File.OutboundAdapter;

  Parameter INVOCATION = "Queue";

  /// Помещает файл в заданную папку
  Method PutFile(pReq As BusinessOperation1RequestMessage, Output pResp As BusinessOperation1ResponseMessage) As %Status 
  {
   set stream=pReq.FileContent
   set newFile= ..Adapter.PutStream("C:\Users\User\Desktop\TestDirectory\NewFile.txt",stream,-1)
  }

}
...
Рейтинг: 0 / 0
Помогите с примером по Ensemble?
    #38805194
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail27,

направление правильное.

ps: в исходящем файловом адаптере есть настройка пути, куда сохранять. её можно оттуда брать, а не хардкодить.
pps: название файла можно брать при чтении файла во входящем адаптере, и сохранять его в передаваемом сообщении, чтобы "что прочитал, то и записал".
pps: в бизнес-операции не хватает callback метода (не помню как он назывался).
...
Рейтинг: 0 / 0
Помогите с примером по Ensemble?
    #38809099
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail27,

В класс операции добавьте вот такую фигню:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
XData MessageMap
{
<MapItems>
  <MapItem MessageType="Test.BusinessOperation1RequestMessage">
    <Method>PutFile</Method>
  </MapItem>
</MapItems>
}

Это позволит операции запускать различные методы, в зависимости от типа входящего объекта
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Помогите с примером по Ensemble?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]