Vous êtes sur la page 1sur 92

GeneXus Intermedio.

Optimizando Aplicaciones.

Relator : Héctor Zavala Rubio.

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

1
PUNTOS IMPORTANTES EN LA
DEFINICION
DE TRANSACCIONES
Definición de Modos

Modo Inicial

• El modo inicial de un nivel de una Transacción depende


de la plataforma y puede ser modificado en cada nivel
usando la rule Default_Mode.

2
Micro/LAN:

• Modo UPDATE por defecto


• Se puede indicar el modo inicial usando la rule
DEFAULT_MODE
• El modo se mantiene hasta cambiar a otro modo

AS/400
• El modo para el PRIMER 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 NIVEL

3
Loop Once

•La transacción recibe la variable &Mode como


parámetro (Update o Delete)
y

•La Primary Key se recibe como parámetro:


parm(<att1>, …, <attn>);

•Ningún atributo es aceptado

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.

4
EJEMPLO: Delete Cascade

Orden de Compra
OrdNro*
OrdFch
PrvCod
PrvNom Tabla Orden
AnaNro
AnaNom
(PrdCod*
PrdDsc
OrdCnt
OrdPrc
PrdPrc)
OrdImpTot
Entregas
OrdNro* Tabla Entregas
PrdCod*
(EntFch* Tabla Entrega1
EntImporte)
- Transacción Orden
Se desea eliminar una Orden
- Transacción Orden
Se desea eliminar una Linea de la Orden
- Transacción Entregas
Se 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 nivel


y no se puede cambiar.

• La variable &Mode no puede ser modificada en la


Transacción, para poder utilizarla debe ser recibida
como parámetro.

5
EJEMPLO: Transacción de pedidos

PedNro*
PedFch
PrvCod
PrvNom
PedImpTot
(PrdCod*
PrdDsc
PedCnt
PrdPrc)

CASO 1: El Identificador se recibe en el atributo


parm(PedNro, &Mode ) ;

CASO 2: El Identificador se recibe en una variable


parm(&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

6
Eventos:

Event Enter
For each line
if &Op = '2' // Modificar
call(TPedido,PedNro, 'UPD')
endif
if &Op = '4’ // Eliminar
call(TPedido,PedNro, ‘DLT’)
endif
endfor
refresh
EndEvent

Event 'Ingresar Pedidos' 6


call(TPedido,0,’INS’)
refresh
EndEvent

PUNTOS IMPORTANTES EN LA
DEFINICION
DE TRANSACCIONES
Definición de Prompts y Refcalls

7
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 > F4
AS/400 > F4

– Autoprompt : PC > Botón de SELECT


AS/400 > F16 (Ver)

Rule Refcall

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 como


variables.

•Los atributos se deben corresponder con una foreign key .

8
Rule Prompt

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 Key
Sustituye al Prompt que genera GeneXus por defecto.
Atributos Secundarios
Si 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.
Variables
Si 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 las
rules).

Reglas para el prompt por defecto

• Los parámetros no instanciados se utilizan como


condiciones de búsqueda con >=, con un máximo
de 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 .

9
Ejemplo
TRANSACCIONES:

Categoría SubCategoría Movimientos


CatCod* CatCod* MovNro*
CatNom SubCatCod* CatCod
SubCatNom SubCatCod
SubCatNom
CatNom

TABLAS:

Table Name Attributes


Categori *CatCod
CatNom

SubCateg
*CatCod
*SubCatCod
SubCatNom
Movimien
*MovNro
CatCod
SubCatCod

Prompts generados al especificar


la Trn de Movimientos

Table Program Parameters (*) Atributo


Instanciado
Movimien WGx0030 MovNro
Categori WGx0010 CatCod
Subcateg 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

10
EJEMPLO: Se elimina la Transacción Categoría

Tablas:
SubCateg *CatCod
*SubCatCod
SubCatNom
Movimien
*MovNro
CatCod
CatNom
SubCatCod

Prompts para la Trn de Movimientos:

Table Program Parameters


Movimien WGx0030 MovNro
SubCateg WGx0020 CatCod, SubCatCod

