Documentos de Académico
Documentos de Profesional
Documentos de Cultura
lenguaje GeneXus
Marcos Crispino
http://blog.marcoscrispino.com
marcos.crispino@gmail.com
Descargo de responsabilidad
(disclaimer)
• Son sugerencias, no hay garantía Artech las vaya a tener
en cuenta.
• Ideas tomadas (en su mayoría) de otros lenguajes de
programación.
• Publicadas originalmente en
http://blog.marcoscrispino.com/search/label/sugerencias
Bloques de reglas en transacciones
Ejemplo:
&valor = udp(MyProc)
if SomeAttribute = 1 on AfterValidate;
error('&valor cannot be empty') if &valor.IsEmpty()
and SomeAttribute = 1 on AfterValidate;
Bloques de reglas en transacciones
Sugerencia:
{
&valor = udp(MyProc);
error('&valor cannot be empty') if &valor.IsEmpty();
}
if SomeAttribute = 1 on AfterValidate;
Valor "empty" para atributos con value
range
Dominio ESTADO con valores {'ING', 'ABI', 'CER'}
do case
case &variable = 1
// código para el valor 1 de &variable
case &otra_variable = 2
// código para el valor 2 de &otra_variable
otherwise
// hago algo para los demás valores
endcase
Comando "do case"
if &variable = 1
// código para el valor 1 de &variable
elseif &otra_variable = 2
// código para el valor 2 de &otra_variable
else
// hago algo para los demás valores
endif
Comando "do case"
do case (&variable)
case 1
// código para el valor 1 de &variable
case 2
// código para el valor 2 de &variable
otherwise
// hago algo para los demás valores
endcase
When duplicate para índices unique
Se tiene una tabla con campos [A, B, C, D] con los siguientes
índices:
• primary key [A]
• índices unique [B] y [C, D]
Se tiene un for each que actualiza la tabla:
for each
where A = &A
B = &B
C = &C
D = &D
endfor
¿Qué pasa si falla por índice duplicado? Hoy da un warning
"spc0070: No When duplicate code found to handle possible
duplicate condition when updating [Atributo]"
When duplicate para índices unique
Sugerencia:
for each
where A = &A
B = &B
C = &C
D = &D
when duplicate B
// código para manejar el valor duplicado en B
when duplicate C, D
// código para manejar duplicados en C, D
endfor
Parámetros opcionales
Ejemplo:
Invocación:
Entonces:
• &par1 = &val1
• &par2 = &val2
• &par3 = &val3
Parámetros nominados
Ejemplo:
Stub FirstMethod(&parm1, &parm2)
&parm1 = 1
&parm2 = 'HOLA'
EndStub
Ejemplo:
&esta = Boolean.False
for &item in &coleccion
if &item.Campo1 = &Var1 and &item.Campo2 = &Var2
&esta = Boolean.True
exit
endif
endfor
SDTs: buscar un elemento en la
colección
Sugerencia:
&esta = Boolean.False
for &item in &coleccion
where &item.Campo1 = &Var1
where &item.Campo2 = &Var2
Se necesita:
• SDTCollection, genérico, que se pueda usar en lugar de
cualquier SDT que sea colección
• SDTItem, genérico, que se pueda usar en lugar de cualquier
SDT de un nivel, por ej. items de SDTCollection
• Acceder dinámicamente a los elementos del SDT
¡Gracias!
Marcos Crispino
http://blog.marcoscrispino.com
marcos.crispino@gmail.com