Progress ABL 如何在预处理器中测试 WEBSPEED
Progress ABL How to Test for WEBSPEED in the PRE-PROCESSOR
我想根据我 运行 所在的客户端类型有条件地编译一些代码块。这对批处理和 tty 很好,因为我可以使用 {&BATCH-MODE} 但是如何测试对于何时在 webspeed agent 中编译代码?例如。 {&IF} 不是 {&SOMETHING} EQ "YES" {&THEN}
{&分析暂停}
富
酒吧
{&ANALYSE-RESUME}
{&万一}
如果这不依赖于架构师在 .w 等中自动生成的定义,那将会很有帮助,但如果没有必要,那将是一件好事。
恕我直言,没有现成的预处理器变量。
但是您可以创建自己的包含文件并将其包含在相关代码中。你需要那个文件的两个版本,一个说
&GLOBAL-DEFINE WebSpeed WebSpeed
和另一个
&GLOBAL-DEFINE NoWebSpeed NoWebSpeed
然后配置您的编译会话,以便它们准确地找到 propath 中的文件之一。
但是你会同意,这可能很危险,因为结果将严重依赖于编译期间使用的正确 PROPATH。我宁愿尝试使用运行时条件。
您想要详细实现什么?
编译时间不是 运行 时间。如果该程序可以 运行 不同的方式(作为使用 webspeed 的网页的一部分,作为批处理的一部分以及作为某种其他类型的客户端的一部分等),您很可能会更好地评估它在 运行 时间内。
您可以确定您所处的环境 运行宁:
会话:客户端类型
这将确定您的客户类型。
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.
基于OS
也许你运行不一样OS:es?
DISPLAY OPSYS.
其他方式
还有许多其他方法可以做到这一点,包括查看 PROPATH、工作目录等。
尝试坚持使用不会因 Progress 升级、新 OS:es、新目录结构等而随时间变化的解决方案
今天早上终于弄明白了 {&webstream} 和 {&out} 在正常会话中没有定义,所以我可以测试一下。运行时对我来说不是问题我只想在所有情况下编译代码。在这家店里,不要问我为什么,但每一段代码都是会话编译的。可怜的 cpu 但是你走了。我可能会采取防御措施,并使用 session:Client 类型添加一些逻辑,你是对的。如果不行那就布吉 :)
我想根据我 运行 所在的客户端类型有条件地编译一些代码块。这对批处理和 tty 很好,因为我可以使用 {&BATCH-MODE} 但是如何测试对于何时在 webspeed agent 中编译代码?例如。 {&IF} 不是 {&SOMETHING} EQ "YES" {&THEN} {&分析暂停} 富 酒吧 {&ANALYSE-RESUME} {&万一} 如果这不依赖于架构师在 .w 等中自动生成的定义,那将会很有帮助,但如果没有必要,那将是一件好事。
恕我直言,没有现成的预处理器变量。
但是您可以创建自己的包含文件并将其包含在相关代码中。你需要那个文件的两个版本,一个说
&GLOBAL-DEFINE WebSpeed WebSpeed
和另一个
&GLOBAL-DEFINE NoWebSpeed NoWebSpeed
然后配置您的编译会话,以便它们准确地找到 propath 中的文件之一。
但是你会同意,这可能很危险,因为结果将严重依赖于编译期间使用的正确 PROPATH。我宁愿尝试使用运行时条件。
您想要详细实现什么?
编译时间不是 运行 时间。如果该程序可以 运行 不同的方式(作为使用 webspeed 的网页的一部分,作为批处理的一部分以及作为某种其他类型的客户端的一部分等),您很可能会更好地评估它在 运行 时间内。
您可以确定您所处的环境 运行宁:
会话:客户端类型
这将确定您的客户类型。
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.
基于OS
也许你运行不一样OS:es?
DISPLAY OPSYS.
其他方式
还有许多其他方法可以做到这一点,包括查看 PROPATH、工作目录等。
尝试坚持使用不会因 Progress 升级、新 OS:es、新目录结构等而随时间变化的解决方案
今天早上终于弄明白了 {&webstream} 和 {&out} 在正常会话中没有定义,所以我可以测试一下。运行时对我来说不是问题我只想在所有情况下编译代码。在这家店里,不要问我为什么,但每一段代码都是会话编译的。可怜的 cpu 但是你走了。我可能会采取防御措施,并使用 session:Client 类型添加一些逻辑,你是对的。如果不行那就布吉 :)