Чтение нескольких файлов из IFS - PullRequest
0 голосов
/ 30 октября 2018

У меня есть местоположение файла IFS, где у меня есть несколько входящих файлов из внешней системы. Есть файлы, связанные с Предметом, которые имеют наименование ITEM_DDMMYYHHMMSS и файлы, относящиеся к клиенту, как CUST_DDMMYYHHMMSS. Было бы несколько файлов, и моя программа Item должна читать файл Item один за другим, и моя программа клиента должна читать файлы клиента один за другим. Я не думаю, что простой CPYFRMIMPF может достичь этого. Есть ли хороший способ добиться этого?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Мне удалось решить эту ситуацию примерно год назад. Ответ Скотта на использование C apis из RPG - хороший ответ. Однако, если в вашей системе есть TAATOOLS, она имеет команду CVTIFS, которая делает это еще проще (http://www.taatool.com/document/L_cvtifs.html). Это довольно распространенный сторонний инструмент, так что, надеюсь, он станет доступным. Тогда ваше решение станет чем-то вроде следующее:

   // CVTIFS OBJ(MyDirectory) OUTLIB(QTEMP) PROCSUBDIR(*NO) <-- Call this however you prefer

   Exec Sql Declare FileNames Cursor For
       Select IfDirE From QTemp.IfsDirP
       Where IfoTyp = '*STMF' And IfPDir = :MyDirectory;

   Exec Sql Open FileNames;

   Exec Sql Fetch FilesNames Into :FileName;
   DoW SqlState = '00000';
       // Run your SQL XMLTable command here using FileName
       Exec Sql Fetch FilesNames Into :FileName;
   EndDo;

   Exec Sql Close FileNames;

Дополнительное примечание: Вы также можете объединить все это в один большой оператор SQL и избежать курсора, но это, вероятно, легче понять как ответ.

0 голосов
/ 30 октября 2018

Вам нужно будет прочитать все интересующие вас файлы в программе, а затем просмотреть их и обработать индивидуально. Вы можете использовать учебник Скотта Клемента по использованию IFS с RPG.

http://www.scottklement.com/presentations/#RPGIFS

Имеются примеры чтения списка файлов в каталоге. Затем обработайте по мере необходимости.

...