定位加载所有子文件

时间:2018-04-02 19:36:26

标签: ibm-midrange rpgle rpg

我有一个加载所有子文件,其功能允许用户对将更新记录的记录采取选项。

我希望能够做的是,只要用户更新记录,就应该重新显示子文件以显示更新的数据。

我可以调用将重新显示子文件的Build_Subfile例程。但是会发生什么,子文件从第一个记录显示。但是,我希望保持相同的定位。我知道如果在重新显示期间保存并恢复当选项时当前显示的第一行的RRN,则可以执行此操作。但由于这是一个加载所有子文件,是否可以检索RRN?

1 个答案:

答案 0 :(得分:2)

您正在寻找的关键字是SFLRCDNBR。这告诉程序显示子文件的页面,上面有给定的RRN。

在显示文件的子文件控制记录中,您需要添加以下关键字:

     A            CSRRRN         4S 0H      SFLRCDNBR(CURSOR)

这告诉子文件显示包含您在CSRRRN中设置的RRN的子文件页面。因此,例如,如果您在页面上有10条记录并且将CSRRRN设置为15,则子文件将从位于15的第2页开始。请注意,使用此方法时,CSRRRN在显示子文件时必须始终为非零数字,否则程序将因显示文件错误而出错。

现在,在RPG中,当用户选择要更新的记录时,在ReadC或Chain例程中捕获RRN以检查所选记录。你没有发布你的代码,所以这是伪代码,但你明白了。

/Free
 // Read through the subfile
 ReadC SubfileA;
 Dow Not %EOF;
   If Select = '1'; // User chose this record
     Exsr srUpdate; // Update the record
     CSRRRN = RRN#A; // Also set cursor to this RRN so the subfile returns here
   Endif;
   ReadC SubfileA;
 Enddo;
/End-Free

在您的Build_Subfile例程中,您将要捕获CSRRRN = 0并更改它以防止上面提到的显示文件错误。这只会在初始子文件加载时发生,或者如果您想将子文件重新定位到顶部,无论出于何种原因。

/Free
 Begsr Build_Subfile;
   If CSRRRN = *Zero;
     CSRRRN = 1; // Position to the top
   Endif;

   // Load your records here
 Endsr;
/End-Free