我用以下代码填充,使用 AppBuilder 制作
DEFINE VARIABLE fichNoBuktiTransfer AS CHARACTER FORMAT "N(18)":U
LABEL "No.Bukti Transfer"
VIEW-AS FILL-IN NATIVE
SIZE 37.2 BY 1 NO-UNDO.
由于格式为 N,因此它会阻止用户输入非字母数字条目。但是,它不会阻止用户将此类条目复制粘贴到填充中。我有一个错误检查,例如为了防止使用休假触发器进行此类输入:
IF LENGTH(SELF:Screen-value) > 18 THEN DO:
SELF:SCREEN-VALUE = ''.
RETURN NO-APPLY.
END.
vch-list = "!,*, ,@,#,$,%,^,&,*,(,),-,+,_,=".
REPEAT vinl-entry = 1 TO NUM-ENTRIES(vch-list):
IF INDEX(SELF:SCREEN-VALUE,ENTRY(vinl-entry,vch-list) ) > 0 THEN DO:
SELF:SCREEN-VALUE = ''.
RETURN NO-APPLY.
END.
END.
但是,在错误处理启动后,当用户在休假时输入任何字符串和触发器时,会发生错误 632:
发生错误 632
有没有办法禁用错误消息?还是我应该以不同的方式处理错误处理?
编辑:忘了提,我正在运行Openedge版本10.2B
您没有提到版本,但我假设您有一个已经存在剪贴板系统句柄的版本。我已经模拟了你的程序,我相信它不应该那样做。在我看来,无论如何都会引发错误标志。我的猜测是,即使这些符号无法显示,它们也会以某种方式分配给屏幕值。
抛开猜想,我设法通过添加以下代码来抑制它:
ON CTRL-V OF FILL-IN-1 IN FRAME DEFAULT-FRAME
DO:
if index(clipboard:value, vch-list) > 0 then
return no-apply.
END.
当然,这意味着 vch-list 不能再限定到您的触发器范围,以防万一,因为您在离开之前需要该值。因此,我将特殊字符列表作为 INIT 值分配给变量。这样做后,我不再收到错误。希望对您有所帮助。
为了跟踪填充中的更改,我总是首先使用以下代码:
ON VALUE-CHANGED OF FILL-IN-1 IN FRAME DEFAULT-FRAME
DO:
/* proofing part */
if ( index( clipboard:value, vch-list ) > 0 ) then do:
return no-apply.
end.
END.
您可以通过 AppBuilder 添加一些鼠标或开发人员事件,以跟踪填充中的更改。