需要使用JCL在PDS文件中搜索成员

时间:2018-07-19 09:24:18

标签: mainframe jcl

我需要帮助来创建一个JCL,以在PDS文件中搜索当前年份的成员(即RPxxxx,其中xxxx表示2018年)。每年由使用PDS文件的年度工作创建的新成员。因此,成员名称在PDS文件中不是固定的,即后缀每年更改一次。

我们需要创建一个JCL,以检查PDS文件中当前年份的成员是否存在。因此,后续作业将成功运行。

如果当前年份成员存在于PDS文件中,则新作业将以RC 0000运行,这表示将自动触发后继作业。

如果curr year成员不存在于PDS文件中,则该作业将失败并显示RC 0001,这表示直到该作业成功恢复后,才会触发下一个后续作业。

请帮助我创建这样的JCL。

非常感谢您的帮助。

先谢谢了。

3 个答案:

答案 0 :(得分:5)

LISTDS,一个TSO功能,显示数据集属性。您可以使用IKJEFT01实用程序(允许您批量运行TSO功能)并运行此TSO功能。但是,LISTDS发出的返回码不是您想要的。

因此,我建议使用IKJEFT01实用程序运行如下所示的REXX脚本,以评估PDS中成员的存在。

/* REXX */         
arg dsname         
address tso        
"listds ("dsname")"
if (rc \= 0) then  
exit 1              

运行的JCL如下所示。

//JOBNAME    JOB ('ACCOUNTING INFORMATION'),
//     CLASS=2,MSGCLASS=H,NOTIFY=&SYSUID    
//P1 EXEC PGM=IKJEFT01                      
//SYSPROC DD DSN=YOUR.REXX.LIB,DISP=SHR     
//SYSTSPRT DD SYSOUT=*                      
//SYSTSIN DD *                              
  %EMPTY7 'YOUR.PDS(RPXXXX)'                  
/*    
SYSTSIN DD中的

EMPTY7 是REXX脚本的名称。 SYSPROC DD中提供的库将存储您的REXX脚本。

让我知道是否需要更多详细信息。

答案 1 :(得分:2)

不需要REXX脚本。只需通过IKJEFT1A运行LISTDS,该步骤将以LISTDS命令的返回代码结束。

注意,语法描述未明确提及成员规范,但确实有效。使用它需要您自担风险。

//STEP01   EXEC PGM=IKJEFT01
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
  LISTDS ('your.data.set.name(yourmember)')
/*

如果成员存在,则该步骤将以RC = 0结束,否则RC将为非零。

答案 2 :(得分:1)

以下Rexx代码将根据当年动态建立成员名称,并且不需要对数据集/成员名称进行硬编码。这样,您可以安排工作来建立新成员,而无需编辑工作。

def Calculator(root):
    global Number1, Number2, Operator
    calculator = Toplevel()
    Number1 = DoubleVar()
    Number2 = DoubleVar()
    Operator = IntVar()
    Operator.set(1)
    Entry(calculator,textvariable=Number1,justify="c").grid()
    Entry(calculator,textvariable=Number2,justify="c").grid()
    Radiobutton(calculator,text="Add",variable=Operator,value=1).grid()
    Radiobutton(calculator,text="Subtract",variable=Operator,value=2).grid()
    Radiobutton(calculator,text="Multiply",variable=Operator,value=3).grid()
    Radiobutton(calculator,text="Divide",variable=Operator,value=4).grid()
    Radiobutton(calculator,text="Square",variable=Operator,value=5).grid()
    Radiobutton(calculator,text="Square root",variable=Operator,value=6).grid()
    Button(calculator,text="results", command=lambda event: calculate(calculator), width=16).grid()

def calculate(calculator):
    n1=Number1.get()
    n2=Number2.get()
    op=Operator.get()
    if op==1:Results=n1+n2
    if op==2:Results=n1-n2
    if op==3:Results=n1*n2
    if op==4:Results=n1/n2
    if op==5:Results=math.pow(n1,n2)
    if op==6:Results=n1*(1/n2)
    Results = "The answer is "+str(Results)
    calculator.destroy()

    Answer = Toplevel()
    Answer.geometry("150x150")
    Label(Answer, text=Results).place(relx=.5,rely=.5,anchor="center")

root = Tk()
# Presumably your real code has some top-level stuff, where the
# user can ask you to open a calculator, like a button whose
# command calls the Calculator function? But here, we'll just:
Calculator(root)
root.mainloop()