能否直接从IFS位置编译PF(物理文件)或DSPF?
从IFS直接编译PF或DSPF的可行方案
CRTPF(创建物理文件)和CRTDSPF(创建显示文件)本身确实不支持直接指定IFS路径读取源文件,但有几种实用方法可以实现类似需求:
方法1:先将IFS源文件导入QSYS源库再编译
这是最传统的流程,分三步操作:
- 先在QSYS中创建对应类型的源物理文件(比如DDS源文件
QDDSSRC):CRTSRCPF FILE(MYLIB/QDDSSRC) RCDLEN(112) - 把IFS中的DDS源文件复制到源物理文件的成员里:
CPYFRMSTMF FROMSTMF('/home/user/mypf.dds') TOMBR('/QSYS.LIB/MYLIB.LIB/QDDSSRC.FILE/MYPF.MBR') MBROPT(*REPLACE) STMFCODPAG(*FILE) - 最后用常规命令编译:
# 编译PF CRTPF FILE(MYLIB/MYPF) SRCFILE(MYLIB/QDDSSRC) SRCMBR(MYPF) # 编译DSPF CRTDSPF FILE(MYLIB/MYDSPF) SRCFILE(MYLIB/QDDSSRC) SRCMBR(MYDSPF)
方法2:用RUNSQLSTM直接执行IFS中的SQL脚本(仅适用于PF)
如果你的物理文件可以用SQL的CREATE TABLE定义,完全不需要DDS:
- 先在IFS中写好SQL脚本(比如
/home/user/create_pf.sql),内容是创建表的SQL语句 - 直接运行脚本创建PF:
RUNSQLSTM SRCSTMF('/home/user/create_pf.sql') COMMIT(*NONE)
方法3:使用ILE的CRTBNDDDS命令(推荐)
这是最接近CRTBNDRPG用法的方案,CRTBNDDDS支持直接指定IFS路径的源文件,既能编译PF也能编译DSPF:
- 编译PF:
CRTBNDDDS BNDDDS(MYLIB/MYPF) SRCSTMF('/home/user/mypf.dds') - 编译DSPF:
CRTBNDDDS BNDDDS(MYLIB/MYDSPF) SRCSTMF('/home/user/mydspf.dds') FILETYPE(*DSPF)
这个命令会直接读取IFS里的DDS源文件完成编译,不需要中间的导入步骤,和你用CRTBNDRPG的体验一致。
注意点
- 使用CRTBNDDDS时,注意源文件的编码要和系统环境匹配,可通过
STMFCODPAG参数指定编码页 - 复杂DDS定义的兼容性没问题,处理逻辑和传统的CRTPF/CRTDSPF一致
内容的提问来源于stack exchange,提问作者Kunal Roy
相关产品推荐
相关产品推荐

