Ein SET-Werteblock ist ein Codebereich, in dem Sie Eigenschafts-, Feld- oder Variablenwerte festlegen können. Hintergrundinformationen zu Eigenschaften finden Sie in der Übersicht zu EGL-Eigenschaften.
In den letzten beiden Fällen können Sie Feldern ausschließlich Werte zuordnen.
program hello
myString STRING = "Hello, Cleveland";
{handleHardIOErrors = YES} // Dies funktioniert
...
end
program hello
myString STRING = "Hello, Cleveland"
{handleHardIOErrors = YES}; // Dieser Teil gehört zur Deklaration von 'myString'
...
end
Das Problem besteht darin, dass 'handleHardIOErrors' sich nun im Gültigkeitsbereich der Zeichenfolge "Hello, Cleveland" befindet. In einer Zeichenfolge gibt es keine zu setzenden Felder, schon gar kein Feld namens 'handleHardIOErrors', sodass EGL den Ausdruck nicht auflösen kann.
myInt INT?{};
myList Dictionary; // myList = null
myList.x = 23; // ungültiger Verweis
Der folgende Code initialisiert hingegen eine neue Wörterverzeichnisvariable, bevor der Versuch einer
Zuordnung unternommen wird:myList2 Dictionary; // myList2 = null
myList2{ x = 23 }; // 'myList2' hat nun einen Schlüssel (x) mit dem Wert 23
package com.companyb.customer;
Record StructuredRecordA
10 fullCheckNum NUM(25);
15 bankNum NUM(9);
15 acctNum NUM(10);
15 checkNum NUM(6);
end
program calculate type BasicProgram
function main()
myRec1 StructuredRecordA
{fullCheckNum = 9531008501602141091001484};
writeStdOut(myRec1.bankNum); // 953100850
writeStdErr(myRec1.checkNum); // 1484
end
end
myRec2 StructuredRecordA {checkNum = 1485};
writeStdOut(myRec2.fullCheckNum); // 1485
Wenn Sie mehrere Zuordnungen zu demselben Feld oder derselben Eigenschaft in einem SET-Werteblock vornehmen, wird die letzte Zuordnung wirksam. Diese Regel gilt auch für Felder komplexer Eigenschaften, die unter 'SET-Werteblöcke in komplexen Eigenschaften' in diesem Thema beschrieben werden.
In jedem Fall befindet sich der SET-Werteblock in dem Gültigkeitsbereich der Abschnitte, Variablen oder Felder, die geändert werden. Die Syntaxvariationen lassen sich am besten anhand von Beispielen veranschaulichen.
// Der Gültigkeitsbereich ist 'myVariable'
myVariable INT
{
inputRequired = yes,
align = left
};
// Der Gültigkeitsbereich ist 'optionEntry'
DataItem optionEntry INT
{
inputRequired = yes,
align = left
};
end
// Der Gültigkeitsbereich ist 'menu1Option'
menu1Option optionEntry
{
inputRequired = no
};
myRecord02.myContent01 = "abc";
myRecord02.myContent02 = "xyz";
myRecord02
{
myContent01="abc",
myContent02="xyz"
};
Die abgekürzte Zuordnungsanweisung ist nicht für Felder in einem strukturierten Datensatz verfügbar und kann nicht zum Festlegen von Eigenschaften verwendet werden.
Wenn Sie Werte für ein Feld in einer Datensatzvariablen zuordnen, müssen Sie den Gültigkeitsbereich wie folgt auf das entsprechende Feld eingrenzen.
record myBasicRecord03 type basicRecord
myInt04 INT;
end
record myBasicRecord02 type basicRecord
myInt03 INT;
myRec03 myBasicRecord03;
end
record myBasicRecord type basicRecord
myInt01 INT;
myInt02 INT;
myRec02 myBasicRecord02;
end
Die Syntax für das Zuordnen eines Eigenschaftswerts kann eines der in den folgenden Beispielen gezeigten Formate annehmen, die für das Feld 'myInt04' gelten:
// Punktsyntax
myRecB myBasicRecord
{
myRec02.myRec03.myInt04{ align = left }
};
// Syntax mit eckigen Klammern
// Diese Syntax wirkt sich nicht auf
// Felder in festgelegten Strukturen aus.
myRecC myBasicRecord
{
myRec02["myRec03"]["myInt04"]{ align = left }
};
// Syntax mit geschweiften Klammern
myRecA myBasicRecord
{
myRec02 {myRec03 { myInt04 { align = left }}}
};
// Punktsyntax
myRecB myBasicRecord
{
myInt01 = 4,
myInt02 = 5,
myRec02.myRec03.myInt04{ align = left },
myRec02.myInt03 = 6
};
// Syntax mit eckigen Klammern
myRecC myBasicRecord
{
myInt01 = 4,
myInt02 = 5,
myRec02["myRec03"]["myInt04"]{ align = left },
myRec02["myInt03"] = 6
};
// Syntax mit geschweiften Klammern;
// Die Verwaltung dieses Formats ist jedoch viel schwieriger
myRecA myBasicRecord
{
myInt01 = 4,
myInt02 = 5,
myRec02
{
myRec03
{ myInt04
{ action = label5 }},
myInt03 = 6
}
};
In einer Variablendeklaration oder Zuordnungsanweisung können Sie einen Container (wie beispielsweise einen SQL-Datensatz) verwenden, der ein Feld (wie beispielsweise keyItems) enthält, das denselben Namen wie eine Datensatzeigenschaft hat. Um auf Ihr Feld und nicht auf die Eigenschaft zu verweisen, verwenden Sie das Schlüsselwort 'this', das als Gültigkeitsbereich die Deklaration festlegt, in der sich der SET-Werteblock befindet.
Record ExampleRecord type SQLRecord
{ tableNames = [["myTable"]],
keyItems = [myKey] }
myKey CHAR(10);
myOtherKey CHAR(10);
keyItems CHAR(60);
end
myRecord ExampleRecord
{
keyItems = [myOtherKey],
this.keyItems = "abc"
};
Ein Beispiel für eine Feldgruppendeklaration finden Sie unter 'Zusätzliche Beispiele für SET-Werteblöcke'.
myService ExampleServicePart
{ @xml
{name="myService",
namespace="http://www.customerpackage.companyb.commy.useful.service"}
};
Record Point
x INT;
y INT;
end
Record Rectangle
topLeft Point;
bottomRight Point;
end
Function test()
screen Rectangle
{
topLeft{x=1, y=1},
bottomRight{x=80, y=24}
};
// Ändern Sie x, y im Code mit einer Anweisung, die
// äquivalent ist zu folgendem Code:
// screen.topLeft.x = 1;
// screen.topLeft.y = 2;
screen.topLeft{x=1, y=2};
end
pts Point[2]
{
this[1]{x=1, y=2},
this[2]{x=2, y=3}
};
pts{ x=1, y=1 };
pts[1]{x=10, y=20};
Außerhalb eines SET-Werteblocks hat das Schlüsselwort 'this' eine andere Bedeutung (siehe Schlüsselwort "this"). In jedem Fall ist die Verwendung von 'pts[1]' hier nicht mehrdeutig, sodass eine solche Unterscheidung nicht erforderlich ist.
points Point[];
points{x=1, y=1};
points[1]{x=10, y=20};
points{};
points.resize(2);
points{x=1, y=1};