在我们的 as/400 上,我们有一个测试环境和一个生产环境。一旦我们测试了我们的程序是否正常工作,我们就可以将它们置于生产环境中。两种环境都包含一组类似的库。
告诉我们的程序,它们在哪个环境中工作的基本机制是用于它们运行的作业的 liblists。这对某些事情很有效,但对其他事情则不然。因此,我们经常在提交作业时将参数传递给程序,告诉程序在测试或生产环境中工作。这让我很恼火,因为我的程序在整个执行过程中总是必须携带这个参数,甚至经常将它传递给其他程序。有时初始程序本身甚至不需要信息,但仍然必须将其作为参数,因为它调用了一个确实需要它的程序。
提出我面临的具体问题:更大流程的各个部分之间的通信通常通过我们系统中的数据队列完成。根据 liblist 读取特定的 DTAQ 就像一个魅力,只需调用RCVDTAQ
DTAQ 的名称,liblist 会负责选择正确的库。写入 DTAQ 也是如此。
但有时程序必须在收听或写入之前创建一个新的 DTAQ。现在这不适用于我们的布局和库列表。可以这样想:
产品库列表:
PPGMLIB1
PPGMLIB2
PDFILELIB1
PDTAQLIB1
P...
...
测试库列表
TPGMLIB1
TPGMLIB2
TDFILELIB1
TDTAQLIB1
T...
...
现在我的程序应该在 中创建 DTAQ ?DTAQLIB1
,其中?
应该是P
or T
。
我的第一个想法是通过 liblist 并查找条目PDTAQLIB
or TDTAQLIB
,并取先到者 - 但我无法弄清楚如何做到这一点(因此我的相关问题:如何从内部读取 liblist一个 ILE 程序?(最好是 RPG 或 CL))。
我知道我可以通过检查哪个用户拥有当前工作来实现我的目标,但这会破坏我们通过 liblists 选择库的逻辑(就像我们当前的解决方法一样)。
有什么我想念的吗?我正在尝试编写一些特殊的调用方式CRTDTAQ
,或者一些特殊的 api 来进行这个 liblist 比较?