3

CPF4131 出现在程序中的文件上的可能原因是什么。

我们如何解决这个问题?

 Message . . . . : Error message CPF4131 appeared during OPEN for file 
 TEST (C S D F). 

Cause . . . . . : RPG procedure TEST2 in program TESTLIB/TEST2
received the message CPF4131 while performing an implicit OPEN operation on 
file SOURCE. The actual file is SOURCE. 
4

2 回答 2

15

这是一个记录格式级别检查。这意味着您正在打开的文件中的记录格式与编译程序时发现的格式级别 ID 不同。换句话说,记录中字段的布局有所不同。也许你的文件布局已经改变,如果是这样,那么你可能会想要重新编译你的 RPG 程序。

ID 计算为记录中所有字段的数量和顺序的哈希值,以及它们的名称,以及可能影响程序如何从记录缓冲区存储或检索字段的任何属性。因此,字段名称、数据类型、长度、字段位置是影响 ID 的示例,但列标题或字段文本不会。

一般来说,您会想学习如何查看您的工作日志以查看之前的消息,以了解导致问题的原因。DSPJOB 或 WRKJOB 可能是最常用的方法,选择选项 10,然后按 F10 查看低级消息,然后按 F18(Shift F6)转到列表末尾,然后向上翻页。

于 2013-05-27T06:11:17.623 回答
3

想象一个名为 ARINQDSP 的工作站文件和一个名为 ARINQ 的 RPG 程序。如果您编辑 ARINQDSP,例如在显示中添加一个新字段并编译它,您将拥有一种新的记录格式(如 @WarrenT 所述。如果您调用 ARINQ,操作系统会将存储在程序中的记录格式与存储在文件中的实际记录格式。它们不同,因此发出 CPF4131。重新编译 RPG 程序会将当前记录格式 ID 存储在程序对象中(以及当前缓冲区布局!)并且 CALL ARINQ 现在将按预期执行. 这是一个级别检查错误的最常见原因。

发生这种情况还有另一个原因:库列表不匹配。想象与上面相同的事件序列,只是这一次想象在开发库中进行工作。您已经更改了 ARINQDSP 并重新编译了文件和程序。您的图书馆列表顶部有开发。现在你这样做:呼叫生产/ARINQ。操作系统会调用生产库中的原始程序,但由于库列表的关系,它会尝试从开发库中打开ARINQDSP。生产程序中存储的记录格式ID与开发库的工作站文件中存储的记录格式级别ID和boom:level check不匹配。

于 2013-05-27T13:21:50.510 回答