我正在进行工作4gl,并且是一位新手程序员。我工作的情况有五个程序(.p文件)这是互不相关的,共享一个单个程序(.p文件)。进度4gl - 共享程序
我的问题是,我需要修改共享过程,这应该只对一个调用过程有效,而不是其他四个。我可以将这两个程序同时联系起来,防止对其他四个程序产生影响的方式是什么?
请帮我解决这个问题。对不起,如果不清楚
我正在进行工作4gl,并且是一位新手程序员。我工作的情况有五个程序(.p文件)这是互不相关的,共享一个单个程序(.p文件)。进度4gl - 共享程序
我的问题是,我需要修改共享过程,这应该只对一个调用过程有效,而不是其他四个。我可以将这两个程序同时联系起来,防止对其他四个程序产生影响的方式是什么?
请帮我解决这个问题。对不起,如果不清楚
最好方法是给共享过程添加一个“标志”,然后在需要不同行为时传递一个标志。你不想改变共享过程,所以它需要知道什么程序正在调用它。
这个简单但在结构上令人反感的解决方案是使用全局共享变量。
很多人会告诉你,这是一种糟糕的编码技术。他们是对的。但是你并不是要求最佳实践方面的建议。
简单地在调用者和被调用者中创建这样一个变量。不需要它的程序不会错过它。
你的一个 “正常” 的节目:
/* 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.
您可以定义一个新的全球共享只要你喜欢多次变量,你只能得到它的一个副本。 “新”不会覆盖任何现有变量(如果您忽略了GLOBAL,它的行为会有所不同)。
你没有要求它,也许你不需要它,但程序名(2)检查调用栈查看是否common.p被p2.p调用。
还有其他更复杂的方法可以做到这一点,但它们都归结为相同的问题 - 您正在为“特殊”程序和现在不再是普通“常见程序之间的一些非常丑陋的耦合创建基础“计划。
可选
根据您的OpenEdge版本,您可以将逻辑移动到类而不是过程。在课堂上,你可以使用超载
是的,我可以理解你的观点。我的疑问是** _我将如何将调用过程的标志值传递给共享过程_ **? – 2012-04-24 08:38:19
将另一个变量添加到过程的API。 – 2012-04-24 09:46:55