2

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

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

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

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

当我这样做时,我能看到的唯一区别是,在命令行中,CPYTOPCD 命令都适合一行,而在程序中,我必须使用“+”并移动到下一行来完成命令。

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

如果我对情况的解释不够好,我深表歉意,所以请让我知道我可以提供哪些其他信息以使其更容易。

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

编辑:我不知道这是否是问题的一部分,但我想我不妨添加它以防万一。当我检查输出的 XML 时,它在哪里结束,这是它之前写的一些标签的一半,没有问题,它放了一个小框。根据我在网上找到的内容,我认为这是一个空格字符,但我不确定。

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

CLRPFM 文件(SDIXW4)

呼叫 PGM(SDI812)

CPYTOPCD FROMFILE(SDIXW4) TOFLR('AUDIT') +
TODOC(RELLOC.XML) 替换(*YES) + TRNFMT(*NOTEXT)

编辑3:我将尝试查尔斯给出的建议。希望这可以绕过我在使用 CPYTOPCD 时遇到的问题。我会在测试新表格后更新它。再次感谢你的帮助。

4

4 回答 4

2

您正在使用什么版本和发行版?

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

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

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),那么您可能会使用已添加到 DB2 for IBM i 中的 XML 函数

于 2015-07-28T15:08:46.690 回答
2

前段时间我遇到了同样的问题...... CPYTOPCD 没有从我的文件中导出所有记录......但是我在我的 RPG 代码末尾通过 QCMDEXEC 调用了该命令,但对于 QCMDEXEC 来说,“关闭我的文件”就足够解决了它。你是用“return”还是“seton LR”结束你的 rpg 代码?

于 2015-07-28T21:19:46.587 回答
0

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

于 2015-07-28T13:37:58.830 回答
0

CPYTOPCD 已被弃用。更重要的是,它不会将 DB2 转换/导出为 XML,因此您的 DB2 表似乎已经包含 XML。CPYTOSTMF 是将已经是 XML 的表简单地移动到集成文件系统 (IFS) 的更好选择。

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

于 2015-07-28T13:58:11.403 回答