В мире CICS OCCURS в зависимости от (ODO) может использоваться для создания
таблица, которая динамически измеряется во время выполнения. Тем не менее, как вы заявляете
SOAP-RECORD
выделит достаточно памяти для хранения записи максимального размера.
Попробуйте следующее:
Сначала переместите SOAP-RECORD
в LINKAGE SECTION
. Предметы заявлены
в разделе связей нет выделенной для них памяти. В этот
Точка у вас есть только макет записи. Оставьте декларацию
ITEM-COUNT
и SUB-COUNT
in WORKING-STORAGE
.
Далее, объявите указатель и длину в WORKING-STORAGE
что-то вроде:
77 SOAP-PTR USAGE POINTER.
77 SOAP-LENGTH PIC S9(8) BINARY.
Наконец, в PROCEDURE DIVISION
: установить размер массива
размеры к некоторым реальным значениям; выделить
соответствующий объем памяти, а затем подключите два. Например:
MOVE 200 TO ITEM-COUNT
MOVE 15 TO SUB-COUNT
MOVE LENGTH OF SOAP-RECORD TO SOAP-LENGTH
EXEC CICS GETMAIN
BELOW
USERDATAKEY
SET(SOAP-PTR)
FLENGTH(SOAP-LENGTH)
END-EXEC
SET ADDRESS OF SOAP-RECORD TO SOAP-PTR
Это выделит только достаточно памяти для хранения SOAP-записи с 200 SOAP-ITEMS.
каждый из которых содержит 15 SI-СУБ-ЭЛЕМЕНТОВ.
Обратите внимание, что регистр LENGTH OF
дает размер SOAP-RECORD
на основе значений объекта ODO (ITEM-COUNT, SUB-COUNT), а не
максимальное количество OCCURS.
Очень важно ... Не забудьте освободить память, когда закончите!