Se genera un único prompt para la tabla SubCateg.

PUNTOS IMPORTANTES EN LA
DEFINICION
DE TRANSACCIONES
Disparo de Rules

11
EJEMPLO: Transacción Factura

FacId*
FacFch
CliCod
CliNom
CliSdo Reglas:
CliDir default(FacFch ,today() ) ;
(PrdCod* error('No hay Stock suficiente') IF PrdStk< 0;
PrdDsc subtract(FacLinCnt,PrdStk);
FacLinCnt
FacLinPrc
PrdPrc Fórmulas:
PrdStk
PrdStkMin FacLinImp=FacLinCnt*FacLinPrc
FacSubTot = SUM (FacLinImp)
FacLinImp)
FacSubTot FacIva = FacSubTot * 0.22
FacIva FacTotCal = FacSubTot + FacIva
FacTotCal

DISPARO DE RULES

GeneXus
GeneXusse
seencarga
encargade
dedeterminar
determinarelelorden
ordende
deDisparo
Disparodedelas
lasreglas
reglassegún
segúnlas
las
dependencias
dependenciasde
delos
losatributos
atributosindicados
indicados

–– ORDEN
ORDENDE
DEDECLARACION:
DECLARACION:

error('No
error('Nohay
hayStock
Stocksuficiente')
suficiente')IF
IFPrdStk
PrdStk<<0;
0;
subtract(FacLinCnt,PrdStk);
subtract(FacLinCnt,PrdStk);

–– ORDEN
ORDENDE
DEEVALUACION:
EVALUACION:

subtract(FacLinCnt,PrdStk);
subtract(FacLinCnt,PrdStk);
error('No
error('Nohay
hayStock
Stocksuficiente')
suficiente')IF
IFPrdStk
PrdStk<<0;
0;

12
Orden de Disparo

TOT
FECHA

IVA FECHA
SISTEMA

.
0.22
ERROR
STOT

SUM
STOCK

IMP

subtract

PRECIO CANT

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.

13
Level(Atributo)

EJEMPLO: No permitir modificar líneas de una Factura

Transacción Factura
FacId*
CliCod
...
( PrdCod*
FacLinCnt
PrdPrc
FacLinImp)
...
FacTotCal

Regla:
Error('No puede modificar la linea') IF Modified() .and.
Level(PrdCod);

After(Insert | Update| Delete)


EJEMPLO: Trn Clientes

CliCod*
CliNom
CliSdo
CliDir
CliSts
Llama a un procedimiento que realiza la impresión de los datos del cliente
y setea el atributo Status.

LLAMADAS INCORRECTAS
call('pficha', CliCod) if Insert .and. After(Confirm);
call('pficha', CliCod) if Update .and. After(Confirm);

LLAMADAS CORRECTAS
Si 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);

14
After(Level(Atributo))
EJEMPLO:
Factura__Proveedor
Factura

PrvCod*
FacId*
...
FacTotIng
( PrdCod*
FacLinCnt
PrdPrc
FacLinImp)
...
FacTotCal=SUM(FacLinImp)

– Rule:
Error('El total ingresado no coincide con el total
calculado') IF FacTotIng<> FacTotCal;

After(Level(Atributo))
Según el árbol de evaluación cada vez que el importe cambie,
cambiará el total calculado.

TOT CALC

IVA

0.22

STOT

SUM

IMP

PRECIO CANT

15
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

Caso1
FacNro = udp(’PNumera’, ‘FAC’) IF insert ;

Caso2
FacNro = udp(’PNumera’, ‘FAC’) IF after(insert );

Lo correcto es :
FacNro = udp(’PNumera’, ‘FAC’) IF insert .and.
after(Confirm);

16
After(Trn)
EJEMPLO 1:
Queremos llamar a Líneas de Factura después de
ingresar el Cabezal de la Factura.

CabezalFactura LineasFactura
FacId* 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:
Factura Cliente
FacId* CliCod*
FacFch CliNom
CliCod CliSdo
CliNom CliDir
CliSdo
CliDir
(PrdCod*
PrdDsc
FacLinCnt
FacLinPrc
PrdPrc
PrdStk
PrdStkMin
FacLinImp)
FacSubTot = SUM(FacLinImp)
FacIva = FacSubTot * 0.22
FacTot= FacSubTot + FacIva

17
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.

18
Eventos en una Transacción de dos niveles

FacId*
FacFch ---------> AFTER (FacFch)
CliCod
CliNom
CliSdo
CliDir ------> | AFTER (CliDir)
(PrdCod* | AFTER(CONFIRM).AND.LEVEL(FacId)
PrdDsc | AFTER (INSERT|UPDATE|DELETE)
FacLinCnt
FacLinPrc
PrdPrc
PrdStk
PrdStkMinimo
FacLinImp) --> | AFTER (LEVEL(PrdCod))
FacSubTotal | AFTER (TRN)
FacIva
FacTotal

USO Y RECOMENDACIONES
EN EL USO DE SUBTIPOS

19
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 diferentes
a 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

20
A. Atributos conceptualmente iguales
que cumplen roles diferentes.

RESERVAS CIUDADES
ResNro* CiuCod*
CiuCod (orig) CiuNom
CiuCod (dest)

RESERVAS CIUDADES
ResNro* CiuCod*
CiuCodOri CiuNom
CiuCodDes

A. Atributos conceptualmente iguales


que cumplen roles diferentes.
• Con la definición de subtipos se establece la
siguiente relación:

RESERVAS CIUDADES

• 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”.

21
A. Atributos conceptualmente iguales
que cumplen roles diferentes.
• 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)

Definición de Subtipos

22
B. Especialización de atributos
• Se definen PrvNro y CliNro como subtipos
EMPRESAS PROVEED CLIENTES
EmpNro* PrvNro* CliNro*
EmpNom PrvSal CliSal
EmpRuc
EmpTel
EmpDir Proved.

Empresas Clientes

B. Especialización de atributos

CliNro subtype of EmpNro group Cliente


CliNom subtype of EmpNom group Cliente

PrvNro subtype of EmpNro group Prov


PrvNom subtype of EmpNom group Prov

23
C. Evitar controles de integridad
referencial
Historico de Compras Productos
PrvCod* PrdCod*
PrvNom PrdTxt
PrdCod*
PrdTxt
HisCnt

Ordenes de Compra Proveedores


OrdCmpNro* PrvCod*
PrvCod PrvNom
PrdCod

C. Evitar controles de integridad


referencial

Historico de Compras Productos


PrvCod* PrdCod*
PrvNom PrdTxt
PrdCod*
PrdTxt
HisCnt

Ordenes de Compra Proveedores


OrdCmpNro* PrvCod*
PrvCod PrvNom
PrdCod

24
C. Evitar controles de integridad
referencial
PrvCod*
PrvNom
PrdHisCod* (Subtipo de PrdCod)
PrdHisTxt (Subtipo de PrdTxt)
HisCnt

OrdCmpNro*
PrvCod
PrdCod

C. Evitar controles de integridad


referencial

Historico de Compras Productos


PrvCod* PrdCod*
PrvNom PrdTxt
PrdHisCod*
PrdHisTxt
HisCnt

Ordenes de Compra Proveedores


OrdCmpNro* PrvCod*
PrvCod PrvNom
PrdCod

25
TABLA EXTENDIDA- HERENCIA

• Subtipos Simples.
Los subtipos heredan todos las propiedades del Supertipo.
(ProvNro y CliNro son subtipos de EmpNro)
EMPRESAS PROVEEDORES CLIENTES
EmpNro* ProvNro* CliNro*
EmpNom EmpNom EmpNom
EmpRuc ProvSdo CliSdo
EmpTel
EmpDir

• En este ejemplo, EmpNom sólo va a estar


almacenado en la tabla de empresas

TABLA EXTENDIDA-
HERENCIA
• Subtipos múltiples
SECCIONES
DptoCod* tabla Depart
DptoNom
(SeccCod* tabla Seccion
SeccNom)

EXPEDIENTE
ExpNro* tabla Exped
DptoCodIni ST de DptoCod
SeccCodIni ST de SeccCod
DptoCodAct ST de DptoCod
SeccCodAct ST de SeccCod

26
TABLA EXTENDIDA-
HERENCIA
DptoCod*
SeccCod*
SeccNom

ExpNro*
DptoCodIni
SeccCodIni
DptoCodAct
SeccCodAct

TABLA EXTENDIDA- HERENCIA

CONSIDERACIONES SI NO SE DEFINEN GRUPOS

• Cantidad innecesaria de índices


DptoCodIni SeccCodIni
DptoCodAct SeccCodAct
DptoCodIni SeccCodAct
DptoCodAct SeccCodIni

• Necesidad de poner las reglas NoCheck y NoRead en


los objetos GeneXus

27
TABLA EXTENDIDA- HERENCIA

DptoCodIni ST DptoCod group Inicial


SeccCodIni ST SeccCod group Inicial

DptoCodAct ST DptoCod group Actual


SeccCodAct 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*
DptoCodIni
SeccCodIni
DptoCodAct
SeccCodAct

28
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 Cliente
CliNom subtype of EmpNom grupo Cliente

CliCred subtype of CliNro grupo CliCre


NO SE PUEDE CliCredNom subtype of CliNom grupo CliCred

29
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 extendida


de la Tabla de Llegada.
– En caso de ser necesario, la solución es definirse como
redundantes (en la Tabla de Llegada) a dichos atributos.

30
FUNCION FIND

Sintáxis:

ATT = FIND(<At de retorno>, <Condicion de búsqueda>,


<Val.def>) if <Condición de disparo>

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
BcoId
MovNroChe
MovImpChe
FndNroChe
MovNroAux
BcoIdAux
MovNroCheAux
MovFndOtroChe = Find(MovNro, BcoId= BcoIdAux .and.
MovNroChe = MovNroCheAux
.and. MovNro<>MovNroAux, 0)

31
FIND RECURSIVO
Se llaman finds recursivos a aquellos que para resolverse
recorren la misma tabla sobre la que esta definida la
formula.

Debido a que: al navegarla misma Tabla, se


EJEMPLO: deben cargar en otros atributos los valores del
registro de partida para poder efecturarla
MovNro* comparación en la búsqueda contra los valores del
MovFch registro de llegada.
BcoId
MovNroChe
MovImpChe
FndNroChe
MovNroAux = MovNro
BcoIdAux = BcoId
MovNroCheAux = MovNroChe
MovFndOtroChe = Find(MovNro, BcoId= BcoIdAux .and.
MovNroChe = MovNroCheAux
.and. MovNro<>MovNroAux, 0)

PUNTOS A PRODUNDIZAR EN
EL MANEJO DE WORK PANELS

32
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( )

Ejemplo:

Trn Productos
ProdId* Tabla: PRODUCTO
ProdDsc

Trn Facturas
FacNro* Tabla: FACTURA
FacFech
(FacLinNro* Tabla: FACTURA1
ProdId
ProdDsc
FacLinCnt)

33
Work Panel de Selección de Productos

Rules
parm(&V15 ) ;
order(ProdId ) ; Event Enter
Conditions &V15 = ProdId
ProdId >= &C15 ; Return
ProdDsc .LIKE. &C16 ; EndEvent

Work Panel de Selección de Productos

Parameters : &V15
FOR EACH PRODUCTO
Order : ProdId
Index : IPRODUCT
Navigation filters:
Start from:
ProdId >= &C15
Loop while:
Not end of table
Constraints:
ProdDsc .LIKE. &C16

---->> PRODUCTO ( ProdId ) TABLA BASE PRODUCTO


END FOR

34
WORK PANELS SIN TABLA BASE
Ejemplo: Mostrar para cada cliente el total facturado, pero sólo de los
clientes que tienen facturas.

Event Load
for each CliId
defined by FacFch
&cli =CliNom
&tot =0
for each
&tot =&tot
+FacTotal
endfor
load
endfor
EndEvent

NAVEGACION WORK PANELS


EVENT Load
FOR EACH FACTURA
SIN TABLA BASE
Order : CliId
Index : CLIFCH
Navigation filters:
Start from:
First record
Loop while:
Not end of table

---- >> FACTURA ( FacId )


+----- > CLIENTES ( CliId )

BREAK FACTURA
Order : CliId
Navigation filters:
Loop while:
CliId = CliId
---->> FACTURA ( FacId )
END FOR
END FOR
END EVENT

35
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.

Consideraciones

•Todos los For Each que se encuentran en los eventos


LOAD, 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 tabla
base.

Corte de Control
Para determinar un corte de control en un work panel
con tabla base el criterio del corte hay que establecerlo
con la rule:
order (att1,..,attn)

36
WORK PANELS / INTEGRIDAD BASE DATOS
WORK PANELS - PROCS
INS
WKP PROCS UPD
DEL
IMPLEMENTACION MANUAL DE LOS
CONTROLES INTEGRIDAD

WORK PANELS - TRN


INS
WKP TRN UPD
DEL
IMPLEMENTACION AUTOMATICA DE LOS
CONTROLES INTEGRIDAD (objeto-acción)

PUNTOS A PROFUNDIZAR EN
REPORTES Y PROCEDIMIENTOS

37
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.

38
New en la misma tabla de For Each
Tabla de Medicos Tabla de Consulta
MedCod* TurFch*
MedNom TurCod*
EspCod MedCod*
EspDsc ConNro

Sustituir a un medico por otro


Program Source for test------
For Each
where MedCod = &medori
defined by ConNro
new
MedCod = &medsus
endnew
delete
Endfor

New en la misma tabla de For Each


FOR EACH CONSUL
Order : TurFch, TurCod , Medcod
Index : I00301
Navigation filters: La Tabla Base del
Start from:
First record
Loop while:
New se infiere sólo
Not end of table
por los atributos
Constraints: Medcod = & Medori
utilizados dentro
---->> CONSU: ( TurFch, TurCod , Medcod )
¦ del New
+-----> T0001 ( Medcod )

NEW MEDICO ------- > NO ES LA TABLA DESEADA


Key : Medcod

---- >> +MEDICO ( Medcod )


Insert into MEDICO : Medcod, MedNom

END NEW
END FOR

39
New en la misma tabla de For Each

SOLUCION:

Program Source for test------


For Each
where MedCod = &medori
defined by ConNro
&ConNro = ConNro
new
MedCod = &medsus
ConNro = &ConNro
endnew
delete
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 CONSUL


Order : TurFch, TurCod, Medcod
Index : I00301
Navigation 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 , ConNro
END NEW
END FOR

40
New en la misma tabla de For Each

• Dos ordenes distintos para la misma tabla


Resultado de la navegación en todos los generadores excepto en XBASE:
FOR EACH CONSUL
Order : Medcod
Index : I00303
Navigation filters:
Start from:
Medcod = & Medori
Loop while:
Medcod = & Medori

---- >> CONSUL ( TurFch, TurCod , Medcod )

NEW CONSUL
Key : TurFch, TurCod, Medcod

---->> +CONSUL ( TurFch, TurCod, Medcod )


Insert into CONSUL :
TurFch, TurCod, Medcod , ConNro
END NEW
END FOR

New en la misma tabla de For Each

• Dos ordenes distintos para la misma tabla


EN XBASE:
Procedure Pcambia: cambia
----------------------------------------------------------------

(x) The program will not be generated ***********************

Error: table CONSUL with two different orders


Output device: NONE

FOR EACH CONSUL


Order : Medcod
Index : I00303
Navigation filters:

41
Restricciones en la Actualización
• No se puede realizar ninguna actualización en
un For Each que recorre una tabla por índice
temporal
– 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 C
call(‘rprog2,A,& nuevo) B = & nuevo
Endfor Endfor

IMPACTO Y REORGANIZACION
DE LA BASE DE DATOS

42
Impacto de la base de datos

• Impact Database

• Impact From

• Impact Objects

• Restore Model

Creación de la Base de datos


Table 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)

43
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 new
Table 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.

44
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 )

45
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

46
Conceptos Teóricos

• Control de Concurrencia
• Tipos de Diálogo
– Conversacional
– Pseudo Conversacional
• Integridad Transaccional
• Unidad de Trabajo Lógico (UTL)

Conceptos Teóricos

• Control de Concurrencia:
– controles para evitar inconsistencias en
los datos cuando se trabaja en ambiente
multiusuario

47
Conceptos Teóricos

• 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 Conversacional
1. 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.

48
Conceptos Teóricos

• 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.

49
Enfoque GeneXus

• Control de Concurrencia
– Locks
– Ambiente Client/Server
– Ambiente Centralizado
• UTL
• Integridad Transaccional

Control de Concurrencia

• ¿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.

50
Control de Concurrencia

• 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.

Concurrencia en Client/Server

Preferences del Modelo

– Pseudo Conversational Dialog

– Lock Mode

– Isolation Level

51
Concurrencia en Client/Server

• Pseudo Conversational Dialog

• Valores:
– Use Conversational Dialog
– Check Updated Tables only (*)
– Check all accessed tables
Co n v e r s a c i o n a l

Tipos de Diálogo
Obtener
Datos
Grabar BD

Lockear
Eventos After
Ins/Upd/Del
Validar
datos
Commit
Pedir
Confirmación
Deslockear

Confirma?
Evento
After(TRN)
Evento
After(confirm)

52
Tipos de Diálogo
Obtener
Datos Validar
cambios
Validar
datos No hubo
cambios?
Pedir
Confirmación
• Grabar BD

Confirma?
Eventos After
Ins/Upd/Del
Evento
After(confirm)
Commit Deslockear
Pseudo

Lockear
Evento
After(TRN)

Concurrencia en Client/Server

• Preference Lock Mode

• Valores:
– Do not specify lock level (*)
Conversacional

– Use page level locking


– Use row level locking

• Válida solo para Informix

53
Concurrencia en Client/Server

• 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

54
Concurrencia en Client/Server
• ¿Qué sucede cuando un programa que actualiza
la BD encuentra un registro lockeado?

Transacciones
Cuando 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.

Concurrencia en Client/Server

• ¿Qué sucede cuando un programa que


actualiza la BD encuentra un registro
lockeado?

Procedimientos

Se intenta indefinidamente la operación


hasta que se libera el registro. No despliega
mensaje.

55
Concurrencia en Client/Server

- Time-out
Desde GeneXus no es posible configurarlo

– 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.

Concurrencia en Access

• 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

56
UTL en GeneXus
• 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

Integridad Transaccional

• Preference del Modelo


– Transactional Integrity

• Properties de los objetos:


– Commitment
– Commit on Exit
– Confirm Transaction

57
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

Integridad Transaccional en
Client/Server
• 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

58
Integridad Transaccional en
Client/Server
• 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

• Properties de los objetos:

– Commitment

– Commit on Exit

– Confirm Transaction

59
Integridad Transaccional
Object Properties
• Commitment
– Valores:
• Enabled (*)
• Disabled

• Consideraciones
– Válida solo en AS/400

Integridad Transaccional
Object Properties
• Ejemplo property Commitment

Facturas If insert and


after(confirm) Numerador Tabla
Numeradores

Commitment=Disabled

Tabla
Facturas

60
Integridad Transaccional
Object Properties
• Commit on Exit
– Valores:
• Yes (*)
• No

• Consideraciones
– No es válida si tiene Commitment = Disabled

Integridad Transaccional
Object Properties
• Ejemplo property Commit on Exit
Commit on Exit = No

Facturas Refcall(Tcliente, Cliente


CliCod
‘INS’)

Tabla COMMIT Tabla


Facturas Clientes

61
Integridad Transaccional
Object Properties
• Confirm Transaction
– Valores:
• Yes
• No (*)

• Consideraciones
– Es válida si tiene
Commitment = Enabled y
Commit on Exit = Yes

DEFINICION Y MANTENIMIENTO
DE REDUNDANCIAS

62
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)

