Sie können eine Strukturfeldgruppe an ein aufgerufenes Programm übergeben. Sowohl bei der Anweisung call als auch bei der Parameterliste des aufgerufenen Programms muss hierzu eine spezielle Konvention befolgt werden.
Record MyRecordPart type basicRecord
10 myInt INT[5];
10 myChar CHAR(1);
end
myRecord MyRecordPart;
call MyProgram( myRecord.myInt[*] );
Der in eckige Klammern gesetzte Stern ([*]) bedeutet, dass die vorangehende Variable als Strukturfeldgruppe zu behandeln ist. Falls Sie myRecord.myInt ohne eckige Klammern angeben, empfängt das Programm nur das erste Element in der Feldgruppe. Dies entspricht funktional der Codierung myRecord.myInt[1].
Program MyProgram type BasicProgram ( myInt INT[5]! )
end
Das Ausrufezeichen gibt an, dass es sich bei der vorangehenden Variablen um eine Strukturfeldgruppe und nicht um eine dynamische Feldgruppe handelt, deren Größe im aufgerufenen Programm geändert werden kann. Die Größe der Feldgruppe und das Ausrufezeichen sind nach jeder Feldgruppendimension erforderlich.
Record X type BasicRecord
10 myChar CHAR(4)[2];
20 mySubChar01 char(2);
20 mySubChar02 char(2);
end
Wenn Sie die Feldgruppe mySubChar01 oder mySubChar02 übergeben, werden die Felder selbst dann in einem zusammenhängenden Speicherblock übergeben, wenn die Felder nicht zusammenhängend gespeichert sind. Die Daten müssen kopiert werden und diese zusätzliche Verarbeitung benötigt Zeit.
Details über die Speicherung von mehrdimensionalen Strukturfeldern finden Sie unter 'Feldgruppen'.