如何修复 "dont get a clear Array after a Programm Call"
How to fix "dont get a clear Array after a Programm Call"
我写了一个程序来编码一些字符串。我写了第二个程序来调用这个编码工具。在这里,我创建了一个数组 (A_FELDER) 并用一些文本填充它。在下面的点1你可以看到我的encode-Tool。在 Point 2 中,您可以看到我的数组和 FOR-LOOP 的声明。在点 3 中调用编码工具。
在我调用工具之前,我的数组有三个数据集。当编码工具 运行 成功时,我的数组 (A_FELDER) 为空。
我尝试更改 *INLR = *ON;到 return。但我得到了相同的结果。我还创建了第二个数组并写回该数组中的数据。同样的结果,空数组。
我把我的encode-Tool改成了Parameters之后的Program out。我的数组 (A_FELDER) 有三个数据集。
所以我的猜测是:java 调用清除了一些存储,我的阵列找不到他的 space。
点 1
D Verschl S O Class(*Java:'eirich.verschl.Verschl')
D $input S 1024a
D $output S 1024a
D new_Verschl PR O EXTPROC(*JAVA:
D 'eirich.verschl.Verschl'
D :*CONSTRUCTOR)
D encrypt PR O EXTPROC(*JAVA:
D 'eirich.verschl.Verschl':
D 'encrypt')
D CLASS (*JAVA:'java.lang.String')
D arg0 O CLASS (*JAVA:'java.lang.String')
C *entry plist
C parm $input
C parm $output
/Free
//Generate new Object named Verschl
Verschl = new_Verschl();
//Trim and create Java String from input Parm
fldjString = makestring(%trimr($input));
// ENCRYPT java String
fldjString2 = encrypt(Verschl:fldjString);
//Convert jString in Alpha
fldBty = cvtToBytes(fldjString2);
//return value for call pgm
$output = fldBty;
点 2
D*
D A_FELDER S 256A DIM(20)
D*
C EVAL A_FELDER(1) = KOFIRM
C EVAL A_FELDER(2) = HEAUNR
C EVAL A_FELDER(3) = KOAUNR
C*
C FOR COUNT = 1 TO %ELEM(A_FELDER)
C*
C IF A_FELDER(COUNT) <> *BLANKS
C*
C EVAL I_UNVERSCHL_J = A_FELDER(COUNT)
C EXSR DATAENCRYPT
C EVAL A_FELDER(COUNT) = I_VERSCHL
C*
C ENDIF
C*
C ENDFOR
点 3
C DATAENCRYPT BEGSR
C*
C EVAL $INPUT_JAVA = I_UNVERSCHL_J
C EVAL $OUTPUT_JAVA = ''
C*
C CALL(E) 'WD20001JR'
C PARM $INPUT_JAVA
C PARM $OUTPUT_JAVA
C*
C EVAL I_VERSCHL = $OUTPUT_JAVA
C*
C ENDSR
所以我想加密我的字符串,而不是写回这个数组 (A_FELDER)。但是在程序调用之后我有一个空数组。其他字段不为空。
保存与普通变量不同的 AS400 数组变量?
我很难描述这个问题,所以我很抱歉我的英语不好。
你们有 WD20001JR
的原型和 $INPUT_JAVA
和 $OUTPUT_JAVA
的 D 规范吗?由于参数是通过引用传递的,如果这些字段的大小与被调用程序 WD20001JR
预期的大小不匹配,您可能会无意中覆盖数组字段。
我写了一个程序来编码一些字符串。我写了第二个程序来调用这个编码工具。在这里,我创建了一个数组 (A_FELDER) 并用一些文本填充它。在下面的点1你可以看到我的encode-Tool。在 Point 2 中,您可以看到我的数组和 FOR-LOOP 的声明。在点 3 中调用编码工具。
在我调用工具之前,我的数组有三个数据集。当编码工具 运行 成功时,我的数组 (A_FELDER) 为空。
我尝试更改 *INLR = *ON;到 return。但我得到了相同的结果。我还创建了第二个数组并写回该数组中的数据。同样的结果,空数组。
我把我的encode-Tool改成了Parameters之后的Program out。我的数组 (A_FELDER) 有三个数据集。 所以我的猜测是:java 调用清除了一些存储,我的阵列找不到他的 space。
点 1
D Verschl S O Class(*Java:'eirich.verschl.Verschl')
D $input S 1024a
D $output S 1024a
D new_Verschl PR O EXTPROC(*JAVA:
D 'eirich.verschl.Verschl'
D :*CONSTRUCTOR)
D encrypt PR O EXTPROC(*JAVA:
D 'eirich.verschl.Verschl':
D 'encrypt')
D CLASS (*JAVA:'java.lang.String')
D arg0 O CLASS (*JAVA:'java.lang.String')
C *entry plist
C parm $input
C parm $output
/Free
//Generate new Object named Verschl
Verschl = new_Verschl();
//Trim and create Java String from input Parm
fldjString = makestring(%trimr($input));
// ENCRYPT java String
fldjString2 = encrypt(Verschl:fldjString);
//Convert jString in Alpha
fldBty = cvtToBytes(fldjString2);
//return value for call pgm
$output = fldBty;
点 2
D*
D A_FELDER S 256A DIM(20)
D*
C EVAL A_FELDER(1) = KOFIRM
C EVAL A_FELDER(2) = HEAUNR
C EVAL A_FELDER(3) = KOAUNR
C*
C FOR COUNT = 1 TO %ELEM(A_FELDER)
C*
C IF A_FELDER(COUNT) <> *BLANKS
C*
C EVAL I_UNVERSCHL_J = A_FELDER(COUNT)
C EXSR DATAENCRYPT
C EVAL A_FELDER(COUNT) = I_VERSCHL
C*
C ENDIF
C*
C ENDFOR
点 3
C DATAENCRYPT BEGSR
C*
C EVAL $INPUT_JAVA = I_UNVERSCHL_J
C EVAL $OUTPUT_JAVA = ''
C*
C CALL(E) 'WD20001JR'
C PARM $INPUT_JAVA
C PARM $OUTPUT_JAVA
C*
C EVAL I_VERSCHL = $OUTPUT_JAVA
C*
C ENDSR
所以我想加密我的字符串,而不是写回这个数组 (A_FELDER)。但是在程序调用之后我有一个空数组。其他字段不为空。 保存与普通变量不同的 AS400 数组变量?
我很难描述这个问题,所以我很抱歉我的英语不好。
你们有 WD20001JR
的原型和 $INPUT_JAVA
和 $OUTPUT_JAVA
的 D 规范吗?由于参数是通过引用传递的,如果这些字段的大小与被调用程序 WD20001JR
预期的大小不匹配,您可能会无意中覆盖数组字段。