Progress 4gl - 共享程序

Posted

技术标签:

【中文标题】Progress 4gl - 共享程序【英文标题】:Progress 4gl - shared procedures 【发布时间】:2012-04-23 15:09:14 【问题描述】:

我正在开发 4gl,我是一名新手程序员。我正在处理一种情况,其中有 五个程序(.p 文件),它们彼此不相关,共享一个 单个程序(.p 文件)。 p 文件).

我的问题是我需要修改共享过程,这应该只影响一个调用过程,而不是其他四个。有什么方法可以同时链接这两个程序,防止影响其他四个程序。

请帮我解决这个问题。如果不清楚,对不起

【问题讨论】:

【参考方案1】:

简单但架构上令人反感的解决方案是使用全局共享变量。

很多人会告诉你这是一种糟糕的编码技术。他们是对的。但是您并不是在寻求有关最佳实践的建议。

只需在调用者和被调用者中创建这样一个变量。不需要的程序不会错过。

你的“正常”程序之一:

/* p1.p */

message "p1, I'm normal.".
run common.p.

您的“特殊”计划:

/* p2.p */

define new global shared variable special as character no-undo.

message "p2, I'm special!".
run common.p.
message "special = " special.

常用程序:

/* common.p */

define new global shared variable special as character no-undo.
message "common stuff...".
if program-name(2) = "p2.p" then special = "special value".
return.

您可以根据需要多次定义 NEW GLOBAL SHARED 变量,并且您只会获得一份副本。 “新”不会覆盖任何现有变量(如果您忽略 GLOBAL,它的行为会有所不同)。

您没有要求它,也许您不需要它,但程序名称 (2) 检查调用堆栈以查看 common.p 是否被 p2.p 调用。

还有其他更复杂的方法可以做到这一点,但它们都归结为同一个问题——你正在为你的“特殊”程序和现在不再通用的“普通”程序之间的一些非常丑陋的耦合创造基础程序。

【讨论】:

【参考方案2】:

最好的方法是在共享过程中添加一个“标志”,然后在您需要不同的行为时传递一个标志。您不想更改共享过程,因此它需要知道哪个程序正在调用它。

【讨论】:

是的,我能理解你的意思。我的疑问是 如何将标志值从调用过程传递给共享过程 向过程的 API 添加另一个变量。【参考方案3】: 将过程的所有逻辑移至具有输入的新逻辑 参数。 从原始 .p 调用该过程 从需要额外参数的过程中调用新过程。

可选

逐渐将所有运行的 original.p 替换为 new.p 一旦您确定所有运行都已更改,请删除 original.p。

根据您的 OpenEdge 版本,您可以将逻辑移动到类而不是过程。在类中你可以使用重载

【讨论】:

以上是关于Progress 4gl - 共享程序的主要内容,如果未能解决你的问题,请参考以下文章

Progress 10.1C 4GL 编码功能

Progress 4gl 带常量的格式字符串

是否有与 Progress 4GL INTERVAL 函数等效的 SQL Server 函数?

open.mapquestapi.com上的Progress 4GL GET请求

如何实现 FIND CURRENT & CURRENT-CHANGE in Progress 4GL?

使用 MATCHES (* + "" + *) 并且 FOR EACH in Progress 4GL 中没有参数是不是相同?