我寫了一個宏來更改字符串PDS的所有成員。我通過JCL傳遞 PDS,現有值和新值。 我使用rexx將參數傳遞給ispf宏時出現無效長度錯誤。錯誤是:從rexx代碼傳遞參數給ispf宏時出現無效的長度錯誤
ISPS108 Invalid length -/-Parameter 'PARM' exceeds the allowable length.
我REXX代碼 - IWPURDX是:
TRACE "ALL"
ARG PDS STRING1 STRING2 .
MAC = 'TEMPMAC' /* Macro name
*/
PDS = STRIP(PDS,"B","'")
STRING1 = STRIP(STRING1,"B","'")
STRING2 = STRIP(STRING2,"B","'")
S12 = STRING1 || " " || STRING2
SAY "STRING1" STRING1
SAY "STRING2" STRING2
SAY "S12" S12
SAY "LENGTH" LENGTH("S12")
X = OUTTRAP("LIBMEM.") /* Trap output of TSO
*/
ADDRESS TSO "LISTDS '"PDS"' M"
X = OUTTRAP("OFF")
DO I = 7 TO LIBMEM.0
LIBMEM.I = STRIP(LIBMEM.I) /* Member name
*/
ADDRESS ISPEXEC "EDIT DATASET ('"PDS"("LIBMEM.I")') " ||,
"MACRO ("MAC") PARM ("S12")"
SAY I RC LIBMEM.I
END
ISPF宏 - TEMPMAC是:
/*REXX*/
TRACE "ALL"
SAY "TEMPMAC"
ADDRESS ISREDIT "MACRO (PARM) PROCESS"
PARSE VAR PARM STRING1 STRING2
ADDRESS ISREDIT "CHANGE ALL 'STRING1' 'STRING2'"
C_RC = RC
ADDRESS ISREDIT "END"
EXIT C_RC
在JCL,我通過以下ISPF命令美其名曰:
//REXX EXEC PGM=IKJEFT01,REGION=32M
//SYSPRINT DD SYSOUT=*
//SYSTSIN DD *
ISPSTART CMD(%IWUPDRX 'PPPRG3.BASE.WRJCL' '2016-01-01' 'IWPULDT')
/*
我也打印所以字符串傳遞給宏的長度 - 它說3. 我無法找到錯誤的根本原因。有人可以幫忙嗎?
這是正確的。'EDIT'(和'VIEW')的'PARM'參數中的值是ISPF變量的**名稱**,而不是值。 ISPF服務中有不少位置指定變量名稱,而不是變量值。 LM服務因此而臭名昭着。例如,'LMINIT'想要變量**名稱**,但其他變量需要**值**。查看所需內容的最簡單方法是,如果使用變量名稱,參數描述將以** - var **結尾;在這種情況下,它被定義爲'PARM(parm-var)'。 – zarchasmpgmr
謝謝Fritz!有效。但奇怪的是,當我在TEMPMAC宏中硬編碼參數時,它正在工作,並且只是傳遞宏名稱。 – bp89