Ibm midrange 对于同一库列表中具有相同名称的程序,如何主动控制调用哪个程序?

Ibm midrange 对于同一库列表中具有相同名称的程序,如何主动控制调用哪个程序?,ibm-midrange,Ibm Midrange,我有三个库,A、B和C。它们在库中的顺序是A在B之上,B在C之上。库A中有一个程序Pa,库B中有一个程序Pb。Pa和Pb有相同的名称和参数列表,但它们的功能略有不同。现在库C中有一个程序Pc调用Pa。但是为了达到预期的结果,应该调用Pb。问题是库A不能从库列表中删除,也不能在库B下移动,Pa也不能从库A中删除。因此,是否有可能隐藏Pa并让Pc调用Pb?程序库名称不能在程序中编码,因此必须在运行时决定。您询问的是,是否可以让系统覆盖库列表,而不告诉系统要使用哪个库。我不知道这怎么可能 我认为你必须

我有三个库,A、B和C。它们在库中的顺序是A在B之上,B在C之上。库A中有一个程序Pa,库B中有一个程序Pb。Pa和Pb有相同的名称和参数列表,但它们的功能略有不同。现在库C中有一个程序Pc调用Pa。但是为了达到预期的结果,应该调用Pb。问题是库A不能从库列表中删除,也不能在库B下移动,Pa也不能从库A中删除。因此,是否有可能隐藏Pa并让Pc调用Pb?程序库名称不能在程序中编码,因此必须在运行时决定。您询问的是,是否可以让系统覆盖库列表,而不告诉系统要使用哪个库。我不知道这怎么可能

我认为你必须用库B来限定你的程序调用。如果你不能在你的程序中硬编码库名,也许你可以用软编码的方式

/* CL example */
dcl &libname *char 10
rtvdtaara dtaara(WHICH_LIB) rtnvar(&libname)
call pgm(&libname/PGMNAME) parm(...)

因此,现在除了维护库列表外,您还必须维护此数据区域(或用于保留库名称的任何数据区域)。

您要问的是,是否可以让系统覆盖库列表,而不告诉系统要使用哪个库。我不知道这怎么可能

我认为你必须用库B来限定你的程序调用。如果你不能在你的程序中硬编码库名,也许你可以用软编码的方式

/* CL example */
dcl &libname *char 10
rtvdtaara dtaara(WHICH_LIB) rtnvar(&libname)
call pgm(&libname/PGMNAME) parm(...)
因此,现在除了维护库列表外,您还必须维护此数据区域(或用于保留库名称的任何内容)。

当您说程序库名称无法在程序中编码时,您的意思是因为车间标准或实施困难?或者其他不受欢迎的东西

有几种方法。我不知道您使用的是什么语言,所以我将使用伪代码来说明

1) 子程序

 when condition = A
   do subrA
 when condition = B
   do subrB
 ...

 subrA
   call libA/pgmA parm(...)

 subrB
   call libB/pgmB parm(...)
2) 动态调用

 define command char 128

 when condition = A
   command = 'call liba/pgma parm('
 when condition = B
   command = 'call libb/pgmb parm('
 end

 command = command + parm1 + ' ' + parm2 + ')'
 call qcmdexc (command 128)
如果被调用的程序没有向调用者返回值,则此操作最有效。

当您说程序库名称无法在程序中编码时,您的意思是因为车间标准或实施困难?或者其他不受欢迎的东西

有几种方法。我不知道您使用的是什么语言,所以我将使用伪代码来说明

1) 子程序

 when condition = A
   do subrA
 when condition = B
   do subrB
 ...

 subrA
   call libA/pgmA parm(...)

 subrB
   call libB/pgmB parm(...)
2) 动态调用

 define command char 128

 when condition = A
   command = 'call liba/pgma parm('
 when condition = B
   command = 'call libb/pgmb parm('
 end

 command = command + parm1 + ' ' + parm2 + ')'
 call qcmdexc (command 128)

如果被调用的程序没有向调用者返回值,这种方法最有效。

库列表由四个组件组成:系统部分、产品库、当前库和用户部分。在正常情况下,不应修改系统ortion。(应限制修改),但所有其他部分均打开

最有可能出现在“产品库”部分。这可以容纳两个库,尽管最常见的情况是一个或一个都没有。如果创建*CMD或*MENU对象,则可以为该对象指定产品库。(也可以设置当前库。)因此,对于命令,每当运行该命令时,关联的产品库都会添加到库列表中,直到命令完成。此时,库将被删除。如果这些是CL程序,那么无论您是否知道,库都有可能定期添加到您的库列表中或从中删除

产品库的一般逻辑是在第一个打开的位置添加库。如果两个点都被占用,则检索顶部库,将底部库向上移动,并在底部添加库。当您的程序完成时,请反转该过程,使产品库与您开始时一样


产品库位于库列表中当前库和用户部分的上方。使用设置产品库。

库列表由四个组件组成:系统部分、产品库、当前库和用户部分。在正常情况下,不应修改系统ortion。(应限制修改),但所有其他部分均打开

最有可能出现在“产品库”部分。这可以容纳两个库,尽管最常见的情况是一个或一个都没有。如果创建*CMD或*MENU对象,则可以为该对象指定产品库。(也可以设置当前库。)因此,对于命令,每当运行该命令时,关联的产品库都会添加到库列表中,直到命令完成。此时,库将被删除。如果这些是CL程序,那么无论您是否知道,库都有可能定期添加到您的库列表中或从中删除

产品库的一般逻辑是在第一个打开的位置添加库。如果两个点都被占用,则检索顶部库,将底部库向上移动,并在底部添加库。当您的程序完成时,请反转该过程,使产品库与您开始时一样


产品库位于库列表中当前库和用户部分的上方。使用设置产品库。

遗憾的是,没有存储库名称的位置。还有其他方法吗?我不知道在不(1)更改库列表或(2)告诉系统在库B中查找程序的情况下,如何告诉系统在库B中查找程序。不幸的是,没有存储库名称的位置。还有其他方法吗?我不知道在不(1)更改库列表或(2)告诉系统在库B中查找程序的情况下,如何告诉系统在库B中查找程序。如果您能提供更好的信息,您可能会得到更好的答案。Pa、Pb和Pc是用什么语言编写的?您需要用什么语言呼叫Pc?溜溜球