多年来,IBM i客户一直要求直接从流文件中处理资源。 7.3版中的增强功能使IBM i更加接近该目标。 在创建或更新服务程序时,导出源将指定服务程序的签名以及服务程序导出的过程和数据的名称。 使用CRTSRVPGM (创建服务程序)和UPDSRVPGM (更新服务程序)命令上的EXPORT参数指定文件。 过去,只能从物理文件处理此源。 从IBM i 7.3开始,可以从流文件中处理活页夹语言导出源。
使用CRTSRVPGM命令创建服务程序需要指定包含导出源的文件名。 在IBM i 7.3之前的版本中,该命令提供了SRCFILE和SRCMBR选项,使用户能够提供物理文件的名称以及包含源的成员。 支持SRCSTMF选项,该命令现在可用于标识集成文件系统中流文件的任何路径(例如/ home / company / product / file )。
创建服务程序后,可以使用UPDSRVPGM命令对其进行更新。 就像CRTSRVPGM命令一样,可以在UPDSRVPGM命令上使用SRCSTMF选项来从流文件中读取导出源。 实际上,即使最初从物理文件中读取了导出源,也可以使用UPDSRVPGM命令从流文件中读取导出源。 例如,如果使用以下命令从物理文件SRCLIB / QSRVSRC(SPGM)中使用导出源创建了服务程序:
CRTSRVPGM SRVPGM(SPGMLIB/SPGM)SRCFILE(SRCLIB/QSRVSRC) SRCMBR(SPGM) …将导出源复制到流文件/binder/source/spgm.src后 ,可以通过发出以下命令来更新服务程序以从该位置获取导出源:
UPDSRVPGM SRVPGM(SPGMLIB/SPGM) EXPORT(*SRCFILE) SRCSTMF('/binder/source/spgm.src') …为服务程序设置初始绑定程序语言时,可以使用RTVBNDSRC (获取绑定程序源)命令。 可以在将组成服务程序的所有模块的列表上运行该命令,以创建包含模块列表中每个导出内容的活页夹源文件。 然后可以修改活页夹语言源,以删除创建服务程序时不应导出的过程和数据的名称。 RTVBNDSRC命令也已更新,以支持SRCSTMF选项。 通过指定此选项而不是SRCFILE选项,将生成的导出源放置在给定的流文件中。 然后,在创建服务程序时,可以在CRTSRVPGM命令的SRCSTMF选项中使用此流文件。
DSPSRVPGM (显示服务程序)命令指示在创建或更新服务程序时使用的导出源文件。 已修改命令以显示选择了哪种类型的导出源文件,可以是物理文件还是流文件。 图1显示了从流文件中读取导出源时DSPSRVPGM命令的示例输出。
如果活页夹源来自物理文件,则“ 导出源文件”字段将像以前一样显示文件名。 如果活页夹源来自流文件,则“ 导出源文件”字段将显示字符串* STMF。 这表明活页夹源文件的路径在“ 导出源流文件”字段中的下面三行列出。 即使在CRTSRVPGM或UPDSRVPGM命令中指定了相对路径名,此字段也始终显示流文件的绝对路径。 这样,可以精确地确定从中获取出口来源的位置。
QBNRSPGM API是一种以编程方式获取与DSPSRVPGM命令相同的信息的DSPSRVPGM 。 如果在创建服务程序时将一个文件用作导出源,则将SPGI0100格式更新为返回包含流文件路径的结构。 如果未使用流文件,则返回的结构不会更改,因此使用此API的现有程序不必更改。
如果在创建或更新服务程序时指定了流文件,则将从QBNRSPGM返回的结构更改如下:
流文件的绝对路径名和路径名长度将分别包含在结构的偏移444和440处。 为了指示返回的结构包括绝对路径名和长度,偏移量为61的导出源文件名字段将包含特殊值* STMF。 在这种情况下, 导出源库名称和导出源成员名称字段将包含空白值。 创建服务程序时,偏移444处的绝对路径名将被编码在作业的CCSID中。 该CCSID将存储在偏移量436中的结构中。请注意,即使未更改使用此API的程序,但如果将其与使用从流文件中获取的导出源创建的服务程序一起使用,则该程序仍可能起作用。 调用API的程序唯一看到的区别是, 导出源文件名字段包含字符串* STMF。
通过此增强功能,可以将导出源文件与其余应用程序源代码存储在同一位置,并可以从该位置直接使用。 过去,导出源需要先存储在物理文件中或复制到物理文件,然后才能进行处理。 当在CRTSRVPGM , UPDSRVPGM或RTVBNDSRC命令上指定流文件名时,可以将其指定为绝对名称或相对名称。 绝对名称以目录分隔符(通常为“ /”字符)开头,相对名称则不以该字符开头。 DSPSRVPGM命令显示的路径将始终显示流文件的绝对路径。 这样,就不会从文件的获取位置产生混淆。 与往常一样,可以在SRCSTMF选项中将QSYS.LIB文件系统中的文件指定为路径。 选项SRCSTMF('/QSYS.LIB/ XXX .LIB/ YYY .FILE/ ZZZ .MBR')将从物理文件XXX / YYY.ZZZ获取导出源文件。 但是,由于将导出源指定为流文件,而不是物理文件,因此DSPSRVPGM命令将在“ 导出源流文件”字段中将文件名显示为路径,而不在“ 导出源文件”和“ 导出”中显示为物理文件。 源成员字段。
关于此新支持,应做一些警告性声明。 首先,由于可以指定相对名称,因此导出源文件的实际位置可能会造成混淆。 如果指定了相对流文件binder.source和文件预计将位于/company-name/product/binder.source,然后确保当前的工作目录是使用设置/公司名称/产品 CHGCURDIR (更改当前目录)命令。
其次,如果指定的文件是/company-name/product/binder.source ,请确保配置文件对指定路径中的每个目录( company-name和product )具有执行(* X)权限。 此外,读出(* R)权限需要为流文件CRTSRVPGM和UPDSRVPGM命令和写(* W)权限需要为流文件RTVBNDSRC命令。
最后,仅对目标版本为V7R3M0或更高版本的对象提供此支持。 如果CRTSRVPGM命令与TGTRLS(V7R2M0)或TGTRLS(V7R1M0) ,则不能指定SRCSTMF选项。 如果在目标版本为SRCSTMF之前的版本上使用UPDSRVPGM命令,则无法使用SRCSTMF选项。 将发出诊断消息CPD9390。 例如,图2显示了使用目标版本V7R2M0创建的服务程序I1479T01A。 更新服务程序以从流文件中获取导出源时,将生成错误CPD9390,如图2所示。
能够在集成文件系统中包含所有编程源可以帮助简化在IBM i上创建和维护服务程序的过程。 现在可以直接从流文件处理导出源。 在使用它之前,不再需要将其存储在物理文件中或将其复制到物理文件中。
翻译自: https://www.ibm.com/developerworks/ibmi/library/i-binder-language-export-source-in-stream-files/index.html
相关资源:活页夹:Emacs全局次要模式,促进多文件编写项目-源码