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 (?) 

Documentation

使用 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 类型添加一些逻辑,你是对的。如果不行那就布吉 :)