COBOL Copybook 版本控制

Posted

技术标签:

【中文标题】COBOL Copybook 版本控制【英文标题】:COBOL Copybook Versioning 【发布时间】:2021-07-29 14:32:47 【问题描述】:

我有一个我没有编写的 COBOL 编译作业,我正在尝试了解它是如何工作的。它看起来像这样:

//COB      EXEC PGM=IGYCRCTL,COND=(0,NE,TRN),
//             PARM=('DTR,NUMPROC(PFD),NOADV,LIST,LIB,TRUNC(BIN)',     *
//             'NOSEQ,DYN,RMODE(ANY),OUT(SYSPRINT),MAP')
//STEPLIB  DD DISP=SHR,DSN=SYS1.IGY.SIGYCOMP
//SYSPRINT DD DSN=xxx..xxx..xxx.LST(&NAME),DISP=SHR
//SYSUT1   DD UNIT=SYSDA,SPACE=(460,(1700,1000))
...
//SYSLIB   DD DISP=SHR,DSN=xxx..xxx..xxx.CPY
//         DD DISP=SHR,DSN=SYSQ.MQS710A.SCSQCOBC         MQ-SERIES

这不是真正的Job,我把一些部分改成了“xxx”,因为我不能给出真正的代码。 我知道 SYSLIB 之后的数据集是我正在编译的程序的依赖项。我不明白的是 Copybooks 的版本控制是如何工作的。它将在限定符“xxx..xxx..xxx.CPY”下的数据集中提取任何内容。我怎么知道需要所有的 Copybooks(编译错误?)并且它们是正确的版本,是原始程序员打算使用的。 对于 MQ 系列 Copybook 数据集,名称“MQS710A”中似乎有一个版本号。这是它应该在 z/OS 上的方式吗? 另一个数据集“xxx..xxx..xxx.CPY”在名称中没有任何版本,“xxx”只是一堆字母。

【问题讨论】:

【参考方案1】:

当引用 COPYBOOK 时,它是根据找到 COPYBOOK 的第一个数据集来选择的。编译器不会查看您看到版本号的数据集名称。版本号是用于控制何时将新更改引入环境的约定。

例如,假设安装了新版本的 MQ,可以更改数据集以引用新版本。这将取决于系统程序员如何将更改引入环境。这是一个比你的帖子更复杂的答案。

如果您正在“版本控制”,您将在串联中对数据集序列进行排序。例如,您可能会看到如下内容:

//SYSLIB   DD DISP=SHR,DSN=xxx.DEV.xxx.CPY
//         DD DISP=SHR,DSN=xxx.PROD.xxx.CPY
//         DD DISP=SHR,DSN=SYSQ.MQS710A.SCSQCOBC         MQ-SERIES 

这种方法允许开发人员挑选作为新功能的一部分而正在修改的字帖,然后从当前的生产版本中检索剩余的字帖。

综上所述,如果您使用的是源代码管理系统,那么它们的编译过程将不同于简单的串联。

如果找不到 COPYBOOK,您将收到编译错误。

【讨论】:

感谢您的回答。对于来自 java 背景的我来说,这令人困惑并且看起来很危险。我曾经有一个 Maven POM,我在其中设置了我的依赖项的特定版本。所以你是说我必须通过检查数据集来确保依赖项是我打算使用的正确版本?在您的示例中,我必须检查 DEV 和 PROD 数据集是否以意外方式重叠? MVS 数据集连接的工作方式是将数据集放在一个列表中,然后在请求时(在您的情况下是一本字帖)使用具有该名称的第一个数据集。因此,数据集的排序是所需的顺序。对于开发人员,您希望您的测试处于领先地位。如果这回答了您的问题,请将问题标记为此类。欢迎提出新问题,我相信会有很多。

以上是关于COBOL Copybook 版本控制的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Cobol 响应中的签名显示字段解码为 Java 中的 BigDecimal

在程序中获取控制流超出 Cobol 中的最后一行

在 Mainframe COBOL 中,如何向控制台操作员发送消息,等待响应,然后继续?

利用Anaconda进行包版本控制

版本控制工具是啥?

REST API 版本控制 - 为啥不对模型进行版本控制