CPYTOPCD копирует только часть информации при использовании из моей программы, но копирует всю информацию при использовании из командной строки

Я довольно новичок для всей IBM i (as400), rpgle сцены.

Мне было дано задание экспортировать некоторую информацию в формат XML.

Мне удалось сделать вывод информации правильным, проблема возникла, когда я использовал CPYTOPCD для копирования информации в файл XML.

По какой-то причине мне еще предстоит понять или даже найти информацию о том, что CPYTOPCD копирует только часть данных, когда я использую их в своей программе. Когда я перехожу к командной строке as400, она копирует все данные без проблем.

Единственное отличие, которое я вижу, когда я это делаю, состоит в том, что в командной строке все команды CPYTOPCD помещаются в одну строку, а в программе я должен использовать "+" и перейти к следующей строке, чтобы завершить команду.

Я просмотрел много разных сайтов, но не могу найти похожую проблему. Возможно, я не правильно формулирую проблему, и это было моей самой большой проблемой.

Я прошу прощения, если я не могу объяснить ситуацию достаточно хорошо, поэтому, пожалуйста, дайте мне знать, какую другую информацию я мог бы предоставить, чтобы сделать ее проще.

Большое спасибо за любую помощь, которую вы можете предоставить.

редактировать: я не знаю, является ли это частью проблемы или нет, но я решил, что я мог бы добавить это на всякий случай. Когда я проверяю выводимый XML, где он заканчивается, то есть на полпути через какой-то тег, который он написал без проблем, он помещает маленькую рамку. Из того, что я нашел в Интернете, я думаю, что это пробел, но я не уверен.

edit2: CLP это несколько раз для разных файлов.

ФАЙЛ CLRPFM (SDIXW4)

ВЫЗОВ ПГМ (SDI812)

CPYTOPCD FROMFILE (SDIXW4) TOFLR ("АУДИТ") +
ЗАМЕНА TODOC(RELLOC.XML) (* YES) + TRNFMT (* NOTEXT)

edit3: я собираюсь попробовать предложение, которое дал Чарльз. Надеемся, что это обходит проблему, которую я получаю с CPYTOPCD. Я обновлю это после тестирования новой формы. Еще раз спасибо за вашу помощь.

4 ответа

Решение

У меня была такая же проблема некоторое время назад... CPYTOPCD не экспортировал все записи из моего файла... но я вызвал команду через QCMDEXEC в конце моего кода RPG, но был достаточно "закрыть мой файл" для QCMDEXEC, чтобы решить Это. Вы заканчиваете свой код RPG с помощью "return" или "seton LR"?

С какой версией и выпуском вы работаете?

Как упомянул Бак, CPYTOPCD долгое время обесценивался. CPYTOSTMF и CPYTOIMPF - лучший выбор.

Поскольку вы упоминаете о добавлении тегов XML самостоятельно, лучшим выбором, чем команды CPYxxx, было бы просто использовать write() функция доступна в библиотеке времени выполнения C для прямой записи в файл потока IFS. Вы можете использовать эту функцию из программы ILE C или ILE RPG. (пример кода из XML Скотта Клемента из презентации RPG

fd = open('/home/scottk/xml/test.xml'
: O_WRONLY+O_CREAT+O_TRUNC+O_CCSID
: M_RDWR
: 819);
xml =
'<?xml version="1.0">'
+ '<CustFile>'
+ ' <CustRec custno="' + %trim(CustNo) + '">'
+ ' <Name>' + %trim(Name) + '</Name>'
+ ' <Address>'
... And so forth ...
callp write(fd: %addr(xml)+2: %len(xml));
callp close(fd);
/end-free

Если вы оказались в недавнем выпуске (7.1 или 7.2) IBM i, то, возможно, вы могли бы использовать функции XML, которые были добавлены в DB2 для IBM i.

CPYTOPCD очень не рекомендуется. Более того, он не преобразует / не экспортирует DB2 в XML, поэтому кажется, что ваша таблица DB2 уже содержит XML. CPYTOSTMF - намного лучший выбор, чтобы просто переместить уже XML-таблицу в интегрированную файловую систему (IFS).

РЕДАКТИРОВАТЬ: Проверьте журнал работы. Команды IBM i, такие как CPYTOPCD, почти всегда выдают какое-то сообщение, если они сталкиваются с ошибкой. Очень необычно, что кто-то терпит неудачу без каких-либо сообщений. ЗВОНИТЕ QCMD, чтобы перейти к пустой командной строке, и нажмите F10, чтобы увидеть все сообщения.

Я предполагаю, что вы находитесь в какой-то сессии редактирования источника. При этом я предлагаю вместо того, чтобы набирать знак плюс, переходить к следующей строке и завершать команду... просто набрать CPYTOPCD, затем нажать F4, а затем F10 и завершить ввод команды. (Используйте клавиши Page, чтобы просмотреть весь список параметров и параметров команды.) Возможно, вы увидите то, что пропустили раньше. Еще одним преимуществом этого подхода является то, что вы можете использовать F1 для получения справки по любому из параметров в команде.

Другие вопросы по тегам