我有一个Windows子文件,其中只有几个输出字段和一个字符选项字段。我希望用户在选项字段中输入'X‘。如果他输入了错误的选项,我只是简单地突出显示字段,我的问题是:字段被突出显示,但用户的输入值不会保留在选项字段中。它就消失了。我正在使用以下技巧:
DOW not *IN26;
write sflctl;
write footer;
read sflctl;
readc sfl;
dow not %eof();
chain rrn sfl;
if %found();
if fldoption <> 'X' and fldoption <> *blanks;
*IN25 = *on; //highlight;
flag_ok = 0;
update sfl;
elseif fldoption = 'X';
flag_ok = 1;
*in25 = *off;
endif;
endif;
if flag_ok = 1;
*IN26 = *ON;
else;
*IN26 = *OFF;
endif;
readc sfl;
enddo;
enddo;
字段被精确地突出显示,但fldoption中的错误值不会保留在那里。我犯了错误,因为我只有4个月大的RPG。
提前谢谢。
发布于 2014-05-27 00:25:58
您的选项字段可以使用usage I
input only进行定义,如果是这样,则应将其更改为B
both (input I
output)。
一旦您使用READC
读取子文件记录,就不需要对同一记录执行CHAIN
操作。
当我重写显示错误的子文件记录时,我有时会对子文件记录使用SFLNXTCHG
keyword,它将设置记录级MDT (已修改数据标记)。然后,在我重新执行屏幕,并再次执行READC
循环后,该子文件记录将被发现为已更改的记录之一,即使用户没有再次触摸它。
发布于 2014-06-20 17:33:01
需要检查的一点是字段使用选项,无论它是Warren提到的B还是I。总而言之,如果您出于任何特定原因而不执行此验证。为什么不在显示文件本身中使用字段级别的关键字值?这可以去掉几行代码。http://publib.boulder.ibm.com/infocenter/iadthelp/v6r0/index.jsp?topic=/com.ibm.etools.iseries.langref2.doc/rzakcmstdfval.htm
而且由于它的Windows子文件,为什么不使用带有指示器的Change(NN)记录级别关键字来捕获更改并重新读取,甚至SFLNXTCHG也可以使用。是的,选项很多,但重要的是它应该做到这一点。
https://stackoverflow.com/questions/23864107
复制相似问题