63
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.

Redundancy load Utility

• En el reporte del análisis de impacto se puede ver


cual 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: FacTotal
Procedure name: GXR24

64
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.

65
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=Y
For each &Existe=‘S’
Saldo=Y Endfor
Endfor If &Existe=‘N’
Endnew New
Cliente=X
Saldo= Y
Endnew
Endif

66
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 el


operador $.

En C/S lo resuelve el DBMS sobre el índice si existe y sino


lo crea.

Tips de optimización

• Las funciones no se optimizan.


For each order Fecha
where Fecha=Today()
…….
endfor

For each order Fecha


where Fecha=&today
…….
endfor

67
ARQUITECTURA DE
MULTIPLES CAPAS

Varios generadores por modelo

• Generadores del Modelo

• Generador por Objeto

• Generador C/SQL

68
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

69
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

70
INTRODUCCION A
CLIENT/SERVER

Qué es 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.

71
Tipos de Client/ Server

–Client / File Server.


–Client / Database Server.

72
Client / File Server
FILE / Servidor
SERVER
Clientes de Datos
Archivos

Red

Server

Client / Database Server


Clientes
Servidor
de Base
Data Base
de Datos
Server
* Datos
* Lógica

Red

73
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 GX


de Client/Server ?
• Acceso a última tecnología sin necesidad de
incurrir en altos costos de entrenamiento
• Plataformas y bases de datos:
Oracle Múltiples plataformas (Unix,
Windows, Novell, etc.).
SQL Server Windows NT y Alpha

