有没有办法捕获程序中所有被调用的程序,包括每个被调用程序的参数(名称,类型和长度)
DSPPGMREF to outfile让我中途到那里......
DSPPGMREF PGM(MYLIB/*ALL) OUTPUT(*OUTFILE) OUTFILE(QTEMP/MYFILE)
答案 0 :(得分:3)
如果使用PGMINFO(* PCML:* MODULE)编译程序,无论是作为命令参数还是在H规范中,程序都将包含描述参数的程序调用标记语言。
您可以使用QBNRPII API从程序中检索PCML。本文有一个只显示PCML http://ibm.biz/see_pcml_embedded_in_pgm_or_srvpgm的命令,但您可以修改它以使用XML-INTO或XML-SAX以可用的方式获取信息。 (如果参数可能是复杂的数据结构,XML-INTO可能无法正常工作。)
对于具有以下PI的程序:
dcl-pi *n;
name char(25) const;
salary packed(9:2);
end-pi;
这是PCML的一个例子
<pcml version="6.0">
<!-- RPG program: PCMLTEST -->
<!-- created: 2018-04-18-08.01.17 -->
<!-- source: BMORRIS/QRPGLESRC(PCMLTEST) -->
<!-- 1 -->
<program name="PCMLTEST" path="/QSYS.LIB/BMORRIS.LIB/PCMLTEST.PGM">
<data name="NAME" type="char" length="25" usage="input" />
<data name="SALARY" type="packed" length="9" precision="2" usage="inputoutput" />
</program>
</pcml>
为了得到这个漂亮的格式,我用PGMINFO(* PCML:* STMF)INFOSTMF('PCMLTEST.pcml')编译了我的程序。生成到模块中的PCML(然后放在程序中)没有任何换行符或额外的间距。
以下是RPG Cafe命令显示的同一程序:
Printing PCML info
Object: BMORRIS/PCMLTEST *PGM
Module: *ALLBNDMOD
Length of information: 320
Length of data: 227
0: <pcml version="6.0"> <program name="PCMLTEST" entr
50: ypoint="PCMLTEST"> <data name="NAME" type="char" l
100: ength="25" usage="input" /> <data name="SALARY" ty
150: pe="packed" length="9" precision="2" usage="inputo
200: utput" /> </program></pcml>
答案 1 :(得分:2)
从问题的上下文来看,我假设您希望通过分析源或对象而不是在运行时进行此操作。
据我所知,没有简单的方法可以使用内置的IBM i工具来构建自己的交叉引用工具。有很多第三方交叉引用工具可以为您执行此操作,但我知道IBM i上没有任何免费工具。一个只包括我个人使用的清单列表是Hawkeye Pathfinder,MDCMS或Fresche X-Analysis。