我想根据我正在运行的客户端的类型有条件地编译一些代码块。这对于批处理和tty是很好的,因为我可以使用{&批处理模式},但是如何测试代码是何时在when速度代理中编译的呢?例如:{& if } not {&THEN} EQ“是”{&然后}{及分析-挂起} foo bar {&ANALYSE nice } {&ENDIF}如果这不依赖于定义架构师在.w's等中生成的自动,这将是一个很好的没有必要的方法。
发布于 2016-04-11 19:07:26
最后,今天上午发现了{&webstream}和{& out }在正常会话中没有定义,所以我可以对其进行测试。在我的例子中,运行时不是一个问题,我只想在所有情况下编译代码。在这个商店,不要问我为什么,但是每一段代码都是会话编译的。cpu不好,但你走了。我可以防御性,并添加一些逻辑与会话:客户端类型的铃铛和口哨,你是对的。如果做不到,那就摇吧:)
发布于 2016-04-08 06:04:28
编译时不是运行时。如果该程序可以以不同的方式运行(作为使用‘re速度的网页的一部分、作为批处理的一部分以及作为其他类型的客户端的一部分等),您很可能更好地在运行时评估这一点。
您可以识别您正在运行的环境:
SESSION:CLIENT-TYPE
这将识别您的客户类型。
DISPLAY SESSION:CLIENT-TYPE.
Type of client Attribute value
-------------------------------- -----------------------
ProVision standard ABL client 4GLCLIENT
WebClient WEBCLIENT
AppServer agent APPSERVER
WebSpeed agent WEBSPEED
Pacific Application Server agent MULTI-SESSION-AGENT
Other special-purpose clients Unknown value (?) 文档
使用VST的
如果至少有一个数据库连接了_Connect-ClientType,则告诉您这种特定的连接是什么类型的客户端:
Value Client
-------- ---------------------
ABL ABL client
SQLC SQL client
WTA Webspeed agent
APSV AppServer agent
SQFC SQL Federated client示例:
FIND FIRST _myconnection NO-LOCK.
FIND FIRST _connect NO-LOCK WHERE _connect._connect-usr = _myconnection._MyConn-userid.
DISPLAY _connect._Connect-ClientType.基于操作系统的
也许您运行的操作系统不同:es?
DISPLAY OPSYS.其他方式
还有很多其他方法可以做到这一点,包括查看PROPATH、工作目录等。
尝试坚持一个解决方案不会随着时间的推移而改变,因为进步升级,新操作系统:es,新的目录结构等。
发布于 2016-04-08 05:37:39
IMHO没有这样的预处理器变量。
但是您可以创建自己的包含文件,并将其包含在相关代码中。你需要该文件的两个版本,一个说
&GLOBAL- WebSpeed WebSpeed定义
而另一个
&GLOBAL- NoWebSpeed NoWebSpeed定义
然后配置编译会话,使它们能够找到propath中的一个文件。
但正如您所同意的,这可能是危险的,因为结果将在很大程度上依赖于编译期间使用的适当的PROPATH。我宁愿尝试使用运行时条件。
你想在细节上实现什么?
https://stackoverflow.com/questions/36487994
复制相似问题