CPYTOPCD 在我的程序中使用时只复制了一小部分信息,但在命令行中使用时它复制了所有信息

CPYTOPCD only copies a fraction of the information when used from within my program, yet it copies all the information when used from the command line

我对整个 IBM i (as400), rpgle 场景相当陌生。

我的任务是将一些信息导出为 XML 格式。

我能够使信息的输出正确,当我使用 CPYTOPCD 将信息复制到 XML 文件时出现了问题。

出于某种原因,我还没有理解甚至找不到相关信息,当我在我的程序中使用时,CPYTOPCD 只复制了一小部分数据。但是,当我转到 as400 命令行时,它会毫无问题地复制全部数据。

执行此操作时我能看到的唯一区别是,在命令行中,CPYTOPCD 命令都适合一行,而在程序中,我必须使用“+”并移至下一行才能完成命令。

我查看了很多不同的站点,但找不到类似的问题。也许我没有正确表述问题,这是我最大的问题。

如果我可能没有很好地解释情况,我深表歉意,所以请让我知道我可以提供哪些其他信息来简化它。

非常感谢您提供的任何帮助。

编辑:我不知道这是否是问题的一部分,但我想我还是添加它以防万一。当我检查输出的 XML 时,它结束的地方,也就是它之前毫无问题地写入的某个标签的一半,它会放一个小盒子。根据我在网上找到的内容,我认为这是一个空白字符,但我不确定。

edit2:CLP 对于不同的文件是多次的。

CLRPFM 文件 (SDIXW4)

呼叫PGM(SDI812)

CPYTOPCD FROMFILE(SDIXW4) TOFLR('AUDIT') +
目录(RELLOC.XML)替换(*是)+ TRNFMT(*NOTEXT)

edit3:我将尝试 Charles 给出的建议。希望这绕过了我在使用 CPYTOPCD 时遇到的问题。我将在测试新表格后更新此内容。再次感谢您的帮助。

我假设您正在进行某种源代码编辑会话。既然如此,我建议不要键入加号,而是转到下一行并完成命令...您只需键入 CPYTOPCD,然后按 F4,然后按 F10,然后完成提示的命令。 (使用 Page 键查看整个命令参数和选项列表。)也许您会看到之前错过的内容。这种方法的另一个优点是,您可以使用 F1 获取命令中任何参数的帮助。

CPYTOPCD 已被严重弃用。而且,它不会将 DB2 转换/导出为 XML,因此您的 DB2 table 似乎已经包含 XML。 CPYTOSTMF 是一个更好的选择,只需将已经 XML table 移动到集成文件系统 (IFS)。

编辑:检查作业日志。 IBM i 命令(如 CPYTOPCD)在遇到错误时几乎总是会发出某种消息。一个人在没有任何消息的情况下失败是非常不寻常的。 CALL QCMD 进入裸命令行并按 F10 查看所有消息。

您使用的是什么版本?

正如Buck所说,CPYTOPCD已经贬值了很长时间。 CPYTOSTMF 和 CPYTOIMPF 是更好的选择。

由于您提到自己添加 XML 标签,比 CPYxxx 命令更好的选择是简单地使用 C 运行时库中可用的 write() 函数直接写入 IFS 流文件。您可以从 ILE C 或 ILE RPG 程序中使用此函数。 (示例代码来自 Scott Klement's XML from RPG presentation

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

如果您碰巧使用的是 IBM i 的最新版本(7.1 或 7.2),那么您可能会使用 XML functions that have been added into DB2 for IBM i.

前段时间我遇到了同样的问题...CPYTOPCD 没有从我的文件中导出所有记录...但是我在 RPG 代码的末尾通过 QCMDEXEC 调用了命令但是足够 "close myfile" 在 QCMDEXEC 解决它之前。 您的 rpg 代码是以 "return" 还是 "seton LR" 结尾的?