DB2 Common Múltiples plataformas (Unix,


Servers Windows, etc.)

DB2/400 AS/400

Informix Múltiples plataformas (Unix,


Windows, etc.)

• Uso de PC’s para bajar los requerimientos del


procesador central

74
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 groups
Disponible 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.

75
INTRODUCCION A
PAGINAS WEBS

Web
• Páginas gráficas con hipertexto
• Dos tipos fundamentales:
– Páginas estáticas
HTML standard.
Generación con algunas herramientas.
– Páginas dinámicas
GeneXus
ASP
···

76
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

77
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


WWW - World Wide Webs

Páginas Páginas
Estáticas Dinámicas

Web Page Editors GeneXus

78
URL
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

Protocolo HTTP

Conexión/Solicitud

Respuesta/Cierre

79
HTML
<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>

80
Browser WWW
(cliente)
APLICACION
• So
CGI
m
et

er GI
un llC
fo Ca
rm
l
de I
FORM ta G ƒ
u es a C
p m
e s ra
R rog
Respuesta del P
Programa CGI
Servidor

INTERNET
Servidor : WEB SERVER
Microsoft Internet Information Server
Netscape Server
Links
Páginas
HTML
Cliente : BROWSER
NetScape, MS Internet Explorer

81
Topología
Topología
Servidor Web
Windows NT
Web Browser UNIX
AS 400
Internet
Intranet

