处理输入错误
每当您有操作员输入要处理时,几乎总是可能出现不正确的数据,您必须在代码中提供此列联。
- 将错误通知操作员。 尝试一次诊断所有这些问题; 如果您一次显示一个这些问题,那么会使操作员感到烦恼。
- 保存已输入的数据,以便操作员不必对除更正以外的任何内容进行再加密。
- 安排在操作员进行更正后重新检查输入。
标记错误
REJECT-INPUT.
MOVE LOW-VALUES TO ACCTNOO CHGO.
EXEC CICS SEND MAP('QUPMAP') MAPSET('QUPSET') FROM(QUPMAPO)
DATAONLY END-EXEC.
请注意,我们指定了 DATAONLY 选项。 我们可以这样做,因为地图的不变部分还在屏幕上,那里没有改写它的意义。 我们清除了输出字段 ACCTNOO 和 CHGO ,以避免发送回我们收到的输入,我们使用了不同的属性组合来使 ACCTNO 字段明亮 (DFHUNIMD 而不是 DFHBMBRY)。 DFHUNIMD 突出显示字段并保留修改后的数据标记,以便如果操作员在不更改字段的情况下重新发送,那么将重新传输帐号。保存好输入
当操作员输入正确和不正确的数据时,应保存正确的数据,以便操作员不必对除更正以外的任何内容进行再加密。 一个简单的方法是将数据存储在屏幕上。 您不必执行任何其他操作来完成此操作; 一旦开启了字段中的 MDT ,因为这是操作员第一次接触该字段时,它将保持打开状态,无论屏幕被读取了多少次。 直到擦除屏幕,在 SEND 上使用 FRSET 选项显式关闭标记,或者将属性子字段设置为标记处于关闭状态的值之后,才会关闭标记。
在屏幕上保存数据的缺点是,如果操作员使用 CLEAR 键,那么所有数据都将丢失。 如果您的任务是对话式的,那么在发送错误信息并要求更正之前,可以通过将输入移动到程序中的安全区域来避免此危险。 在伪会话序列中,组件任务不跨越与终端的交互,等效于检测错误的任务将旧输入传递到处理更正后的输入的任务。 您可以通过 RETURN 命令上的 COMMIT 来转发数据,该命令通过写入临时存储器或以多种其他方式结束任务 (请参阅 在事务之间共享数据 以了解可能性)。
除了避免 CLEAR 密钥问题外,在程序或临时存储器队列中存储数据还会减少入站传输时间,因为您仅在错误纠正周期上传输已更改的字段。 (必须在发送错误信息时指定 FRSET ,以防止已发送且未更正的字段再次进入。) 您还可以避免重复字段审计,因为在第一次之后,仅当用户已更改字段或相关字段时,才必须进行审计。
但是,这些收益是以牺牲额外的编程和复杂性为代价的,因此,行时间或审计路径长度上的节省必须是相当大的,而错误的概率很高,才能证明这一选择是合理的。 您必须添加代码以将新输入与旧输入合并,如果已关闭 MDT ,那么必须同时检查长度和标志子字段以确定操作程序是否已修改映射字段。 具有新数据的字段具有非零长度; 具有数据且后来被擦除的字段在标志子字段中具有高阶位。
一个好的妥协是既保存数据又保存数据。 如果操作员清除屏幕,那么将使用已保存的数据来刷新屏幕; 否则,将使用从屏幕传入的数据。 您不需要任何合并逻辑,但可防止操作员在意外的 CLEAR 上失去时间。
对于我们的 "快速更新" 代码,通过其最小的审计和传输,我们选择 "无所不用其极" 的方法,并保存有关屏幕的信息。
重新检查
EXEC CICS RETURN TRANSID('QUPD') END-EXEC.
其中 "QUPD" 是 "快速更新" 事务的标识。