091、屏幕字段校验与用户交互

091、屏幕字段校验与用户交互 091、屏幕字段校验与用户交互那是一个周五下午,生产机报了个单据保存失败的工单。我看了一眼dump,不是权限问题,也不是数据库锁,问题出在屏幕字段上——用户录入了一个超过30位的“备注”,而底表字段最长只有20。为什么没拦住?因为当时用的是CHAIN…ENDCHAIN里的MODULE,但条件判断写反了,只在字段为空时报错,字段太长反而放行。这种问题不疼不痒,但一旦用户批量录入,后台一次dump,整批全回滚。从那以后,我对屏幕字段校验的态度就变了:宁可多写三行,也别让脏数据滚进数据库。屏幕字段校验的根基在PAI(Process After Input),也就是用户点了回车或保存按钮之后、程序逻辑跑起来之前的那段空隙。ABAP里做这事主要靠MODULE,挂在PBO里的是输出前处理,挂在PAI里的是输入后校验。咱们聊的是后者。你在屏幕布局器里双击那字段,或者直接在流程逻辑里写:PROCESS BEFORE OUTPUT.MODULE status_0100.PROCESS AFTER INPUT.MODULE check_zbz_field.这个check_zbz_field就是你的守门员。它内部长这样:MODULE check_zbz_field INPUT.IF zbz_field IS INITIAL.MESSAGE ‘备注不能为空’ TYPE ‘E’.ENDIF.ENDMODULE.注意,MESSAGE TYPE 'E’会把光标自动定位到触发错误的字段上,但有时候它定位不准。你想让它跳转到指定字段,得用FIELD语句配合:PR