Ibm midrange 是否有方法设置检索作业属性(RTVJOBA)命令的返回代码(RTNCDE)参数的值

Ibm midrange 是否有方法设置检索作业属性(RTVJOBA)命令的返回代码(RTNCDE)参数的值,ibm-midrange,Ibm Midrange,以下文档说明了从检索作业属性(RTVJOBA)命令中可用的返回代码(RTNCDE)值作为十进制(5,0)返回,随后在线程安全信息\表中澄清该值实际上被调用[更准确地称为]程序返回代码,并且该值不是线程安全的,从中我们可以安全地得出结论,没有特定于线程的支持来设置该值: 检索作业属性(RTVJOBA) RTNCDE(50)(RTNCDE)的CL var 指定接收RPG、COBOL、DFU或排序实用程序的5位十进制返回代码的CL变量的名称。返回代码由这些程序在返回到调用它们的程序之前设置。返回代码

以下文档说明了从检索作业属性(RTVJOBA)命令中可用的返回代码(RTNCDE)值作为十进制(5,0)返回,随后在线程安全信息\表中澄清该值实际上被调用[更准确地称为]程序返回代码,并且该值不是线程安全的,从中我们可以安全地得出结论,没有特定于线程的支持来设置该值:

检索作业属性(RTVJOBA)
RTNCDE(50)(RTNCDE)的CL var

指定接收RPG、COBOL、DFU或排序实用程序的5位十进制返回代码的CL变量的名称。返回代码由这些程序在返回到调用它们的程序之前设置。返回代码表示作业中已完成处理的最后一个程序(这些类型)的完成状态,如下所示:


属性范围和线程安全表:
属性范围线程安全

程序返回代码(RTNCDE)作业编号

访问[不太可能的向下钻取\编程导航->控制语言->CL编程->编译CL源程序->返回代码摘要],可以找到一些使用该检索值的文档;一个不太可能的地方,因为CL编译器显然没有设置值,CL过程或程序也没有:

返回代码摘要

可以使用Retrieve Job Attributes(RTVJOBA)命令上的return code(RTNCDE)参数返回返回代码。

返回码是一个5位数的十进制值,没有十进制位置(例如12345)。十进制值表示被调用程序的状态。CL程序不设置返回代码。但是,您可以检索CL程序中另一个程序设置的返回代码的当前值。可以通过使用Retrieve Job Attributes(RTVJOBA)命令的RTNCDE参数来实现这一点。

以下列表总结了IBM®i操作系统上支持的语言使用的返回代码:

在上面的列表中[从引用的文档中省略]是RPG编译器和程序、COBOL编译器和程序以及C程序。上述列表中缺少CL编译器或CL;此外,任何关于DFU程序和排序实用程序功能的提及,都在先前包含的文档参考中提到。唯一提到的CL是前面提到的,但您可以使用RTVJOBA读取值。。。好的,但只作为其他程序和编译器返回的,而不是我刚才调用的CL过程或程序的有效返回代码

所以。。。我想知道的是,尽管CL没有设置值[good,因为我想让我的CL程序设置值],CL程序是否可以用来设置值,因为CL程序没有隐式地这样做;显而易见的是,按照编译的运行时对象不[?]也不打算包含任何设置返回代码的代码

如果没有其他情况[很可能,因为最有可能的响应是“编写一个带有系统状态的程序以修改值…”的不受欢迎的建议,那么请仅在附有文件[通过您自己的研究;我意识到不太可能有任何公共文件]的情况下,提供该值的位置[对于后代,因为我不太可能实际编写任何代码],可能是存储在过程控制空间(PCS)中的值;请参阅:DMPSYSOBJ*PCS


以下是最有可能支持的方法,没有任何关于更改返回代码的能力的文档:

更改作业(QWTCHGJB)API

注意:如果有人知道并且可以在下面的链接中提供一个指向产品返回代码的文档链接,特别是针对ILE CL编译器的链接,那么我可能会了解更多关于该值的信息;另一个返回代码,但与我的问题有些离题:

产品返回代码。编译器为Integrated Language Environment®(ILE)语言设置的返回代码。有关可能的值,请参阅相应的ILE一致性语言手册。此字段适用于作业,表示作业内任何线程设置的最新返回代码。


编辑:我忘了你想要一个程序来设置它。我首先发布的程序只是检索它

该程序将从OPM和ILE RPG设置的“LU工作区”中设置“语言/实用程序返回码”。返回码与DSPJOB第1页上显示的返回码相同

我认为OPM COBOL设置了这个返回码,但是如果我没记错的话,ILE COBOL设置了LU工作区中的一个其他返回码。ILE C也设置了一个其他返回码

pgm
    /*------------------------------------------------------------*/
    /* From QSYSINC/H MILIB:                                      */
    /*                                                            */
    /* typedef volatile struct _LU_Work_Area_T {                  */
    /*   short LU_RC;             -- Language/Utility return code */
    /*   ...                                                      */
    /* } _LU_Work_Area_T;                                         */
    /* ...                                                        */
    /* _SPCPTR  _LUWRKA    ( void );                              */
    /*------------------------------------------------------------*/
    dcl &luwrka_p type(*ptr)
    dcl &luwrka   type(*char) stg(*based) basptr(&luwrka_p)
      dcl &lu_rc  type(*int) len(2) +
                  stg(*defined) defvar(&luwrka 1)

    callprc '_LUWRKA' rtnval(&luwrka_p)
    chgvar &lu_rc 5

endpgm

在IBM内部,命名一致性的重要性似乎常常被忽视:-(
只是好奇,返回值(RTNVAL)是否正确真的需要指定一个基础指针,或者RtnVal会像参数一样运行,隐式传递引用会达到相同的效果吗?根据msg MCH3203 T/QBNCRTMD和msg CWX9001 rc0001,我推断不会。因此,编码CL不是v5r3中的选项。但是如果我在RPG中编码相同的函数,那么该程序或过程将结束于重写我刚刚设置的返回代码,所以我必须在该版本中使用ILE COBOL或ILE C编码?我认为RTNVAL必须指定一个基指针。我认为没有任何语言具有隐式的“引用返回”。你是对的,你不能在CL中编码,它必须是CLLE才能实现