Un bloque de establecimiento de valor es un área de código en la que puede establecer los valores de propiedad y de campo. Para obtener más información, consulte la sección Visión general de las propiedades de EGL.
En los dos últimos casos, solo puede asignar valores a campos.
En todos los casos, el bloque de establecimiento de valor está en el ámbito del componente, la variable o el campo que se modifica. Las variaciones de la sintaxis se ilustran mejor mediante un ejemplo.
// el ámbito del bloque de establecimiento de valor es myPart DataItem myPart INT { inputRequired = yes, align = left } end
// el ámbito es myVariable myVariable INT { inputRequired = yes, align = left };
// El ámbito es ExampleRecordPart Record ExampleRecordPart type SQLRecord { tableNames = [["myTable"]], keyItems = ["myKey"] } myKey CHAR(10); myOtherKey CHAR(10); myContent01 CHAR(60); myContent02 CHAR(60); end
// El ámbito es myRecord myRecord ExampleRecordPart { keyItems = ["myOtherKey"], myContent01 = "abc", myContent02 = "xyz" };
// el ejemplo muestra el único caso en el que // puede alterarse temporalmente una propiedad de registro en una // declaración de variable. // el ámbito es myRecord myRecord ExampleRecordPart {keyItems = ["myOtherKey"]}; // el ámbito es myInteger, que es una matriz myInteger INT[5] {1,2,3,4,5}; // estas sentencias de asignación // no tiene bloques de establecimiento de valor myRecord02.myContent01 = "abc"; myRecord02.myContent02 = "xyz"; // esta sentencia de asignación abreviada // es equivalente a las dos anteriores y // el ámbito es myRecord02 myRecord02 { myContent01="abc", myContent02="xyz" }; // Esta sentencia de asignación abreviada // restablece los primeros cuatro elementos de la matriz // declarada anteriormente myInteger{6,7,8,9};
La sentencia de asignación abreviada no está disponible para campos en una estructura fija.
Cuando está asignando valores para un campo de un campo, se utiliza una sintaxis en la que el bloque de establecimiento de valor está en un ámbito tal que las entradas solo están modificando el campo de interés.
record myBasicRecPart03 type basicRecord myInt04 INT; end record myBasicRecPart02 type basicRecord myInt03 INT; myRec03 myBasicRecPart03; end record myBasicRecPart type basicRecord myInt01 INT; myInt02 INT; myRec02 myBasicRecPart02; end
La sintaxis para asignar un valor de propiedad puede tener tres formas, tal como se muestra en los ejemplos siguientes, aplicables al campo myInt04:
// sintaxis con puntos, tal como se describe en // Referencias a variables en EGL. myRecB myBasicRecPart { myRec02.myRec03.myInt04{ align = left } }; // sintaxis con corchetes, tal como se describe en // Sintaxis con corchetes para acceso dinámico. // No puede utilizar esta sintaxis para // campos en estructuras fijas. myRecC myBasicRecPart { myRec02["myRec03"]["myInt04"]{ align = left } }; // sintaxis con llaves myRecA myBasicRecPart { myRec02 {myRec03 { myInt04 { align = left }}} };
// sintaxis con puntos myRecB myBasicRecPart { myInt01 = 4, myInt02 = 5, myRec02.myRec03.myInt04{ align = left }, myRec02.myInt03 = 6 }; // sintaxis con corchetes myRecC myBasicRecPart { myInt01 = 4, myInt02 = 5, myRec02["myRec03"]["myInt04"]{ align = left }, myRec02["myInt03"] = 6 }; // sintaxis con llaves; // aunque esta utilización es mucho más difícil de mantener myRecA myBasicRecPart { myInt01 = 4, myInt02 = 5, myRec02 { myRec03 { myInt04 { action = label5 }}, myInt03 = 6 } };
En una declaración de variable o una sentencia de asignación, puede tener un contenedor (como por ejemplo un registro SQL) que incluya un campo (como por ejemplo keyItems) cuyo nombre coincida con el de una propiedad de registro. Para referirse al campo en lugar de a la propiedad, utilice this, que establece el ámbito correcto para el bloque de establecimiento de valor o para una entrada en el bloque de establecimiento de valor.
Record ExampleRecordPart type SQLRecord { tableNames = [["myTable"]], keyItems = ["myKey"] } myKey CHAR(10); myOtherKey CHAR(10); keyItems CHAR(60); end
myRecord ExampleRecordPart { keyItems = ["myOtherKey"], this.keyItems = "abc" };
La sección siguiente proporciona un ejemplo adicional en una declaración de matriz.
col1 ConsoleField[5];
col1 ConsoleField[5] { position = [1,1], color = red };
// asignar valores al segundo y cuarto elemento col1 ConsoleField[5] { this[2] { color = blue }, this[4] { color = blue } };
Para conocer más detalles acerca de la utilización de la palabra clave this, consulte la sección Ámbito de reglas y "this" en EGL.
new Menu { labelText = "Universe", MenuItems = // valor de propiedad es una matriz dinámica [ new MenuItem { name = "Expand", labelText = "Expand" }, new MenuItem { name = "Collapse", labelText = "Collapse" } ] }
Para repasar una sintaxis que constituye una ampliación de lo anterior, fíjese en la propiedad compleja @ProgramLinkData. Esta propiedad incluye los campos de propiedad programName y linkParms; linkParms toma una matriz de campos de propiedad, cada uno de la propiedad compleja @LinkParameter.
DataItem Prog1LinkItem char(9) { @ProgramLinkData { programName = “my.company.sys1.PROG1”, linkParms = [ @LinkParameter {name=“parm1”, value=”abc”}, @LinkParameter {name=”parm2”,value=”efg”} ] } } end
DataItem Prog1LinkItem char(9) { @ProgramLinkData { programName = “my.company.sys1.PROG1”, linkParms = [ @LinkParameter {name=“parm1”, value=”abc”}, @LinkParameter {name=”parm2”,value=”efg”} ] }, displayName = “Go to Program02” } end
Record Point x, y INT; end Record Rectangle topLeft, bottomRight Point; end
Function test() screen Rectangle { topLeft{x=1, y=1}, bottomRight{x=80, y=24} }; // cambie x, y en el código utilizando una sentencia // equivalente al código siguiente: // 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};
En el ejemplo anterior, se utiliza pts[1] en lugar de this[1] porque el nombre de matriz no es ambiguo.
points Point[];
points{x=1, y=1};
points[1]{x=10, y=20};
points.resize(2); points{x=1, y=1};
Conceptos relacionados
Sintaxis de corchete para el acceso dinámico
Visión general de las propiedades de EGL
Referencias a variables en EGL
Reglas de ámbito y "this" en EGL
Consulta relacionada
Matrices
Inicialización de datos
openUI