使用 N 格式填充验证



我用以下代码填充,使用 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 添加一些鼠标或开发人员事件,以跟踪填充中的更改。

最新更新