Strukturierte Datensätze als einzelne Felder übergeben

Sie können eine EGL-Eigenschaft festlegen, damit ein strukturierter Datensatz an ein aufrufendes Programm gesendet und von diesem in einer von unterschiedlichen Formen empfangen werden kann - als strukturierter Datensatz, als Gruppe von einzelnen Feldern, die den Blattelementen in diesem Datensatz entsprechen, oder als sequenzielle Gruppe von Datensätzen und Feldern. Die Verwendung dieser Eigenschaft ist insbesondere dann geeignet, wenn in EGL codierte Logik mit einer Logik interagiert, die in EGL codiert ist, aber aus Code migriert wurde, der in der Programmiersprache 'Natural' geschrieben wurde.

Das Verhalten basiert auf der Einstellung für die Eigenschaft callingConvention sowohl in der Anweisung call als auch im aufgerufenen Programm. Der Eigenschaftswert lautet entweder 'CallingConventionKind.Expanded' oder in der Kurzform 'Expanded'.

Als Beispiel wird von den folgenden Datensatzabschnitten ausgegangen:
Record MyCompletePart type BasicRecord
   10 myInt INT;
   10 myInt02 INT;
   10 myChars CHAR(5);   
end

Record MySubPart type BasicRecord
   10 myInt02 INT;
   10 myChars CHAR(5);
end
Ein Gruppe von Deklarationen könnte folgendermaßen lauten:
myCompleteRecord MyCompletePart;
mySubRecord MySubPart;
myIntVar   INT;
myInt02Var INT;
myCharsVar CHAR(5);
Die folgenden Anweisungen call sind gültig und funktional entsprechend:
call MyProgram( myCompleteRecord )                { callingConvention=Expanded };
call MyProgram( myIntVar, mySubRecord )           { callingConvention=Expanded }; 
call MyProgram( myIntVar, myInt02Var, myCharsVar) { callingConvention=Expanded }; 
Die folgenden Definitionen für MyProgram sind gültig und funktional entsprechend:
Program MyProgram  type BasicProgram ( myCompleteRecord MyCompletePart )
   { callingConvention=Expanded }
   
end

Program MyProgram type BasicProgram ( myIntVar INT, mySubRecord MySubPart ) 
   { callingConvention=Expanded }
   
end

Program MyProgram type BasicProgram ( myIntVar INT, myInt02Var INT, myCharsVar CHAR(5))
   { callingConvention=Expanded }
   
end

Jede der drei Argumentlisten in der Anweisung call ist für jede der drei Parameterlisten des aufgerufenen Programms gültig.

In einer Teilgruppe der Fälle bewirkt die Verwendung von 'Expanded', dass der Aufruf länger als ohne den Einsatz von 'Expanded' dauert. Als Beispiel soll hier ein Datensatz zugrunde gelegt werden, der auf dem folgenden Datensatzabschnitt basiert:
Record X type BasicRecord
	10 myChar CHAR(4)[2];
		20 mySubChar01 char(2);
		20 mySubChar02 char(2);
end

Wird 'Expanded' verwendet, wird jedes Blatt (mySubChar01 oder mySubChar02) selbst dann als zusammenhängender Speicherblock übergeben, wenn die Felder in diesem Blatt 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'.

Das Leistungsproblem tritt für gewöhnlich in den folgenden Fällen auf:

Falls Sie eine Strukturfeldgruppe explizit übergeben, lesen Sie die Informationen im Abschnitt 'Strukturfeldgruppen übergeben'.


Feedback