【问题标题】:Progress ABL How to Test for WEBSPEED in the PRE-PROCESSORProgress ABL 如何在 PRE-PROCESSOR 中测试 WEBSPEED
【发布时间】:2016-04-12 03:07:26
【问题描述】:

我想根据我正在运行的客户端类型有条件地编译一些代码块。这对于批处理和 tty 来说很好,因为我可以使用 {&BATCH-MODE} 但如何测试代码何时运行在 webspeed 代理中编译?例如。 {&IF} 不是 {&SOMETHING} EQ "YES" {&THEN} {&分析-暂停} 富 酒吧 {&ANALYSE-RESUME} {&万一} 如果这不依赖于架构师在 .w 等中自动生成的定义,那将很有帮助,但如果没有必要,那就太好了。

【问题讨论】:

  • sry ken oops cap lock encoding all night n sleepy 现在更正

标签: preprocessor progress-4gl openedge


【解决方案1】:

编译时间不是运行时间。如果程序可以以不同的方式运行(作为使用 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.

基于操作系统

也许您运行不同的操作系统:es?

DISPLAY OPSYS.

其他方式

还有许多其他方法可以做到这一点,包括查看 PROPATH、工作目录等。

尝试使用不会因进度升级、新操作系统、新目录结构等而随时间变化的解决方案。

【讨论】:

  • 感谢您的输入,但它必须是编译时间,我知道我可以在 rt 中获取会话句柄信息。问题是 ws 和 ( chui & -b) 中的 propath 不同,两个 propath 之间的遗留命名约定冲突。试图让他们合理化前路和冲突并合并,但遇到了政治问题。那个方向的砖墙。测试 propath 将是一个选项,因为它在预处理器中。但是随后 propath 可能会改变,因此解析它并随着时间的推移依赖它并不是一个好主意。所以我想包含文件选项可能是最好的解决方法
  • 祝你好运!请记住,在一种环境中编译的程序可能会在另一种环境中运行(并且行为不会因为编译时设置的条件而改变)。
【解决方案2】:

恕我直言,没有开箱即用的预处理器变量。

但您可以创建自己的包含文件并将其包含在相关代码中。你需要那个文件的两个版本,一个说

&GLOBAL-DEFINE WebSpeed WebSpeed

和其他

&GLOBAL-DEFINE NoWebSpeed NoWebSpeed

然后配置您的编译会话,以便它们准确地找到 propath 中的文件之一。

但您会同意,这可能很危险,因为结果将严重依赖于编译期间使用的正确 PROPATH。我宁愿尝试使用运行时条件。

你想详细实现什么?

【讨论】:

  • 感谢您确认我的怀疑,这两个答案都很有帮助。包括我猜的路线或覆盖 cgidefs.i
【解决方案3】:

今天早上终于弄清楚了 {&webstream} 和 {&out} 在正常会话中没有定义,所以我可以测试一下。在我的情况下,运行时不是问题我只想在所有情况下编译代码。在这家商店不要问我为什么,但每段代码都是会话编译的。可怜的CPU,但你去。我可能会采取防御措施,并在 session:Client-type 中添加一些逻辑,你是对的。如果不能,那就布吉:)

【讨论】:

    猜你喜欢
    • 2014-03-19
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多