Ibm midrange 在加载所有子文件中定位

Ibm midrange 在加载所有子文件中定位,ibm-midrange,rpgle,rpg,Ibm Midrange,Rpgle,Rpg,我有一个Load all子文件,它具有一些功能,允许用户在记录上选择更新记录的选项 我希望能够做到的是,一旦用户更新了记录,就应该重新显示子文件以显示更新的数据 我可以调用Build_子文件例程来重新显示子文件。但是,将从第一条记录显示子文件。然而,我希望保持同样的定位。我理解,如果在重新显示期间保存并恢复了当前显示的选项时第一行的RRN,则可以执行此操作。但由于这是一个load all子文件,是否可以检索RRN?您要查找的关键字是SFLRCDNBR。这会告诉程序显示子文件中包含给定RRN的页面

我有一个Load all子文件,它具有一些功能,允许用户在记录上选择更新记录的选项

我希望能够做到的是,一旦用户更新了记录,就应该重新显示子文件以显示更新的数据


我可以调用Build_子文件例程来重新显示子文件。但是,将从第一条记录显示子文件。然而,我希望保持同样的定位。我理解,如果在重新显示期间保存并恢复了当前显示的选项时第一行的RRN,则可以执行此操作。但由于这是一个load all子文件,是否可以检索RRN?

您要查找的关键字是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_子文件例程中,您需要捕获CSRRRN=0并对其进行更改,以防止出现我上面提到的显示文件错误。这只会在初始子文件加载时发生,或者如果出于任何原因希望将子文件重新定位到顶部,则会发生

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

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