92
1 GeneXus Intermedio. Optimizando Aplicaciones. Relator : Héctor Zavala Rubio. TABLA DEL CONTENIDO TABLA 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

GeneXus - Intermedio Optimizando Aplicaciones (by Hector Zavala Rubio)

  • Upload
    bob

  • View
    1.473

  • Download
    26

Embed Size (px)

Citation preview

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.

72

TiposTipos de Client/ Serverde Client/ Server

–Client / File Server.

–Client / Database Server.

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 !

85

Web panel

Web panel con subfile

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