在我的公司,我设计了一些程序,通过使用一些FILL-INs来显示一些信息。
他们要求这样做而不是自由格式查询,因为他们需要从远处查看程序 - 而且我们已经尝试过查询(我知道这将是最好的解决方案)。
我正在尝试对我的代码进行一些优化。所以我的问题是:是否可以使用这样的东西来更改 FILL IN (或其他组件) 的元素?
DEFINE INPUT PARAMETER cComponent AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER cMessage AS CHARACTER NO-UNDO.
VALUE(cComponent):SCREEN-VALUE IN FRAME {&FRAME-NAME} = cMessage.
因为我现在的流程是这样的:
(如果你有 40 个 FILL-IN 之类的东西,这会变得一团糟)
DEFINE INPUT PARAMETER iID AS INTEGER NO-UNDO.
DEFINE INPUT PARAMETER cMessage AS CHARACTER NO-UNDO.
CASE iID:
WHEN 1 THEN DO:
ASSIGN fll-info1:SCREEN-VALUE = cMessage.
...
END.
...
WHEN n THEN DO:
ASSIGN fll-infon:SCREEN-VALUE = cMessage.
...
END.
END CASE.
我目前使用的是 11.7 版本 - 但我们将在今年晚些时候开始升级到 12.2。
感谢您的帮助!
您不能对变量/参数/等执行 VALUE()
但是您可以做的是循环遍历框架字段,并查找与您的组件名称匹配的字段(也称为遍历小部件树)。根据您的起点(可能是父框架),您需要首先获取字段组,然后获取该组中的字段。
ASSIGN h = h_frame:FIRST-CHILD /* The Field Group */
h = h:FIRST-CHILD. /* The grandchild */
DO WHILE h NE ?:
IF (h:NAME = "<your component>":u) THEN
/* do something */ .
h = h:NEXT-SIBLING.
END.