Servidor de
Base de Datos
DB2, Informix,
Microsoft SQL Server,
Web Browser Oracle, Access

Web Servers
• Windows NT • Windows 95
– Microsoft Internet – WebSite Professional
Information Server – Fnord
– Netscape – Personal Web Server
• UNIX (FrontPage 97 y 98)
– Netscape
– Oracle
• AS/400
– IBM

82
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

83
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 !

84
Web panel

Web panel con subfile

85
Algunas características de los
Web panels
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

Código embebido:
• Html
Ej.:
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.

86
Código embebido:

• 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.

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?

87
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

88
Seguridad a Nivel de Aplicación

Sesión, cliente

Login Registro Operación

Sesión,
cliente

Sesión, cliente

Generación Ingreso Validación


de sesión de usuario

Generadores - Servidores

Windows NT UNIX AS/400


C/SQL X
VB X X
RPG X X

DBMS
VB Access, Oracle, MS SQL Server, Informix, DB2 (NT, RS/6000, OS/2)
C/SQL Oracle, MS SQL Server, DB2/6000
RPG AS/400

89
Requerimientos (Visual Basic)
• Servidor 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 GeneXus
– Visual Basic 32 bits en adelante
– Web Browser

• RED 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).

90
Configuración del Modelo
GeneXus

MODEL
– PROPERTIES
– PREFERENCES
– EXECUTION

Model Properties

91
Model Properties:
EXECUTE (VB)

Model Properties:
PREFERENCES
• 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

92