3

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

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

(如果您想知道为什么我要这样做,我问了另一个问题,它解释了我面临的封闭问题:如何在由作业库列表控制的两个不同库之一中创建 DTAQ? 但是liblist 解析是一种解决该问题的方法,并且是一个单独的问题)。

4

4 回答 4

5

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

于 2012-07-16T15:06:32.543 回答
4

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

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

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

RTVJOBA命令可以检索SYSLIBLCURLIBUSRLIBL


这本书APIs at work,第 3 章,List APIs有很多信息可以帮助你。

于 2012-07-16T15:09:47.967 回答
2

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

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

于 2012-07-16T18:15:13.640 回答
0

Kratenko,如果您想要比 API 更简单、更少的代码替代方案。创建可以在 rpg 中调用的简单 CL pgm。您的 cl 可以拥有 RTVJOBA(有获取 libl 的参数)。您可能会从中获得许多库,并且您需要解析和识别您想要的特定库?关于识别你必须知道其中的一个限定词。您想要运行 pgm 的库还是“某些”文件所在的库?如果是,那么您可以使用 RTVOBJD 来获取特定的库。然后在您的 CRTDTAQ cmds 中使用该库。

于 2016-01-17T12:09:06.423 回答