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