如何在现有 table 的情况下有条件地编译?
How to conditionally compile in case of an existing table?
我正在使用 Progress-4GL,11.6 版,appBuilder 和程序编辑器。
我刚刚创建了一个名为“table_X”的 table,我在代码中使用它,类似于:
FIND table_X ...
但是,我的程序是通用的,但是table是基于自定义的(有些客户有这个table,有些没有)。
所以,我想添加一个“预处理器”,例如:
&IFDEF table_X
&THEN FIND table_X ...
&END
其中 &IFDEF
表示:“仅当 table 存在于数据库中时才编译这段代码”。
这在 Progress-4GL 11.6 版中可行吗?
如果您使用的是静态查询,则需要在编译时使用的环境中添加定义。在您的标准目录中:
// env.i
// nothing (yet)
并且在您的客户目录中:
// env.i
&global define table_x
然后您可以在编译时将其与您的 propath
一起使用,如果您的 propath 以客户目录开头,则选择定义,否则从您的标准目录中获取 env.i 和 table_x 未定义:
{ env.i }
&if defined( table_x ) &then
find table_x no-lock.
&endif
如果您可以用动态使用替换此 table 的静态使用,那么您不需要定义,您可以:
def var hb as handle no-undo.
create buffer hb for table "table_x" no-error.
if valid-handle( hb ) then do:
hb:find-unique( no-lock ).
end.
虽然这可能很有吸引力,但这确实意味着您给所有客户增加了可能不相关的 运行-时间检查的负担。
我正在使用 Progress-4GL,11.6 版,appBuilder 和程序编辑器。
我刚刚创建了一个名为“table_X”的 table,我在代码中使用它,类似于:
FIND table_X ...
但是,我的程序是通用的,但是table是基于自定义的(有些客户有这个table,有些没有)。
所以,我想添加一个“预处理器”,例如:
&IFDEF table_X
&THEN FIND table_X ...
&END
其中 &IFDEF
表示:“仅当 table 存在于数据库中时才编译这段代码”。
这在 Progress-4GL 11.6 版中可行吗?
如果您使用的是静态查询,则需要在编译时使用的环境中添加定义。在您的标准目录中:
// env.i
// nothing (yet)
并且在您的客户目录中:
// env.i
&global define table_x
然后您可以在编译时将其与您的 propath
一起使用,如果您的 propath 以客户目录开头,则选择定义,否则从您的标准目录中获取 env.i 和 table_x 未定义:
{ env.i }
&if defined( table_x ) &then
find table_x no-lock.
&endif
如果您可以用动态使用替换此 table 的静态使用,那么您不需要定义,您可以:
def var hb as handle no-undo.
create buffer hb for table "table_x" no-error.
if valid-handle( hb ) then do:
hb:find-unique( no-lock ).
end.
虽然这可能很有吸引力,但这确实意味着您给所有客户增加了可能不相关的 运行-时间检查的负担。