genexus - intermedio optimizando aplicaciones (by hector zavala rubio)
TRANSCRIPT
1
GeneXus Intermedio.
Optimizando Aplicaciones.
Relator : Héctor Zavala Rubio.
TABLA DEL CONTENIDOTABLA DEL CONTENIDO
PUNTOS IMPORTANTES EN LA DEFINICION DE TRANSACCIONES…………………………...…003
USO Y RECOMENDACIONES EN EL USO DE SUBTIPOS……………………………………....….….038
FORMULAS AGGREGATE SELECT ……………………………………………….. ……………………059
PUNTOS A PROFUNDIZAR EN EL MANEJO DE WORK PANELS ..…………………………...……064
PUNTOS A PROFUNDIZAR EN REPORTES Y PROCEDIMIENTOS ………………………….……..074
IMPACTO Y REORGANIZACION DE LA BASE DE DATOS ……………………………………….…084
INTEGRIDAD TRANSACCIONAL Y CONTROL DE CONCURRENCIA ……………………………124
EFICIENCIA Y PERFORMANCE DE LAS APLICACIONES ..……………………………………….215
ARQUITECTURA DE MULTIPLES CAPAS ………………………………..…….……………..……….135
INTRODUCCION A CLIENTE SERVIDOR ……...…………………………….. ………………..…..…141
INTRODUCCION A PAGINAS WEB …...……...…...…………………………….. ………………………151
2
PUNTOS IMPORTANTES EN LA PUNTOS IMPORTANTES EN LA DEFINICIONDEFINICION
DE TRANSACCIONESDE TRANSACCIONES
Definición de Modos
Modo Inicial
• El modo inicial de un nivel de una Transacción dependede la plataforma y puede ser modificado en cada nivel usando la rule Default_Mode.
3
• Modo UPDATE por defecto• Se puede indicar el modo inicial usando la rule
DEFAULT_MODE• El modo se mantiene hasta cambiar a otro modo
Micro/LAN:
AS/400• El modo para el PRIMER NIVELPRIMER NIVEL se define con:
– DEFAULT_MODE para el nivel
– Sino existen dos casos:
» CON SUBFILE: update
» SIN SUBFILE- No se acepta la Primary Key: update- La Primary Key es aceptada: insert
• Modo para niveles subordinados:– DEFAULT_MODE para el nivel– Sino hereda el modo del nivel inmediatamente superior– En otro caso define igual que para el PRIMER NIVELPRIMER NIVEL
4
Loop Once
•Ningún atributo es aceptado
•La transacción recibe la variable &Mode comoparámetro (Update o Delete)
•La Primary Key se recibe como parámetro:parm(<att1>, …, <attn>);
y
Delete Cascade
• La opción Delete en una Transacción realiza un Delete Cascade del nivel subordinado, al que se esta eliminando.
• Se eliminan sólo aquellos registros incluídos en la estructura de la Transacción que se esta ejecutando.
• Si el nivel subordinado del nivel que se esta eliminando posee un nivel subordinado, el Delete Cascade no es válido.
5
EJEMPLO: Delete Cascade
OrdenOrden de de CompraCompraOrdNro*OrdFchPrvCod PrvNom Tabla OrdenAnaNroAnaNom(PrdCod*PrdDsc OrdCntOrdPrcPrdPrc)
OrdImpTot
EntregasEntregasOrdNro* Tabla EntregasPrdCod*(EntFch* Tabla Entrega1EntImporte)
- Transacción OrdenSe desea eliminar una Orden
- Transacción OrdenSe desea eliminar una Linea de la Orden
- Transacción EntregasSe desea eliminar una Linea de la Orden
Uso de &Mode
• La modalidad de una Transacción puede instanciarse recibiendo como parámetro la variable &Mode de GeneXus.
• Valores válidos para &Mode
'INS' - Insert'UPD' - Update'DLT' - Delete
• El modo recibido en &Mode se aplica al primer nively no se puede cambiar.
• La variable &Mode no puede ser modificada en la Transacción, para poder utilizarla debe ser recibida como parámetro.
6
EJEMPLO: Transacción de pedidos
PedNro*PedFchPrvCodPrvNomPedImpTot
(PrdCod*
PrdDscPedCnt
PrdPrc)
CASO 1: El Identificador se recibe en el atributoparm(PedNro, &Mode ) ;
CASO 2: El Identificador se recibe en una variableparm(&Pednro, &Mode ) ;PedNro = &Pednro IF Update .OR. Delete ;Noaccept(PedNro) IF Update .OR. Delete ;
INVOCANDO A LA TRANSACCION DE PEDIDOS
TRABAJAR CON PEDIDOS
2 = Modificar 4 = Eliminar
Número Fecha Proveedor Total - 001 01/01/92 1 Proveedor Uno 1,000,000- 002 12/03/92 2 Proveedor Dos 234,000- 003 12/12/92 3 Proveedor Tres 500,000
F6 = Ingresar Pedidos
7
Eventos:
Event EnterFor each line
if &Op = '2' // Modificarcall(TPedido,PedNro, 'UPD')
endifif &Op = '4’ // Eliminar
call(TPedido,PedNro, ‘DLT’)endif
endforrefreshEndEvent
Event 'Ingresar Pedidos' 6call(TPedido,0,’INS’)refresh
EndEvent
PUNTOS IMPORTANTES EN LA PUNTOS IMPORTANTES EN LA DEFINICIONDEFINICION
DE TRANSACCIONESDE TRANSACCIONES
Definición de Prompts y Refcalls
8
PROMPTS• Prompt
– La facilidad de prompt despliega todos los valores posibles que pueden ser asignados a foreign keys, permitiendo al usuario seleccionar el valor deseado.
• Autoprompt
– Existe una autoprompt para cada nivel de una transacción que permite visualizar y elegir un registro de la tabla base del nivel de una Transacción.
• Activación según la plataforma:
– Prompt : PC > F4AS/400 > F4
– Autoprompt : PC > Botón de SELECT AS/400 > F16 (Ver)
Refcall('Pgm_Nombre', <Par1>,....<ParN>);
•Esta rule se utiliza para llamar un programa cuando falla el control de integridad referencial para la foreign key indicada.
•Los parámetros <Par1> .. <ParN> pueden ser tanto atributos comovariables.
•Los atributos se deben corresponder con una foreign key .
Rule Refcall
9
Prompt('Pgm_Nombre', <Par1>,....<ParN>);
•Esta rule se utiliza para llamar un programa que permita al usuario seleccionar valores posibles de una lista.
•Los parámetros <Par1> .. <ParN> pueden ser tanto atributos como variables. Si son atributos no tienen porqué formar una FK.
Foreign KeySustituye al Prompt que genera GeneXus por defecto.
Atributos SecundariosSi es uno solo, habilita el F4 sobre el mismo.Si son más de uno, habilita el F4 sobre el primero en la estructura de la transacción.
VariablesSi es una sola, habilita el F4 sobre la misma.Sin son más de una, habilita el F4 sobre la primera en ser aceptada (en lasrules).
Rule Prompt
Reglas para el prompt por defecto
• Los parámetros no instanciados se utilizan como condiciones de búsqueda con >=, con un máximode 8.
• Los parámetros instanciados aparecen como condiciones de búsqueda pero no modificable.
• Los atributos del subfile aparecen de acuerdo al orden en que están en la tabla, si uno excede el tamaño de la pantalla se intenta con el siguiente. El ancho del atributo en la pantalla es el mayor entre el ancho del atributo y su descripción .
10
TRANSACCIONES:
CategoríaCategoría SubCategoríaSubCategoría MovimientosMovimientosCatCod* CatCod* MovNro*CatNom SubCatCod* CatCod
SubCatNom SubCatCod SubCatNomCatNom
TABLAS:
Table Name Attributes Categori *CatCod
CatNom
SubCateg*CatCod *SubCatCod SubCatNom
Movimien *MovNro CatCod SubCatCod
Ejemplo
Table Program Parameters (*) Atributo InstanciadoMovimien WGx0030 MovNroCategori WGx0010 CatCodSubcateg WGx0021 CatCod*, SubCatCod
– WGX0030 es el Autoprompt para la tabla Movimien – WGx0010 es el Prompt para la tabla Categori– WGx0021 es el Prompt para la tabla Subcateg
Prompts generados al especificarla Trn de Movimientos
11
EJEMPLO: Se elimina la Transacción Categoría
Tablas:SubCateg *CatCod
*SubCatCod SubCatNom
Movimien*MovNro CatCod CatNomSubCatCod
Prompts para la Trn de Movimientos:
Table Program ParametersMovimien WGx0030 MovNroSubCateg WGx0020 CatCod, SubCatCod
Se genera un único prompt para la tabla SubCateg.
PUNTOS IMPORTANTES EN LA PUNTOS IMPORTANTES EN LA DEFINICION DEFINICION
DE TRANSACCIONESDE TRANSACCIONES
Disparo de Rules
12
EJEMPLO: Transacción FacturaTransacción Factura
FacId*FacFchCliCodCliNomCliSdoCliDir(PrdCod*PrdDscFacLinCntFacLinPrcPrdPrcPrdStkPrdStkMinFacLinImp)
FacSubTotFacIvaFacTotCal
Reglas:default(FacFch ,today() ) ;error('No hay Stock suficiente') IF PrdStk< 0;subtract(FacLinCnt,PrdStk);
Fórmulas:FacLinImp=FacLinCnt*FacLinPrcFacSubTot = SUM (FacLinImp)FacIva = FacSubTot * 0.22FacTotCal = FacSubTot + FacIva
DISPARO DE RULES
GeneXus se encarga de determinar el orden de Disparo de las reglas según las dependencias de los atributos indicados
– ORDEN DE DECLARACION:
error('No hay Stock suficiente') IF PrdStk < 0;
subtract(FacLinCnt,PrdStk);
– ORDEN DE EVALUACION:
subtract(FacLinCnt,PrdStk);
error('No hay Stock suficiente') IF PrdStk < 0;
GeneXus se encarga de determinar el orden de Disparo de las reglas según las dependencias de los atributos indicados
– ORDEN DE DECLARACION:
error('No hay Stock suficiente') IF PrdStk < 0;
subtract(FacLinCnt,PrdStk);
– ORDEN DE EVALUACION:
subtract(FacLinCnt,PrdStk);
error('No hay Stock suficiente') IF PrdStk < 0;
13
Orden de Disparo
TOT
STOT
IVA
IMP
CANTPRECIO
STOCK
ERROR
FECHASISTEMA
FECHA
0.22
SUM
subtract
.
Cambio en el Orden de Disparo de Rules
•En la mayoría de los casos el orden de disparo de las rules inferido por GeneXus es el deseado. En algunos casos, este orden se puede querer modificar.
•Existen una serie de funciones booleanas llamadas'Transaction Event Functions' que permiten realizar estos cambios.
14
Level(Atributo)
EJEMPLO: No permitir modificar líneas de una Factura
Transacción FacturaTransacción FacturaFacId*CliCod...
( PrdCod*FacLinCntPrdPrcFacLinImp)
...FacTotCal
Regla:Error('No puede modificar la linea') IF Modified() .and. Level(PrdCod);
After(Insert | Update| Delete)
EJEMPLO: Trn ClientesTrn Clientes
CliCod*CliNomCliSdoCliDirCliSts
Llama a un procedimiento que realiza la impresión de los datos del clientey setea el atributo Status.
LLAMADAS INCORRECTAScall('pficha', CliCod) if Insert .and. After(Confirm);call('pficha', CliCod) if Update .and. After(Confirm);
LLAMADAS CORRECTASSi cada uno constituye una UTL:call('pficha', CliCod) if After(Trn) .and. (Insert .or. Update) ;Si ambos programas se consideran una única UTL:call( 'pficha', CliCod) if After(Insert) .or. After(Update);
15
After(Level(Atributo))EJEMPLO:
FacturaFactura__ProveedorProveedor
PrvCod*FacId*...FacTotIng
( PrdCod*FacLinCntPrdPrcFacLinImp)
...FacTotCal=SUM(FacLinImp)
– Rule:Error('El total ingresado no coincide con el total
calculado') IF FacTotIng<> FacTotCal;
TOT CALC
STOT
IVA
IMP
CANTPRECIO
0.22
SUM
After(Level(Atributo))Según el árbol de evaluación cada vez que el importe cambie,cambiará el total calculado.
16
After(Level(Atributo))
Entonces se debe indicar el evento de disparo:
Error('El total ingresado no coincide con el total calculado') if (FacTotCalc <> FacTotIngresado) .and. after(level(PrdCod));
After(Confirm)
EJEMPLO: Numeración Automática
Caso1FacNro = udp(’PNumera’, ‘FAC’) IF insert ;
Caso2FacNro = udp(’PNumera’, ‘FAC’) IF after(insert );
Lo correcto es :FacNro = udp(’PNumera’, ‘FAC’) IF insert .and.
after(Confirm);
17
After(Trn)EJEMPLO 1:
Queremos llamar a Líneas de Factura después de ingresar el Cabezal de la Factura.
CabezalFacturaCabezalFactura LineasFacturaLineasFacturaFacId* FacId*FacDatos (PrdCod*CliCod FacLinCnt
FacLinImp)FacTot
Si se considera el cabezal como una UTL y las líneas como otra UTL.Call ('TLinfac', FacId) IF after(Trn);
Si se considera a ambas como una única UTL.Call ('TLinfac', FacId) IF After(Insert) .or. After(Update);
After(Trn)
– EJEMPLO 2:FacturaFactura ClienteClienteFacId* CliCod*FacFch CliNomCliCod CliSdoCliNom CliDirCliSdoCliDir(PrdCod*PrdDscFacLinCntFacLinPrcPrdPrcPrdStkPrdStkMinFacLinImp)
FacSubTot = SUM(FacLinImp)FacIva = FacSubTot * 0.22FacTot= FacSubTot + FacIva
18
Rules de la trn Facturas:
add(FacTotal, CliSdo);
call('pgmname', CliCod) IF After(Level(PrdCod)); INCORRECTA
call('pgmname', CliCod) IF After(trn); CORRECTA
Reglas que ocurren en el mismo evento
• EJEMPLO 1:
| call(' ') if After(Trn);| | call(' ') if After(Trn);v
• EJEMPLO 2:
| call('pgmname',&var1,&var2,&flag) if After(Confirm);| | error('xx') if After(Confirm) .and. &flag = 'N';v
–Si se invierte el orden de estas reglas, y la validación resulta negativa, el error no se dispara.
19
Eventos en una Transacción de dos niveles
FacId*FacFch ---------> AFTER (FacFch)CliCodCliNomCliSdoCliDir ------> | AFTER (CliDir)(PrdCod* | AFTER(CONFIRM).AND.LEVEL(FacId)PrdDsc | AFTER (INSERT|UPDATE|DELETE)FacLinCnt FacLinPrc PrdPrcPrdStkPrdStkMinimoFacLinImp) --> | AFTER (LEVEL(PrdCod))FacSubTotal | AFTER (TRN)FacIvaFacTotal
USO Y RECOMENDACIONES EN EL USO DE SUBTIPOS
20
USO DE SUBTIPOS
• Consideraciones generales.
– Las relaciones entre atributos GeneXus se establecen a través de los nombres de los mismos, por ello es importante asignarle igual nombre a aquellos que conceptualmente son lo mismo y diferentesa los que no lo son.
– Se dice que el atributo A es SUBTIPO del atributo B si se cumple una dependencia funcional, o sea para cada valor de A existe un solo valor de B y el valor de A es igual al valor de B.
CASOS TIPICOS DE UTILIZACION DE SUBTIPOS
21
A. Atributos conceptualmente iguales que cumplen roles diferentes.
RESERVAS CIUDADESResNro* CiuCod*CiuCod (orig) CiuNomCiuCod (dest)
RESERVAS CIUDADESResNro* CiuCod*CiuCodOri CiuNomCiuCodDes
A. Atributos conceptualmente iguales que cumplen roles diferentes.
• Con la definición de subtipos se establece la siguiente relación:
• Los atributos secundarios de Ciudades pertenecen a la tabla extendida de Reservas pero al existir doble referencia no se pueden utilizar directamente.Se utilizan mediante definición de “grupos de subtipos”.
RESERVAS CIUDADES
22
• Utilización de atributos secundarios del supertipo definiendo atributos subtipos dentro de un grupo
CiuCodOri CiuCod (Origen)CiuNomOri CiuNom (Origen)CiuCodDes CiuCod (Destino)CiuNomDes CiuNom (Destino)
A. Atributos conceptualmente iguales que cumplen roles diferentes.
Definición de Subtipos
23
B. Especialización de atributos• Se definen PrvNro y CliNro como subtipos
EMPRESAS PROVEED CLIENTESEmpNro* PrvNro* CliNro*EmpNom PrvSal CliSalEmpRucEmpTelEmpDir Proved.
Empresas Clientes
B. Especialización de atributos
CliNro subtype of EmpNro group ClienteCliNom subtype of EmpNom group Cliente
PrvNro subtype of EmpNro group ProvPrvNom subtype of EmpNom group Prov
24
C. Evitar controles de integridad referencial
Historico de Compras ProductosPrvCod* PrdCod*PrvNom PrdTxtPrdCod*PrdTxtHisCnt
Ordenes de Compra ProveedoresOrdCmpNro* PrvCod*PrvCod PrvNomPrdCod
Historico de Compras ProductosPrvCod* PrdCod*PrvNom PrdTxtPrdCod*PrdTxtHisCnt
Ordenes de Compra ProveedoresOrdCmpNro* PrvCod*PrvCod PrvNomPrdCod
C. Evitar controles de integridad referencial
25
PrvCod* PrvNomPrdHisCod* (Subtipo de PrdCod)PrdHisTxt (Subtipo de PrdTxt)HisCnt
OrdCmpNro* PrvCodPrdCod
C. Evitar controles de integridad referencial
C. Evitar controles de integridad referencial
Historico de Compras ProductosPrvCod* PrdCod*PrvNom PrdTxtPrdHisCod*PrdHisTxtHisCnt
Ordenes de Compra ProveedoresOrdCmpNro* PrvCod*PrvCod PrvNomPrdCod
26
TABLA EXTENDIDA- HERENCIA
• Subtipos Simples.Los subtipos heredan todos las propiedades del Supertipo.(ProvNro y CliNro son subtipos de EmpNro)EMPRESAS PROVEEDORES CLIENTESEmpNro* ProvNro* CliNro*EmpNom EmpNom EmpNomEmpRuc ProvSdo CliSdoEmpTelEmpDir
• En este ejemplo, EmpNom sólo va a estar almacenado en la tabla de empresas
TABLA EXTENDIDA-HERENCIA
• Subtipos múltiplesSECCIONESDptoCod* tabla DepartDptoNom(SeccCod* tabla SeccionSeccNom)
EXPEDIENTEExpNro* tabla ExpedDptoCodIni ST de DptoCodSeccCodIni ST de SeccCodDptoCodAct ST de DptoCodSeccCodAct ST de SeccCod
27
TABLA EXTENDIDA-HERENCIA
DptoCod*SeccCod*SeccNom
ExpNro*DptoCodIniSeccCodIniDptoCodActSeccCodAct
TABLA EXTENDIDA- HERENCIA
CONSIDERACIONES SI NO SE DEFINEN GRUPOS
• Cantidad innecesaria de índicesDptoCodIni SeccCodIniDptoCodAct SeccCodActDptoCodIni SeccCodActDptoCodAct SeccCodIni
• Necesidad de poner las reglas NoCheck y NoRead en los objetos GeneXus
28
TABLA EXTENDIDA- HERENCIA
DptoCodIni ST DptoCod group InicialSeccCodIni ST SeccCod group Inicial
DptoCodAct ST DptoCod group ActualSeccCodAct ST SeccCod group Actual
Se define relacion solo entre el grupo.Se definen solo los indices necesarios para definir los
grupos.
TABLA EXTENDIDA-HERENCIA
DptoCod*SeccCod*SeccNom
ExpNro*DptoCodIniSeccCodIniDptoCodActSeccCodAct
29
Consideraciones•El subtipo y supertipo serán definidos del mismo tipo, GeneXus lo determina así y cuando se quiere definir un subtipo este "hereda" la definición del supertipo.
•El supertipo debe ser identificador en alguna transacción o al menos algún atributo del grupo.
•Si al definir el grupo, uno de los atributos inferidos queda como secundario ( S ), es porque hubo un error en la definición del grupo.
•No es aconsejable incluir subtipo y supertipo en la misma transacción, ni tampoco en la misma tabla extendida.
•Los subtipos no pueden participar en la definición de Combo Box, ni Dynamic Combo Box.
Consideraciones
• No se pueden actualizar los subtipos inferidos (Add, Subtract) -
• No se pueden definir redundantes los subtipos inferidos -– Ejemplo: CiuNomOrig
• Se pueden definir subtipos de subtipos, pero no se infieren los subtipos de subtipos inferidos, sólo son válidos para los primarios.
– Ejemplo: CliNro subtype of EmpNro grupo ClienteCliNom subtype of EmpNom grupo Cliente
CliCred subtype of CliNro grupo CliCreNO SE PUEDE CliCredNom subtype of CliNom grupo CliCred
30
FORMULAS AGGREGATE SELECT
Consideraciones
• Las tablas involucradas en la fórmula son:– La tabla en la que está definido el atributo fórmula
(Tabla de Partida)– La tabla extendida de la tabla de partida.– La tabla en la que se busca (Tabla de Llegada).
• No se pueden utilizar atributos de la tabla extendidade la Tabla de Llegada.
– En caso de ser necesario, la solución es definirse como redundantes (en la Tabla de Llegada) a dichos atributos.
31
Sintáxis:
ATT = FIND(<At de retorno>, <Condicion de búsqueda>, <Val.def>) if <Condición de disparo>
FUNCION FIND
FIND RECURSIVO
Se llaman finds recursivos a aquellos que para resolverse recorren la misma tabla sobre la que esta definida la fórmula.
EJEMPLO:
MovNro* MovFch BcoIdMovNroCheMovImpCheFndNroChe MovNroAux BcoIdAuxMovNroCheAuxMovFndOtroChe = Find(MovNro, BcoId= BcoIdAux .and.
MovNroChe = MovNroCheAux .and. MovNro<>MovNroAux, 0)
32
FIND RECURSIVO
Se llaman finds recursivos a aquellos que para resolverse recorren la misma tabla sobre la que esta definida la formula.
EJEMPLO:
MovNro* MovFch BcoIdMovNroCheMovImpCheFndNroChe MovNroAux = MovNroBcoIdAux = BcoIdMovNroCheAux = MovNroChe MovFndOtroChe = Find(MovNro, BcoId= BcoIdAux .and.
MovNroChe = MovNroCheAux .and. MovNro<>MovNroAux, 0)
Debido a que: al navegarla misma Tabla, sedeben cargar en otros atributos los valores delregistro de partida para poder efecturarla comparación en la búsqueda contra los valores delregistro de llegada.
PUNTOS A PRODUNDIZAR EN EL MANEJO DE WORK PANELS
33
DETERMINACION DE LA TABLA BASE DE UN WORK PANEL
• PANEL A PARTIR• EVENTOS DE LOS • REGLAS ATRIBUTOS
PANEL– TODO ATRIBUTO QUE INTERVENGA EN EL PANEL
EVENTOS– TODO ATRIBUTO QUE ESTE FUERA DE UN GRUPO FOR
EACH
REGLAS– TODO ATRIBUTO QUE ESTE EN UNA REGLA
» HIDDEN( )» ORDER( )
Trn ProductosProdId* Tabla: PRODUCTOProdDsc
Trn FacturasFacNro* Tabla: FACTURAFacFech
(FacLinNro* Tabla: FACTURA1ProdIdProdDsc FacLinCnt)
Ejemplo:
34
Work Panel de Selección de Productos
Rules parm(&V15 ) ;order(ProdId ) ; Event EnterConditions &V15 = ProdIdProdId >= &C15 ; ReturnProdDsc .LIKE. &C16 ; EndEvent
Work Panel de Selección de Productos
Parameters : &V15FOR EACH PRODUCTO
Order : ProdIdIndex : IPRODUCTNavigation filters:
Start from:ProdId >= &C15
Loop while:Not end of table
Constraints:ProdDsc .LIKE. &C16
---->> PRODUCTO ( ProdId ) TABLA BASE PRODUCTOEND FOR
35
WORK PANELS SIN TABLA BASE
Ejemplo: Mostrar para cada cliente el total facturado, pero sólo de los clientes que tienen facturas.
Event Loadfor each CliIddefined by FacFch
&cli =CliNom&tot =0for each
&tot =&tot +FacTotal
endforload
endfor EndEvent
NAVEGACION WORK PANELSSIN TABLA BASEEVENT Load
FOR EACH FACTURAOrder : CliIdIndex : CLIFCHNavigation filters:
Start from:First record
Loop while:Not end of table
---->> FACTURA ( FacId )+-----> CLIENTES ( CliId )
BREAK FACTURAOrder : CliIdNavigation filters:
Loop while:CliId = CliId
---->> FACTURA ( FacId )END FOR
END FOREND EVENT
36
WORK PANELS SIN TABLA BASE
- Todas las navegaciones se deben hacer en forma explícita,utilizando comandos For Each dentro de los eventos.
- El EVENTO LOAD sucede una sola vez al Inicio.
- Se hace un Load All del subfile.
- El cambio de variables que esten en la parte fija del panel , asociadas a
Conditions no dispara Refresh.
•Todos los For Each que se encuentran en los eventosLOAD, ENTER y de USUARIO se anidan al for each de la tabla base.
•Los For Each que se encuentran en los eventos START, REFRESH y EXIT no se anidan al for each de la tablabase.
Corte de ControlPara determinar un corte de control en un work panel con tabla base el criterio del corte hay que establecerlocon la rule: order (att1,..,attn)
Consideraciones
37
WORK PANELS / INTEGRIDAD BASE DATOSWORK PANELS - PROCS
INSWKP PROCS UPD
DELIMPLEMENTACION MANUAL DE LOS
CONTROLES INTEGRIDAD
WORK PANELS - TRNINS
WKP TRN UPD DEL
IMPLEMENTACION AUTOMATICA DE LOS CONTROLES INTEGRIDAD (objeto-acción)
PUNTOS A PROFUNDIZAR EN REPORTES Y PROCEDIMIENTOS
38
Fórmulas en Procedimientos
• Fórmulas no redundantes– Se calculan en todos los objetos que se utilizan. En un
procedimiento, se calculan con el valor que tiene el registro el el momento de leerlo, no luego que se actualiza
• Fórmulas redundantes– No se actualizan. Hay que calcularlas y actualizarlas en forma
manual.
New en la misma tabla del For Each
• New siempre se ejecuta por la clave primaria – Por lo tanto si el new esta dentro de un For Each con la misma
tabla base del New hay que tener en cuenta el orden utilizado en el For Each.
• Tabla recorrida por dos ordenes diferentes sólo es inválido para generadores xbase .
• Inferencia: Atributos instanciados por el For Each y no instanciados especificamente en el New son inferidos para la inserción del registro.
39
New en la misma tabla de For EachTabla de Medicos Tabla de ConsultaMedCod* TurFch*MedNom TurCod*EspCod MedCod*EspDsc ConNro
Sustituira un medico por otroProgram Source for test------For Each
where MedCod = &medoridefined by ConNro
newMedCod = &medsus
endnewdelete
Endfor
New en la misma tabla de For EachFOR EACH CONSUL
Order : TurFch, TurCod , MedcodIndex : I00301Navigation filters:
Start from:First record
Loop while:Not end of table
Constraints: Medcod = &Medori
---->> CONSU: ( TurFch, TurCod , Medcod )¦+-----> T0001 ( Medcod )
NEW MEDICO ------- > NO ES LA TABLA DESEADAKey : Medcod
---->> +MEDICO ( Medcod )Insert into MEDICO : Medcod, MedNom
END NEWEND FOR
La Tabla Base del New se infiere sólo
por los atributos utilizados dentro
del New
40
New en la misma tabla de For Each
SOLUCION:
Program Source for test------For Each
where MedCod = &medoridefined by ConNro
&ConNro = ConNronew
MedCod = &medsusConNro = &ConNro
endnewdelete
Endfor
New en la misma tabla de For Each
Una vez determinada la correcta tabla base indicamos que los atributos inferidos son:TurFch, TurCod.
ConNro y MedCod son nombrados explicitamente dentro del New.
FOR EACH CONSULOrder : TurFch, TurCod, MedcodIndex : I00301Navigation filters:
Start from:First record
Loop while:Not end of table
Constraints: Medcod = &Medori
---->> CONSUL ( TurFch, TurCod, Medcod )NEW CONSUL
Key : TurFch, TurCod, Medcod---->> +CONSUL ( TurFch, TurCod, Medcod )Insert into CONSUL :
TurFch, TurCod, Medcod, ConNroEND NEW
END FOR
41
New en la misma tabla de For Each
• Dos ordenes distintos para la misma tablaResultado de la navegación en todos los generadores excepto en XBASE:
FOR EACH CONSULOrder : MedcodIndex : I00303Navigation filters:
Start from:Medcod = &Medori
Loop while:Medcod = &Medori
---->> CONSUL ( TurFch, TurCod , Medcod )
NEW CONSULKey : TurFch, TurCod, Medcod
---->> +CONSUL ( TurFch, TurCod, Medcod )Insert into CONSUL :
TurFch, TurCod, Medcod, ConNroEND NEW
END FOR
New en la misma tabla de For Each
• Dos ordenes distintos para la misma tablaEN XBASE:Procedure Pcambia: cambia----------------------------------------------------------------
(x) The program will not be generated ***********************
Error: table CONSUL with two different ordersOutput device: NONE
FOR EACH CONSULOrder : MedcodIndex : I00303Navigation filters:
42
Restricciones en la Actualización• No se puede realizar ninguna actualización en
un For Each que recorre una tabla por índicetemporal
– En ese caso se debe construir el índice de usuario o elegir otro orden por un índice existente
• No se puede actualizar ningún atributo del índice que se esta utilizando en el For Each
• (XBase) Se pierde el puntero al actualizar atributos de un índice que se esta utilizando en el programa llamador.
For Each A B C For Each defined by C defined by Ccall(‘rprog2,A,&nuevo) B = & nuevo
Endfor Endfor
IMPACTO Y REORGANIZACION DE LA BASE DE DATOS
43
Impacto de la base de datos
• Impact Database
• Impact From
• Impact Objects
• Restore Model
Creación de la Base de datosTable FACTURA conversion procedure
----------------------------------------------------------------
FACTURA is new
Table Structure:
FacNro* N(3)
FacFch D(8)
Table FACTURA1 conversion procedure
----------------------------------------------------------------
FACTURA1 is new
Table Structure:
FacNro* N(3)
FacLinNro* N(2)
FacImpLin N(10.2)
44
Impacto de la Base de datos
Table FACTURA conversion procedure----------------------------------------------------------------
Table Structure:FacNro* FACTURA N(3)FacFch FACTURA D(8)CliCod (New) (Null) N(2)
Table CLIENTES conversion procedure----------------------------------------------------------------
CLIENTES is newTable Structure:
CliCod* N(2)CliNom C(20)
Casos particulares de reorganización
• Fórmulas que dejan de serlo.
• Sacar atributos de la llave.
• Indice contenido en otro.
Reorganizaciones en más de un paso para no perder los datos:
• Como cambiar un supertipo por un subtipo .• Agregar un atributo nuevo a la clave de una tabla.• Pasar un atributo del cabezal a las líneas.• Crear un atributo fórmula y definirlo redundante.
45
Reorganización en AS/400
• Se genera en PC y se transfiere al AS.
• Son 8 pasos con retoma
• Bloqueo de información
• Se genera SAVF• GXIMPDBR
• Data areas
Reorganización en PC/CS
• MENU y RMENU
• Setup Wizard (Exportación )
46
Recomendaciones finales
• Siempre antes de hacer una reorganización hacer un respaldo.
• GeneXus no borra las tablas con datos que deja de utilizar. Esto permite recuperar estos datos en el caso en que fuese necesario.
INTEGRIDAD TRANSACCIONAL Y
CONTROL DE CONCURRENCIA
47
Conceptos Teóricos
• Control de Concurrencia
• Tipos de Diálogo
– Conversacional
– Pseudo Conversacional
• Integridad Transaccional
• Unidad de Trabajo Lógico (UTL)
• Control de Concurrencia:– controles para evitar inconsistencias en
los datos cuando se trabaja en ambiente multiusuario
Conceptos Teóricos
48
• Diálogo Conversacional– Esquema:
1. aceptar datos
2. validar usando locks
3. pedir confirmación
4. actualizar la base de datos
5. liberar locks
Conceptos Teóricos
• Diálogo Pseudo Conversacional1. aceptar datos
2. validar
3. pedir confirmación
4. lockear los datos y validar que no hayan sido modificados
5. si los datos no cambiaron actualizar la BD y liberar los locks
6. sino informar al usuario que los datos fueron cambiados.
Conceptos Teóricos
49
• Integridad Transaccional
– Un conjunto de actualizaciones a la base de datos tiene integridad transaccional cuando en caso de una finalización anormal la base de datos permanece en estado consistente.
Conceptos Teóricos
• Unidad de Trabajo Lógica (UTL)
– Conjunto de operaciones a la base de datos que deben ejecutarse todas o ninguna de ellas.
- El DBMS mantiene la integridad transaccional y los programas indican el comienzo y fin de la UTL.
Conceptos Teóricos
50
• Control de Concurrencia– Locks
– Ambiente Client/Server
– Ambiente Centralizado
• UTL• Integridad Transaccional
Enfoque GeneXus
• ¿Cómo funcionan los locks en GeneXus?
• Solo Lectura: no lockea ni es afectado por los locks de los otros programas, salvo con los locks exclusivos.
• Lectura/Escritura: lockea y es afectado por los locks de otros programas.
Control de Concurrencia
51
• Consideraciones por DBMS en la lectura:
– AS/400, DB2/400 y SQL Server: leen la última información grabada y no commiteada
– Informix y DB2/Common Servers: los programas no ven los cambios efectuados por otros usuarios quedando lockeados hasta que se realice un commit (read committed).
– Oracle: lee los últimos datos commiteados.
Control de Concurrencia
Preferences del Modelo
–Pseudo Conversational Dialog
–Lock Mode
– Isolation Level
Concurrencia en Client/Server
52
• Pseudo Conversational Dialog
• Valores:
–Use Conversational Dialog
–Check Updated Tables only (*)
–Check all accessed tables
Concurrencia en Client/Server
Co
nv
er
sa
ci
on
al
Grabar BD
Eventos AfterIns/Upd/Del
Commit
EventoAfter(confirm)
PedirConfirmación
Validardatos
ObtenerDatos
Confirma?Evento
After(TRN)
Deslockear
Lockear
Tipos de Diálogo
53
•
Pseud
o Co
nvers
acion
al
Grabar BD
Eventos AfterIns/Upd/Del
Commit
Validar cambios
EventoAfter(confirm)
PedirConfirmación
Validardatos
ObtenerDatos
Confirma?
No hubo cambios?
EventoAfter(TRN)
Deslockear
Lockear
Tipos de Diálogo
• Preference Lock Mode
• Valores:– Do not specify lock level (*)
– Use page level locking
– Use row level locking
• Válida solo para Informix
Concurrencia en Client/Server
54
• Preference Isolation Level
• Valores:– Read Committed (*)
– Read Uncommited
• Válida para todos los DBMSs excepto Oracle y SQL Server
Concurrencia en Client/Server
• Caso Particular: Locks en SQL Server
– SQL Server 6.5
• Lockeo a página en update
• Lockeo a registro en insert configurable
–store procedure: sp_tableoptions
– SQL Server 7.0
• Es posible lockear a registro en insert y update
• Lock Dinámico
Concurrencia en Client/Server
55
• ¿Qué sucede cuando un programa que actualiza la BD encuentra un registro lockeado?
Concurrencia en Client/Server
TransaccionesCuando expira el time-out despliega un mensaje indicando que el registro esta siendo usado por otro usuario. El usuario puede reintentar la operación.
En SQL Server no se despliega mensaje y queda esperando indefinidamente hasta que se libera el registro.
• ¿Qué sucede cuando un programa que actualiza la BD encuentra un registro lockeado?
Concurrencia en Client/Server
Procedimientos
Se intenta indefinidamente la operación hasta que se libera el registro. No despliega mensaje.
56
– Comportamiento en cada DBMS:• Oracle e Informix: instantáneo
• SQL Server: espera indefinidamente
• DB2/Common Servers: configurable para la base de datos
• DB2/400: configurable por tabla.
- Time-outDesde GeneXus no es posible configurarlo
Concurrencia en Client/Server
• Preference Pseudo Conversational Dialog
Valores:– Use Conversational Dialog
– Check Updated Tables only (*)– Check all accessed tables
• Access lockea a página siempre– 256 bytes, no configurable
Concurrencia en Access
57
• UTL en Transacciones
– Por defecto se define el alcance de la UTL como toda la transacción
• UTL en Procedimientos
– Por defecto se define el alcance de la UTL como toda el programa.
• Comandos– Commit
– Rollback
UTL en GeneXus
• Preference del Modelo– Transactional Integrity
• Properties de los objetos:– Commitment
– Commit on Exit
– Confirm Transaction
Integridad Transaccional
58
Integridad Transaccional en Client/Server
• Transactional Integrity• Yes (*)
• No
• File Views • siempre tienen IT o no depedendiendo del valor de
la preference
• Transactional Integrity = No• DB2/400 e Informix desactivan la IT
• El resto de los DBMSs entran en modo autocommit
• Base de datos centralizadas• Todas las tablas en el servidor
• El DBMS asegura la IT
• Base de datos distribuidas• Tablas locales y tablas en el servidor
• No se tiene IT en las tablas locales
Integridad Transaccional en Client/Server
59
• Base de datos Informix– ANSI
• Siempre se trabaja con IT independientemente del valor de la preference Transactional Integrity
– Buffered Logged• Se trabaja con IT dependiendo del valor de la preference
Transactional Integrity, excepto en la reorganización donde no tendrá IT
– Not Logged• No se trabaja con IT independientemente del valor de la
preference Transactional Integrity
Integridad Transaccional en Client/Server
• Properties de los objetos:
–Commitment
–Commit on Exit
–Confirm Transaction
Integridad Transaccional
60
• Commitment– Valores:
• Enabled (*)
• Disabled
• Consideraciones– Válida solo en AS/400
Integridad Transaccional Object Properties
• Ejemplo property Commitment
Commitment=Disabled
Facturas NumeradorIf insert and after(confirm) Tabla
Numeradores
TablaFacturas
Integridad Transaccional Object Properties
61
• Commit on Exit– Valores:
• Yes (*)
• No
• Consideraciones– No es válida si tiene Commitment = Disabled
Integridad Transaccional Object Properties
COMMIT
• Ejemplo property Commit on Exit
Facturas ClienteRefcall(Tcliente, CliCod‘INS’)
Commit on Exit = No
TablaFacturas
TablaClientes
Integridad Transaccional Object Properties
62
• Confirm Transaction– Valores:
• Yes
• No (*)
• Consideraciones– Es válida si tiene
Commitment = Enabled y
Commit on Exit = Yes
Integridad Transaccional Object Properties
DEFINICION Y MANTENIMIENTO DE REDUNDANCIAS
63
Definición de Redundancias
• Redundancia Referencial– Para definición de índices de usuario– Por límites en la definición de una fórmula Aggregate/Select
• Redundancia por Fórmulas – Por optimización de performance en el cálculo de fórmulas
verticales
Mantenimiento de Redundancias
• GeneXus mantiene automáticamente las redundancias definidas
- Transacciones que definen la tabla. Se llama a un programa GXUnnn
• GeneXus genera programas para reconstruir las redundancias a través de:
– La ejecución del Redundancy Load Program Utility(GXLRED)
64
Redundancy load Utility
• Se genera un programa, GXLRED (GeneXus Load Redundancy) que recalcula todas las fórmulas redundantes y las actualiza junto con las redundancias referenciales.
• El programa GXLRED llama a un programa independiente para cada tabla que recalcula todas las redundancias de la tabla.
• Estos programas se pueden llamar en forma independiente o ejecutando el GXLRED.
• En el reporte del análisis de impacto se puede vercual es el programa que calcula las redundancias para una determinada tabla
– El nombre va a ser GXRnn donde nn el número de la tabla:Table Factur load redundancy procedure--------------------------------------------------Redundant attributes: FacTotalProcedure name: GXR24
Redundancy load Utility
65
Mantenimiento a través de Transacciones
• Toda transacción que defina una tabla cuyos atributos secundarios estan definidos redundantes en otras tablas llamará a un programa para actualizar las redundancias
• Programas son creados en las reorganizaciones– GXUnnn donde nnn es el número de tabla
• Actualizan la redundancia de un registro de la tabla. Reciben como parámetro la clave de la tabla.
Consideraciones
• Las fórmulas Aggregate Select no se pueden definir como redundantes (ni ninguna fórmula que dependa de una Aggregate Select).
• Los subtipos no se pueden definir redundantes.• En general, para poder definir como redundante un
atributo que es att= Fórmula1(Fórmula2) => debe definirse primero la redundancia para Fórmula2 para recién después poder definir como redundante att.
• Para cambiar una fórmula redundante primero hay que hacer el UNDO de la redundancia.
66
EFICIENCIA Y PERFORMANCE DE LAS APLICACIONES
Tips de optimización• New con When duplicate vs. For each con New.New &Existe=‘N’
Cliente=X For each Saldo =Y Where Cliente=X
When duplicate Saldo=YFor each &Existe=‘S’
Saldo=Y EndforEndfor If &Existe=‘N’
Endnew NewCliente=XSaldo= Y
EndnewEndif
67
Tips de optimización
• Utilización del operador LIKE
En AS/400 con índice temporal es el mejor caso(OPNQRYF).
En PC no importa si existe o no el índice, siempre se usa eloperador $.
En C/S lo resuelve el DBMS sobre el índice si existe y sinolo crea.
Tips de optimización
• Las funciones no se optimizan.For each order Fechawhere Fecha=Today()
…….endfor
For each order Fechawhere Fecha=&today
…….endfor
68
ARQUITECTURA DE MULTIPLES CAPAS
Varios generadores por modelo
• Generadores del Modelo
• Generador por Objeto
• Generador C/SQL
69
Generadores del Modelo• Generador para la Reorg. (el que existía )
– Usado para creación y reorganización de la base de datos.
– File/Edit Model/Generator
• Generador por Default para los objetos– En un principio coincide con el de la Reorg.,
pudiéndose elegir otro.– File/Edit Model/Tab de “Generators”
• Generadores secundarios– File/Edit Model/Tab de “Generators”
• Se controlan combinaciones válidas
Generador por Objeto
• Definir en cada objeto Main el generador a utilizar.– Opción: Information/Tab de Options/Generator
70
Cómo decide GX el generador para cada objeto ?
• Objetos Main– Por defecto se generan con el generador Default.
– Si se quiere generar con otro generador:• Information/Tab de Options/Generator
• Objetos no Main– Se utilizan los generadores de los objetos Main que
lo llamen (directa o indirectamente).
• Object /Information/Options/Generated for
Cuando se generan Call externos? • Cuando un objeto X llama a un objeto Y, se
asume que ambos se encuentran en el mismo generador. Sin embargo, si el objeto Y es Main
se asume que se debe llamar a un programa externo.
• Dos casos:– X y Y en el mismo ambiente
se genera un llamado externo LOCAL
– X y Y en distinto ambiente
se genera el RPC (Remote Procedure Call) necesario
71
INTRODUCCION A INTRODUCCION A CLIENT/SERVERCLIENT/SERVER
Qué esQué es C/S ? C/S ?
El concepto de Client/Server se refiere a una distribución de procesos: el proceso cliente y el proceso servidor, que se conectan mediante algún método de comunicación entre procesos.
Es decir, se realiza una distribución de procesos y de datos, con el fin de optimizar el uso de los recursos de un determinado sistema.
73
Client / File ServerClient / File Server
Red
FILE /SERVER
Server
Archivos
ClientesServidorde Datos
Client / Database ServerClient / Database Server
Red
Server
Data Base
Servidorde Base de Datos* Datos* Lógica
Clientes
74
Arquitectura Client / Database Server
• Disminuye fuertemente el tránsito en la red, en comparación con Client / File Server.
• Permite mantener una integridad transaccional completa.
Qué obtienen los usuarios GXde Client/Server ?
• Acceso a última tecnología sin necesidad de incurrir en altos costos de entrenamiento
• Plataformas y bases de datos:
• Uso de PC’s para bajar los requerimientos del procesador central
Oracle Múltiples plataformas (Unix,Windows, Novell, etc.).
SQL Server Windows NT y Alpha
DB2 CommonServers
Múltiples plataformas (Unix,Windows, etc.)
DB2/400 AS/400
Informix Múltiples plataformas (Unix,Windows, etc.)
75
Model Properties
• Tables in Server
• Local Tables
• Connect to Server
• Data Source Name
Consideraciones para GX C/S•Preference para que las consultas se resuelvan en el Server.
•Outer Join -> Es posible generar con Outer Join para: Oracle, DB2/400, DB2 Common Servers e Informix.
•Grupo de Preferences: “Optimization”:•Delete groups•Aggregate groups•Copy Table groupsDisponible en C/S VB, C/S Foxpro, C/SQL y Java.
•Condiciones conectadas con OR pueden ser optimizadas por el DBMS (UNION).
•Es posible ordenar por atributo de la tabla extendida.
76
INTRODUCCION A INTRODUCCION A PAGINAS WEBSPAGINAS WEBS
Web
• Páginas gráficas con hipertexto• Dos tipos fundamentales:
– Páginas estáticasHTML standard.Generación con algunas herramientas.
– Páginas dinámicasGeneXusASP···
77
Web - Páginas Estáticas • Información general• Marketing• Información similar a la que se distribuye en
folletos y documentos• Acceso rápido y cómodo a información• Direcciones de correo electrónico para
información y soporte• Mantención de alto costo• Sin valor agregado
Web - Páginas Dinámicas
• Interactivas: Comunicación de ida y vuelta
• Interactúan con la base de datos (Access, Oracle, DB2, Informix, SQL Server)
• Actualización automática en GeneXus
• Entregan información según el requerimiento
• Elementos técnicos diferenciadores
78
Páginas Dinámicas - Ejemplos
• Home Banking
• Divulgación de información (con y sin costo)
• Comunicación con proveedores
• Intranet (Información dentro de la empresa)
• Intercambio de datos y documentos
• VENTA DIRECTA
Páginas Estáticas y Dinámicas
Páginas Páginas EstáticasEstáticas
PáginasPáginasDinámicasDinámicas
Web Page EditorsWeb Page Editors GeneXusGeneXus
WWW WWW -- World Wide WebsWorld Wide Webs
79
protocol://host/path/filename[?parm1,…,[parmn]]protocol:
Especifica el protocolo de acceso. Ejemplos: file, ftp, http, telnet
host:Nombre del host al cual deseamos conectarnos.Ejemplo: www.artech.com.uy
path/filename:Ubicación y nombre del documento en el servidor
[parm1,...,[parmn]]Información opcional para consultas
URL
Protocolo HTTP
Conexión/Solicitud
Respuesta/Cierre
80
<HTML><HEAD><TITLE>Esta es mi primera página</TITLE></HEAD><BODY>Esto muestra de una forma muy <I>simple</I>,la estructura básica de un documento HTML.</BODY></HTML>
HTML
81
Respues
tade
l
Progra
maCGI
CGI
Browser WWW(cliente)
Servidor
APLICACION
Someter un form
Call C
GI
��
�FORM
Respuesta delPrograma CGI
INTERNET
Cliente : BROWSER
NetScape, MS Internet Explorer
Servidor : WEB SERVER
Microsoft Internet Information Server
Netscape Server
LinksPáginasHTML
82
Web Browser
TopologíaTopología
ServidorServidor WebWebWindows NTWindows NTUNIXUNIXAS 400AS 400
ServidorServidor de de Base de Base de DatosDatosDB2, Informix, DB2, Informix, Microsoft SQL Server, Microsoft SQL Server, Oracle, AccessOracle, Access
Intranet
Internet
Web Browser
Web Servers
• Windows NT– Microsoft Internet
Information Server
– Netscape
• UNIX– Netscape
– Oracle
• AS/400– IBM
• Windows 95– WebSite Professional
– Fnord
– Personal Web Server (FrontPage 97 y 98)
83
WEB PANELS
• Interacción con la Base de Datos
• Interfase similar a Work Panel
• Desarrollo Inmediato
• Mantención bajo el mismo esquema de una aplicación tradicional GeneXus
Web Panels VS. Work Panels• El evento ENTER es el único al que se le puede
asignar un botón y en él las variables cuyos valores ingresó el usuario son transferidas al programa
• No pueden asignarse teclas de función a eventos
• El evento Refresh y Exit no están implementados
• La ergonometría puede ser diferente
84
Web Panels VS. Work Panels
• Algunas propiedades deben setearse desde código
• Algunas propiedades de objetos no están implementadas o no funcionan
• El display final no corresponde necesariamente con el de diseño
• No se han implementado todos los controles de Windows
• El tamaño de pantalla no está limitado a una resolución en particular
Web Panels VS. Work Panels
• Siempre se hace loadAll– Se puede programar paginación a pedido
• No pueden realizarse llamadas a programas que tengan salida: De un Web Panel solamente puede llamarse a otro Web Panel o a un Procedimiento que no tenga salida.– Tener en cuenta que el programa se está
ejecutando en el servidor !
86
Son permitidos call’s a (botones y eventos):
• Otros Web Panels o a sí mismo• Procedimientos
Son permitidos link’s a (Subfiles y labels):
• Web Panels• Páginas HTML estáticas
Algunas características de losWeb panels
Código embebido:
• HtmlEj.:Event Start
&FORMATO='<Font face=Arial Size="2" Color="#000000"> <Strong>'
&codcsw=concat(&formato, codssw,'')EndEvent
Permite modificar aspecto de controles del Web panel, cuando no se pueda hacer directamente con GeneXus.
87
• JavaScript
Ej.:Event Start
&c=‘<Script lenguage=“JavaScript”> alert(“Bienvenido a nuestra página Web”)</script>’
mensaje.caption=&c
EndEvent
Permite realizar acciones sobre el browser, cuando no se pueda hacer directamente con GeneXus.
Código embebido:
Seguridad
• ¿Es segura mi aplicación en Internet?– ¿es segura la comunicación en Internet?
– ¿quién puede acceder a mi base de datos?
– ¿quién puede acceder a mi aplicación?
88
Seguridad a nivel de Web Server
• Criptografía
• Solución: servidores seguros
Seguridad a Nivel de DBMS
• Como en cualquier aplicación desarrollada con GeneXus
• Dos esquemas de validación:– Sistema operativo
– DBMS
DBMS
89
Seguridad a Nivel de Aplicación
Generación de sesión
Ingreso de usuario
Login Registro
Sesión, cliente
Operación
Sesión, cliente
Validación
Sesión, cliente
Generadores - Servidores
DBMSVB Access, Oracle, MS SQL Server, Informix, DB2 (NT, RS/6000, OS/2)C/SQL Oracle, MS SQL Server, DB2/6000RPG AS/400
Windows NT UNIX AS/400C/SQL X
VB X XRPG X X
90
Requerimientos (Visual Basic)•• Servidor Windows 95, NT 3.5 o NT 4.0Servidor Windows 95, NT 3.5 o NT 4.0
– WEB Server– Visual Basic 4.0 32 bits en adelante– Webifce.dll (sólo VB 4.0)
•• Cliente desarrollo Cliente desarrollo GeneXusGeneXus– Visual Basic 32 bits en adelante– Web Browser
•• RED TCP/IPRED TCP/IP
Requerimientos (VB C/S)
• Definir Data Source
• GXCS.INI
• Cliente de Base de datos
• .dll’s Cliente Servidor
• Controles básicos VB (OCX’s).
91
Configuración del Modelo GeneXus
MODEL –PROPERTIES–PREFERENCES–EXECUTION
Model PropertiesModel Properties
92
Model Properties:Model Properties:EXECUTEEXECUTE (VB)(VB)
Model Properties:Model Properties:PREFERENCESPREFERENCES
• GENERAL– VISUAL BASIC VERSION: 4.0 (32 BITS)
• WEB INFORMATION– PROTOCOL SPECIFICATION (sólo para
VB y C/SQL)
• CLIENT SERVER INFORMATION– Connect to Server
– Data Base Name
– Data Source Name