如何从ILE程序中读取liblist? (最好是RPG或CL)

时间:2012-07-16 14:30:48

标签: ibm-midrange environment rpgle

我们通过使用不同的liblists运行它们来控制as400上的程序所使用的对象。但是有些操作不能由此直接控制。因此,我的程序需要阅读liblist并决定其中的一些库,如何采取行动。

我找不到任何api来从程序中读取liblist条目。我期望的是,某种api允许我按优先级迭代liblist条目,或者按照liblist给出的顺序给我一个数组。如果可能的话,我更喜欢RPG或CL,但也可以使用其他ILE语言。

(如果你想知道,为什么我要尝试这样做,我问了另一个问题,它解释了我面临的封闭问题:How can I create a DTAQ in one of two different libs, controlled by the jobs liblist? 但是liblist解析是解决这个问题的一种方法,也是一个单独的问题)。

4 个答案:

答案 0 :(得分:5)

您可以使用the QUSRJOBI API检索作业的库列表。您还可以使用CL命令ADDLIBLE并监视错误消息CPF2103(库列表中已存在库)。

答案 1 :(得分:4)

List Objects (QUSLOBJ) API可用于检索库列表。

  

对象和库名称
当使用库名称* LIBL和对象类型参数* LIB指定* ALLUSR时,线程中所有用户库的列表&#39 ;返回s库名称空间。指定* LIBL时,如果指定了辅助存储池(ASP)控制参数,则辅助存储池(ASP)设备名称必须为星号(*)。有关用户库的定义,请参阅此参数后10个字符说明中的* ALLUSR。

Change Library List (QLICHGLL) API可用于更改库列表。

RTVJOBA命令可以检索SYSLIBLCURLIBUSRLIBL


这本书APIs at work, Chapter 3, List APIs有很多可以帮到你的信息。

答案 2 :(得分:2)

根据您的具体情况,更简单的替代方法可能是值得的。如果您事先知道目标库,也许您可​​以在每个库中创建一个包含库名称的数据区域。您的程序将首先读取它在库列表中找到的任何数据区域,并为您提供库的名称,以便您创建数据队列。

它并不复杂,但它有效而且非常简单,因此也更容易编码/调试/维护。

答案 3 :(得分:0)

Kratenko,如果你想要比API更简单和更少的代码。创建可以在RPG中调用的简单CL pgm。你的cl可以有RTVJOBA(有了parm来获取libl)。你可能会从中获得很多库,你需要解析并识别你想要的特定库吗?关于识别您必须知道其中一个限定符。你想要你的pgm运行的lib或“some”文件所在的lib吗?如果是,那么您可以使用RTVOBJD来获取特定的lib。然后在CRTDTAQ cmds中使用该lib。