Progress-4GL中事件处理的一些问题

问题描述

我被要求在 *.w 文件中的填充字段上实现事件处理程序(在 F5 的情况下,应该做一些事情)。

我开始做以下事情:

ON F5 OF particular_fill-in_Field
DO:
    ...
END.

这不起作用,后来我意识到源代码中已经存在以下内容

在包含文件中:

&GLOBAL-DEFINE SEARCH-KEYBOARD "F5":u
&GLOBAL-DEFINE SEARCH-MOUSE MOUSE-SELECT-DBLCLICK

在 *.w 文件中:

ON {&SEARCH-KEYBOARD},{&SEARCH-MOUSE} OF particular_fill-in_Field
DO: 
...
END.

在查看进度网站时,我发现了 following URL,解释了 ON 语句:

ON CHOOSE OF b_next,b_prev DO:
  IF SELF:LABEL = "Next" THEN
  ...

这给我留下了一些问题:

  1. 当我添加 ON F5 行时,F5 (SEARCH-KEYBOARD) 事件有两个事件处理程序。为什么这甚至可以编译,并且在编译时,为什么要使用已经存在的代码行而不是我添加代码行?
  2. URL 上的示例显示了如何处理不同小部件上的相同事件(您可以使用 SELF 对象来了解哪个小部件启动事件处理程序),但是一个小部件上的不同事件如何处理(例如我的情况,ON {&SEARCH-KEYBOARD},{&SEARCH-MOUSE} OF ...),我能知道触发了哪个事件,SEARCH-KEYBOARD 还是 SEARCH-MOUSE

解决方法

从您指向的文档的注释:

*使用 ON 语句定义的触发器将一直有效,直到发生以下情况之一: *另一个 ON 语句为相同的事件和小部件定义了另一个触发器(或 REVERT)

所以,如果我没看错的话,最后一个 ON 获胜,所以我猜你的 ON 在另一个 ON 之后。

您可以使用 LAST-EVENT 系统句柄的 LABEL attribute 来获取事件。

Dominique编辑以供参考

示例:

2020-12-29 23:54:36.000
I1230 04:54:36.394834 6 leaderelection.go:252] successfully acquired lease default/ingress-controller-leader-nginx
{ syslog: { severity: "Error",appName: "default[nginx-ingress-controller-7d849b6c8d-722kx]",host: "nginx-ingress-controller",pid: 23298,priority: "11",facility: "user-level messages",timestamp: "2020-12-30T04:54:36Z" } }
2020-12-29 23:53:56.000
I1230 04:53:56.166120 6 leaderelection.go:242] attempting to acquire leader lease default/ingress-controller-leader-nginx...
{ syslog: { severity: "Error",timestamp: "2020-12-30T04:53:56Z" } }
2020-12-29 23:53:56.000
I1230 04:53:56.164251 6 leaderelection.go:277] failed to renew lease default/ingress-controller-leader-nginx: timed out waiting for the condition
{ syslog: { severity: "Error",timestamp: "2020-12-30T04:53:56Z" } }
2020-12-29 23:53:56.000
E1230 04:53:56.161159 6 leaderelection.go:320] error retrieving resource lock default/ingress-controller-leader-nginx: Get "https://10.128.0.1:443/api/v1/namespaces/default/configmaps/ingress-controller-leader-nginx": context deadline exceeded
{ syslog: { severity: "Error",timestamp: "2020-12-30T04:53:56Z" } }