问题描述
正如之前在 some questions with "Progress-4GL" and "OpenEdge" tags 中提到的,我正在使用 AppBuilder 和过程编辑器。因此,调试的可能性极其有限:为了知道变量的值,我需要在屏幕上显示它们,如下所示:
MESSAGE "temp1=[" temp1 "],temp2=[" temp2 "]" VIEW-AS ALERT-Box.
我也可以将这些信息放在日志文件中,但这不是这里的重点。
我想写一个程序来处理这个问题,例如:
PROCEDURE SHOW_VARIABLES_AND_VALUES (INPUT I1,INPUT I2,...):
1. <put parameter names and values together inside one string> => """I1="" I1"
2. <do this for all input parameters (the number is unkNown)> => """I1="" I1,""I2="" I2,..."
3. <how to use this (MESSAGE VIEW-AS ALERT-Box,LOG,...) there I'll kNow what to do>
有谁知道如何处理前两点(将变量名和值放在一起,处理未知数量的输入参数)?
提前致谢
解决方法
您可以使用 SUBSTITUTE 功能。
MESSAGE SUBSTITUTE ("temp1=&1 ~ntemp2=&2 ~n temp3=&3",temp1,temp2,temp3) VIEW-AS ALERT-BOX.
不幸的是,没有对变量或参数的动态访问。因此无法自动将所有输入参数添加到消息字符串中。 ABL 中也没有 anytype 参数类型 - 用于用户定义的函数或过程。因此,您必须经常使用 STRING() 函数将输入参数转换为字符串,作为所有内容的最佳拟合参数。
另一方面,内置的 SUBSTITUTE 函数可以处理任何类型的参数。所以 temp1、temp2 和 temp3 实际上可以是任何数据类型的变量或参数。
正如我对您之前问题之一的评论中提到的:给 OpenEdge 调试器一个机会。 Progress Developer 工作室之外的调试器看起来很有历史意义。但它确实完成了它的工作。
,同时我决定使用以下系统(因为我的要求似乎不可能):
MESSAGE "temp1=[" temp1 "]~n" ~
"temp2=[" temp2 "]~n" ~
"temp3=[" temp3 "]~n" ~
"temp4=[" temp4 "]" ~
VIEW-AS ALERT-BOX.
为了便于使用,我发现了以下波浪号字符的键盘“快捷方式”:ALT+0126。
正如 Stefan 所指出的,这要好得多(不需要波浪号和快捷方式):
MESSAGE "temp1=[" temp1 "]" SKIP
"temp2=[" temp2 "]" SKIP
"temp3=[" temp3 "]" SKIP
"temp4=[" temp4 "]" SKIP
VIEW-AS ALERT-BOX.