Documente Academic
Documente Profesional
Documente Cultură
Para poder realizar el curso debe contar con la versin 8.0 de GENEXUS o
superior. El curso consta de los conceptos tericos necesarios para el desarrollo de
una aplicacin web, as como la puesta en prctica de los mismos en una
aplicacin ejemplo. El desarrollo de esta aplicacin podr ser visualizado paso a
paso a lo largo del curso mediante videos incluidos en el mismo. La idea es que
Ud. vaya realizando esta aplicacin en paralelo (a medida que avanza captulo por
captulo en forma ordenada).
En caso de estar interesado en consultar a un docente del curso las dudas que le
vayan surgiendo, y/o dar un examen final de forma tal de obtener (en caso de
aprobacin) un certificado de haberlo realizado en modalidad no presencial,
dirjase a nuestro sitio de capacitacin a distancia:
INTRODUCCION AL CAPITULO 1
Para poder entender cmo funciona el Web, necesitamos primero conocer el
significado de ciertos conceptos que vamos a usar frecuentemente a lo largo de
todo el curso. Por lo cual, comenzaremos con estas definiciones para luego s
introducirnos en el desarrollo de aplicaciones para Internet.
Qu es el WEB o WWW?
El Word Wide Web (Web o WWW) brinda una interfaz grfica, fcil de usar que
permite navegar para buscar documentos en Internet. Estos documentos, como
tambin los links que existen entre ellos forman un "web" de informacin.
El WEB permite saltar o "hyperlink" de una pgina web (o web page) a otras.
Puede pensarse en el WEB como una gran biblioteca. Web sites son como los
libros (libros electrnicos) y las pginas web son como las pginas especficas de
estos libros. Estas pginas pueden contener noticias, imgenes, sonidos, 3D, etc.
Adems pueden estar ubicadas en computadoras de cualquier parte del mundo.
Los libros electrnicos mantienen el concepto bsico del libro, y adems, brindan
la oportunidad de disponer de una estructura no lineal, la que permitir, entre
otras cosas, decidir el orden en el que se desea recibir la informacin.
Pginas estticas
Las pginas estticas son las ms sencillas, se crean usando un editor de pginas
Web o bien escribiendo directamente el cdigo HTML.
Pginas dinmicas
Las pginas dinmicas son creadas en el momento en que son referenciadas por el usuario. Si
bien tienen un estilo base, la informacin desplegada en las mismas es dinmica.
Son interactivas, ya que permiten que la pgina a visualizar pueda ser creada en base a la
informacin ingresada por el usuario. Por ejemplo, una consulta de los pedidos pendientes de
una orden de compra.
Las pginas dinmicas permiten interactuar con una base de datos, por lo que son una
poderosa herramienta para impulsar los negocios de la empresa.
A continuacin se presenta una lista de ejemplos que se prestan para una aplicacin que utilice
pginas dinmicas:
ALGUNAS DEFINICIONES
Para poder entender cmo funciona el web, necesitamos definir ciertos conceptos,
que son los que se van a manejar de ahora en adelante:
URL
Bsicamente una URL es una direccin WEB.
Cuando visualizamos una pgina Web con Netscape, Internet Explorer o cualquier
otro browser, los links (visualizados subrayados y generalmente en color azul),
contienen informacin oculta que apunta a la ubicacin del recurso al que se hace
referencia.
Sintxis protocol://host/path/filename[?parm1,,[parmn]]
[parm1,...,[parmn]]
Informacin opcional para consultas
Protocolo HTTP
Como vimos antes, un documento WWW HyperMedia es servido por el protocolo
HTTP. Esto significa que los browsers WWW y los servidores WWW se comunican
entre s para procesar las solicitudes del usuario utilizando un conjunto de
mensajes y respuestas que son nicos para el cliente (web browser) y el servidor
(programa HTTP server). Aunque existen algunas diferencias entre browsers y
servidores WWW, todos se comunican a travs del protocolo HTTP.
4) Se cierra la conexin.
El lenguaje HTML est compuesto por una serie de cdigos o tags ubicados dentro
de un documento ASCII, que son traducidos por un web browser como Netscape,
Internet Explorer, etc, en instrucciones especficas para formatear el documento
que se va a desplegar en la pantalla. Entre dichos tags estn incluidos los tags de
hyperlinks, que permiten especificar enlaces hacia otros recursos en el Web.
Cada documento tiene un cabezal (head) y un cuerpo (body), delimitados por los
tags <head> y <body>. El cabezal es donde se indica un ttulo al documento y
donde se indican otros parmetros que el browser podra utilizar en el momento
de desplegar el documento. El cuerpo es donde se coloca el contenido
propiamente dicho del documento HTML. Esto incluye el texto a desplegar y otros
controles que indican al browser cmo desplegar el texto. Los tags tambin
referencian archivos de efectos especiales como imgenes y sonido e indican los
hot spots que enlazan el documento a otros documentos.
<HTML>
<HEAD>
</HEAD>
</BODY>
</HTML>
WEB CLASSES
SERVLETS
ASP.NETCGI
Con CGI el servidor Web puede realizar llamadas a programas externos, pasando
datos especficos del usuario al programa. El programa luego procesa esos datos y
el servidor devuelve la respuesta del programa al Web browser.
Un programa CGI puede ser escrito en diferentes lenguajes como: C/C++, Visual
Basic, PERL, etc.WEB CLASSES
A partir de Visual Basic 6.0 existen nuevas facilidades para generar aplicaciones
para Internet, la ms notoria es la llamada WebClasses Designers. Estos
objetos son programados en Visual Basic y al compilarlos se crea un ActiveX DLL,
que ser ejecutado por el Web Server (Microsoft Internet Information Server), y
un archivo .ASP (Active Server Page) que sirve como punto de entrada para cada
clase en la DLL.
SERVLETS
Junto con JAVA aparecieron componentes para el web con la misma funcionalidad
mencionada anteriormente en relacin a CGI y ASP denominados servlets. Son
clases JAVA que ejecutan en el servidor y permiten obtener informacin en forma
dinmica que luego envan al cliente.
ASP.NET
ASP.NET es otra alternativa de Microsoft para el desarrollo de aplicaciones web. Esta
tecnologa se desarroll para la nueva plataforma .NET de Microsoft y se trata de una
evolucin de las ASP o Active Server Pages. Tambien en este caso se trata de aplicaciones que
ejecutan en el servidor y envian el HTML resultante al cliente. Los programas en el servidor son
.dlls que se invocan con extensin .aspx.
ARQUITECTURA GENERAL
En la imagen que mostramos a continuacin se puede observar un esquema
simplificado de la topologa de Internet.
Los usuarios de Internet tendrn acceso a las pginas que sean pblicas y podrn
acceder a los datos almacenados en la empresa a travs de pginas dinmicas.
Por otro lado, los usuarios de la empresa (Intranet) podrn acceder a las pginas
pblicas y a las pginas privadas de la empresa.
REQUERIMIENTOS BASICOS PARA PUBLICAR
PAGINAS (ESTATICAS O DINAMICAS) EN
INTERNET
Se debe disponer de una red TCP/IP, es decir, que tanto el servidor como el cliente deben
tener instalado el protocolo de red TCP/IP.
El servidor debe tener un software que lo habilite como servidor Web, normalmente es a este
software al que se denomina Servidor Web o Web Server.
El cliente nicamente necesita un browser para poder visualizar las pginas Web.
EN EL SERVIDOR
EN EL CLIENTE
TCP/IP
Browser - nos permite visualizar las pginas.
QUE ES UN SERVIDOR WEB?
El servidor web, es un software que habilita al servidor para la publicacin de
pginas web, tambin es denominado Web Server.
En particular en el caso del generador .Net (que hemos elegido para ejemplificar
los ejercicios prcticos del curso), el directorio virtual y su alias son creados
automticamente y no es necesario que el usuario lo haga por su cuenta en etapa
de desarrollo.
Para poder publicar pginas dinmicas, es comn definir uno o varios directorios adicionales
con permisos de ejecucin.
Tambin se pueden definir mltiples directorios virtuales con permisos de lectura para colocar
diversas pginas estticas, imgenes, etc.
Los conceptos de directorio virtual y alias son manejados en todos los servidores
Web, lo que vara es la interfaz que provee cada Web Server para realizar la
configuracin correspondiente.
El alias es el nombre que utilizarn los usuarios de Internet para acceder a las
pginas web. Estas pginas estn fsicamente almacenadas en un directorio
(conocido como directorio virtual).
C/SQL
.Net
Java
Visual Basic
Por lo tanto, pueden ejecutarse en un servidor Web Windows (usando C/SQL, .Net, Java o VB),
en servidores UNIX (usando C/SQL o Java) o en servidores Iseries (Java).
Los objetos web podrn usar cualquier manejador de base de datos, dentro de las plataformas
soportadas por cada uno de los generadores GeneXus.
INTRODUCCION AL CAPITULO 2
Identificamos como objetos web a los objetos que se utilizan para desarrollar aplicaciones
web con GENEXUS: Web Panels y Transacciones con form HTML.
A continuacin, se enumeran las principales diferencias de dichos objetos con respecto al resto
de los objetos GENEXUS:
Se utiliza un editor WYSIWYG (What You See Is What You Get) orientado a pginas
para la edicin de objetos web (Web Objects).
FUNCIONAMIENTO - ARQUITECTURA
Al utilizar objetos web las pginas se crean en tiempo de ejecucin, basadas en el
input del usuario.
En este proceso, el servidor Web est actuando como un gateway entre la base de
datos y el cliente de browser. En realidad el servidor Web simplemente est
pasando el nmero de cliente al objeto web que realizar la consulta a la base de
datos, formatear los resultados y retornar los datos formateados al servidor, el
cual, a su vez, pasar esta salida al browser para que sea desplegado al usuario.
3. Los datos que devuelve el objeto web (en nuestro ejemplo, el estado de la
orden del cliente) al servidor, son simplemente escritos por el mismo utilizando el
mtodo normal de retorno de informacin del lenguaje utilizado.
C/SQL
En el caso de C/SQL se utiliza CGI para los programas que devuelven la
informacin requerida de la base de datos.
.NET
Los objetos web generados con .Net son .dlls que son invocados con extensin
.aspx. La tecnologa utilizada en este caso se denomina ASP.NET.
VISUAL BASIC
Los objetos web generados con Visual Basic, utilizan la tecnologa denominada
WebClasses Designer. Estos objetos son programados en Visual Basic y al
compilarlos se crea un ActiveX DLL que ser ejecutado por el Web Server y un
archivo ASP que sirve como punto de entrada para cada clase en la DLL.JAVA
Introduccin
La finalidad de este editor es potenciar y simplificar la edicin del form HTML de los objetos
web, permitiendo crear fcilmente sitios web vistosos y potentes. Este editor es del tipo
"WYSIWYG" (What you see is what you get) lo que permite al desarrollador visualizar en
diseo la pgina web que se va a publicar. Para esto se licenci un editor similar al Front Page
de Microsoft, que fue diseado siguiendo el estndar de las herramientas Microsoft Office, lo
que permite que los usuarios puedan utilizarlo rpidamente y en forma intuitiva.
Es un editor orientado a pginas, lo que significa que la posicin de los controles que se
encuentran dentro del form en diseo es relativa al tamao de la ventana que contenga la
pgina.
Complementando este editor, existe el Editor de Temas, que permite definir clases para los
controles usados en una aplicacin web GeneXus y configurar de una forma sencilla las
propiedades de estos controles simplificando el desarrollo y mantenimiento de las aplicaciones
web.
El uso de este editor es muy sencillo, de forma que todo el diseo realizado se puede visualizar
en ejecucin sin necesidad de incluir cdigo HTML en el Form. A modo de ejemplo, si se desea
modificar el tamao de la font utilizada en el objeto web, simplemente se selecciona el texto y
se cambia al tamao deseado.
El editor facilita el formateo de textos (tamao de letra, tipo de letra, color, etc.), y permite la
insercin de controles GeneXus (Controles edit, grid, botones, etc.).
Este editor provee el manejo de tablas, caracterstica fundamental a la hora de disear pginas
web. Esta facilidad habilita al usuario a disear mejores pginas, as como le permite tener el
control de la alineacin de los controles dentro del Web Panel.
Atributos
Variables
Botones
2. Los que son propios de los Web Objects, o tienen un comportamiento diferente que en el
resto de los objetos.
Imagenes
Grilla
Texto
Text Block
Tabla
Grilla Free Style
Error viewer
Web Components
Embedded Pages
Para insertar controles en el form del objeto web se puede utilizar la opcin Insert del men
de GeneXus o la siguiente barra de herramientas.
Ms adelante se detallan los controles disponibles, as como las opciones disponibles en esta
barra de herramientas.
Formateo de texto
La barra de herramientas disponible para realizar estas operaciones es la siguiente:
Las operaciones que se pueden realizar son las estndares de edicin y formateo de texto.
Una de las opciones destacables relacionada con objetos web es , que permite visualizar
los bordes de las tablas cuya propiedad Border est con valor 0. De esta forma, se pueden ver
en diseo los bordes de las tablas an cuando stos no se vean en ejecucin.
Otra opcin interesante es que facilita el trabajo con controles de tipo Text Block.
Si se presiona el botn derecho del mouse dentro del formulario del objeto web, adems de la
opcin Properties (que permite configurar las propiedades del form) se visualizan dos
opciones: View Source y Edit HTML Source. Al seleccionar la opcin View Source se abre
una ventana donde se puede visualizar el cdigo HTML que se va a generar al ejecutar dicho
objeto. Al cerrarla, se vuelve al formulario del objeto web.
Si se selecciona la opcin Edit HTML Source, se puede modificar el cdigo HTML o agregar
cdigo, de forma tal que el cambio se mantiene en el objeto y se genera posteriormente. En
este caso, el cdigo se visualiza dentro de la ventana del objeto web y para volver al
formulario, es necesario volver a presionar el botn derecho del mouse y seleccionar la opcin
Edit Web Form.
La opcin Edit HTML Source se usa para cualquier caso en el que sea necesario agregar
cdigo HTML manualmente, por ejemplo, agregar cdigo javascript (si bien esto se puede
hacer de otras formas). Todo el HTML que se agregue queda entre los Tags <Body></Body> del
objeto generado.
En ambos casos, se asigna el valor a la misma, pero lo que vara es el costo de mantenimiento
posterior que implicarn cambios a las mismas.
Esta asignacin puede hacerse en tiempo de diseo y para algunas de las propiedades pueden
modificarse en tiempo de ejecucin (programando los eventos del objeto). Cualquier cambio,
requerir generar y compilar el objeto.
En este captulo se ver una introduccin al objeto Tema y el Editor de Temas, y ms adelante
en el curso, se ver en detalle el funcionamiento de ambos.
Como primer paso, deben crearse la Base de Conocimiento (en GeneXus 8.0 o una
versin superior) y consolidar el archivo initial.xpz el cual contiene todas las
transacciones y procedimientos de los cuales partimos.
El generador que vamos a utilizar en el curso es .Net con SQL Server como DBMS,
pero ud. puede elegir el generador que desee y disponga. Les recordamos leer en
el Captulo 15 Requerimientos y configuraciones necesarias por generador para
conocer los detalles correspondientes al generador que ud. haya elegido, antes
de crear el modelo de prototipo.
A lo largo del curso vamos a ir desarrollando una aplicacin web, un Sitio de ventas de pelculas
en sus diferentes formas (videos, DVD, etc.) del cual se tienen ya definidas las estructuras de
las transacciones y procedimientos necesarios y nos concentraremos nicamente en el
desarrollo de los objetos web.
MoviesType
MovieTypeId*
MovieTypeDsc Tipo de pelcula (Video, DVD)
Actors
ActId*
ActLastName
ActName
Customer
CustId*
CustName
CustLastName
CustUsr
CustPsw
CustEmail
CustNews Si desea suscribirse a la lista de noticias del sitio (Y/N)
MovieGenre
MovGenId*
MovGenDesc
(MovieId*
MovieTitle)
Movies
MovieId*
MovieTitle
MovieSumry
(MovieTypeId*
MovieTypeDsc
(MovieLinDate*
MovieLinPrc))
(ActId*
ActLastName
ActName)
Purchase Order
PurOrdId*
CustId
CustNameCustLastName
PurOrdDate
PurOrdTot= SUM(PurOrdLinTot) frmula
PurOrdLastLin
(PurOrdLinId*
MovieId
MovieTitle
MovieTypeId
MovieTypeDsc
PurOrdQtity
PurOrdLinUnPrc = udp(PUnitaryPrice, MovieId, MovieTypeId) frmula
Qu es un Tema?
A partir de GeneXus 8.0 se cuenta con un nuevo objeto para el diseo de aplicaciones web, los
Temas; y una herramienta para el mantenimiento del nuevo objeto, que es el Editor de
Temas.
Un Tema es un objeto GeneXus, mediante el cual se pueden definir clases para los diferentes
controles Web GeneXus, y asignar propiedades a dichas clases.
Una vez asociado un Tema a un objeto (propiedad Theme), los controles de ese objeto
podrn ser asociados a alguna clase del Tema correspondiente.
Cuando un control es asociado a una clase ste pasa a heredar la configuracin de las
propiedades dada en la clase.
Los objetos a los que se les puede asignar un Tema son Web Panels y Web Transactions.
El valor default de la property Theme del modelo es el valor de la misma property de la KB, y
el valor default de la property Theme de un objeto es el valor de la property Theme del
modelo.
Observe en la KB que usted ha creado para realizar los ejercicios prcticos, existe un Tema de
nombre Default. Este Tema se crea automticamente siempre que se crea una nueva base
de conocimiento.
La propiedad Theme del modelo, est asociada por defecto al Tema Default, por lo cual, por
defecto los objetos de la KB estn asociados al mismo Tema.
Vamos a modificar el Tema Default, de forma de ejemplificar como se trabaja con los Temas.
En la siguiente demostracin veremos los pasos seguidos para modificar el Tema Default y el
efecto de esos cambios sobre el web panel que hemos creado en este captulo.
Es posible configurar en la Clase Form (o derivadas de ella) en el objeto tema, varias de las
propiedades de los forms disponibles en GeneXus y otras que no estn en GeneXus.
En el caso de que una propiedad est asignada en el control (en diseo o en ejecucin) ese
valor tiene precedencia respecto al asignado en el tema. Ver orden de precedencia de las
propiedades
Por detalles de propiedades del Form en los Temas, referirse a Clase Form
Atributos y Variables
Al seleccionar un control y presionar el botn derecho del mouse aparecen las propiedades
para ser editadas.
Para modificar las propiedades de estos controles en ejecucin (es decir en algn evento del
objeto), es necesario programarlo (ejemplo: &pwd.IsPassword = 1)
Recuerde que muchas de estas propiedades pueden asignarse en el objeto Tema en la clase
Attribute.
4. Read Only
5. Auto Resize: Esta propiedad aplica a controles edit que NO tengan la
propiedad Read-Only con el valor True, ya que en este caso se ignora el
ancho especificado.
6. Fill
7. BackColor
8. ForeColor
9. Font
10. Format
11. ReturnOnClick
12. OnClickEvent
COMBO BOX
Las propiedades a nivel de diseo que aplican son:
1. Attribute
2. BackColor
3. ForeColor
4. Fill
5. Font
6. Read Only
1. Backcolor
2. BackStyle
3. Enabled
4. FontBold
5. FontItalic
6. FontName
7. FontSize
8. FontStrikethru
9. FontUnderline
10. ForeColor
11. InternalName
12. Visible
1. Attribute
2. BackColor
3. ForeColor
4. Fill
5. Font
Los radio button tienen tambin la propiedad Radio Direction que permite
indicar si las opciones del radio se desplegarn en forma vertical u horizontal.
1. Backcolor
2. BackStyle
3. Enabled
4. FontBold
5. FontItalic
6. FontName
7. FontSize
8. FontStrikethru
9. FontUnderline
10. ForeColor
11. InternalName
12. Visible
1. Alternate Text
2. Borderwidth
3. Class
4. Enabled
5. HSpace
6. InternalName
7. Link
8. LinkTarget
9. TooltipText
10. Visible
11. VSpace
AddItem
Clear
El formateo ocurre cuando el usuario "sale" del campo y controla nicamente que el formato
sea correcto. No se controla que la fecha y/o hora sea vlida: esto lo hacen los programas.
En caso que el formato no sea correcto, se emite un mensaje de error (una ventana con el
mensaje 'Date or time format is not correct') y se vuelve el foco al campo incorrecto.
Botones
En los objetos web se pueden usar varios botones y asociarles eventos (predefinidos de
GeneXus o definidos por el usuario). Al presionar el botn derecho del mouse se visualiza el
siguiente dilogo que habilita al usuario a editar las propiedades del mismo o a editar el
evento que el botn tiene asociado.
Propiedades de botones
Las propiedades de los controles de tipo Button que pueden modificarse en diseo son:
1. ControlName
2. Class
3. OnClickEvent
4. Caption
5. Font
6. ForeColor
7. BackColor
8. BorderWidth
9. BorderColor
En ejecucin se pueden modificar todas estas propiedades (excepto la control
name) del boton y adems las siguientes:
1. Enabled
2. Internal Name
Tamao de botones
El tamao del botn queda determinado por el texto ingresado en la propiedad Caption del
mismo.
Si se desea que los botones tengan un tamao fijo, se deben asociar mediante la propiedad
Class a una clase de un tema que tenga un tamao definido (propiedades Heigth y Width). En
este caso, el tamao quedar fijo independientemente del caption.
Si programamos
Variable.IsPassword = 0
Observe que como el objeto ser utilizado como punto de entrada a nuestra
aplicacin, lo definiremos como un objeto de tipo main.
IMAGENES
En el desarrollo de aplicaciones web al igual que cualquier tipo de aplicaciones, se distinguien
dos ambientes o fases muy diferentes: el de diseo y el de ejecucin. Por ambiente de diseo,
nos referimos al ambiente utilizado por los usuarios GeneXus que desarrollan la aplicacin
web; por ambiente de ejecucin entendemos a la ejecucin propiamente dicha de los objetos
web (normalmente realizada por los usuarios finales).
Identificar estos dos ambientes es muy importante al trabajar con imgenes ya que
determinar que las mismas sean ubicadas correctamente y no ocurran errores del estilo File
not found.
En el ambiente de diseo (mientras se trabaja con GeneXus editando los objetos web) las
imgenes se buscan en el camino indicado en cada imagen (Ej.: c:\modelo\imagenes\img.gif),
pero en ejecucin es necesario referenciar el camino virtual donde se encuentran las mismas,
que normalmente es el Servidor Web -(Ej.: /imagenes/img.gif). Hay que recordar que el
servidor web tiene acceso nicamente a aquellos directorios definidos en el software de
administracin del mismo.
Para solucionar esto, se dispone de una preferencia a nivel de diseo denominada Base image
path .
Preferencia Base image path
En esta preferencia del modelo de diseo, se debe ingresar el camino absoluto
que se va a utilizar para referenciar las imgenes en tiempo de diseo, es decir
mientras se desarrollan los objetos web.
En el caso en que se tenga acceso al servidor Web que se usar para produccin
final, este camino puede referenciarse como una URL o tambin como un path
absoluto (respecto al servidor de archivos).
Esta forma de trabajo, permite que las imgenes esten en un nico directorio y
pueden ser accedidas tanto en tiempo de desarrollo como en produccin.
Cuando no se tiene acceso al servidor Web que se usar para produccin (que es
el caso mas comn), se debern tener las imgenes duplicadas para poder
accederlas en desarrollo y posteriormente en produccin. En este caso, en la
preferencia se deber referenciar el path absoluto al directorio que las contenga
en tiempo de diseo.
Luego en el objeto web, para insertar una imagen se debe seleccionar el botn de la barra
de controles disponibles, y en el dilogo para ingresar el origen de la imagen se debe
seleccionar la misma.
Observaciones:
Esta propiedad permite asociar un evento de los objetos Web a una imagen. Tiene el mismo
funcionamiento que la propiedad de igual nombre para los botones. En particular, permite
asociar un evento estndar de GeneXus (como First, Next, Previous, Last, Enter, etc.) a una
imagen.
Esta propiedad OnClickEvent es usada principalmente en las Transacciones Web para poder
asociar imgenes a los eventos estndar: Previous, Next, etc. En Web Panels, sirve para asociar
el evento Enter a las imgenes.
Todas las imgenes necesarias para el diseo del sitio se encuentran en el archivo images.zip.
Para poder usarlas hay que descomprimirlas y almacenarlas en algn directorio del disco duro.
En nuestro ejemplo, descomprimimos las imgenes en el directorio images bajo el directorio
de la KB (c:\InternetApp), y las copiamos tambin al directorio images bajo el directorio raz
de nuestro servidor web.
Primero, tenemos que ir al modelo de diseo y setear la preferencia "Base Image Path" para
indicar dnde estn ubicadas de forma tal de poder verlas mientras diseamos. Como
discutimos anteriormente (ver Imgenes), existen diferentes alternativas para completar esta
opcin, y en consecuencia tambin el lugar donde deben estar al momento de ejecutar el
objeto en el web.
Para insertar una imagen tenemos que posicionarnos en el lugar que queremos insertarla, y
seleccionar la opcin Insert/Image o el item Image de la toolbar de Controls y escribir
solamente el nombre de la imagen a insertar donde dice "Picture Source" (es decir, que
cuando ingresamos las imgenes hacemos el seteo de la propiedad "Source" de la misma).
1. BorderWidth
2. TooltipText
3. AlternateText
4. InternalName
5. Bitmap
6. Enabled: La propiedad Enabled de Runtime permite habilitar
(Enabled=1)/deshabilitar (Enabled=0) la ejecucin del evento asociado a la
variable bitmap.
7. Link: Si se programa el evento Click de una imagen se ignora la propiedad
Link.
8. LinkTarget
9. Visible
10. Class
LINK
Los links son una caracterstica nica del WWW que nos permite saltar o navegar entre pginas
web.
Cuando queremos poner un link, tenemos que especificar la URL de la pgina web a la cual
queremos acceder.
Una url absoluta es una direccin completa que incluye el camino completo al
archivo.
Cuando se referencia un archivo (pgina) de alguien ms,
normalmente se va a usar una url absoluta (por ej: www.yahoo.com)
Una urls relativa es una direccin relativa al archivo que la contiene. Si solamente
se referencia el nombre del archivo, se asume que estar en el mismo directorio que
la pgina que contiene el link.
En las urls relativas no debe indicarse el protocolo (http, ftp, etc.).
Es suficiente con el nombre del archivo.
Dentro de GENEXUS, el link puede ser utilizado como funcin o como comando. A
continuacin se definen ambos casos de uso.
Funcin LINK
La funcin LINK permite enlazar un objeto web con otro objeto web o con una URL. Esta
funcin se puede asociar a la propiedad link de un control dentro de cualquier evento del
objeto web, teniendo como resultado que al hacer click sobre dicho control se realiza la
llamada al objeto web o URL referenciado en el link.
el primer parmetro contiene el objeto web, o la URL a llamar y [par1]...[parn] son el conjunto
de parmetros a pasar a los mismos. El primer parmetro, tambien puede ser un atributo o
una variable con la url o el objeto a invocar.
NOTAS:
1. Solamente se puede asociar la funcin link a controles que sean Read Only.
3. Si se desea llamar a una URL, la URL debe ser ingresada entre (comillas
simples/dobles). Se considera como una url absoluta.
Ej.: &var.link = link(http://www.artech.com.uy).
4. Si se desea hacer un link, utilizando un atributo que contiene la url o el nombre del
objeto web correspondiente, se debe utilizar la siguiente sintaxis:
5. Tambin se puede definir un link utilizando una variable que contiene la url o el
nombre del objeto web correspondiente con la siguiente sintaxis:
Mailto
Una caracterstica interesante del link es que se puede definir de forma tal que al hacer clic
sobre el mismo se abre una ventana para el envo de mail. Para poder hacerlo, simplemente se
debe concatenar una direccin de e-mail a la palabra mailto como se describe a continuacin:
&mail = mailto:+trim(AttMail/&varmail)
&var.link = link(&mail)
siendo &mail una variable de tipo caracter y AttMail o &varmail el atributo o variable que
contienen la direccin e-mail.
Comando LINK
Ver Comandos/LINK.
CALL
Ver Comandos/CALL.
A continuacin se realiza una comparacin para aclarar las diferencias entre los mismos.
Objetos web
Procedimientos
Objetos web
Pginas HTML estticas
NOTAS:
Para alinear controles (por ejemplo: que todas las variables donde el usuario va a
ingresar los datos queden alineadas a la izquierda), se deben usar las TABLAS.
En el prximo punto veremos cmo alinear los controles del web panel "Sale of
Movies" insertndolos dentro de una tabla.
TABLAS
Cuando se trabaja con objetos web, es necesario utilizar tablas para poder alinear los controles
dentro del formulario para mejorar el diseo de los mismos.
Agregar tabla
Para insertar una tabla se debe utilizar el botn de la barra de controles. Una tabla est
compuesta por filas y celdas, dentro de las que se encuentran los controles.
Otra forma de editarlas es presionando el botn derecho del mouse estando posicionado en
cualquier celda de la tabla, y despus ir a la seccin de Table. En este caso, se podrn editar
adems de las propiedades de la tabla, las de la fila a la que pertenezca la celda y las propias
de la celda.
1. ControlName
2. Class
La propiedad Class solo se encuentra disponible si el control est en el form de
un objeto que tiene un Tema asociado.
3. Tooltiptext
4. Align
5. Background
6. Backcolor
7. BorderWidth: 0 indica que no tendr borde en ejecucin, pero podr
verse en diseo usando el botn de la barra de herramientas. El
valor por defecto es 1.
8. BorderColor
9. Cellpadding
10. Cellspacing
11. Height
12. Width
13. Rules
Las propiedades de las filas, son algunas de las propiedades de las tablas, ms una propiedad
adicional: Vertical Align.
1. Identifier
2. TooltipText
3. Align
4. Vertical Align
5. Backcolor
6. BorderColor
Propiedades de las celdas de una tabla
Las propiedades de una celda de una tabla son las que se muestran a continuacin:
1. Identifier
2. Tooltiptext
3. Align
4. VerticalAlign
5. Background
6. Backcolor
7. Bordercolor
8. Height
9. Width
10. Colspan
11. Rowspan
Dado que ya vimos todas las propiedades de las tablas, celdas, filas y form,
vamos a utilizar alguna de ellas en este web panel.
Vamos entonces a tener que crearnos una tabla de 2 x 2 donde vamos a tener
que incluir dentro los controles que ya tenemos en el formulario y hacer los
siguientes seteos en las propiedades Colspan y Width:
Haga clic aqu para ver la demostracin
Text Block
Los controles Text Block pueden ser vistos como texto insertado directamente en el form, con
la ventaja que en forma dinmica (en ejecucin) se puede modificar el mismo. Para insertar un
En la barra de herramientas para el form HTML se incluye un botn que facilita el trabajo
con controles de tipo Text Block. Al presionar el botn mencionado, se visualizan los TAGs que
lo definen permitiendo detectar cualquier problema en diseo.
3. Format: El valor por defecto para TextBlocks es Text (se puede cambiar
a travs de la propiedad Default HTML Format(Textblocks only) del
modelo de diseo).
4. OnClickEvent
5. ReturnOnClick
1. Visible
2. Caption
3. Link
4. LinkTarget
5. Format
6. Class
Error Viewer
El control Error Viewer es utilizado para desplegar mensajes al usuario, utilizando la
funcin msg(). Para insertarlo ir por el men de GeneXus: Insert -> Error Viewer
1. ControlName
2. Class La propiedad Class solo se encuentra disponible si el control est en
el form de un objeto que tiene un Tema asociado.
3. Display Mode
4. ForeColor
5. Font
6. Fill
7. BackColor
Propiedades del Error Viewer en ejecucin
Adems de las propiedades detalladas anteriormente, se pueden modificar las
siguientes propiedades en tiempo de ejecucin:
1. BackColor
2. DisplayMode
3. ForeColor
4. Class
PROPIEDADES DEL CONTROL ERROR VIEWER EN LOS TEMAS
Adems de las propiedades mencionadas, en la clase Error Viewer de un Tema (o
alguna clase derivada de ella), se pueden setear otras propiedades para el control.
Ver Clase ErrorViewer
Esto significa que los objetos web tienen un control ErrorViewer implcito que es
donde se despliega el mensaje al usar la funcin msg().
Volvamos entonces a nuestro ejemplo para hacer el control del usuario y password en el
evento Login y agregar un Text Block en la pantalla para desplegarle al cliente el mensaje
que corresponda.
Una forma es agregar en el web panel que estamos diseando un botn en cuyo
evento se programa un CALL a otro objeto, donde el cliente va a poder ingresar
todos sus datos por primera vez (nombre, direccin de mail, usuario, password,
etc.).
Otra forma, es incluir en lugar de un botn, un LINK al objeto web de ingreso de usuarios (el
cual no hemos creado an). Es decir, insertar en el formulario un Texto y asociarle al mismo un
Link Esttico (con la opcin Insert/Hyperlink o Ctrl K teniendo el texto marcado) que nos
permita acceder al objeto web de ingreso de datos del usuario. Esto lo podemos hacer con un
Texto ya que la propiedad que le queremos asociar al mismo es "esttica", es decir, queremos
que el link haga siempre referencia al mismo objeto web. Es por esto, que podemos hacerlo
con un control de tipo Texto y no es necesario un Text Block.
Vamos a realizarlo con el LINK ESTATICO ya que con el botn es conocido por
todos cmo hacerlo. Tengamos en cuenta que cuando hagamos Insert/Hyperlink
nos va aparecer la siguiente imagen, donde tenemos que especificar la URL donde
se encuentra el objeto web que queremos invocar.
Dado que el objeto web que queremos invocar todava no lo creamos, es que
vamos a tener que definir ya el nombre que le vamos a poner, en nuestro
ejemplo va a ser una transaccin con form HTML que se denominar Customer.
Si definimos el link en forma absoluta, tambin vamos a tener que saber desde ya
el nombre del servidor web en el que van a estar todos los objetos web de la
aplicacin. En nuestro caso, el nombre del servidor web va a ser localhost, y los
objetos web los vamos a tener bajo el directorio web del modelo. Es decir, que
la URL que tenemos que poner debe ser http://localhost/services/TCustomer.aspx
(services es el alias del directorio virtual donde se encuentran los ejecutables)
INTRODUCCION AL CAPITULO 3
A lo largo de este captulo profundizaremos sobre el funcionamiento de los web
panels.
En conclusin, recordemos que los web panels se comportan como work panels,
en el sentido de que si se colocan atributos en el form, la informacin desplegada
no puede ser modificada y si colocamos variables se puede ingresar informacin.
Para dar de alta en la base de datos, es necesario utilizar procedimientos (para
cambios batch) o invocar a transacciones web (en caso de querer actualizar la
base de datos en forma interactiva con el usuario).
1. Start
2. Refresh
3. Load
Luego de esto, cuando el usuario presione un botn (ya sea asociado al evento ENTER o a un
evento de usuario) que no llame a ningn otro web panel, se ejecutar nuevamente ste y el
orden de disparo de los eventos ser diferente.
Relacionado con esto es importante destacar el momento en que las variables adquieren los
valores ingresados por el usuario: solamente lo harn despus de presionar un botn (que es
cuando el servidor Web tiene el control del procesamiento).
Si en un Evento se usa una variable que se carga en otro evento, entonces esa variable debe
estar presente en el form. Si no est en el form, la variable no tendr valor cuando se disparan
los otros eventos (esto es por el orden en que ocurren los eventos).
Adems, deber estar en el form despus del control en el que se carga la variable. Por
ejemplo, si la variable se carga en el LOAD de un grid entonces la variable tiene que estar en
pantalla despus del grid.
Nota:
Las especificaciones HTML definen tcnicamente la diferencia entre GET y POST de la siguiente
forma:
En el GET los datos del form son codificados por el browser en la URL misma.
Entonces, cuando es METHOD="GET" los datos del form se codifican en una URL (o mas
genricamente en una URI), lo cual significa que esa forma de someter el form es equivalente a
seguir un link a la URL codificada.
En general, el GET es para recuperar datos mientras que el POST sera para grabar, actualizar
datos, ordenar un producto, etc.
En GeneXus todos los eventos se resuelven con un POST y se ejecutan en el servidor web.
Aunque decimos que los web panels son similares a los work panels, hay una
diferencia fundamental entre ellos relacionada con el hecho que el objeto web una
vez que finaliza la ejecucin, no queda en memoria. Como consecuencia, la forma
en que programamos este tipo de aplicaciones presenta algunas diferencias con
respecto a lo acostumbrado en ambientes no web.
Es por esta razn que es importante tener claro el orden de ejecucin de los
eventos.
Event Login
For each
Where &CustUsr = CustUsr
If CustPsw = &CustPsw
&CustId= CustId
Message.Caption = Welcome to Movies.com
Else
Message.Caption = Invalid password, try again please
Endif
When none
Message.Caption = User name not found
Endfor
Endevent
Para realizar la llamada al web panel Datos del Cliente (CustProfile), existen varias
alternativas: se puede definir un link en algn evento, o se puede agregar un botn
y en el evento asociado invocar al objeto.
Event profile.clic/profile
Call(HCustProfile,&CustId)
Endevent
Otra alternativa (la que vamos a implementar en este caso), es usar un control
textblock y hacer el llamado al webpanel en el evento clic del textblock.
Probemos el web panel con el usuario myuser, y password mykey. Este usuario
ya ha sido definido en los datos que se distribuyen con el curso.
Es por esta razn, que si queremos disponer del valor de la misma, deberamos
agregar la variable &CustId en el form y la ocultaramos usando la propiedad Visible
(por ejemplo en el evento Start).
Entonces en este caso, cuando el Web Panel ejecute por segunda vez, se
dispararn los eventos:
1. Start
2. Se leen las variables del form (en este momento se obtiene el valor de
CustId)
3. Se ejecuta el evento clic, y por consiguiente se llama al Web Panel con el
cdigo de cliente correcto!
Nota:
Conviene hacer en este punto del curso un Estilo de Web Panels (que llamaremos
SaleMovie), es decir un Web Panel con la propiedad Style Object habilitada, en el que
basaremos luego la definicin de los nuevos objetos.
Para quienes conocen y utilizan los Styles habitualmente, es importante destacar que en el
caso de los web panels, los styles aplican solamente al momento de inicializar el objeto,
es decir los cambios que se hacen en el style luego de estar aplicado no se heredan.
Tabla Base
La determinacin de la tabla base de los Web panels es anloga a la determinacin de los work
panels. La determinacin de la tabla base puede encontrarse en el captulo: Mltiples Grids.
Eventos
Los eventos de los Web Panels son los mismos que en los Work Panels, es decir evento Start,
Refresh, Load, Enter y los definidos por el usuario. La diferencia con los work panels es el
orden de disparo de estos eventos. Esto est relacionado con el esquema de trabajo en
Internet.
Variables
Como se menciona en la seccin Esquema de trabajo en Internet, las variables adquieren los
valores ingresados por el usuario despus de presionar algn botn en el web panel.
Por ejemplo, cualquier link a otro web panel especificado en el evento Start con una variable
que se ingresa en un web panel no va a tener ningn valor cuando se haga clic sobre el link.
Si en un Evento se usa una variable que se carga en otro evento, entonces esa variable debe
estar presente en el form. Si no est en el form, la variable no tendr valor cuando se disparan
los otros eventos (esto es por el orden en que ocurren los eventos).
Adems, deber estar en el form despus del control en el que se carga la variable. Por
ejemplo, si la variable se carga en el LOAD de un grid entonces la variable tiene que estar en
pantalla despus del grid.
Las frmulas que se gatillan ANTES del evento Start son aqullas que slo dependen de los
parmetros que llegan al programa (regla parm())
Las frmulas que se gatillan DESPUS del evento Start son aqullas que dependen de atributos
o variables instanciados (va asignacin, Call, etc.) en el evento Start.
Reglas ms importantes
En el objeto Work Panel, las reglas ms importantes son las siguientes: ORDER, NOACCEPT,
SEARCH, HIDDEN y WORKFILE_LINES.
WORKFILE_LINES
Esta regla no aplica a los Web Panels. La forma de hacer esto es usando la
propiedad ROWS del grid.
Propiedades
En los Web Panels para resolver la visualizacin de grandes cantidades de registros se dispone
de la paginacin automtica del grid.
CALL
El comando Call no presenta grandes diferencias con respecto al resto de los objetos GeneXus.
Es importante tener en cuenta que los objetos web ejecutan en el servidor y por consiguiente
no pueden realizar llamadas a programas que tengan salida en pantalla, ya que la ejecucin de
dicha llamada cancelara por time-out. En resumen, desde un objeto web, se puede llamar a
otro objeto web, a un procedimiento o reporte que no tengan salida en pantalla.
Link
El comando link es equivalente al comando call para llamar a pginas estticas o redireccionar
a una URL. Este comando puede ser utilizado dentro de cualquier evento de un objeto web con
excepcin del evento Load. El resultado de la utilizacin de este comando es el
redireccionamiento en forma automtica a la URL especificada dentro del mismo.
donde
Por ejemplo:
Event ENTER
Link(http://www.ARTech.com.uy)
Endevent
Load
El comando Load es anlogo al resto de los objetos GeneXus.
Refresh
El comando Refresh vuelve a cargar la pgina, teniendo el mismo efecto que el F5 del browser.
La pgina se cargar manteniendo los ltimos valores sometidos para las variables ingresadas
por el usuario.
Return
Incluir el comando return en un objeto web, es equivalente a hacer un CALL al objeto que lo
invoc. En consecuencia no equivale a presionar el botn Back del browser, ya que si se
ingresaron valores en variables del Web Panel llamador, los mismos no son mantenidos al
ejecutar el comando Return.
Este comando Return puede ser ejecutado en cualquier evento o subrutina del
Web Panel, salvo el evento Load y los mtodos Load de subfiles. Tampoco puede
ser ejecutado en subrutinas llamadas directa o indirectamente por el evento Load
o mtodos Load de subfiles. En caso que se ejecute en las mencionadas
situaciones los resultados son impredecibles.
Se quiere que en este Web Panel (el cual es de acceso pblico) se muestre todo el
"Catlogo de pelculas", pudiendo filtrar por "gnero" y por "ttulo", cargando 5
pelculas cada vez.
El ttulo a su vez, deber de contener un link a otro web panel que muestre ms
informacin de la pelcula seleccionada y nos permita comprar dicha pelcula en
sus diferentes formas (dvd, video, etc.).
Ms adelante veremos cmo hacer esto, ya que por lo que se pide podemos notar
que esto no se puede hacer en una grilla estndar ya que queremos para cada
pelcula de la grilla desplegar un control debajo del otro).
A lo largo de este captulo iremos implementando todo esto a medida que vamos
viendo los conceptos tericos necesarios para su desarrollo.
Grilla estndar
Grilla Freestyle
1. si dentro de un evento del Web Panel se est utilizando el comando For each line o
For each line in <grid>, todas las variables que estn dentro del grid pasan a ser de
ingreso. Es posible indicar en este caso cules son las variables que no van a poder
ser modificadas, utilizando la regla noaccept() o modificando la propiedad Read Only
de la variable dentro del grid.
2. si dentro de la fila hay algn control con un evento clic asociado.
1. LinesBackColor
2. TitleBackColor
Si BackColorStyle = Report
1. LinesBackColor
2. LinesBackColorEven
3. TitleBackColor
Si BackColorStyle = Uniform
1. BackColor
El ancho de cada columna de un grid se especifica como un porcentaje del ancho total del
grid (que por defecto no se especifica, el browser lo calcula en funcin al contenido de todas
las celdas).
El ancho del grid NO se deduce como la suma de los anchos de las columnas, ya que si estos
se especifican en valores relativos (porcentajes), puede no corresponderse a lo deseado.
Aplican a todas las columnas del grid, para modificar los valores correspondientes a una
determinada columna, se deben modificar las propiedades de la misma (ver mas adelante).
Table
Los grids tambin tienen algunas propiedades configurables para las tablas Estas
propiedades son:
1. ToolTiptext
2. Align
3. Background
4. BorderWidth
5. Cellpadding
6. Cellspacing
7. Rules.
Propiedades modificables en ejecucin
A continuacin se detallan las propiedades que se pueden modificar a los grids en tiempo de
ejecucin:
En ese dilogo, seleccionando Properties sobre una columna se despliega un dilogo, como el
siguiente:
1. ControlName
2. Class La propiedad Class solo se encuentra disponible si el control est en el form de
un objeto que tiene un Tema asociado.
3. ControlType
4. ReadOnly
5. Autoresize
6. Font
7. ForeColor
8. Title
9. TitleFont
10. TitleForeColor
11. Format
12. Visible
13. ReturnOnClick
1. Backcolor
2. Backstyle
3. Enabled
4. FontBold
5. FontItalic
6. FontName
7. FontSize
8. FontStrikeThru
9. FontUnderline
10. ForeColor
11. Format
12. Title
13. TitleBackcolor
14. TitleBackstyle
15. TitleFontBold
16. TitleFontItalic
17. TitleFontName
18. TitleFontSize
19. TitleFontStrikeThru
20. TitleFontUnderline
21. TitleForeColor
22. TitleFormat
23. Visible
24. Class
PROPIEDADES DE GRIDS EN LOS TEMAS
GRID FREESTYLE
El grid Freestyle permite al usuario definir el formato de los datos a desplegar de una forma
menos estructurada que el grid tradicional.
Para insertar el grid Freestyle se debe utilizar el botn de la barra de controles disponibles.
El grid Freestyle es bsicamente una tabla a la que se le pueden insertar los atributos /
variables, text blocks, imgenes, botones, web components, embedded pages, grids freestyle
y/o grids que se van a mostrar posteriormente en la pantalla. Este tipo de grid no posee ttulos
para las columnas y adems permite tener ms de un tipo de control, atributo / variable en
una misma celda, proporcionando de esta forma mayor libertad de diseo. Cabe destacar que
el grid Freestyle posee las mismas propiedades mencionadas anteriormente para el grid
tradicional.
En este caso para poder visualizar las propiedades hay que seleccionar la tabla donde se
encuentran los atributos / variables.
1. Control Name
2. Class La propiedad Class solo se encuentra disponible si el control est en el form de
un objeto que tiene un Tema asociado.
3. BackColorStyle
4. Rows
5. Columns
6. AllowCollapsing
7. Collapsed
4. LinesBackColor
5. LinesBackColorEven
Si BackColorStyle = Uniform
1. BackColor
Introduccin
A partir de la versin GeneXus 7.5 se brinda al usuario una serie de mtodos que habilitan el
paginado automtico en grids y grids freestyle.
Alcance
Objetos: Web Panels
Plataformas: Web
Descripcin
El paginado de grids aplica a grids comunes y freestyle cuya propiedad Rows tiene un valor
diferente de cero. Los grids pueden estar anidados.
Existen algunas diferencias relacionadas con la paginacin cuando un grid tiene tabla base o
no.
Mtodos
A continuacin se describen los mtodos disponibles:.
FIRSTPAGE:
El mtodo FirstPage lleva al usuario al primer conjunto de registros devueltos.
Los valores devueltos por este mtodo son los siguientes:
0: Operacin exitosa
1: No est habilitado el paginado en el grid
NEXTPAGE
El mtodo NextPage lleva al usuario al siguiente conjunto de registros.
Los valores devueltos por este mtodo son los siguientes:
0: Operacin exitosa
1: No est habilitado el paginado en el grid
2: Ya se encuentra en la ltima pgina.
PREVIOUSPAGE
El mtodo PreviousPage lleva al usuario al conjunto anterior de registros.
Los valores devueltos por este mtodo son los siguientes:
0: Operacin exitosa
1: No est habilitado el paginado en el grid
2: Ya se encuentra en la primera pgina
LASTPAGE
El mtodo LastPage lleva al usuario al ltimo conjunto de registros. Puede ser
utilizado nicamente si el grid tiene tabla base.
Los valores devueltos por este mtodo son los siguientes:
0: Operacin exitosa
1: No est habilitado el paginado en el grid
3: El grid no tiene tabla base
GOTOPAGE
El mtodo GotoPage(PageNumber) permite acceder en forma directa a un
determinado conjunto de registros. Puede ser utilizado nicamente si el grid
tiene tabla base.
Los valores devueltos por este mtodo son los siguientes:
0: Operacin exitosa
1: No est habilitado el paginado en el grid
RESUMEN
A continuacin se incluye una tabla con un resumen de los mtodos disponibles
cuando un grid tiene tabla base y cuando no.
RecordCount
PageCount
Consideraciones
Si el web panel que se est paginando tiene filtros, se debera agregar el mtodo
FirstPage dentro del evento que aplica el filtro, a los efectos de evitar que el
resultado desplegado corresponda a la pgina en la que se encontraba
anteriormente.
El mtodo LastPage determina cul sera la ltima pgina, para lo que utiliza la
propiedad Rows y la propiedad RecordCount del grid. El hecho de utilizar la
propiedad RecordCount implica que el DBMS (no el cdigo generado) barre dos
veces la tabla base del Grid (la primera vez para contar y la siguiente para "cargar").
El mtodo LastPage ha sido pensado para que se ejecute un nico comando Load por
cada registro de la tabla base. Por ello, si existen IFs en el evento Grid.Load que
pueden condicionar la ejecucin del comando mencionado o se ejecuta ms de una
vez el mtodo Load por cada registro, los resultados pueden ser inesperados.
Implementacin
El paginado se realiza por "nmero de registro". Esto quiere decir que, la pgina 1 tendr los
registros del 1 al valor de la propiedad Rows, la pgina 2 los que van del Rows +1 al Rows * 2 y
as sucesivamente. Para mostrar la pgina 2, internamente, se "pasa por" los registros de la
pgina 1 sin mostrarlos. En general, para mostrar la pgina N, se "pasa por" los registros de las
pginas anteriores (N-1) sin mostrarlos.
Dada la implementacin, se recomienda:
1. Tener un buen filtrado de datos (de forma que no existan muchas pginas)
2. Evitar, cuando el costo sea alto, el uso de GotoPage( N) con valores altos de N, as
como el uso de LastPage.
3. Tambin se recomienda salvar el valor de la propiedad RecordCount en una variable
ya que cada invocacin de la propiedad implica un COUNT en la base de datos.
Ejemplo
Los mtodos de paginado de grids pueden ser utilizados en los eventos escritos por el usuario.
Por ejemplo:
Event Start
&Count = MyGrid.RecordCount
Pagina2.Visible = 1
EndIf
Pagina3.Visible = 1
EndIf
Endevent
Event Siguiente.Click
MyGrid.NextPage()
Endevent
Event Anterior.Click
MyGrid.PreviousPage()
Endevent
Event Enter
MyGrid.FirstPage()
Endevent
APLICACION PRACTICA
Paginacin a pedido
Como ya mencionamos en la introduccin de este captulo, se quiere mostrar en el
web panel Sale of Movies el "Catlogo de pelculas" programando la paginacin a
pedido en la grilla de pelculas, cargando 5 pelculas a la vez y pudiendo filtrar por
gnero y por ttulo.
Para hacer esto vamos a tener que crearnos dos variables en la parte fija del web
panel, donde el usuario va a indicar los filtros correspondientes (&genre y &title),
pudiendo en el caso de la variable &genre definirnos un dynamic combo box que
nos cargue los gneros existentes de la tabla de gneros, agregando una opcin
(con el mtodo additem) para poder ver las pelculas de todos los gneros. Es
decir, poner la siguiente sentencia en el evento start: &genre.additem(0,'All')
Dado que en la grilla de Pelculas queremos desplegar las pelculas filtradas por
gnero o simplemente desplegar todas las pelculas, una posibilidad es realizar la
carga en forma manual utilizando variables.
La ventaja de la carga manual (con respecto a usar tabla base) es que se puede
optimizar la consulta si el usuario no ingresa un gnero, recorriendo nicamente
la tabla Movies, evitando el join.
Por defecto, GeneXus propone nombres para los controles (que los genera segn
el tipo de control y la cantidad de ese tipo que existan en el form). En muchos
casos para simplificar la comprensin de la lgica del control puede ser til
asignarles nombres ms intuitivos.
Es por este motivo que a esta grilla le asignaremos como nombre Movies y a la
otra (con los Actores de la pelcula del mes) la llamaremos Actors.
Por otro lado, vamos a agregar dos imgenes en el formulario Ver anteriores y
Ver siguientes (prev.jpg y next.jpg respectivamente), programando su
comportamiento en el evento click de cada una.
Endevent
Event 'Search'
Movies.FirstPage()
EndEvent
Event Movies.Refresh
EndEvent
Event Movies.Load
If null(&genre) // si no se filtra por gnero, se recorre la tabla de Movies
For each
Where MovieTitle >= &title when not null(&title)
&photo = loadbitmap(MovieImg) //cargamos la imagen de la
pelcula
&MovieTitle = MovieTitle
load //cargamos la pelcula
Endfor
For each
where (MovGenId = &genre)
where MovieTitle >= &title when not null(&title)
&photo = loadbitmap(MovieImg)
&MovieTitle = MovieTitle
load
Endfor
Endif
EndEvent
Notar que la condicin de filtro por pelcula se realiza con la clusula WHEN para
indicar que la misma se toma en cuenta cuando la variable tenga un valor. En el
caso de tener un valor nulo, no se considera la condicin por lo que se recorrer
toda la tabla.
Si ejecutamos el web panel, podemos notar que los controles que estn en la
columna 1 (imagen de Chaplin, link de Registrar nuevo usuario, Usuario, Password
y botn de Login) aparecen alineados verticalmente en el "centro" de la celda en
la que se encuentran, y como esa celda crece verticalmente segn el tamao de la
grilla de pelculas, puede ocurrir que en ciertas ocasiones no podamos ver a todos
esos controles (a menos que hagamos scroll vertical). Para cambiarle la alineacin
a TOP, lo que tenemos que hacer es presionar el botn derecho del mouse
estando posicionado en la celda de dichos controles y seleccionar la opcin de
"Top" en la propiedad "Vertical Align".
Introduccin
Poder disear Web Panels con ms de un grid potencia el desarrollo de estos objetos, ya que
permite, entre otras cosas resolver en el mismo objeto accesos a diferentes tablas.
Descripcin
El uso de varios grids en un web panel, implicaron un cambio en la forma de especificar en
GeneXus las reglas, los eventos y las condiciones asociados a los mismos.
Atributos.
No se permite referencias <Grid Control Name>.<Attribute>.
Esto implica que si un atributo se encuentra en ms de un grid, los cambios de las propiedades
afectan a todos los grids en los que se encuentra.
Variables.
No se permite <Grid Control Name>.<Variable>.
Esto implica que no se recomienda tener la misma variable en mas de un grid ya que cuando la
misma variable est presente en ms de un grid, los cambios de las propiedades afectan a
todos los grids en los que se encuentra.
Propiedades.
Las propiedades de los grids conservan la implementacin y comportamiento actual ya que
siempre estuvieron asociadas al objeto.
Eventos.
Los eventos del grid conservan su comportamiento actual.
Los eventos Load y Refresh deben referenciar al grid usando la siguiente nomenclatura:
....
EndEvent
Comandos.
Los comandos que actan especficamente sobre el grid cambian de forma de que, en caso de
haber ms de un grid, se pueda determinar a cual grid se aplica, estos comandos son:
For each line: Este comando debe incluir una referencia al grid de la siguiente forma:
For each line IN <Grid Control Name>
Load: Dispara la carga del grid. La sintaxis continua siendo Load, pero debe incluirse
dentro del evento load asociado a dicho grid. Si el objeto solo tiene un grid, no es
necesario usar la nomenclatura nueva.
Ejemplo
Event Grid1.Load
Load
Endevent
Reglas.
Order: Quedan asociadas al grid. (Se puede editar dando clic con botn derecho
sobre el grid)
Hidden: Los atributos / variables nombrados en esta regla son colocados como
hidden en cada uno de los grids. No se recomienda su uso, en contrapartida se
recomienda agregar el atributo / variable al grid y luego ocultarlo usando la
propiedad visible.
La razn para promover el uso de los atributos / variables con la propiedad Visible en
False en lugar de la regla hidden es que los atributos referenciados en las reglas hidden
estn en TODOS los grids mientras que los otros slo estn para el grid en que fueron
definidos. Esto redunda en menos cdigo HTML a enviar al Browser y, en
consecuencia, mejor performance
Precedencias
Order: Si el conjunto de atributos de la regla se corresponde con los de algn grid y
este tiene un orden asignado explcitamente este ltimo es el que se toma en
cuenta.
Conditions.
Las condiciones se pueden indicar por cada grid o en forma general para el objeto.
Si hay condiciones generales y particulares sobre los mismos atributos, se toman en cuenta
todas.
Los atributos que participan en la determinacin de la tabla base de cada grid son los que:
Estn en el grid
Estn referenciados en las reglas Hidden y Order aplicadas al grid y en conditions
aplicadas al grid
Tampoco participan los atributos que estn en los Eventos (fuera de los grupos For each) como
ocurre en los work panels. Estos, debern pertenecer a la tabla extendida de alguno de los
grids.
Carga.
La carga se realiza para cada grid de forma independiente, es decir, an si los datos que se
muestran en ambos grids estn relacionados, el especificador no relaciona las cargas.
La carga incluye el evento refresh, o sea que la secuencia de carga de un objeto con 2 grids es:
El orden en que se cargan los grids es como aparecen en el form: de arriba hacia abajo y de
izquierda a derecha.
Aplicacion practica
Multiples subfilesgrillas
Lo que nos quedara por hacer en este web panel es desplegar la imagen y
resumen de la "Pelcula del Mes" (que para simplificar la supusimos fija, la de
cdigo 4), y una grilla subfile con los Actores de dicha pelcula.
Parm(MovieId);
Event Start
Endfor
EndEvent
Grid de actores
Vamos a desplegar en cada lnea del grid, la concatenacin del apellido y nombre
de cada actor separado por coma, para lo cual vamos a tener que realizar la carga
manualmente, esto es, en el evento Actors.load.
Haga clic aqu para ver como inclumos en el form el grid de Actores, y le
llamamos Actors.
Event Actors.Load
For each MovieId //se recorre la tabla Movie_Act
&actorname = concat(ActLastName, ActName,', ') // &actorname es la
variable presente en el grid de actores.
actors.load()
Endfor
Endevent
Grid de precios
Carga del grid
En el grid de precios vamos a tener que desplegar para cada tipo de pelcula un nico
registro con el precio (el de fecha mxima).
Recuerde que el MovieId se recibe como parmetro. Entonces recorremos la tabla Movie_Prc,
para obtener para cada tipo de pelcula (MovieTypeId), el precio (MovieLinPrc) que se
corresponde con la fecha ms reciente (MovieLinDate).
En una variable el usuario indicar la cantidad que desea comprar (la vamos a implementar
con un combo box con los valores del 0 al 5, y la llamaremos Qty).
Observe que hay que tener disponible para cada lnea del grid el valor del
MovieTypeId , ya que lo vamos a tener que pasar como parmetro al momento de
presionar el botn de Add to cart para generar la orden de compra
correspondiente.
Entonces, haremos la carga del grid en forma manual, incluyendo las siguientes
variables:
Variable Type
&Qty N(5)
&MovieTypeDsc Based on MovieTypeDsc
&MovieTypeId Based on MovieTypeId
&MovieLinPrc Based on MovieLinPrc
Event Prices.Load
for each MovieTypeId
defined by MovieLinPrc
&Movietypeid = MovieTypeId
&MovieTypeDsc = MovieTypeDsc
&flag = 0
for each (MovieLinDate)
if &flag = 0
&MovieLinPrc = MovieLinPrc
&flag = 1
endif
endfor
prices.Load()
endfor
EndEvent
Se va a tener que recorrer el grid de precios para ver las cantidades que se
desean comprar para cada tipo de pelcula y acceder a la tabla de rdenes para
ver si existe una orden para ese cliente que se encuentre en estado de
"Pendiente", y de ser as agregar esta compra a las lneas de la orden. En caso de
no existir una orden pendiente para ese cliente, se deber dar de alta una orden
nueva (como "Pendiente") y las lneas que correspondan.
Una vez recorridas todas las lneas del grid se quiere llamar a una web transaction
(Purchase Order) que despliegue los datos de la orden generada hasta el
momento, donde se va a permitir eliminar o modificar los datos de las lneas de la
orden.
For each
&PurOrdId = PurOrdId
Endfor
For each line in Prices se recorre el grid de precios, donde se indic la cantidad que se
desea comprar
if not null(&Qty)
If null(&PurOrdId)
&PurOrdId = udp(PAddHead, &CustId)
endif
call(PAddLine,&PurOrdId ,MovieId, &MovieTypeId,&Qty)
endif
Endfor
call(TPurchaseOrder,&PurOrdId) muestra la orden de compra generada hasta el
momento
EndEvent
Nota Importante
Observe que en ese evento se usa el CustId, para armar la orden de compra. Por
el momento (hasta que no veamos el captulo de Seguridad), asumiremos que el
usuario ingresa su usuario, contrasea y presiona el botn de LOGIN
inmediatamente antes de presionar el botn de Add to cart. De esta forma
obtenemos en el evento correspondiente al botn de LOGIN, en la variable
&CustId, el CustId del cliente logueado, para luego poder usuarlo en el evento
correspondiente al botn de Add to cart. Como vimos en captulos anteriores, es
necesario en este caso tener la variable &CustId en el form. Revise lo visto en
Ejemplo: Esquema de trabajo en Internet
GRIDS ANIDADOS
Es posible definir grids 'anidados' en un web panel.
Los grids anidados consisten en un grid Freestyle al que se puede insertar dentro de una celda
otro grid estndar u otro Freestyle.
Por ejemplo, se quiere tener un web panel que muestre los productos, pero indentados por
categora:
Electrodomsticos
Heladera
TV
Muebles de escritorio
Silla ejecutiva
Mesa de directorio
...
Para ello se define un grid free-style con la categora y dentro de este se inserta otro grid con
los productos.
Puede haber grids anidados de varios niveles y puede haber tambin paralelos. Puede decirse
que se est definiendo un rbol en donde cada nodo es un grid.
Cada grid puede ser un free-style o un grid comn, aunque si es comn no puede tener
ninguno anidado.
Los grids comunes solo pueden ser hojas del rbol de anidacin.
Para relacionarlas, se deben incluir en los grids los atributos relacin necesarios.
Generalizando el concepto, se deben incluir atributos que determinen especficamente la tabla
base deseada.
Como existen las propiedades Visible y Hidden, no tendrn porque visualizarse en el grid, pero
s deben participar en la definicin.
Siguiendo con el ejemplo anterior, el grid de Productos deber tener el cdigo de la categora
para que los relacione.
Sf1: CatDsc
Disparo de Eventos
El manejo de eventos es anlogo al del resto de los grids: se tienen los eventos refresh, load.
Cada vez que se ejecuta el comando Load en un grid con anidaciones, se llama al
evento Refresh y load de cada hijo. Cada grid puede o no tener tabla base (es
decir un for each implcito). Si no lo tiene, se deben cargar los datos con el
comando Load como en el resto de los grids sin tabla base.
Una posible aplicacin del uso de grids anidados en nuestro Sitio de Venta, es
disponer de un catlogo completo de pelculas clasificadas por su gnero.
Para eso creamos un web panel con el estilo del sitio, denominado MovieCatalog y
agregamos un grid freestyle donde colocamos los atributos MovGenId, MovGenDesc
y dentro de este grid colocamos otro (tambin de tipo freestyle) con los atributos
MovieId, MovieTitle para desplegar la informacin de la pelcula.
Como vimos anteriormente el grid puede ser estndar o Freestyle, en este caso
elegimos un grid Freestyle simplemente por el modo en que esta pgina va a ser
diseada.
La manera de ocultar los atributos que no queremos que se vean dentro de los
freestyle grids, es poner lo siguiente en el evento start:
MovGenId.Visible = 0
MovieId.Visible = 0
Para mejorar el diseo de nuestro catalogo, podemos agregarle las imgenes de las
pelculas y realizar algunas pequeas modificaciones.
CustId*
CustAddssId*
CustAddssDsc
2) Agregar una imagen o botn en cada lnea del grid, y en el evento asociado
llamar a otro objeto que permita realizar la modificacin
AllowHovering
AllowCollapsing
Porque de querer hacerlo as, en el cdigo asociado al botn tendramos que hacer
lo siguiente:
Es por este motivo que la nica forma de implementar esto como lo explicamos
anteriormente.
La forma de hacer que una variable dentro de un grid sea editable, para que el
usuario la pueda modificar es la siguiente:
Tener un for each line en el evento asociado a algn control del form,
un evento click asociado a algn control en las lneas del grid
Si se quiere que algunas variables sean editables y otras no, usar la Regla
noaccept() para aquellas variables que se quiere que sean readonly.
Nota:
Y el evento sera:
Event 'My Addresses'
call(HCustAddresses ,CustId)
INTRODUCCION AL CAPITULO 5
En nuestra aplicacin ventas de pelculas el rea de login, se repite en gran parte de
los web panels que hemos diseado. Hasta el momento, usbamos un style para
inicializar el objeto, pero como se mencion anteriormente los styles en ambiente
web no tienen el dinamismo que tienen en ambiente win.
Los Web Components son Web Objects que tienen una propiedad que indica que
son componentes. Es decir, pueden ser ejecutados en forma independiente como
cualquier otro Web Object o pueden formar parte de otro objeto web (Web Panel o
Web Transaction); por ende permiten a los diseadores de aplicaciones Web GeneXus
un alto grado de reutilizacin de los mismos.
Cualquier parte de un Web Panel que se repita en varios objetos web de una
aplicacin, puede ser definida como Web Component.
La idea entonces es, en lugar de tener implementado, por ejemplo, la carga del
men en cada uno de los Web Panels que requieren el mismo, programarla en un
Web Component y reutilizarlo en cada Web Panel que requiere un men.
Los Web Components se generan dentro del mismo HTML del Web Panel que los
contiene. Esto significa que el servidor resuelve la inclusin del Web Component en
tiempo de ejecucin y devuelve al navegador el cdigo HTML con el Web
Component ya incluido.
Uso de Web Components
Para insertar un Web Component en un Web Panel o Web Transaction se debe
Propiedades
El objeto Web Component tiene las siguientes propiedades de diseo:
&variable = HMenu
Comp1.Object = Create(&variable)
Do Case
Case &Var=Objeto1
Create(Objeto1)
Case &Var=Objeto2
Create(Objeto2)
....
endcase
Observaciones
En diseo, el tamao del Web Component permanece fijo, pero en
ejecucin, el tamao quedar sujeto al espacio ocupado por el mismo.
La forma de fijar el tamao del Web Component en ejecucin es
entonces incluyndolo en una tabla y fijando el tamao de la celda.
Un Web Component puede a su vez contener otros Web Components.
Los parmetros de los Web Objects cuando son utilizados como Web
Components no son opcionales. Notar que esto es una diferencia con
los Web Panels comunes cuyos parmetros s son opcionales.
La asignacin de un Web Component puede realizarse dentro de
cualquier evento del web panel padre.
Si se asigna un Web Component en el evento Start del padre, los
parametros se pasarn solamente la primera vez que se crea. En
sucesivos POST, los parmetros se recordarn del render anterior.
Si se asigna un Web Component en cualquier otro evento (Refresh,
Load, de usuario, etc.), los parmetros se pasarn siempre que se
ejecute dicho evento.
Si se asigna el web panel en la propiedad Object del control Web
Component en diseo, el pasaje de parmetros se realiza en forma
anloga a lo descrito en el punto anterior.
Los controles y las variables de los Web Components no son accesibles
por los objetos que los contienen (objeto web padre). Si por ejemplo
se desea que un campo del Web Component tenga un color
determinado por el padre, se le tendr que pasar por parmetro el
color y asignarlo en el evento Start del Web Component.
En ejecucin, las propiedades del form del Web Component son
heredadas del objeto web que lo contiene. Por ejemplo si el form de un
Web Component tiene color verde, pero el form del objeto web que lo
contiene tiene color blanco, entonces este ltimo predominar sobre el
primero. No es as con las propiedades de los dems controles.
No se soporta el uso de atributos como primer parmetro de la funcin
Create.
En C/Sql y Visual Basic el .EXE o .ASP del main incluir los fuentes de
todos los web components llamados por l. Esto es diferente en Java y
.Net, donde cada objeto tiene su propio .class o .dll. Esto no
necesariamente es un problema para Visual Basic o C (los servidores
tienen tecnologa de swapping lo cual implica que no haya perdida de
performance por el tamao del EXE o ASP).
TRANSACCIONES COMO WEB COMPONENTS
Introduccin
A partir de la versin 8.0, no solo un Web Panel puede ser un Web Component, sino tambien
cualquier Transaccin con interfaz web.
Alcance
Objetos: Transacciones
Interfaces: Web
Descripcin
La posibilidad de definir una transaccin como Web Component permite tener en un Web
Panel varios componentes, algunos conteniendo Transacciones (para altas, bajas y
modificaciones de datos) y otros conteniendo Web Panels que despliegan informacin
relacionada, menues, etc.
La definicin y el uso de una transaccin como Web Component es similar al caso de Web
Panels como Web Components
Observaciones
Es posible tener varios web components con transacciones en un mismo web panel, pero se
deben tener en cuenta los siguientes puntos:
El estado de grabacin no se mantiene por cada componente. Esto significa que si el usuario
ingresa a un componente y realiza una operacin (por ejemplo modifica un atributo de la
transaccion y oprime el boton Aplicar Cambios por primera vez) y no reconfirma la misma, al
realizar una operacin en otro componente (por ejemplo un GET), se pierden los cambios
realizados en el primero (es decir se refresca la pgina con el valor y estado que tena antes de
modificar el atributo).
Ejemplos
Puede obtener un ejemplo en esta URL:
http://www.gxopen.com.uy/hproject.asp?122
EJECUCIN DE OBJETOS WEB CON WEB COMPONENTS
A continuacin se describe la ejecucin de objetos Web que contienen Web
Components.
Ejemplo:
A B
En este caso el orden de los eventos cuando se ejecuta por primera vez es el
siguiente:
Todos los eventos del Web Component (START, REFRESH y LOAD si tiene
subfiles) se ejecutan cada vez que aparece el Web Component.
Un Text Block tiene menos funcionalidad que una variable. Sin embargo, en la
medida en que la funcionalidad adicional no sea necesaria es recomendable
utilizar un Text Block en lugar de una variable ya que el cdigo HTML generado
para un Text Block es normalmente menor (en algunos casos la mitad) que el
de una variable. Es importante notar que la cantidad de cdigo HTML generado
depende del contenido de la variable o del valor de la propiedad Caption de un
Text Block.
Lo que vamos a hacer ahora es reemplazar el rea de login en el web panel Sale of
Movies por un web component.
Para poder hacerlo, lo primero que vamos a hacer es definir un nuevo web panel,
que llamaremos Login, e indicar que el mismo es un web component.
Nota:
EMBEDDED PAGES
Introduccin
El objetivo de las Embedded Pages es poder incluir informacin externa, es decir desplegar el
contenido de cualquier URL en objetos web generados por GeneXus.
Alcance
Objetos: Web Panels, Web Transactions
Interfases: Web
Descripcin
Una Embedded Page es un control que se puede insertar en un Web Panel o una Web
Transaction. A este control se le puede asociar cualquier pgina u objeto web GeneXus, cuyo
contenido luego ser incluido en ejecucin dentro del objeto.
Requerimientos
Para poder visualizar objetos Web que contienen Embedded Pages, se requieren browsers
que soporten el tag correspondiente al inline frame (<IFRAME>). En consecuencia, el browser
(en el cliente) debe ser como mnimo Internet Explorer 4.0, Netscape 6.0 o versiones
superiores.
Propiedades
El control Embedded Page tiene las siguientes propiedades:
ControlName: Nombre del control.
BorderStyle
Scrollbars
Source
TooltipText
Height
Width
Align
PROPIEDADES MODIFICABLES EN EJECUCIN
A continuacin se detallan las propiedades modificables en tiempo de
ejecucin:
BorderStyle
TooltipText
Source
Visible
Height
Width
HeightUnit
WidthUnit
Observaciones
Si en las propiedades del control no se especifica la propiedad
Source, entonces en el evento START o REFRESH se debe
asignar algn valor a la misma. Por ejemplo EP.Source =
http://www.genexus.com, siendo EP el nombre del control
Embedded Page.
Se permite la asignacin dinmica de URLs, es decir se permite
algo del estilo
&url = http://www.genexus.com
EP.Source = &url
Se pueden incluir Embedded Pages dentro de subfilegrids freestyle.
INTRODUCCION AL CAPITULO 6
A lo largo de este captulo discutiremos como se comportan las transacciones que
se ejecutan en el web (transacciones con form HTML).
TRANSACCIONES WEB
Descripcin
Las Transacciones Web no son un nuevo tipo de objeto GeneXus, sino un nuevo form para las
transacciones tradicionales que permiten su ejecucin en navegadores.
Tambin facilitan el diseo de aplicaciones Web porque permiten resolver el ingreso de datos
sin tener que definir Web Panels y Procedimientos para resolverlo, realizando
automticamente todos los controles de integridad referencial necesarios.
Para disear este nuevo form Web, que ser el que se visualizar en ambientes Internet se
utiliza el mismo editor HTML que en el diseo de Web Panels.
Cmo se define en GeneXus?
Para disear el form Web de una transaccin, se debe abrir la transaccin y
seleccionar la opcin Object/Web Form del men GeneXus.
Inicialmente se crea un form donde se muestran los botones de movimiento, los atributos que
componen la transaccin y sus descripciones y los botones para confirmar los datos.
Tambin tiene un control denominado Error Viewer donde se despliegan los mensajes. Este
control podr ubicarse en cualquier parte del form y se le podrn asignar propiedades (tipo de
letra, color, etc.).
Los botones definidos automticamente por GeneXus pueden cambiarse por imgenes a las
que se les asocian en la propiedad OnClickEvent los eventos estndar de GeneXus (por
ejemplo, Next, Last, Get, etc.)
Las Transacciones Web tienen un dilogo a pantalla completa, semejante al que se provee en
el iSeries en pantallas de texto. La razn de este diseo es facilitar el uso en ambientes de
Internet donde un dilogo de tipo campo a campo como en los ambientes visuales (Visual
Basic, Visual FoxPro, etc.) resultara inviable por performance.
Arbol de evaluacin
Con este tipo de dilogo, las reglas se disparan en dos momentos: al ingresar a
la transaccin (las que no tienen condiciones de disparo) y tambin al
confirmar los datos. Esto determina diferencias en el comportamiento de
aplicaciones que tienen dilogo campo a campo:
1. Evento Start
2. Lectura de los atributos/variables de la pantalla
3. Reglas
REGLAS
La regla Default_mode no aplica en Transacciones Web.
La regla Default (Att,&today) se dispara nicamente la primera vez que se
ejecuta la Transaccin Web, en su lugar se aconseja utilizar
default(Att,today()). Lo mismo ocurre con la variable &time y la funcin Time()
correspondiente.
Integridad transaccional
Por la forma de trabajo en Internet, las Transacciones Web viven solamente
el tiempo entre que el usuario de un navegador seleccion el link o presion un
botn y la nueva pgina es mostrada. Toda modificacin a la base de datos que
se haga durante la vida debe ser confirmada o eliminada antes de que la
Transaccin Web muera y retorne la pgina resultante.
Como consecuencia, una Transaccin Web inicia una UTL (unidad de trabajo
lgica) al comenzar a ejecutar y la cierra (ya sea por COMMIT o ROLLBACK)
antes de terminar. No puede formar parte de otra UTL. Si un programa llama a
una Transaccin Web, sta iniciar otra (nueva) UTL.
Control de concurrencia
Las Transacciones Web utilizan el dilogo pseudo-conversacional. Esto implica
que, mientras el usuario esta realizando modificaciones a los datos o
simplemente vindolos, no existe ningn tipo de locks en la base de datos.
El control de cambios (es decir la validacin entre la lectura inicial y la
confirmacin) se realiza a nivel de cada tabla involucrada en la Transaccin
Web. Los valores ledos al momento de enviar los datos son comparados con
sus correspondientes, en cada tabla, en el momento de recibir las
modificaciones (cuando el usuario presiona Confirm). Si los valores no
coinciden, se informa al usuario que hubo cambios y que debe intentar
nuevamente.
Modo Insert
Al ingresar a una Transaccin Web de este tipo, se comienza en modo Insert, y se despliega
una pantalla con la siguiente forma:
Si se quiere ingresar un registro nuevo, se digitan los datos en la pantalla y se presiona el
botn Apply Changes. Esto provoca, en primera instancia, que se validen los datos ingresados
en forma similar a cuando se presiona el botn Check. En caso de que ya exista el registro va
a dar un mensaje de error que se despliega en el Error Viewer. El mensaje es Record already
exists.
Luego de actualizada la base de datos, se despliega el mensaje Data has been successfuly
added.
Modo Update
Para entrar en modo Update, se deber poner un valor en la clave y presionar el botn Get (
). Esto hace que se carguen los datos del registro.
Al cargar los datos tambin se traen las descripciones. Se pueden modificar los datos y
presionar el botn Apply Changes, y se actualizarn los datos con un procedimiento anlogo
al que se sigue para el modo Insert.
Modo Delete
Para eliminar un registro primero se debe ingresar en modo Update (ingresando la clave y
presionando el botn Get), y luego presionar el botn Delete All, lo que provoca que se
deshabilite dicho botn. En el caso de trabajar con confirmacin, se desplegar el mensaje
Confirm deletion
Al presionar el botn Apply Changes, se eliminarn los datos y de desplegar el mensaje Data
has been successfuly deleted:
Ahora que ya vimos como funcionan las transacciones web, podemos definir la
transaccin para registrar un nuevo usuario que es invocada en el link que
definimos en el Web Panel Sale of Movies.
Parm(&CustId,&Mode);
Adems, debemos agregar una regla que evite que el cdigo de Cliente sea
ingresado:
Noaccept(CustId);
El ingreso de todos los campos es obligatorio, por lo cual debemos agregar reglas
que hagan este control:
Accept(&PswConf);
En el evento start, agregar el cdigo siguiente para que los controles de ingreso de
passwords queden enmascarados:
Event Start
&PswConf.IsPassword = 1
CustPsw.IsPassword = 1
EndEvent
Ahora que ya definimos la transaccin web, podemos modificar el link para registrar
un nuevo usuario, en la pgina principal, de forma de que le pase los parmetros
adecuados a la transaccin Customer.
Grid
Eliminacin de lneas
Nota: Es importante considerar nuevamente que cuando se est en una Transaccin Web se
est modificando todo el documento y no se est en un nivel en particular de la misma. Por
eso para eliminar lneas se debe utilizar el botn Apply Changes porque en realidad se est
actualizando el documento. Lo mismo para agregar lneas, se debe utilizar el botn Apply
Changes porque se est actualizando el documento.
REGLA PROMPT ON
Introduccin
Es posible definir el control que activa la llamada a un determinado prompt en objetos Web,
en lugar del bitmap utilizado por defecto.
Esto posibilita adems la llamada desde Web Panels a prompts de GeneXus o de usuario.
Alcance
Objetos: Web Panels, Transactiones
Interfaz: Web
Descripcin
La regla PROMPT permite especificar (opcionalmente) el nombre del control que activa la
llamada a un determinado prompt.
Nota: Esta regla aplica nicamente a objetos que se especifiquen para interface Web, en caso
que se utilice en otros objetos, se ignora la nueva funcionalidad.
Introduccin
En muchas circunstancias, en una transaccin Web es necesario utilizar Web Panels de usuario
en lugar de las listas de seleccin generadas automticamente por GENEXUS, mediante el uso
de la regla Prompt.
Alcance
Objetos: Transacciones
Interface: Web
Descripcin
Existen casos en los que un usuario requiere crear un Web Panel que luego quiere utilizar
como prompt para obtener valores de atributos.
Para invocar el Web Panel, simplemente se utiliza la regla prompt en una transaccin web o
dentro de un web panel.
Al dispararse la regla prompt (haciendo click sobre un control) se abre una ventana con el Web
Panel y, al seleccionar un valor (nuevamente haciendo click) se cierra la ventana y el valor se
asigna a lo(s)/la(s) atributos/variables que corresponda.
El web panel que ser utilizado como prompt debe cumplir ciertas condiciones:
1. Debe tener uno o ms parmetros de tipo output. Puede tener de in, de inout
tambin pero lo importante es que tenga de output que son los que devolver.
2. Alguno de los atributos, variables, text blocks o imagenes del form debe tener la
propiedad de diseo ReturnOnClick en True. Puede tener habilitada esta propiedad
en ms de un atributo/variable. En caso de ser un atributo o una variable, tiene que
estar Read Only para que la propiedad est habilitada.
3. Los valores a retornar (de los parmetros definidos como de output) no se
determinan al realizar click, sino al desplegarse la pantalla por lo que tienen que
tener el valor vlido a retornar en cada Load (si se muestra un grid, por ejemplo).
Si uno de los atributos variables, text blocks o imagenes del form que tienen la propiedad de
diseo ReturnOnClick en True tambin tiene programado el evento Click, el cdigo que este en
el dicho evento se ignora. Simplemente al hacer click se asignan los valores a las variables de
tipo OUT y se retorna.
Uso avanzado
Esta funcionalidad puede no contemplar todos los casos. Por ello, tambin se implement la
funcin ReturnOnClick() (sin parmetros) que puede ser asignada a la propiedad Link de
cualquier control (que tenga esta propiedad).
Ejemplos
Prompt de Clientes
Un prompt de clientes se programa as:
En los Eventos:
event Grid1.load
&CliCod = CliCod
endevent
En el form:
Un grid que tiene CliNom y CliCod, donde CliNom (por ejemplo) tiene la propiedad
ReturnOnClick en true.
Parm(PurOrdId);
Adems, tenemos que modificar el web panel Sale of Movies para poder devolver
el cdigo de la pelcula elegida cuando el cliente haga clic sobre la imagen. Esto se
logra modificando la propiedad Returnonclick (valor True) de la imagen, y
poniendo como parmetro de salida el MovieId.
Se quiere dar al usuario la posibilidad de dar por finalizada la orden, para lo cual
agregaremos en la pantalla de la transaccin un botn de "Confirm Order". En el
evento asociado, vamos a tener que cambiar el status de la orden a "Finalizada"
(invocando al procedimiento ProcofPurchOrder) y llevar en forma automtica al
usuario al web panel principal del Sitio (Sale of movies).
Haga clic aqu para ver la demostracin
INTRODUCCIN AL CAPTULO 7
Las aplicaciones Web necesitan un look & feel bastante ms sofisticado que las aplicaciones
Winform y los desarrolladores no tenemos las habilidades y el tiempo para lograr un diseo
con esas caractersticas.
Por esa razn, por lo general se opta por contratar servicios de diseo. Por lo cual, es necesario
luego integrar ese diseo con la aplicacin GeneXus. Esta integracin se logra a travs de los
Themes.
Para el diseo grfico contamos con el Editor de Themes, una herramienta de libre
distribucin que se puede ejecutar en forma independiente de GeneXus.
Mientras que en versiones anteriores las propiedades de los controles en los html forms
(Web Panels y forms html de las transacciones) debian ser configuradas en los controles,
hoy mediante los Themes se pueden definir Clases para los diferentes tipos de controles y
asignarles propiedades a esas Clases.
Luego, los controles se asocian a esas clases, y stos heredarn las propiedades all
configuradas. Por lo tanto ya no es necesario establecer los valores de las propiedades para
cada control en el form. Las propiedades de los controles se configuran en un nico lugar: en
las clases del Theme.
Recuerde que en el captulo 2 se di una introduccin del objeto Theme e incluso se realizaron
algunos ejercicios para comprender su funcionamiento.
Veremos a lo largo de este captulo en forma ms completa, las diferentes funcionalidades que
brinda este objeto, que se introdujo en la versin 8.0 de GeneXus.
El editor de Themes es una herramienta de libre distribucin que se puede ejecutar en forma
independiente de GeneXus. Esto es para que la herramienta pueda ser usada por el diseador
grfico, y el desarrollo de la aplicacin se independice e incluso se paralelice con su diseo.
Se despliega como una estructura jerrquica de Clases, la siguiente es una imagen del editor
de Themes:
Se puede observar que descendiendo en la estructura jerrquica, se presentan un nodo
Classes y un nodo HTML tags (parte izquierda). Al centro, tenemos las propiedades
correspondientes a cada una de las Clases, y Tags HTML; y a la derecha un preview que es una
vista de cmo se visualizar en ejecucin un control asociado a la clase correspondiente.
CLASES
A partir del nodo Classes se despliega un conjunto de clases predefinidas, correspondientes
a controles GeneXus.
Una clase podr ser asignada a un control en tiempo de diseo, y en runtime a travs de la
Propiedad Class.
clases predefinidas
1. Attribute
2. Button
3. Error Viewer
4. FreeStyle Grid
5. Grid
6. HyperLink
7. Image
8. Table
9. Textblock
10. Form
Nota 1:
BTnCancel
BtnCheck
BtnDelete
BtnEnter
BtnFirst
BtnGet
BtnHelp
BtnLast
BtnNext
BtnPrevious
BtnRefresh
BtnSelect
Nota 2:
Las propiedades del Form, que se definen en GeneXus se aplican al BODY del HTML. Esto es
porque algunas de esas propiedades no son soportadas por el tag FORM (por ejemplo, el
background color).
Por la misma razn, la clase Form queda en runtime asociada al tag BODY.
Clases derivadas
La parte inferior del editor muestra el nombre de la propiedad, junto con una
descripcin de la misma. Adems dir Inherited: True o Inherited: False
segn corresponda.
Si para una propiedad de una clase dice Inherited: True, significa que su valor es un reflejo
del valor de la misma propiedad del padre. Es decir, cualquier cambio en la clase padre se
traduce en un cambio en la misma propiedad en el hijo.
Propiedades de un Theme
Las propiedades de un Theme son las siguientes:
Nota:
En este panel es posible configurar las propiedades de la clase seleccionada, o del HTML Tag
seleccionado, como se visualiza en la figura:
1. Background Properties
2. Box
3. Classification
4. Font
5. Misc
6. Text
BorderColor
BorderStyle*
BorderWidth
Font
Height
Width
TooltipText
Word Wrap
Caption
Background
BorderStyle*
Height
Width
Adems, se tienen todas las propiedades, fuera del grupo Misc, que como se
mencion anteriormente son propias de los CSS.
Clase Attribute
Dentro de las propiedades del grupo Misc, se tienen las siguientes propiedades, que si bien
pertenecen a ese grupo, no se encuentran dentro de GeneXus para los atributos/variables:
Background
BorderColor
BorderStyle*
BorderWidth
Height
Width
Las propiedades de los dems grupos aparte del Misc tienen su definicin correspondiente al
pi del Editor de Temas, y pertenecen al estndar de CSS.
Clase Image
La clase Image se puede asignar tanto a controles imagen, como a variables de tipo bitmap.
Las propiedades del grupo Misc, que no se encuentran disponibles en diseo en GeneXus
para imgenes son las siguientes:
BackColor
BorderColor
BorderStyle*
Font
ForeColor
Las propiedades de los grupos distintos de Misc pertenecen al estndar de CSS.
En particular, el valor de la propiedad Margin del Editor de Themes, se suma al valor de las
propiedades Hspace y Vspace de GeneXus (caso de imgenes).
Margin
Border
Padding
Content
La hspace y vspace son similares al border, por eso se "suman" cuando se define un margin.
Clase Table
Las propiedades del grupo Misc, que no se encuentran disponibles en diseo en GeneXus
para tablas son las siguientes:
BorderStyle*
LinesColor
LinesFont
Clase Grid
La propiedad que se encuentra en el grupo Misc, y no est en diseo en GeneXus, es:
Borderstyle*
Clase FreeStyleGrid
Clase TextBlock
Las propiedades del grupo Misc, que no se encuentran disponibles en diseo en GeneXus
para textblocks son las siguientes:
BackColor
Background
BorderColor
BorderStyle*
BorderWidth
Height
Width
Font**
ForeColor**
Clase ErrorViewer
Las propiedades del grupo Misc, que no se encuentran disponibles en diseo en GeneXus
para el control ErrorViewer son las siguientes:
Background
BorderColor
BorderStyle*
BordeWidth
Height
Width
Nota:
*La propiedad BorderStyle, en el Tema, tiene una gama de valores ms amplia que en el caso
de la misma propiedad en GeneXus.
Los valores que la propiedad acepta en el Tema son los que admite la tecnologa CSS y son los
siguientes:
None
Dotted
Dashed
Solid
Double
Groove
Ridge
Inset
outset
Preview del editor de Themes
En la barra vertical derecha del editor, hay un botn Preview mediante el cual se
puede mostrar o no, una vista previa de cmo se visualizara un control asociado a
dicha clase.
La vista previa del editor se puede personalizar, agregndole Custom Views, que son
archivos .HTML. Para eso, agregar una nueva vista a travs del men contextual del nodo
Custom Views, o presionando la tecla INS sobre el mismo.
Se puede modificar el source y ver los cambios reflejados en el HTML, pero no se salvan dichos
cambios en el documento que est activo.
Si se tienen diferentes clases form definidas (es decir, distintas clases hijas de la
clase predefinida form), el preview para el resto de los controles se ve con un
aspecto de fondo correspondiente a la configuracin de aquella clase form que sea
la default.
HERENCIA DE LAS PROPIEDADES DE UNA CLASE
En el caso de que una propiedad de una clase est marcada como
Inherited:False, es posible revertir la situacin.
Haciendo click con botn derecho sobre la propiedad correspondiente, aparece un
men Inherit Value. Seleccionando dicha opcin, la propiedad pasar a heredar
el valor de la misma propiedad del padre.
Por ejemplo si se define una clase Bullet derivada de Texblock, con el fin de
definir las propiedades de los textos en listas con vietas.
Supongamos que ahora se quiere tener otra clase para los textos anidados a
aquellos que estan asociados a la clase Bullet, y se desea que tengan las
mismas caractersticas que la clase Bullet a excepcin de la indentacin.
Llamemos a esa clase SubBullet y cremosla como hija de Bullet. Esta clase
solo difiere con su padre en la propiedad TextIndent. Por lo cual, esa es la nica
propiedad que no hereda, y la nica propiedad que habindose modificado en el
padre no se refleja en la clase SubBullet.
Herencia: aplicacin prctica
Como ejemplo del concepto de herencia en los Temas, edite el Tema default de la KB, y
modifique la propiedad BackColor de la clase Button.
Observe que para todas las clases hijas de Special Buttons, que es a su vez hija de Button,
la propiedad Backcolor est indicada como inherited:True, por lo cual, las clases hijas
heredan esa propiedad del padre.
Vea en la web transaction Customer como todos los botones cambian el Backcolor, siendo
que cada uno de ellos est asociado a una clase diferente derivada de Button.
Haga clic aqu para ver cmo se pierde la herencia de las propiedades, al ser modificadas en la
clase hija.
HTML TAGS
Los HTML Tags complementan la funcionalidad de los Themes, en cuanto a que permiten
definir las caractersticas de un Tag HTML, en un determinado contexto. Es decir, siempre que
se quiera establecer la configuracin de un determinado Tag dentro de un contexto, se puede
hacer mediante el Editor de Themes. Por ejemplo, definir las propiedades de los links dentro
de una tabla.
La configuracin de los Tags HTML, dada en el editor, se ve reflejada en la pgina Web si esos
Tags estn en el HTML de la pgina, en el mismo contexto con el cual fueron definidos en el
editor.
El contexto est determinado por la jerarqua con la cual se definen los Tags.
Para el ejemplo que mencionbamos anteriormente, de definir las propiedades de los links
dentro de una tabla, se hara como se muestra en la figura:
Otro caso de ejemplo sera definir un tag body y la propiedad ForeColor del mismo, con lo
cual el texto libre de la pgina tomar ese color.
Aplicacin prctica: Temas
Cuando se hace una aplicacin Web es necesario que el sitio se vea uniforme.
Esto implcitamente requiere de un alto costo de mantenimiento, ya que si por ejemplo hay
que cambiar el color de una grilla de azul a celeste, probablemente habra que hacerlo en
todas las pginas del sitio para mantener la uniformidad del mismo. Antes, haba que ir por
cada uno de los controles de cada objeto. Hoy el cambio se realiza en un solo lado: el Tema.
En tiempo de ejecucin, ese archivo .CSS (que contiene la definicin de las clases)
es referenciado en el Header de las pginas generadas, y se transfiere al pc del
cliente para almacenarse en su cach.
Observe que los objetos de la Kb del curso estn asociados al Tema Default (a
travs de la propiedad Theme del objeto), y los controles de cada uno de los
objetos estn asociados a la clase default correspondiente (propiedad Class de los
controles).
En ese Tema vamos a definir una clase BtnLogin para la cual definiremos algunas
propiedades. En particular, vamos a asignarle una imagen a la propiedad Background de la
clase.
Observe que la propiedad Base Image Path del Tema coincide con la misma propiedad del
modelo de diseo. Entonces, dado que vamos a usar una imagen que se encuentra bajo el
Base Image Path, el path de la propiedad Background del Tema quedar relativo.
Al Tema Movie lo vamos a asociar al web panel Login. Debemos cambiar la clase del botn
Login para que sea BtnLogin.
Dentro de la KB es posible salvar los Themes como archivos con extensin .CSS
(objeto theme de la KB). Asimismo, dentro y fuera de GeneXus, el editor permite
trabajar con archivos con extensin XML.
Esta ltima funcionalidad (trabajar con archivos XML) es la que permite la
integracin entre el editor como aplicacin independiente y como tool de GeneXus.
Por otro lado, tambin se podr desde la KB salvar un Theme con extensin .XML
de manera de poder editarlo y modificarlo por fuera de GeneXus.
Con esto se logra independizar el trabajo de diseo de las pginas, del desarrollo de
la aplicacin.
Dado un diseo en formato XML (un Template creado con el Editor por fuera de
GeneXus), se puede incorporarlo a la KB rpidamente siguiendo los siguientes
pasos:
1. Abrir el Template usando el Editor desde dentro de GeneXus (opcin File >
Open Template)
2. Salvar el Template como un Theme (opcin File -> save as)
Notas:
1. Se puede optar por crear un XML o un objeto Theme GeneXus. Si el check
GeneXus est seleccionado, se crear un objeto Theme, de lo contrario,
se crea un Template.
Los Templates que son incluidos con la versin son los siguientes:
Beach.xml
Classic.xml
Executive.xml
Extreme.xml
Fancy.xml
Light.xml
PinkPanther.xml
Los cuatro primeros son serios y siguen las recomendaciones de "buen uso" del diseo en
internet, el resto son divertidos y radicales.
1. Default
2. Designer
Cuando se crea una nueva base de conocimiento en GeneXus, se crea un objeto Theme por
defecto.
Para la inicializacin de este objeto se utiliza el Theme definido como Default en el editor
(Default Template ver seccin Uso del editor). En particular, se utiliza aquel Theme
definido en el registry de la mquina: HKEY_LOCAL_MACHINE\Software\Artech\GxTheme
Editor\1.0\ThemeTemplates\DefaultTheme.
Veremos en un ejemplo prctico, como a travs del Editor de Temas, se logra independizar el
diseo de las pginas, del desarrollo de la funcionalidad de la aplicacin.
Una vez abierto el Editor de Temas como aplicacin independiente a GeneXus, disearemos
un Template y lo salvaremos en algn directorio (es un archivo con extensin XML).
Haga clic aqu para ver como creamos el template por fuera de GeneXus.
Una vez salvado el Template en algn directorio, vamos a ejecutar esta vez el Editor de Temas
desde dentro de la aplicacin GeneXus (mediante la opcin Tools->GX Theme Editor)
Para editar el Template anteriormente creado, ir al men del Editor de Temas File -> Open
Template y seleccionar el Template del directorio donde lo hemos guardado (con extensin
XML).
Para salvarlo como un Theme de la KB, ir al men File -> Save As, y estando chequeada la
opcin GeneXus del dilogo, salvarlo con el nombre Movie2.
Una vez que es un Theme de la KB, lo podemos asociar a la propiedad Theme del modelo.
Haga clic aqu para ver como integramos el template anteriormente creado, al modelo del
curso.
INTRODUCCION AL CAPITULO 8
Una pregunta muy importante a la hora de desarrollar una aplicacin para
Internet, es la siguiente:
Es segura nuestra aplicacin en Internet?
Intercepcin de informacin
El protocolo TCP/IP no fue diseado para ofrecer servicios de comunicacin seguros. En
consecuencia, la informacin enviada desde el navegador al servidor web o viceversa puede
ser interceptada por alguien.
Es por esta razn que se debe agregar tecnologa adicional para resolver problemas de
seguridad.
Desde siempre, existe una nica tecnologa que provee los principios para resolver estos
problemas: CRIPTOGRAFIA.
Existen servidores web, que pueden trabajar como servidores seguros. Un servidor seguro es
un servidor web, al cual se le habilit la posibilidad de encriptar los datos que se envan al
navegador, as como desencriptar la informacin recibida del mismo.
Finalmente, para activar la encriptacin de los datos a transferir, todo lo que el usuario debe
hacer es realizar la solicitud del recurso a travs del protocolo HTTPS: en lugar de HTTP.
La seguridad ofrecida por el servidor web, depende en parte tambin del largo del certificado
soportado. Cuanto ms largo sea el mismo ms segura es la comunicacin de los datos.
Hay que destacar que los servidores seguros protegen nicamente la informacin
confidencial de ser interceptada por terceros, pero sin seguridad a nivel del sistema el servidor
web sigue siendo vulnerable a ataques.
La mayor parte de los usuarios nicamente visitan el sitio, otros, sin embargo intentarn entrar
por la ventana abierta. Los resultados pueden ser variados, desde el simple descubrimiento
que la pgina principal del sitio web fue cambiada, hasta el robo de la base de datos que
contiene la informacin de sus clientes.
Existe abundante documentacin sobre el tema, que es recomendable leer, para saber que
pasos debera seguir al publicar documentos, o aplicaciones en su sitio web.
Bibliografa:
Verisign:
http://www.verisign.com/products/site/faq/40-bit.html#6
El correo:
http://www.correo.com.uy/CorreoCert/sitio_seguro.htm
Microsoft:
http://www.microsoft.com/resources/documentation/WindowsServ/200
3/enterprise/proddocs/en-
us/Default.asp?url=/resources/documentation/WindowsServ/2003/ent
erprise/proddocs/en-us/iis_security.asp
http://www.microsoft.com/technet/security/topics/hardsys/default
.mspx#XSLTfullModule122121120120
http://www.securityfocus.com/infocus/1694
SEGURIDAD A NIVEL DE LA BASE DE DATOS
A nivel de la aplicacin, la seguridad depende del tipo de aplicacin que se est desarrollando.
La razn por la cual son necesarios dichos controles, es que los parmetros que se pasan entre
objetos web (y entre pginas dinmicas en general) viajan visibles al usuario, como por
ejemplo:
http://www.artech.com.uy/cgibin/hmyapp.exe?1,NOMBRE.
Por lo tanto, por ms que se disponga de una pgina de login, donde se valida el usuario y su
contrasea para ingresar al sistema, el usuario eventualmente podra saltearse la misma,
ingresando en el navegador la URL de la siguiente pgina con un cdigo de usuario vlido.
Para evitar que se burle el control de acceso y permitir que se acceda a informacin
confidencial, es que se debe agregar algn tipo de control adicional de seguridad.
MANEJO DE SESIONES
Una de las posibles alternativas para solucionar el problema de seguridad mencionado
anteriormente, es el uso de sesiones.
La primera vez que un usuario ingresa al sitio debe registrarse al mismo, creando un nuevo
usuario (navegando a travs del link Click here to complete a brief registration form, el cual
lo lleva a la transaccin Customer). De esa forma se da de alta el cliente, y se crea un
registro en la tabla SECURITY con el identificador del cliente, el nmero randmico de sesin,
la fecha y hora de la registracin.
Luego se llama a la pgina donde se muestra la informacin a la cual nicamente los clientes
registrados pueden acceder, en este caso, ingresar productos al carrito de compras e ingresar
a la transaccin de orden de compra PurchaseOrder para modificar detalles de la compra y
confirmar la misma.
InsertSec CheckSession
FUNCIONES DE COOKIES
Introduccin
El objetivo es proveer funciones que permitan leer y grabar cookies desde objetos web
generados por GeneXus.
Tambin existen otros usos de las cookies, como rotacin de contenido (especialmente avisos),
mantener estado de una aplicacin, etc. Incluso se pueden usar como mtodo de almacenar el
carrito de compras de modo que la informacin del mismo quede en la mquina cliente y se
mantiene entre conexiones.
Como se menciona anteriormente, generalmente se usa una cookie para identificar el usuario
(en algunos casos, una para la sesin, en otros para el usuario), aunque se podran poner
todos los valores de las preferencias en cookies. Lo ideal es tener una clave que viaje y con
esta clave leer la informacin del usuario. De este modo la informacin del usuario no viaja
hacia el cliente, ni est en la URL. (Ej. tarjetas de crdito, nombre, direccin) simplemente
permanece en el servidor.
Hay que tener en cuenta que existe un lmite en cuanto a la cantidad de cookies que el cliente
puede aceptar. El mximo son 300 cookies en total por cliente (para todos los servidores juntos
por cada browser/cliente) y 20 cookies por server o dominio lo cual quiere decir que si una
aplicacin graba ms de 20 cookies las ltimas van a borrar los valores de las primeras.
Adems existe un lmite de tamao de 4K por cookie, si una cookie supera ese lmite es
truncada.
El usuario puede preferir no grabar la cookie permanentemente (por ej. si est accediendo
desde una mquina pblica como podra ser un cybercafe) o incluso puede deshabilitar el uso
de cookies, por lo cual esta no debe ser la nica manera de identificar al usuario, sino que se
debe poder usar un mtodo alternativo en caso de que el browser no soporte o no tenga
habilitado el manejo de cookies.
Otra particularidad es que el lugar donde se almacenan las cookies (al menos en Windows)
depende del browser, por lo que si un usuario tiene ms de un browser, cada uno tendr un
conjunto independiente de cookies.
1. El usuario se conecta a un servidor que por alguna razn quiere grabar una cookie.
4. Cada vez que el usuario se conecte a una URL de este dominio el browser enviar al
server las cookies que se hayan grabado desde el dominio y no hayan expirado.
http://www.cookiecentral.com
Descripcin
Se dispone de las siguientes funciones, las que pueden ser utilizadas en cualquier objeto
GeneXus, el resultado tiene sentido nicamente si dicho objeto fue llamado en forma directa o
indirecta por un objeto web o est ejecutando en un ambiente Web.
GetCookie
La sintaxis es:
&var_char = GetCookie(NombreCookie)
NombreCookie carcter
&var_char carcter
SetCookie
La sintaxis es:
Los parmetros entre parntesis rectos son opcionales. Si alguno de los parmetros va nulo se
asume el default.
&var_num variable numrica.
NombreCookie -Carcter
Nombre de la cookie
Valor - Carcter
Valor a almacenar
path - Carcter
Exp-date - Date/Datetime
Domain-name - Carcter
Secure - Numrico
Observaciones
Las funciones mencionadas anteriormente siempre devuelven 0. La nica forma de
detectar si una cookie fue almacenada es leerla. En consecuencia no se puede
obtener la configuracin del navegador.
Ejemplos
Algunos ejemplos sencillos sobre cmo grabar una cookie son:
Aqu se est grabando una cookie -vlida para todo el dominio- de nombre ID_USER con el
valor correspondiente al atributo UsrId y que expirar el 1 de Enero de 2002.
Aqu se est grabando una cookie -vlida para los web panels de la misma aplicacin -de
nombre SESSION_ID_GX- con el valor correspondiente a la variable &Strsession. La cookie
expirar al cerrar la sesin del browser.
Aqu se est grabando una cookie -vlida para todo el dominio otrodom- de nombre
USER_PAIS con el valor UY y que expirar exactamente dentro de un ao.
TIPO DE DATOS WEBSESSION
Introduccin
WebSession es un nuevo tipo de datos de GeneXus que permite almacenar datos en una
sesin de usuario del servidor Web. De esta manera se pueden tener variables globales,
accesibles mientras la sesin est activa.
Alcance
- Objetos: Transacciones, Web Panel, Procedimientos
- Interfaces: Web
Descripcin
Los servidores Web permiten manejar el concepto de sesin. Una sesin se identifica por una
clave nica, que se mantiene mientras el usuario contine en el sitio Web.
El objeto WebSession permite almacenar informacin que ser visible desde cualquier objeto
Web dentro de la sesin activa como si fueran variables globales al sitio.
Para utilizar el objeto WebSession, se debe definir una variable de este mismo tipo y aplicarles
los mtodos y propiedades adecuados.
Propiedades:
Id
&Iden = &Session.Id
Metodos:
Set(key, value)
Permite hacer una entrada en la sesin activa. Key y value deben ser del tipo
String. Por ejemplo
&Session.set(user, &User)
Get(key)
&User = &session.get(user)
Remove(key)
&Session.remove(user)
Destroy()
&Session.destroy()
Consideraciones Generales
El ID de la sesin se guarda en una cookie en el cliente, aunque esto es transparente
para el programador.
La validez de la Websession es similar a la validez de las cookies que solo valen por la
sesin. Esto quiere decir que si se abre una instancia nueva del browser, se pierde la
sesin, pero si abro en una ventana nueva se mantiene.
Los datos y el ID de una sesin son diferentes para cada generador. Esto implica que
no puedo hacer un link de un Web Panel VB a un Web Panel Java y mantener los
valores de la sesin
Ejemplos
For each
Where UsrNom = &User
Where UsrPsw = &Password
&Session.Set(Name, UsrNombre)
Call (HWelcome)
When none
Return
//Usuario no valido
endfor
&UsrNombre = &session.Get(Name)
If Trim(&UsrNombre)=
Return ///Sesin no valida
Else
TX.Caption = Bienvenido + &UsrNombre + a nuestro sitio!
Endif
ENCRIPTACION DE PARAMETROS
Introduccin
Los objetos Web generados con GeneXus, permiten visualizar los parmetros que se pasan
entre los objetos en la barra de direccin del navegador.
Esto hace que, si se pasa informacin reservada como parmetro entre objetos Web (Nmero
de cliente, por ejemplo), las aplicaciones no sean muy confiables en cuanto a la seguridad,
porque un usuario podra simplemente cambiar el valor de dicho parmetro en la URL y
disponer de informacin sobre la que no debera tener acceso. No sucede lo mismo si se
utilizan cookies, en este caso no hay problemas de seguridad.
Es por eso que se hace necesario pasar los parmetros sin que el usuario de la aplicacin los
conozca o sea encriptar los parmetros.
Alcance
Objetos: Web Panels, Transacciones
Interface: Web
Descripcin
Para poder realizar la encriptacin de parmetros en objetos Web se implementaron funciones
estndar que contienen las funciones bsicas de encriptacin y algunas funciones adicionales
(las que requieren manejo de parmetros y cookies).
Que los usuarios finales no sepan el o los datos que van en los parmetros
Que los usuarios finales no puedan modificar el o los datos que van en los
parmetros
No
Indica que No se van a encriptar los parmetros que van en la URL de los
objetos Web, siendo ste el valor por defecto.
Session Key
Indica que se van a encriptar los parmetros que van en la URL, utilizando una
clave diferente para cada sesin. La encriptacin se realiza a travs del uso de
cookies locales.
Site Key
Se encriptan los parmetros que van en la URL de los objetos Web, pero la
clave de encriptacin va a ser la misma para todo el sitio.
La propiedad a nivel de objeto, adems de los valores mencionados tiene el valor Use models
preference value. Este valor indica que se va a tomar el valor de la preferencia del modelo
para realizar la encriptacin de ese objeto. Este es el valor por defecto.
Consideraciones Generales
Sesiones del Navegador
Una sesin del navegador queda determinada por una instancia del mismo. Por ejemplo, si en
un mquina se ejecuta el navegador de Internet y a partir de ese navegador se abre otra sesin
(a partir de la opcin de men File/New/Window o a partir de un link), ambas sesiones
pertenecen a la misma instancia del navegador.
En cambio, si se abre una sesin del navegador, y luego se ejecuta nuevamente el exe del
navegador para abrir una nueva ventana, las dos ventanas no pertencen a la misma instancia.
Con esto, si se ejecutan objetos Web, y se configur la preferencia del modelo (o la propiedad
a nivel de objeto) con el valor Session Key, la cookie que se defina para guardar este valor va
a funcionar en las sesiones del navegador que compartan la misma instancia.
Preferencia a nivel de modelo vs. Propiedad a nivel de objeto
Los valores Session Key y Site Key a nivel de la preferencia del modelo,
determinan que todos los llamados entre objetos Web se harn con parmetros
encriptados. Para tener unicamente las llamadas entre algunos objetos con
parmetros encriptados se debe indicar el valor No en la preferencia a nivel de
modelo y el valor Session Key o Site Key en el objeto Web que lo requiera.
Ejemplos
Si se tiene un Web Panel que recibe parmetros y no se utiliza la encriptacin de parmetros,
la URL correspondiente al Web Panel ser del estilo:
http://localhost/HINGRESO_WebObj/hdospar.asp?2,3
Si, en cambio se utiliza encriptacin de parmetros (preferencia Encrypt URL Parameters =
Session Key Site Key), la misma URL se generar de la siguiente forma:
http://localhost/HINGRESO_WebObj/hdospar.asp?lQ/tK1lefxCZMVoXrnmrTQ==
COMPARACION DE ALTERNATIVAS DE
SEGURIDAD EN LA APLICACIN
A continuacin se realiza una comparacin entre las soluciones disponibles para agregar
seguridad a una aplicacin web.
Cookies
Ventajas:
No es necesario el pasaje de parmetros entre Web Panels, ya que los
valores se graban en la cookie.
Si las cookies no son temporales, se puede saber si el usuario ya accedi
anteriormente a la aplicacin.
Desventajas:
Tienen limitaciones en cuanto al tamao mximo, cantidad de cookies que se
pueden grabar. Se tiene dependencia de la configuracin del navegador.
Manejo de sesiones
Ventajas
Es independiente de la configuracin del navegador del PC del cliente.
Desventajas
Mayor complejidad de programacin
Prdida de informacin: si el usuario pasa a una pgina esttica, y luego
vuelve a ingresar la URL en el navegador, debe volver a loguearse.
Encriptacin de la URL
Ventajas
No se requiere programacin alguna, simplemente se modifica el valor de
una preferencia.
Desventajas
El tamao de la URL aumenta al ser encriptada, por lo tanto si el
pasaje de parmetros es importante, se puede llegar al mximo
aceptado por el browser. Requieren del uso de cookies en el caso de
Session Key.
Utilizaremos cookies temporales para evitar que todo usuario que se registre al sitio desde el
mismo computador utilice la misma informacin de conexin.
Disponemos de un Business Object (security.xpz) que brinda los objetos
necesarios para definir la seguridad en las aplicaciones Internet utilizando
cookies.
Una tabla denominada Security donde se almacena para cada nuevo cliente el
nmero generado en forma aleatoria para su sesin, as como la fecha y hora de la
ltima sesin activa.
La estructura de la tabla sera entonces la siguiente:
SecId*
SecRnd (Nmero de sesin randmico)
SecDate (Fecha de Inicio de Sesin)
SecHour (Hora de Inicio de Sesin)
Una cookie denominada SECURITY que concatena (separados por una coma) el
nmero identificador del cliente (atributo CustId), as como un nmero generado en
forma aleatoria de la sesin de este cliente (atributo SecRnd).
SECURITY
INSERTSEC
Este procedimiento da de alta en la tabla SECURITY la primera vez que el
usuario inicia una sesin en el web.
CHECKSESSION
Este procedimiento valida el nmero de sesin recibido con el usuario que est
logueado, y devuelve el cdigo de validacin resultante. A la sesin se le da
una validez de 1 da.
Se distinguen tres casos: cuando el Usuario tiene iniciada una sesin vigente
(valor S), cuando el usuario tiene una sesin vencida (valor V) y cuando el
usuario tiene una sesin, pero no coincide el nmero randmico de sesin
(valor I).
GENSESNUM
RETSTR
Este procedimiento devuelve los dos valores almacenados en la cookie: el
nmero de usuario y el nmero de sesin.
ERROR
Este web panel se invoca siempre que sea necesario cancelar la ejecucin de la
aplicacin (por ejemplo: cuando la sesin ya no est vigente se invoca
automticamente a este web panel, desplegndole al usuario el mensaje
correspondiente).
La cookie se debe grabar cuando el cliente se registra en el sitio por primera vez
(en la transaccin TCustomer)) y cada vez que se identifique (evento LOGIN de
todos los web panels del sitio).
Event 'Login'
for each
where CustUsr = &CustUsr
if upper(CustPsw) = upper(&CustPsw)
&SecRnd = Udp(PGenSesNum,CustId)
&CookieVal = Concat(trim(Str(CustId)),trim(Str(&SecRnd)),',')
&result = SetCookie('SECURITY',&CookieVal)
else
EndEvent // 'Login'
2) El otro lugar donde tenemos que grabar una cookie es cuando se da de alta
un usuario nuevo. Es decir, que en la transaccin Customer (TCustomer), luego
de dar de alta el cliente, tenemos que grabar una cookie en el PC Cliente con el
CustId del cliente nuevo y el nmero de sesin randmico. Para esto vamos a
crear un procedimiento Login con el siguiente cdigo:
&SecRnd = Udp(PInsertSec,&CustId)
&result = SetCookie(SECURITY,&cookieVal)
Call(Plogin,CustId) if after(Trn);
Como ya dijimos antes, todos los web panels del sitio de acceso limitado a
usuarios registrados, deben realizar el control de la seguridad leyendo la cookie y
comparando los valores obtenidos con los valores almacenados en la tabla de
SECURITY. En nuestro caso, en el evento asociado al botn de Add to cart y en
el evento Start de la transaccin Orden de Compra (Purchase Order).
&CookieVal = GetCookie('SECURITY')
Call(PRetStr,&CookieVal,&CustStr,&SecStr)
&CustId = Val(&CustStr)
&SecRnd = Val(&SecStr)
&result = Udp(PCheckSession,&CustId,&SecRnd)
Call(PRetStr,&CookieVal,&CustStr,&SecStr)
&CustId = Val(&CustStr)
&SecRnd = Val(&SecStr)
&result = Udp(PCheckSession,&CustId,&SecRnd)
For each
&PurOrdId = PurOrdId
Endfor
if not null(&Qty)
If null(&PurOrdId)
endif
endif
Endfor
call(TPurchaseOrder,&PurOrdId)
Call(HError)
Endif
EndEvent
Nota:
1. Observe que para el usuario de prueba que se estaba usando en los ejercicios
anteriores, al momento de creado no se tena en cuenta la seguridad del sistema, por
lo cual no fue dado de alta en la tabla de seguridad, y cualquier intento de realizar
una compra con l va a dar error. Entonces, para probar el ejercicio hecho en este
captulo, d de alta un nuevo usuario a travs de la transaccin Customer, y luego
pruebe agregar alguna pelcula al carrito de compras.
INTRODUCCION AL CAPITULO 9
Existen otras caractersticas interesantes para el desarrollo de aplicaciones en el
web, que presentamos en este captulo
WAP
WebWrapper
Manejo HTTP
Funciones de acceso al header de un objeto Web
Tipos de datos estructurados
Introduccin
En los ltimos aos tanto Internet como la telefona celular han tenido un gran crecimiento y
se han hecho accesibles a millones de personas. Es posible ahora unir estas dos tecnologas
accediendo de forma fcil y rpida a la informacin que brinda Internet desde los telfonos
celulares ( mviles).
A partir de esta versin GeneXus permite generar salidas para Internet mvil, generando
objetos con contenido WML.
Alcance
Objetos: WebPanels
Interfaces: Web
Algunas definiciones
WAP (Wireless Aplication Protocol)
Es el protocolo ms comn de Internet Mvil.
Los dispositivos mviles ms comunes son los telfonos celulares con microbrowser pero
tambin entran en esta categora, los dispositivos de tipo palm y cualquier dispositivo de
informacin porttil, que pueda disponer de una conexin inalmbrica.
WML
Lenguaje de tags basado en XML. Es interpretado por los celulares WAP compatibles. Es
parecido al HTML, pero tiene menos potencia y soporta algunas cosas que el HTML no y es
bastante ms estricto en la sintaxis.
WML vs HTML
Por el tamao de la pantalla, es imposible traducir o ver de forma satisfactoria una pgina de
web normal (HTML) en un celular. El tamao, los tipos de letra, las imgenes y la cantidad de
informacin que se soporta en el WEB no se puede soportar en un microbrowser y no es
prctico hacerlo.
La navegacin, adems, es diferente, el usuario no tiene ratn, ni teclado por lo que el ingreso
de datos debe ser limitado y la navegacin, mucho ms simple.
MicroBrowser
Es un software instalado en el telfono o dispositivo inalmbrico que interpreta el WML (y el
WMLScript, WTAI, etc.) y despliega la informacin en la pantalla.
Es posible acceder a emuladores de celulares y sus microbrowser. Algunos de los ms
conocidos son UP Browser (Unwired Planet) de Phone.com, RS380 Ericsson, Nokia, etc.
Arquitectura
La arquitectura es similar a Internet. El cliente es el telfono celular con MicroBrowser y en el
servidor se encuentra la lgica en objetos (ejecutables o ASP) con contenido WML o sea que al
ser interpretados por los browsers generan WML.
Descripcin
Para generar Web Panels con contenido WML, se implement una nueva propiedad (a nivel de
objeto) denominada Tag Language.
HTML
WML
Con el valor WML es posible generar objetos con contenido WML, estos podrn ser vistos
desde un browser WAP.
Requerimientos
Para testear esta caracterstica directamente en la mquina de desarrollo es necesario tener
instalado el emulador de microbrowser.
http://www.openwave.com/products/developer_products/sdk/
El producto es sin cargo, para acceder al mismo se debe realizar la registracin en dicha
pgina.
Diseo
Se deben definir los Web Panel como hasta el momento y configurar la propiedad Tag
Language = WML.
En el diseo del objeto se deben tener en cuenta las siguientes limitaciones del lenguaje
generado (WML):
Los objetos WML estn limitados en el tipo y cantidad de controles que se soportan
as como en el tamao de las pginas debido a la cantidad de memoria de los mviles
y el tamao de la pantalla.
Las pantallas permiten entre 4 a 8 lneas de texto, dependiendo del mvil, por lo que
no se recomienda que las pantallas superen estos tamaos. No es conveniente que
se tenga scroll en una pantalla de telfono celular.
Solo se soportan los siguientes controles:
o Edit
o Textblocks
o Texto libre
o Tablas simples
o Subfile freestyles simples
No se soportan
o Variables dentro de tablas
o Ninguna anidacin de tablas y/o subfile freestyle
o Subfiles comunes
o Campos LongVarchar
o La letra
o Tag <BR>
o Botones
o Cookies
o Encriptacin de parmetros
Ejemplo
Se desea desplegar un texto de prueba en un telfono celular, los pasos a seguir son los
siguientes:
- Ejecutar el UP.Simulator.
El texto completo del error se debe visualizar en el Phone information (ventana DOS que se
ejecuta detrs del emulador).
http://www.gxtechnical.com/main/Hdcenter.aspx?2,5,36,408
Errores comunes
Error Sntoma
Error : Invalid element br in contents of Se debe a un tag <BR> en el Source del objeto
card.
Error : Uncompiled data from http <head>. La pgina no es WML es HTML, se debe
configurar la preference Tag Language=WML
Error : Invalid element P in content of p. Se introdujo algun tag <P> anidado, esto no es
excpectde PCDATA | em | b vlido en WML
Consideraciones
o Existen algunos tags HTML (no vlidos en WML) generados por el editor. Por
ejemplo el tag <BR> es generado por la combinacin de teclas Shift+Enter en
el editor.
o Subfiles o tablas no deben limitarse por tags <P>. Es posible generar este
cdigo con algunas combinaciones de teclas.
Introduccin
WebWrapper es un nuevo tipo de datos de GeneXus que permite encapsular la ejecucin de
los objetos Web (el cdigo HTML generado). En particular permite enviar el contenido de un
Web Panel por mail.
Alcance
- Objetos: Transacciones, Work Panel, Web Panel, Procedimientos
Descripcin
Para poder enviar el contenido de un Web Panel va mail desde un objeto GeneXus es
necesario definir una variable de tipo WebWrapper, para luego aplicar los mtodos y
propiedades necesarios.
La idea es capturar el contenido de un Web Panel en su cdigo HTML, y enviar este va mail,
por lo tanto hay que tener en cuenta que el cliente de correo que reciba el mail debe tener la
capacidad de interpretar lenguaje HTML, en caso contrario ver el cdigo del Web Panel.
Propiedades:
La direccin base determina el servidor y directorio virtual al que apuntarn los links y a donde
se ir a buscar el Web Panel en caso de que se presione algn botn. La direccin base es
agregada al cdigo HTML que devuelve el mtodo GetResponse.
Object
Objeto Web a encapsular en la variable de tipo WebWrapper
Metodos:
GetResponse
Consideraciones Generales
Los objetos Web Panel de GeneXus, no son estticos, por este motivo al enviarlos
va mail, en realidad se est enviando una imagen esttica. Por lo tanto cualquier
evento que se produzca en el Web Panel que realice un post al servidor ( por
ejemplo hacer click en un botn, disparar un procedimiento, etc) producir que se
abra el web panel en el browser, en la direccin especificada en la propiedad
BaseURL.
Si se utiliza un objeto WebWrapper para mandar un Web Panel mediante mail, y dicho Web
Panel tiene un botn o evento click, el comportamiento al apretar dicho botn (o control con
evento click) en Outlook XP difiere del de Outlook 2000 y Outlook Express.
Otro ejemplo: el evento asociado al botn modifica la base de datos y hace un call a otro
webpanel. En Outlook 2000 y Outlook XP, al apretar el botn se hace la modificacin a la base
de datos y se abre un browser donde se muestra el Web Panel llamado. En Outlook XP se hace
la modificacin a la base de datos pero no se muestra nada, ni siquiera se abre el browser.
Hay dos formas en las cuales podemos cambiar nuestra programacin para asegurarnos de
que el comportamiento sea el mismo en los 3 clientes de mail:
2) Usar un Web Component. Es decir, el Web Panel que se manda por email est compuesto
solamente por un webcomponent. Dicho WebPanel tendra en el evento Refresh algo as:
Event Refresh
else
endif
End Event
El objeto Web que se crea para enviar por mail por medio de la funcin Create no
puede ser main, si puede ser un WebComponent.
La propiedad BaseUrl debe estar despus de la funcin Create.
Ejemplo
El siguiente ejemplo es un procedimiento que ilustra como enviar por mail,
mediante Outlook, el Web Panel Hnotify para cada registro de la tabla CLIENTE.
Dicha tabla tiene clave primaria CliCod, el cual se pasar como parmetros al
Hnotify. Tambin tiene entre sus atributos secundarios a CliNom, con el nombre
del cliente, y CliMail, con la direccin de correo el electrnico del cliente.
Variables Definidas:
&Wrap del tipo WebWrapper
&MailMsg del tipo MailMessage
&Outlook del tipo OutlookSession
&Wrap.BaseURL = http://myserver/mysystem/
For each CliCod
&Wrap.Object = Create(Hnotify, CliCod)
&MailMsg.To.New(CliNom, CliMail)
&MailMsg.HTMLText = &Wrap.GetResponse()
&Oulook.Send(&MailMsg)
EndFor
Introduccin
Esta funcionalidad provee a los usuarios GeneXus una forma de poder utilizar el protocolo
HTTP en sus programas. Para ello se crearon los tipos de datos HttpClient, HttpResponse y
HttpRequest.
Alcance
Objetos: HttpClient (Transacciones, Work Panels, Web Transactions, Web Panels, Reportes,
Procedimientos), HttpResponse y HttpRequest (Procedimientos y Reportes con el valor http en
la propiedad call protocol, Web Panels y WebTransactions ).
Descripcin
Los tres tipos de datos que se definen para interactuar con http son:
HttpClient
HttpResponse y HttpRequest
Permiten leer los datos del request y grabar el response. Son objetos disponibles solo en
WebProcs.
HttpClient
Este objeto refleja una conexin http. Puede usarse desde cualquier objeto GeneXus.
PROPIEDADES:
Host
Define el nombre del host.
Tipo- String
Port
Define el puerto del host.
Tipo- String
Secure
Indica si el protocolo es http o https.
Tipo- Boolean
Timeout
Determina el Timeout de la conexin.
Tipo- Integer
BaseURL
Indica la URL base de los request que se hagan al host.
Tipo- String
StatusCode
Retorna el cdigo de error HTTP.
Tipo- Integer
ReasonLine
Retorna el texto del error HTTP.
Tipo- String
ErrCode
Retorna si ocurri algn error en algn comando, en cuyo caso retorna un
valor distinto de cero.
Tipo- Integer
ErrDescription
Retorna el mensaje del error si ocurri alguno en algn comando.
Tipo- String
Basic y Digest
Son constantes que determinan un tipo de autenticacin. Se utilizan en el
mtodo AddAuthentication.
Basic=0 : Para autentificar se enva el usuario y password sin encriptar.
Digest=1: Para autentificar se enva el usuario y password encriptados.
ProxyHost y ProxyPort
Permiten especificar un proxy http. En ambiente windows se utiliza
automticamente el que esta configurado en la mquina.
ProxyHost- String
ProxyPort- Integer
MTODOS
AddHeader(<Name>, <Value>)
Agrega un header con el valor dado.
Ejemplo: AddHeader(User-Agent, GeneXus)
<Name>- String
<Value>- String
AddVariable(<Name>,<Value>)
Agrega una variable al form.
<Name>- String
<Value>- String
AddString(<Value>)
Agrega el contenido del string al buffer de datos a enviar.
<Value>- String
AddFile(<Value>)
Agrega el contenido del archivo al buffer de datos a enviar.
<Value>- String
Execute(<Method>,<URL>)
Ejecuta un mtodo en la URL definida. Se pondra solo la parte final de la
URL
Ejemplo: execute("POST", "/servlet/awebproc")
<Method>- String
<URL>- String
ToString()
Retorna un String con todo el cuerpo del response.
ToFile(<FileName>)
Graba en un archivo el contenido del stream.
<FileName>- String
GetHeader(<Name>,<Value>)
Retorna en <Value> el valor del header convertido al tipo de la variable.
<Name>- String
<Value>- Anytype
HttpRequest
Este objeto permite leer el request http. Puede instanciarse solo en el contexto de un
WebProc.
PROPIEDADES
Method
Retorna el mtodo HTTP.
Tipo- String
ServerHost
Retorna el nombre del servidor
Tipo- String
ServerPort
Retorna el puerto en el servidor
Tipo- Integer
Secure
Indica si se esta utilizando HTTPS. Si el valor retornado es 1, se esta
utilizando HTTPS; si es 0, se esta utilizando http.
Tipo- Integer
ScriptPath
Retorna la porcin de URL correspondiente el nombre del directorio virtual.
Tipo- String
ScriptName
Retorna el nombre del objeto con la extensin correspondiente que se esta
ejecutando, tal como aparece en la URL
Tipo- String
Referrer
Retorna la URL del llamador
Tipo-String
QueryString
Retorna la porcin de la URL que est despus del signo ?; o sea los
parmetros.
Tipo- String
RemoteAddress
Devuelve la direccin del cliente.
Tipo- String
ErrCode
Retorna si ocurri algn error en algn comando, en cuyo caso retorna un
valor distinto de cero.
Tipo- Integer
ErrDescrption
Retorna el menaje del error si ocurri alguno en algn comando.
Tipo- String
MTODOS
GetVariable(<Variable>)
GetHeader(<Header>)
Retorna un String con el valor del header <Header>.
<Header>- String
ToString()
Retorna un String con todo el cuerpo del request.
ToFile(<FileName>)
Graba en un archivo el contenido del stream.
<FileName>- String
HttpResponse
Este objeto permite escribir el response http. Puede instanciarse solo en el contexto de un
WebProc.
PROPIEDADES
ErrCode
Retorna si ocurri algn error en algn comando, en cuyo caso retorna un
valor distinto de cero.
Tipo- Integer
ErrDescrption
Retorna el menaje del error si ocurri alguno en algn comando.
Tipo- String
METODOS
AddHeader(<Name>,<Value>)
Agrega un header con el valor dado.
Ejemplo: AddHeader(User-Agent, GeneXus)
<Name>- String
<Value>- String
AddString(<Value>)
Agrega el contenido del string al buffer de datos a enviar.
<Value>- String
AddFile(<Value>)
Agrega el contenido del archivo al buffer de datos a enviar.
<Value>- String
XMLReader.openRequest(HttpRequest)
Se utiliza en un WebProc para leer un xml que viene en el body del http request.
XMLReader.openResponse(HttpClient)
Se utiliza en cualquier objeto para leer como XML lo que devolvi un request.
XMLWriter.openRequest(HttpClient)
Se utiliza en un WebProc para escribir un xml que se retornara en el body del http response.
Ejemplo
Este ejemplo muestra como un objeto GeneXus llama a otro va http, pasndole parmetros en
un XML y recibiendo los mismos tambin en un XML.
<parameters>
<a>valor</a>
<b>valor</b>
</parameters>
&client.host = "localhost"
&client.port = 88
&writer.WriteStartElement("parameters")
&writer.WriteElement("a", &A)
&writer.WriteElement("b", &B)
&writer.WriteEndElement()
&writer.close()
&client.execute("POST", "/servlet/awebproc")
&reader.openResponse(&client)
&reader.read()
&reader.read()
&a = val(&reader.value)
&reader.read()
&b = val(&reader.value)
&reader.close()
&reader.openRequest(&Request)
&reader.read()
&reader.read()
&a = val(&reader.value)
&reader.read()
&b = val(&reader.value)
&reader.close()
&a = &a + 1
&b = &b + 1
&writer.openResponse(&Response)
&writer.WriteStartElement("parameters")
&writer.WriteElement("a", &A)
&writer.WriteElement("b", &B)
&writer.WriteEndElement()
&writer.close()
Consideraciones para el generador Java
En el caso de que se ejecute el motor de servlet en Windows, la aplicacin obtendr
automticamente la configuracin del proxy http y la lista de hosts para los que no se debe
utilizar el proxy.
En caso de que se ejecute en otra plataforma, es necesario especificar el proxy como una
System Property desde la lnea de comandos del intrprete, por ej:
(Consideraciones Generales)
La propiedad secure del tipo de datos HTTPClient en el generador C/SQL solo puede Con formato: Numeracin y vietas
ser utilizada en clientes Microsoft.
En los generadores Visual Basic, Visual FoxPro, y C/Sql el tipo de datos HTTPClient Con formato: Numeracin y vietas
permite manipular solamente URLs cuyo Response tenga contenido de tipo texto. No
esta implementado para otros tipos de contenido (por ej. imgenes).
Alcance
Objetos: Web Panels, Transacciones
Interfaz: Web
Introduccin
Se introducen controles, con mtodos y propiedades para manejar TAG en el header de un
objeto Web. Esto posibilita agregar informacin descriptiva, que puede utilizarse para ser
referenciado por buscadores, agregar referencias a JavaScript para dar dinamismo a la
aplicacin o todo aquello que se pueda definir entre los TAgs <Head></Head> para aprovechar
al mximo las caractersticas del HTML.
Descripcin
Se denomina Header de un objeto WEB a cdigo HTML definido entre los TAGS <HEAD>
</HEAD>.
Se puede agregar informacin en el Header, que puede servir, entre otras cosas, para ser
referenciado por buscadores, o simplemente para agregar funcionalidades a la pgina, como
es el caso de JavaScript.
Para poder trabajar con estos Tag, se implementaron una serie de propiedades y mtodos del
Form:
Form.Meta
Esta propiedad permite trabajar con los TAG de la forma <meta name=X content=Y/>.
AddItem
Permite agregar un TAG <meta name=X content=Y/>, a partir de los valores X e Y pasados por
parmetros
Sintaxis:
Form.Meta.AddItem(<name>,<content>)
Donde
RemoveItem
Sintaxis:
Form.Meta.Remove(<name>)
Donde
<name> : Character
Text
Sintaxis:
Form.Meta.Text(<indice>)
Donde:
Value
Sintaxis:
Form.Meta.Value(<indice>)
Donde:
Count
Sintaxis:
Form.Meta.Count
Clear
Sintaxis:
Form.Meta.Clear()
Form.MetaEquiv
Esta propiedad permite trabajar con los TAG de la forma <meta http-equiv=X content=Y/>.
AddItem
Permite agregar un TAG <meta http-equiv=X content=Y/>, a partir de los valores X e Y pasados
por parmetros
Sintaxis:
Form.MetaEquiv.AddItem(<name>,<content>)
Donde
RemoveItem
Sintaxis:
Form.MetaEquiv.Remove(<name>)
Donde
<name> : Character
Text
Sintaxis:
Form.MetaEquiv.Text(<indice>)
Donde:
Value
Sintaxis:
Form.MetaEquiv.Value(<indice>)
Donde:
Count
Sintaxis:
Form.MetaEquiv.Count
Valor de Retorno: Numrico
Clear
Sintaxis:
Form.Meta.Clear()
Form.JScriptSrc
Permite referenciar fuentes con cdigo JavaScript que se deseen incluir en el Header de la
pgina generada, de la forma <script language="JavaScript" src="Y>
Add
Sintaxis:
Form.JScriptSrc.Add(<src>)
Donde:
(ej: ValidarFecha.js)
Clear
Form.JScriptSrc.Clear()
Item
Sintaxis:
Form.JScriptSrc.Item(<Indice>)
Donde:
Count
Sintaxis:
Form.JScriptSrc.Count
Form.HeaderRawHTML
Esta propiedad del form permite agregar texto libre en el Header (los Tag <head> </head>)
Sintaxis:
Form.HeaderRawHTML = <Texto>
Donde:
<Texto>: Character
Consideraciones
GeneXus agrega por defecto en los objetos web los tags Generator, Version y
Description de tipo Meta Name. Por ejemplo:
Alcance
Objetos: Transactions, Work Panels, Web Panels, Procedures, Reports
Lenguajes: Java, .NET, Visual Basic
Interfaces: Web, Win
Introduccin
El objeto GeneXus Structured Data Type (SDT), permite definir estructuras de datos. Estas
representan, de una forma simple, datos cuya estructura est compuesta por varios
elementos. Esto facilita y potencia la programacin.
Descripcin
Los SDT tienen mltiples usos posibles:
- facilitan el pasaje de parmetros (en particular permite proveer/consumir
informacin estructurada en el uso de webservices)
- simplifican la lectura y escritura automtica de XML (con funciones de alto nivel),
- permite mejorar la legibilidad del cdigo,
- permite el manejo de listas de largo variables de elementos.
Detallamos algunos de los posibles casos de uso.
Estructura
La estructura puede ser multinivel, semejante a la de las transacciones, cada nivel puede tener
uno o ms elementos (o tems). Podemos clasificarlos en elementos simples o elementos
compuestos (por otros elemento).
ELEMENTOS SIMPLES
En el diseo de un SDT, al definir un elemento, se debe especificar la propiedad Name que
identifica al elemento, por lo tanto no pueden existir dos elementos con el mismo nombre. La
propiedad Data type permite seleccionar entre los siguientes tipos de datos :
ELEMENTOS COMPUESTOS
Se identifican con un bullet de color, en el editor, y son aquellos que definen un nuevo
agrupamiento de elementos (una nueva coleccin o un agrupamiento de elementos simples).
Tiene las mismas propiedades que los elementos simples, pero no se habilita la propiedad
data type. Hay una excepcin en el caso de un SDT que sea coleccin de tipo simple, ver caso
de uso 2.3
Se habilita la propiedad Item Name solo cuando el elemento compuesto define una Collection
(propiedad Collection en True).Esta propiedad indica el nombre de cada uno de sus elementos.
Este nombre, calificado por el nombre del SDT, ser seleccionable como tipo de datos para la
definicin de variables, esto significa que se crearan dos tipos de datos uno con el Name
(nombre del SDT) y otro con Name.ItemName.
Documentacin
Permite escribir un texto descriptivo del objeto.
La propiedad External Namespace es un string que representa el name space que aplica al
External name (WSDL). El valor por defecto es el nombre del modelo sustituyendo los
caracteres no vlidos.
Operadores
NEW
Este operador retorna una nueva instancia inicializada, o sea una nueva referencia al tipo de
datos que se especifica. La sintxis es:
New SDTName()
SDTName es el nombre de un SDT o un tem de una collection (cualquiera que pueda ser el
tipo de datos de una variable). Por ejemplo
A = New Client() o
Mtodos
Cualquier SDT tiene los mtodos que se describen a continuacin.
TOXML
Retorna un string con el formato XML de los datos de la variable SDT.
<Nombre>Uruguay</Nombre>
<Idioma>Espaol</Idioma>
<Coordenadas>
<Latitud>30</Latitud >
<Longitud>35</Longitud>
</Coordenadas>
<Ciudades>
</Ciudades>
FROMXML
Es el opuesto del ToXML. recibe como parmetro un string que tiene una estructura XML
desde la cual se carga el SDT.
CLONE
Crea una nueva rea de memoria y copia los datos de la variable en esta. Sintaxis:
&var1 = &var2.clone()
Siempre debe estra asignado a una variable, la nica excepcin es dentro del comando Add
&var1.add(var2.clone())
El mtodo Clone equivale a new de una variable y la asignacin de cada item de la misma o
sea:
z.a = y.a
z.b = y.b
La ventaja del mtodo clone, frente al new, es que realiza la copia automtica de cada item del
estructurado sin necesidad de hacer la asignacin.
En el caso de subestructuras dentro del SDT (colecciones o no) no se crea una nueva instancia
de sta con el mtodo clone (la copia es shallow), es necesario hacer un new o clone explicito
por cada subestructura. En el caso de subestructuras definidas dentro del SDT, que no sean
colecciones no esta habilitado el mtodo clone. Por ejemplo, con el SDT
Pais
Nombre Char
Continente
Nombre Char
&Pais.Nombre = 'Uruguay'
&Pais.Continente.Nombre = 'Amrica'
&Paises.Add(&Pais.clone())
&Pais.Nombre = 'Senegal'
&Pais.Continente.Nombre = 'Africa'
&Paises.Add(&Pais.clone())
En ambos pases el continente es Africa. Para que cada registro tenga distinto continente se
debe programar con el operador new.
Collections
Existen un conjunto de mtodos y propiedades que solo aplican a colecciones de SDT.
Item( Position)
No es vlido asignar un valor con esta propiedad, por lo tanto no es correcto el cdigo
&sdt.item(&i) = Att, para cambiar un valor se debe remover (mtodo remove) y
agregar (mtodo add)
Remove( Position)
Clear()
IndexOf( Item)
Tener en cuenta que este mtodo trabaja con las referencias de los elementos y no
con su contenido. Esto implica que si por parmetro se recibe una variable con una
lista de SDT y se carga una variable temporal con el contenido de un item, IndexOf
devolver 0 (vaco) pues esa referencia no esta dentro de la lista. Puede resultar til
nicamente al momento de cargar la lista.
Consideraciones
DEFINICIN DE VARIABLES
Para cada SDT se define un tipo de datos y otro por cada uno de los Items de sus collections.
Por ejemplo Si se define una coleccin de Ciudades, se define un tipo de datos Ciudades y otro
Ciudades.Ciudad
Las variables cuyo tipo sea una SDT no pueden ser vectores o matrices.
PASAJE DE PARMETROS
No es posible referenciar variables de tipo SDT en:
Si bien no se controla, no es posible definir en la rule parm un item de una SDT, por ejemplo:
Parm(&sdt.item)
DISPARO DE RULES
Se deben instanciar los elementos de una variable SDT, para poder disparar rules que
dependen de dicha variable. Para esto se debe cumplir al menos una de las siguientes
condiciones:
ASIGNACIN
La asignacin de una variable de tipo Structure a otra del mismo tipo implica un incremento en
la cantidad de referencias a la estructura. Hecha la asignacin, una modificacin a cualquier
elemento de la estructura se ver reflejado en todas las variables que "apunten" a la
estructura.
&Pais.PaisNom = Uruguay
&PaisAux = &Pais
&PaisAux.PaisNom = Brasil
&PaisNom = &Pais.PaisNom
La variable PaisNom tiene el valor Brasil, pues la direccin de la variable Pais y PaisAux es la
misma luego de la asignacin
FORM
No es posible incluir un SDT en el form o printblock de un objeto, en ese caso ocurrir un error
de spec spc0071: '%1 cannot be displayed or printed due to its data type (%2)
RECORRIDA
Para recorrer una coleccin de elementos, es posible hacerlo con el comando for in array
&paisCod = &pais.Codigo
&PaisNom = &pais.Nombre
Load
Endfor
O con el comando do while:
&Pais =&Paises.Item(&I)
...
&I=&I+1
Enddo
INTEGRIDAD
No es posible eliminar un SDT que esta siendo utilizado por otro objeto.
Si es posible modificar la estructura de un SDT y por ejemplo eliminar un elemento del mismo,
aunque este siendo referenciado por otro objeto.
ESPECIFICACIN Y GENERACIN
No es posible especificarse/generarse directamente un SDT. La especificacin/generacin es
implcita cuando se especifica un objeto que lo utiliza si el SDT cambi desde la ltima vez que
fue especificado o se realiza una generacin forzada.
Las variables definidas como estructuras son ignorada si la especificacin es para lenguajes que
no las soportan (RPG, Cobol, etc.). Esto evitar errores de generacin si las variables no son
utilizadas (esta parte corre por cuenta del desarrollador).
KNOWLEDGE MANAGER
Si es posible exportar/consolidar un objeto SDT, al exportar un objeto que usa un SDT, se
exportan automticamente los SDT llamados.
Si se exporta un objeto que contiene variables que son estructuras a un modelo que no
contiene la definicin de dichas estructuras aparecer, al especificar, el mensaje: spc0056,
Internal error. Variable %1 definition is incorrect or not available. Data:%2.
WEBSERVICES
Los Web Services normalmente retornan valores en estructuras de datos. Por ejemplo,
retornan un "Cliente" que es una estructura que tiene "Codigo" y "Nombre" que a su vez es
otra estructura que tiene "PrimerNombre", "SegundoNombre", etc.
Ahora es posible acceder a estos datos con variables de tipo "Cliente" y modificar/acceder a
sus "miembros"
Al consumir un servicio, con el WSDL Inspector, en el caso de recibir datos complejos, este
incluir por lo tanto nuevas definiciones de SDT
RECURSIVIDAD
No son soportadas las definiciones recursivas. El Data type de una elemento de una estructura
no puede ser el mismo que se esta definiendo.
INTRODUCCION AL CAPITULO 10
Cada vez se escucha mas el concepto de Web Services, fundamentalmente
relacionado con Internet y el futuro de una arquitectura orientada a servicios. Es
por esta razn, que GENEXUS incluye la posibilidad de desarrollar y consumir Web
Services.
Abstract
En los ltimos tiempos ha surgido con mucha fuerza el concepto de web services, incluso
afirmndose que el mismo cambiara la forma de programar las aplicaciones orientadas a
Internet hacia una arquitectura orientada a servicios. Todo esto se ha visto potenciado luego
del anuncio de Microsoft de su nueva estrategia .NET que est basada en el modelo de web
services.
Este documento describe que son los web services y como es la arquitectura general del
modelo, adicionalmente se provee una introduccin de los estndares en los cuales se basa
este modelo como ser SOAP, WSDL y UDDI.
Qu es un web service?
Un web service es una aplicacin que puede ser descripta, publicada, localizada e invocada a
travs de una red, generalmente Internet. Combinan los mejores aspectos del desarrollo
basado en componentes y la Web.
Al igual que los componentes, los web services son funcionalidades que se encuentran dentro
de una caja negra, que pueden ser reutilizados sin preocuparse de cmo fueron
implementados. A diferencia de la actual tecnologa de componentes, no son accedidos por
medio de protocolos especficos del modelo de objetos como ser RMI, DCOM o IIOP; sino que
son accedidos utilizando protocolos web como ser HTTP y XML.
La interface de los web services esta definida en trminos de los mensajes que el mismo
acepta y retorna, por lo cual los consumidores de los web services pueden ser implementados
en cualquier plataforma y en cualquier lenguaje de programacin, solo tiene que poder crear y
consumir los mensajes definidos por la interface de los web services.
Proveedor
Publicar Enlazar
Corredor Consumidor
Encontrar
Por todo lo anterior hay ciertos requerimientos a la hora de desarrollar o consumir un web
services:
Ventajas y retos.
Los web services apuntan a ser la piedra fundamental de la nueva generacin de sistemas
distribuidos. Estos son algunos puntos para fundamentar esta afirmacin:
Interoperabilidad:
Cualquier web service puede interactuar con otro web service. Como los
web services pueden ser implementados en cualquier lenguaje, los
desarrolladores no necesitan cambiar sus ambientes de desarrollo para
producir o consumir web services.
Ubicuidad:
Los web services se comunican utilizando HTTP y XML. Por lo tanto cualquier
dispositivo que soporte estas tecnologas pueden implementar o acceder web services.
Muy pronto estarn presentes en telfonos, autos e incluso mquinas expendedoras,
las que avisarn a la central cuando el stock sea menor al indicado.
A la vez hay ciertos retos tcnicos que los web services tienen que sortear para
poder tener xito. Muchos de estos retos estn relacionados con el ambiente
abierto en el que tienen que sobrevivir. Estos son algunos de esos puntos:
Descubrimiento:
Como un web service se anuncia para ser descubierto por otro servicio?
Qu pasa si el servicio se cambio o se movi luego de ser anunciado?
WSDL y UDDI son dos nuevos estndares que manejan este punto.
Confiabilidad:
Algunos web services son ms confiables que otros. Cmo puede ser
medida esa confiabilidad y comunicada? Qu pasa cuando un web service
esta off-line en forma temporaria? Localizamos y utilizamos un servicio
alternativo brindado por otra empresa o esperamos a que el servicio este
de nuevo on-line?
Seguridad:
Muchos web services son publicados para ser utilizados sin ninguna
restriccin, pero muchos otros van a necesitar autenticacin para que los
utilicen solo los usuarios autorizados. Cmo autentifica a los usuarios un
web service? Lo hace a nivel del mtodo que lo implementa o utiliza otro
web service para realizar la autenticacin?
Responsabilidad
En caso de que el web service no sea de acceso libre, Cmo puedo definir
cuantas veces un consumidor puede acceder al web service una vez
contratado? Cmo se cobra su uso? Cmo se indica que un servicio ya no
esta ms en lnea?
Tecnologas asociadas
El modelo de web services est basado en ciertas tecnologas emergente que es el resultado
del trabajo de varias compaas y organizaciones entre las cuales se destacan IBM y Microsoft.
Esta basado en XML y potencialmente puede ser utilizado en combinacin con una variedad de
protocolos de comunicacin, siendo el ms utilizado HTTP. Por lo tanto se utiliza HTTP para
transportar la informacin, y XML para representar la misma.
Request
Cliente Servidor
Response
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Body>
<m:GetLastTradePriceResponse xmlns:m="Some-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
Si usted quedo asustado por la aparente complejidad del protocolo SOAP pensando lo
engorroso que sera armar los mensajes de requerimiento y parsear los mensajes de respuesta
despreocpese; la mayora de los lenguajes de programacin proveen o proveern soporte
para realizar esto. La idea fundamental consiste en utilizar algn objeto al cual se le brinda un
WSDL y se le indica que mtodo se quiere llamar y con que parmetros. Esto arma en tiempo
de ejecucin el mensaje SOAP, lo manda y parsea el resultado adjudicndoselo a alguna
variable en forma trasparente para el usuario como si hubiera hecho un call comn.
Un archivo con formato WSDL provee informacin de los distintos mtodos (operaciones) que
el Web Services brinda, muestra cmo accederlos y que formatos deben de tener los mensajes
que se envan y se reciben. Es como un contrato entre el proveedor del servicio y el cliente, en
el cual el proveedor se compromete a brindar ciertos servicios solo si el cliente enva un
requerimiento con determinado formato. Es el documento principal a lo hora de documentar
un Web Services, pero puede no ser el nico. En la mayora de los casos es conveniente que
este acompaado por un documento escrito en lenguaje natural que brinde informacin de
que es lo que hace cada uno de los mtodos brindados por el Web Services as como tambin
ejemplos, por ejemplo, de los mensajes SOAP que espera y responde el servicio.
Type: Describe los tipos no estndar usados por los mensajes (Message).
Message: Define los datos que contienen los mensajes pasados de un punto a otro.
PortType: Define una coleccin de operaciones brindadas por el servicio. Cada operacin tiene
un mensaje de entrada y uno de salida que se corresponde con algn Message antes definido.
Binding: Describe los protocolos que se utilizan para llevar a cabo la comunicacin en un
determinado PortType; actualmente los protocolos soportados son SOAP, HTTP GET, HTTP
POST y MIME, siendo SOAP el ms utilizado.
<definitions name="FooSample"
targetNamespace=http://tempuri.org/wsdl/
xmlns:wsdlns=http://tempuri.org/wsdl/
xmlns:typens=http://tempuri.org/xsd
xmlns:xsd=http://www.w3.org/2001/XMLSchema
xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/
xmlns:stk=http://schemas.microsoft.com/soaptoolkit/wsdl-extension
xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="Simple.foo">
</message>
<message name="Simple.fooResponse">
</message>
<portType name="SimplePortType">
INTERFASE E IMPLEMENTACIN
La estructura bsica de archivo con formato WSDL podra ser dividido en dos partes lgicas: la
interfase del servicio, y la implementacin del mismo.
Port, Service.
A partir de esta divisin lgica se puede definir por medio de una Interfase del servicio una
estndar para realizar, por ejemplo, ordenes de compras que puede ser reutilizada e
implementada por todas las empresas, sin tener que redefinir cada una de ellas la interfase.
Si al igual que con SOAP se siente preocupado por la complejidad de los archivos WSDL de
nuevo despreocpese; la mayora de los lenguajes de programacin proveen o proveern
herramientas para generar en forma automtica el archivo WSDL a partir de un determinado
mtodo o funcin.
EL ESQUEMA UDDI
El modelo de informacin base utilizado por los registros UDDI es definido en un esquema
XML. Este esquema define cuatro tipos bsicos de informacin, cada uno de los cuales proveen
la clase de informacin que un usuario necesita saber para utilizar un web service de otra
empresa.
businessEntity
tModel
businnessEntity
bindingTemplate
http://www.uddi.org/pubs/ProgrammersAPI_v2.pdf
API UDDI
El acceso al registro UDDI, ya sea para realizar bsquedas o para ingresar o
modificar un registro, se puede realizar a travs de una pgina web que
implemente el acceso o utilizando ciertas interfaces (web services) que provee la
especificacin de UDDI. Estas interfaces estn descriptas en una API, que puede
ser dividida en dos partes lgicas, la API de consultas y la API de publicacin.
Por ms informacin sobre la API UDDI: http://www.uddi.org/pubs/ProgrammersAPI_v2.pdf
Un ejemplo
Las formas en que se puede realizar negocios utilizando web services es muy variada. El
consumidor podra pagar por utilizar los servicios brindados por un proveedor, o el proveedor
podra pagar para que aparezcan los servicios que l ofrece en un determinado consumidor, o
incluso existen casos en los cuales ni el consumidor ni el proveedor pagan por consumir o
proveer los servicios en forma respectiva. Este es el caso que se presenta a continuacin.
Claramente se muestra en este ejemplo el gran poder de los web services, y la ventaja que
tendrn las empresas que los sepan utilizar en forma adecuada con respecto a las otras.
Imagnese en este caso si usted fuera a reservar boletos de avin y pudiera elegir por una
compaa que adems de reservar los boletos le permitiera hacer la reserva de hotel, y otra
que no; por cual hara la reserva? Por otro lado imagine que usted es dueo de una rentadora
de autos y sabe que su competencia esta brindando sus servicios en un portal de una
compaa area y usted no, qu hara?.
XML
Introduccin
Hoy en da, se pueden encontrar muchsimos sitios web que brindan servicios on-line como
por ejemplo reservas de asientos para espectculos, aviones, reportes meteorolgicos, etc.;
para poder brindar estos servicios a los usuarios, los diseadores y los programadores web
deben combinar los datos y la presentacin en un documento HTML. Muchas veces el
proveedor de determinada informacin no es quien la va a procesar (sea esto publicarla en
un sitio, ingresarla en una aplicacin, etc).
El lenguaje XML est compuesto por etiquetas que describen el contenido del documento. Un
elemento XML queda definido por una etiqueta de comienzo y otra de fin con el valor del
elemento entre ambas etiquetas. Los elementos pueden estar anidados y adems pueden
contener en forma opcional, uno o ms atributos. Los atributos son usados para adjuntar
informacin secundaria a los elementos.
<weather-report>
<time>08:00</time>
<area>
<city>Montevideo</city>
<country>Uruguay</country>
</area>
<measurements>
<wind>
<direction>SW</direction> <windspeed>6</windspeed>
</wind>
<humidity>87</humidity>
<visibility>10</visibility>
</measurements>
</weather-report>
El ejemplo anterior est compuesto nicamente por elementos XML, pero el mismo podra
redefinirse, de forma que la informacin correspondiente al rea estuviese representada por
atributos, como se representa a continuacin:
<time>08:00</time>
<measurements>
<wind>
<direction>SW</direction> <windspeed>6</windspeed>
</wind>
<humidity>87</humidity>
<visibility>10</visibility>
</measurements>
</weather-report>
Si bien el hecho de estar compuesto por etiquetas hace que sea parecido a HTML, hay una
diferencia muy importante: en un documento XML no hay informacin acerca de cmo deben
ser presentados los datos.
As, como HTML provee etiquetas especficas para formatear un documento, XML provee un
marco para crear etiquetas.
Resumiendo, XML es un lenguaje estndar definido por el Consorcio World Wide Web para
permitir grabar y leer datos en forma estructurada con formato estndar independiente de
aplicaciones y vendedores.
Introduccin
SOAP es un protocolo liviano basado en XML, para invocar procedimientos en forma remota
(Remote Procedure Call). Utiliza cualquier protocolo que permita transportar mensajes de
texto, siendo HTTP el ms utilizado.
Su especificacin describe el contenido que debe tener un mensaje XML para ser usado en una
invocacin remota.
Cualquier aplicacin que cumpla la especificacin puede invocar y proveer servicios sin
importar en que lenguaje o plataforma est implementado, lo nico necesario es que la
aplicacin sea capaz de interpretar el mensaje SOAP que recibe, realizar el procesamiento que
el mensaje requiera, y devolver otro mensaje SOAP con la respuesta.
En las aplicaciones generadas por GeneXus se utiliza SOAP para invocar a objetos
en forma remota, usando HTTP como protocolo de transporte.
Alcance
Objetos llamadores (Clientes)
Objetos: Todos los objetos
Interfaces: Win/Web
Los objetos llamadores son los que invocan servicios mediante SOAP
Interfaces: Web
Los objetos llamados son los brindan un servicio invocado mediante SOAP
Descripcin
Algunas de las ventajas de utilizar este protocolo en aplicaciones GeneXus son la posibilidad de
desarrollar servicios web, asi como el poder hacer invocaciones entre objetos de diferentes
generadores (por ej. llamar desde Visual Basic a Java, o desde C/Sql a Visual Basic),
funcionalidad que no estaba permitida en versiones anteriores, excepto llamadas RPC desde
los generadores visuales a los generadores CSql/Cobol/RPG.
Servidor
Para indicar en GeneXus que un objeto main va a ser llamado utilizando el protocolo SOAP, se
deber seleccionar el valor SOAP en la propiedad Options/Call Protocol. Nos referiremos
en adelante a dichos objetos como Servidores o Servicios web. Solo pueden ser reportes o
procedimientos, sin ningn tipo de interfaz con el usuario.
Se requiere un servidor Web que haga el hosting de los servicios a ser invocados.
Los programas Servidores reciben la invocacin http, procesan el mensaje SOAP que enva el
Cliente con sus parmetros, realizan la accin requerida, y generan otro mensaje SOAP de
respuesta (eventualmente con los parmetros modificados).
Cliente
Los objetos que van a invocar al servicio web, a los que llamaremos
Clientes, pueden ser cualquier objeto GeneXus. La invocacin se hace con
el comando call() de GeneXus.
Locations
Para indicar cual va a ser la ubicacin de los servicios invocados se utiliza un esquema conocido
como Locations.
Manejo de errores
Comportamiento frente a un error
Esta propiedad se habilita solamente cuando la propiedad Call Protocol tiene el valor SOAP.
El valor por defecto es Yes. De tener valor No, la ejecucin no se cancelar y se podr
obtener el cdigo numrico de error con la funcin GetSOAPErr(), y el mensaje de error
mediante la funcin GetSOAPErrMsg().
Mayor que 0 y menor que 10000: Algn parmetro retornado por el servidor no
tiene el nombre esperado. El cdigo de error indica la posicin del parmetro que
ocasion el conflicto.
-20004: El servidor retorn que hay un error en el pedido SOAP realizado por el
cliente. En este caso getSOAPErrMsg() retornar un mensaje conteniendo el cdigo y
el mensaje de error retornados por el servidor. Si el servidor es un procedimiento o
reporte GeneXus, retornar alguno de los cdigos de error descriptos ms abajo.
Un procedimiento o reporte GeneXus que es llamado mediante SOAP puede retornar alguno
de los siguientes cdigos de error:
-20000: No se recibi un mensaje SOAP.
Por la naturaleza del protocolo SOAP los programas generados con GeneXus
pueden ser invocados por cualquier cliente SOAP, sea o no generado por
GeneXus.
http://localhost:80/c/sqlsolis/prg/nombredeprograma?wsdl
C/SQL
(*) (*) (*) (*)
Java
Visual Basic
Visual Fox
X X X X
(*) El generador C/Sql adopt desde la versin 7.5 el SOAP como protocolo por defecto para
las llamadas RPC, por lo que una llamada RPC a un programa C/Sql siempre se va a hacer va
SOAP, no importando el generador con el que se genere el objeto llamador (con el valor
Internal para la propiedad Call Protocol; en este caso no esta disponible la propiedad Cancel
Caller Execution on Error, y cancelar el programa llamador en el caso de que se produzca un
error en el programa llamado). Es posible a partir de esta caracterstica hacer llamadas RPC
desde programas C/Sql hacia programas generados por cualquier generador que genere
servicios SOAP. Por ejemplo es posible llamar desde un objeto main C/Sql a otro objeto main
C/Sql, caracterstica no disponible hasta la versin 7.5 de GeneXus.
NOTA: Se esta generando dentro del archivo WSDL de los servidores SOAP un
elemento <documentation> que incluye el Help del objeto. Esto permite incluir en
el WSDL informacin acerca del uso del Servicio, parmetros que recibe, para que
sirve, etc. El elemento tiene los siguientes subelementos:
<documentation>
<URL>Character</URL>
<line>Character</line>
<line>Character</line>
</documentation>
En el elemento URL se indica la URL al Help HTML del objeto que se genera.
En los elementos line se genera el Help del objeto. Solo la parte de texto es
generada, ignorndose el resto. Se generan lneas con un mximo de 80
caracteres, en caso de que la lnea de Help sea mas larga, se generan tantos
elementos line como sean necesarios.
Consumidores a Web Services externos
Usando GeneXus 8.0 o posterior se utiliza el WSDL Inspector, que permite
importar la definicin del servicio que se desea consumir.
Igualmente en la versin 7.5 es posible invocar a un servicio web externo utilizando los tipos
de datos HttpClient, XmlWriter y XmlReader.
A continuacin se detallarn los mecanismos para proveer y consumir web services con
GeneXus.
Proveer
Para proveer web services con GeneXus se debe definir un objeto procedimiento o reporte,
que debe ser de tipo main, y asociado a un generador Web.
Se debe publicar el objeto en un web server, con lo que el web service queda operativo para
ser invocado.
El WSDL del servicio queda disponible agregando el parmetro wsdl a la URL del mismo. Por
ej.:
http://server/baseurl/aservice.aspx?wsdl
Consumir
Usando GeneXus 8.0 o posterior:
Se utiliza el WSDL Inspector, que permite importar la definicin del servicio que se desea
consumir. Se debe indicar el WSDL del mismo, y el utilitario definir los tipos de datos
necesarios para poder consumirlo desde GeneXus.
En el caso de que el web service utilice tipos de datos estructurados, los mismos sern
agregados a la base de conocimiento al importar la definicin con el WSDL Inspector.
Adems, es necesario configurar la propiedad de objeto Location. Esto servir luego para
configurar, en los objetos GeneXus que vayan a invocar al web service, la ubicacin del mismo
(host, port, etc).
En esta seccin crearemos un Web Service GeneXus, y veremos como consumirlo desde una
aplicacin GeneXus.
Supongamos que quisiramos publicar un servicio de nuestro sitio web, por ejemplo un
ranking con las 10 pelculas ms vendidas.
Nombre: Moviesdt
Structure Type
MovieId Identifier
MovieTitle Character(60)
Definiremos una variable que nos permita contar la cantidad de pelculas: &Qty, ms
una variable que permita almacenar toda la coleccin de pelculas ms vendidas
(Movie) junto con una variable que cargue cada uno de los items de esa coleccin de
pelculas (MovieItem).
Name Type
Qty N(2)
Movie S(Moviesdt)
MovieItem S(Moviesdt.MoviesdtItem)
&Qty = 1
&MovieItem.MovieId = MovieId
&MovieItem.MovieTitle = MovieTitle
&Movie.Add(&MovieItem)
&Qty +=1
if &Qty > 10
exit
endif
endfor
Rules:
parm(out:&Movie);
Observe que es necesario que el procedimiento sea main, y configurar la propiedad Call
protocol con el valor SOAP.
http://localhost/services/aranking.aspx?wsdl
Observe que el mtodo del Web Service es Execute y el tipo de datos que
devuelve es Moviesdt.
Name Type
MovieId N(3)
MovieTitle Character(60)
Movie S(Moviesdt)
MovieItem S(Moviesdt_MoviesdtItem)
Rank O(org_tempuriaction_.Ranking)
Observe que los tipos de datos Moviesdt (coleccin de pelculas),
Moviesdt_MoviesdtItem (cada item de la coleccin) y
org_tempuriaction_.Ranking (Web Service) se crearon automticamente al
inspeccionar el servicio con el WSDL Inspector.
El form del web panel ViewRanking contendr un grid con las variables &MovieId y
&MovieTitle.
Programaremos los eventos Refresh y Load del web panel, como se muestra a
continuacin:
Event Refresh
//variable &Movie
EndEvent // Refresh
Event Grid1.Load
&MovieId = &MovieItem.MovieId
&MovieTitle = &MovieItem.MovieTitle
load
endfor
EndEvent // Grid1.Load
Lo que queremos ver en esta seccin es como incluir un web service externo no
GeneXus en nuestra aplicacin (Ya hemos visto en este captulo un ejemplo de
como crear y consumir un web service hecho con GeneXus).
Lo que haremos es importar un web service que prove Google. Google es una
compaa especializada en la bsqueda de informacin en la web. En su pgina web
(http://www.google.com) se puede ingresar una lista de palabras por las cuales buscar
y retorna todos los sitios web en las cuales encontr esas palabras. Esta misma
funcionalidad Google la provee por medio de un web service.
El WSDL Inspector permite a partir del WSDL de un web service definir los tipos de
datos necesarios en GeneXus para poder consumir el web service en forma
transparente, sin tener que preocuparse de los protocolos involucrados en el
proceso y la definicin del mismo.
Que es wsdl?
WSDL es un lenguaje basado en XML que se utiliza para describir un web service.
Un archivo con formato WSDL provee informacin de los distintos mtodos
(operaciones) que el web service brinda y sus parmetros, muestra cmo
accederlos y que formatos deben de tener los mensajes que se envan y se reciben.
Tipo
NOMBRE
Ws GoogleSearch.GoogleSearchService
Return GoogleSearchResult
ResultElements ResultElementArray
ResultElement ResultElement
Event search.click
&Key = "3yHXpPZQFHKdexiyPjqTPYNqVvnYj8cZ"
&MaxResult = 10
&Filter = 1
&SafeSearch = 1
&Return=
&Ws.doGoogleSearch(&Key,trim(&Query),&Start,&MaxResult,&Filter,
&Restrict,&Safesearch,&Lr,&Ie,&Oe)
&ResultElements = &Return.resultElements
&searchTime = &return.searchTime
EndEvent
Event Grid1.Load
Title.Caption = &ResultElement.title
&url = &resultElement.URL
Title.LinkTarget = "_BLANK"
Title.Link = link(&ResultElement.URL)
&Summary = &ResultElement.snippet
&cachedsize = &resultelement.cachedSize
grid1.Load()
Endfor
EndEvent
En este evento se recorre la Collection con los resultados devueltos por el web
service y se realiza la carga del grid.
Nota:
http://www.google.com/apis/reference.html
INTRODUCCIN AL CAPTULO 11
Cada vez mas, el uso masivo de Internet propicia el desarrollo de aplicaciones de mayor
versatilidad y complejidad para ambiente Web. Es por esto que est surgiendo la necesidad de
aplicar una reingeniera a las aplicaciones existentes y tambin, en muchos casos, la necesidad
de desarrollar nuevas aplicaciones para Internet.
Existen varias diferencias entre los ambientes GUI (aplicaciones con Interfaz de Usuario
Grafica) y WEB, las que debern evaluarse al momento de determinar la conveniencia del tipo
de aplicacin a desarrollar.
En este captulo veremos los principales aspectos a ser tenidos en cuenta para los usuarios
GeneXus.
Objetivo.
El objetivo de este artculo es brindar una herramienta de referencia, para asistir en la decisin
de migrar o desarrollar una aplicacin con interfaz de usuario grafica (GUI), o una aplicacin
web.
Para analizar las diferencias entre los dos tipos de aplicaciones se compararn las ventajas y
desventajas de las aplicaciones web frente a las aplicaciones GUI.
Existe otro articulo (Conversin de Aplicaciones GUI a WEB) sobre esta misma temtica
en donde se dan los detalles tcnicos de cmo realizar esta tarea, por lo que aqu no se
mencionarn esos detalles.
Introduccin.
Las aplicaciones con Interfaz de Usuario Grafica (GUI) estn compuestas por uno o varios
programas GeneXus que utilizan objetos de tipo, transaccin, work panel, procedimientos y
reportes.
Aplicaciones Web.
Se entender por aplicaciones Full Web a aquellas aplicaciones en las que la interfaz del
usuario es nicamente realizada utilizando el lenguaje HTML y son accedidas desde un
browser. En GeneXus estas aplicaciones se implementan con objetos web como web panels o
Transacciones Web.
Una aplicacin Web tiene diversas ventajas frente a las aplicaciones GUI.
INSTALACIN.
Las aplicaciones Web presentan varias ventajas tanto en la instalacin y actualizacin como en
los requerimientos necesarios para utilizarlas.
Cliente fino. Para utilizar la aplicacin Web solo se necesita un browser. Los browsers son
distribuidos por Internet y no tienen costo. Generalmente vienen incluidos al instalar el
sistema operativo. Adicionalmente se pueden instalar plugs-in, que son programas que
agregan funcionalidades adicionales al browser. Un ejemplo muy comn es el plug-in de
Acrobat, utilizado para visualizar archivos en formato PDF o plugs-in para video o sonido.
En el caso de una aplicacin web no se requiere ninguna instalacin adicional a la del browser,
para poder accederla o acceder a otras aplicaciones web.
ESCALABILIDAD.
Las aplicaciones Web utilizan una arquitectura de tres capas compuesta por la capa cliente,
donde est nicamente el browser, la capa del Servidor Web donde esta la aplicacin y la capa
de datos donde se encuentra la Base de Datos.
Capa
Capa Cliente
Servidor Web
Aplicacin
Web
Capa
Browser
de Datos
BD
Arquitectura en tres capas.
Una ventaja de la arquitectura en tres capas es que no es necesario pagar nuevas licencias por
cada nuevo usuario que accede a la aplicacin (por ejemplo los drivers de acceso a la base de
datos se pagan por cantidad de usuarios concurrentes).
INDEPENDENCIA.
Acceso. La aplicacin puede ser accedida desde cualquier lugar que cuente con acceso a
Internet. Esto puede tener un fuerte impacto en el modo de trabajo ya que se pueden acceder
a las aplicaciones desde la oficina, el hogar o incluso desde otros pases.
Hosting Services Provider (HSP). La aplicacin puede ser instalada en un centro de computo
propio o puede contratarse un Hosting Service Provider (son empresas que proveen un centro
de computo para aplicaciones Web) e instalarla en los servidores del HSP. Para los usuarios, el
acceso a la aplicacin es independiente de donde este instalada.
INTERFAZ GRFICA.
Uniformidad. La forma de navegar por la aplicacin web ser siguiendo links o presionando
botones y si bien hay mas opciones, estas son las ms comunes y se mantendrn por toda la
aplicacin. Si bien este modo de interaccin es limitado con respecto a las aplicaciones GUI, al
ser tan simple y uniforme en toda la aplicacin, al usuario final le resultar sencillo e intuitivo
aprender a utilizar nuevas funcionalidades.
El diseo grfico es realizado por expertos. Un aspecto sumamente importante en la interfaz
grafica de una aplicacin Web es el diseo grafico. Este aspecto sumamente delicado se deja a
cargo de diseadores grficos especializados, que hacen que las aplicaciones tengan aspectos
atractivos y funcionales.
Para esto se cuenta a partir de la versin 8.0 de GeneXus, con el Editor de Temas, herramienta
que puede ser usada tanto desde GeneXus como en forma independiente, por lo cual
flexibiliza notablemente la interaccin con el diseador grfico, adems de todas las ventajas
adicionales que trae el uso de Temas en el diseo de la aplicacin WEB. Por detalles sobre
Temas ver el documento Themes
Impacto del diseo de las pginas Web finales. Si se utilizan demasiadas imgenes,
con muchos botones, el tamao final de la pgina, puede ser excesivamente grande,
por lo que se demorar mucho el acceso. La recomendacin es cuidar de que las
imgenes sean de pocos Kbytes. Los links de texto son muy livianos, en el caso de
una aplicacin muy accedida, puede ser conveniente utilizarlos. Los sitios web de
Amazon y Yahoo, son buenos ejemplos de interfaces livianas, con pocas imgenes y
muchos links de texto.
El diseo debe ser consistente. Por ejemplo la tipografa, los colores, la ubicacin de
botones, etc. debe seguir una pauta bien definida, que los desarrolladores deben
respetar al mximo.
El diseo debe ser simple y sencillo. El exceso de detalles grficos, puede complicar el
desarrollo y evolucin del sitio.
El diseo debe ser robusto de modo de poder soportar evoluciones, y nuevos
requerimientos.
Componentizacin. Es muy importante que la estructura de las pginas pueda ser
separado en componentes, de modo de poder reutilizar los mismos objetos para
simplificarle al usuario el conocimiento del sitio. En GeneXus esto, se implementa
utilizando Web Components.
Interfaz multimedia. Es muy sencillo incluir en las aplicaciones web caractersticas multimedia
como audio, video, imgenes, etc.
Tener aplicaciones web habilita a la empresa a funcionar como ASP, brindando como servicio
el uso de las aplicaciones web desarrolladas.
Tambin habilita a contratar a otros ASP para potenciar las aplicaciones propias.
Para controlar distintos aspectos de la interaccin con pginas web se utiliza el lenguaje
JavaScript. El cdigo escrito en este lenguaje es incorporado en el HTML e interpretado por el
browser.
Java es un lenguaje de programacin muy potente, entre sus propiedades, se destaca la de ser
multiplataforma. Esto quiere decir que las aplicaciones desarrolladas en Java pueden
ejecutarse en cualquier sistema operativo y cualquier plataforma de hardware. Esta propiedad
lo hace especialmente atractivo para aplicaciones que ejecutan a travs de Internet. Por lo
tanto se pueden incorporar aplicaciones GUI desarrolladas en Java, para potenciar la aplicacin
web.
MLTIPLES FORMAS DE ACCESO.
Mltiples tecnologas como computadores de bolsillo y telfonos celulares estn teniendo un
fuerte desarrollo, principalmente como formas alternativas de acceso a Internet. Las
caractersticas de hardware de estos dispositivos hacen que las aplicaciones web sean las mas
adecuadas. La principal diferencia con las aplicaciones web para estos dispositivos es el
tamao reducido de la pantalla. Si bien es necesario crear una versin particular para el
dispositivo, se puede reutilizar mucho conocimiento de una aplicacin web ya desarrollada.
Browser
Funcionamiento de las Transacciones Web y Web Panels.
El tiempo de vida de las UTL (unidades de trabajo lgicas) en los objetos web, se mantiene
nicamente durante la ejecucin del objeto. Cuando la ejecucin termina se deben hacer
commit o roll back. Por lo tanto no es posible definir una UTL a travs de varias Transacciones
Web. Sin embargo, es posible mantener la UTL a travs de varios procedimientos que se
invoquen unos a otros, siempre que se mantengan dentro de la misma ejecucin. En las
aplicaciones GUI es comn encontrar que durante varias transacciones se van ingresando
datos y luego en la ltima transaccin se hace el commit de todos los datos ingresados, por lo
que se deben contemplar estos casos en la reingeniera de la aplicacin. Las alternativas
posibles a esta situacin son:
Diferencias en los Work Panel Trabajar con. En las aplicaciones Web, los work panels de
tipo Trabajar con presentan algunas diferencias que en las aplicaciones GUI.
La seleccin de lneas es diferente. En las aplicaciones GUI, las lneas se seleccionan al hacer
clic en ellas, adems se puede seleccionar un rango de lneas, continuo o con lneas salteadas,
todo esto sin necesidad de programacin extra. En las aplicaciones Web, la seleccin mltiple
de lneas debe programarse mediante campos de chequeo.
Una posibilidad es permitir la seleccin de mltiples lneas y utilizar el carrito de compras (se
describe ms adelante).
Se puede usar la propiedad AllowSelection de los grids para que sea posible seleccionar de a
una lnea.
El modelo del carrito de compras. El carrito de compras, es muy utilizado en los sitios web con
e-commerce y permite recordar los objetos que compra los usuarios. En el carrito de compras
se van seleccionando distintos items que se desean comprar. El carrito mantiene almacenado
el contenido hasta que el dueo decide comprar alguno o todos los items. Esta idea resulta
practica en casos como estos:
Si se quiere realizar alguna accin a una serie de lneas en un Trabajar con, se pueden
ingresar en el carrito y luego automticamente se van presentando una a una las paginas
adecuadas para la accin determinada, hasta vaciar el carrito.
Ejecucin en el servidor. A diferencia de las aplicaciones GUI cliente / servidor, donde pueden
ejecutarse acciones tanto en el cliente como en el servidor, en las aplicaciones web, solo se
pueden ejecutar acciones en el servidor. Podra decirse que el cliente prcticamente no tiene
capacidad de computo, adems como se mencion anteriormente tampoco tienen memoria.
Es decir que no es posible definir un valor, almacenarlo en la computadora del cliente y luego
recuperarlo. Sin embargo hay algunas alternativas:
Cookies. Son archivos de texto, que quedan salvados en las computadoras cliente. En ellos se
puede guardar variables y luego recuperar su valor. Aunque browser permite al usuario a
opcin de deshabilitar el uso de cookies, son ampliamente utilizadas.
Pasaje de parmetros. En este mtodo se utiliza el pasaje de parmetros entre los objetos web
para el pasaje de informacin. Todos los objetos web de la aplicacin tendrn los primeros
parmetros iguales, en donde se pasarn datos comunes a toda la aplicacin, como nmero de
cliente, etc. y luego tendrn parmetros especficos de cada uno. La ventaja de este mtodo es
que los usuarios que no permiten cookies no tienen problemas en utilizar la aplicacin, la
desventaja es que los cambios en los parmetros tienen un fuerte impacto. Como el pasaje de
parmetros se realiza a travs de la url de la aplicacin y los browsers permiten que se vea esa
url, el usuario puede ver el valor de los parmetros, e incluso modificarlos. Sin embargo,
GeneXus brinda la posibilidad de encriptar los parmetros en forma transparente al
desarrollador, esto es importante porque se puede pasar nmeros de cliente, nmeros de
factura, etc. en forma segura.
Crear sesiones. Este mtodo mantiene la informacin en sesiones que son almacenadas en la
base de datos. Por cada usuario que utiliza la aplicacin debe crearse su sesin particular.
Adems debe ser complementada con el pasaje de parmetros o cookies para recuperar el
nmero de sesin. La ventaja sobre el mtodo anterior es que si se necesita almacenar mas
informacin se afecta solo los objetos que necesitan esa informacin.
Una aplicacin web debe estar disponible los 7 das de la semana, durante las 24 horas del da.
Esto implica un servicio de alta disponibilidad en el cual posiblemente se maneje redundancia
de servidores y de informacin.
Conclusiones.
Las aplicaciones web son una nueva alternativa a las aplicaciones de interfaz grafica. Ambos
tipos de aplicacin tienen sus caractersticas propias por lo que en cada aplicacin se debe
evaluar si conviene realizarla como web o GUI. Los puntos discutidos en este articulo pueden
ser considerados como una gua para tomar esta decisin. Como requisito para tomar una
decisin correcta se debe comprender:
Algunos puntos a tener en cuenta para evaluar la creacin o migracin a aplicaciones web son:
Como punto final hay que tener en cuenta evolucin de la aplicacin en cuanto a la creacin
de nuevos mdulos, cantidad de usuarios y mantenimiento.
Objetivo
El objetivo de este documento es describir los principales aspectos tcnicos a tener en cuenta
al momento de convertir una aplicacin GeneXus de tipo GUI-Windows a una aplicacin Web.
Introduccin
Aplicacin GUI
Entendemos como aplicacin GUI (Graphic User Interface) a toda aquella que tiene interfaz
grfica Windows, compuesta bsicamente por los objetos transacciones, work panels,
procedimientos y reportes, generadas con los generadores GeneXus Visual Basic, Visual Fox,
Java y .Net.
Aplicacin Web
Una aplicacin Full Web tiene una interfaz HTML (HyperText Markup Language) y se ejecuta
dentro de un browser. Este tipo de aplicaciones se desarrolla bsicamente con los objetos Web
de GeneXus: web panels y web transactions. Se generan con cualquiera de los generadores
Web: Visual Basic, Java, .Net y C/SQL
Reingeniera de la aplicacin
La premisa fundamental para convertir una aplicacin WIN a WEB es que los ambientes
implicados (grfico, html) son diferentes y por lo tanto la conversin implicar algo mas que la
mera conversin de los objetos.
Otra posibilidad es crear un nuevo objeto (Web panel) y copiar la lgica del work panel hacia el
web panel.
Observe que se debe revisar la lgica ya que existen ciertas diferencias en la interfaz que
obligan a cambios en la programacin.
Se recomienda leer el documento Comparacin entre Web Panels y Work Panels donde se
comparan generalidades de ambos tipos de objetos.
NOTA Luego de convertir el objeto, se debe editar el cdigo HTML del mismo y quitar los tags
<pre> y </pre> que quedan al principio y al final respectivamente del mismo. Hay que tener en
cuenta que la conversin no crea una tabla con los controles dentro, por lo tanto al quitar los
tags mencionados anteriormente la pantalla se desarma y quedan todos los controles juntos.
Se aconseja por lo tanto, crear primero una tabla donde se pueden arrastrar los controles y
finalmente quitar los tags <pre> y </pre>
3. Conversin de Reportes
Una posibilidad para manejar reportes es programar un webpanel, de forma que el usuario
final pueda imprimirlo con las opciones de impresin del browser.
MANEJO DE OPCIONES
FILTROS
Si un Web Panel Trabajar con tiene variables que se aplican como filtro a los
registros desplegados en el grid, al seleccionar un registro y llamar a otro
objeto (por ej. Transaccin Web) que tiene un return, se vuelve al Web Panel
Trabajar con pero se pierden los valores ingresados a los filtros. Para poder
mantener el comportamiento de los Work Panels Trabajar con se deberan
utilizar cookies que almacenen los filtros ingresados.
REFRESH
En Work Panels Trabajar con, es comn tener un comando Refresh o Refresh
keep dentro de un evento, luego de llamar a una transaccin. Cuando estos se
convierten a Web Panels Trabajar con el Refresh no es necesario, ya que al
ejecutar el comando Return hay un refresh implcito del Web Panel. Por lo
tanto, los comandos Refresh y Refresh keep deben ser eliminados de los
eventos mencionados anteriormente.
Debe considerarse que se puede utilizar nicamente para invocar a objetos sin interfaz. Si se
invoca a otro web panel, solamente se ejecuta para el ltimo registro del grid.
Para la seleccin de una linea se cuenta con la propiedad AllowSelection.
En las aplicaciones HTML esto no puede usarse. Las llamadas a un web panel solamente
pueden realizarse desde otro web panel (mediante el call o el link).
Otra alternativa es usar cdigo HTML externo que permite simular estos tabs
INTRODUCCIN CAPTULO 12
Una solucin para la generacin de reportes en WEB es trabajar con reportes PDF.
Con este tipo de reporte, se cuenta con mayor potencialidad para el desarrollo de aplicaciones
web. El reporte generado como PDF puede visualizarse directamente desde el browser.
Lo que haremos es un corte de control sobre la tabla Gen_Movie, de forma similar a como se
hizo en el webpanel MovieCatalog.
Main
Call Protocol = HTTP
Report OutPut = Only to File
Y la siguiente rule:
output_file('movies.pdf','PDF');
Haga clic aqu para ver la demostracin..
Nota:
Para comprobar que el reporte ejecuta correctamente, basta con ejecutarlo directamente
desde el browser, digitando en nuestro caso la siguiente URL:
http://localhost/services/oViewCatalog.aspx
PrintCatalog.Link = link(RViewCatalog )
INTRODUCCION AL CAPITULO 13
Como mencionamos al comienzo del curso, los sitios estn compuestos
normalmente de una combinacin de paginas estticas y dinmicas. Las pginas
dinmicas tardan mas en bajar que las estticas, por la simple razn que tienen
que ejecutar antes de poder enviar la informacin al browser del usuario. Dentro de
este tiempo esta la conexin a la base de datos, la ejecucin de las sentencias, etc.
Algunas veces este tiempo de ejecucin no es necesario, ya que los datos no han
cambiado. Es por esta razn, que GENEXUS incluye una caracterstica denominada
Smart Static Panels (SSP) que permite estatizar paginas de la aplicacin. En este
captulo vamos a ver que posibilidades nos brinda esta caracterstica
Introduccin
El objetivo es posibilitar la generacin inteligente de pginas estticas desde GeneXus. Como
SSP entendemos la ejecucin de un web panel dinmico para una instancia de datos que
recibe como parmetro, es decir archivos de texto conteniendo HTML con la informacin
obtenida a partir de la base de datos.
Estas SSP pueden convivir con los web panels dinmicos, tanto pudiendo llamarlos como
pudiendo ser llamados. Esto ser muy til en sitios de informacin (portales) donde gran parte
de la informacin, despus de generada ser esttica.
Alcance
Lenguaje: C/SQL, Java, Visual Basic
Interfaces: Web
Descripcin
La finalidad es permitir desde GeneXus la generacin de pginas estticas de una forma
inteligente, es decir consultando dinmicamente a la base de datos.
1. Si existen pginas cuyo contenido vara en la base de datos con una periodicidad
conocida.
2. Si la aplicacin puede soportar mostrar alguna informacin no on-line sino que se
actualice hacia el web con cierta periodicidad.
Generacin de SSP
La preferencia a nivel del modelo denominada Generation Mode de la seccin Web
Information permite la generacin de las pginas estticas. Las opciones son:
1. Dynamic Panels
Este es el valor por defecto . Significa que el web panel se generar con acceso
dinmico a la base de datos.
Esta ejecucin puede hacerse desde la lnea de comandos o desde otro objeto GeneXus no
web. Analizaremos ambos casos.
El nombre de las SSP resulta de la concatenacin del nombre del objeto web panel con la lista
de parmetros que recibe separados por el carcter _ y la extensin HTML.
Por ejemplo, se tiene el web panel Clientes que recibe como parmetros la Empresa (atributo
EmpID num(3))y la categora (CatId char(1)), algunos nombres de las SSP son:
hcliente_203_A.html
hcliente_999_S.html
Independientemente de la property Generation Mode por cada link a un web panel, si este
web panel esta marcado como esttico, hace un call al web panel (de modo que este tambin
generar un .html, etc), y el link lo deja apuntando al archivo .html.
Los links a web transactions siempre seran a la transaccion web porque estas no se estatizan
Estatizacin de SSP
Denominamos Estatizacin al proceso de generacin de las SSP correspondientes a un web
panel.
Existen varias formas de estatizar un sitio web:
Generacin a Pedido
Generacin desde objetos GeneXus.
Generacin desde la lnea de comandos
La primera opcin aplica cuando el web panel tiene el valor Create Static panels on request. La
generacin de SSP a partir de objetos GeneXus y a partir de la lnea de comandos aplican
cuando el web panel tiene el valor Static Panel y son tiles para generar estas pginas en
forma masiva para las posibles instancias de datos que existan en la base de datos.
GENERACIN A PEDIDO
La generacin a pedido de las pginas SSP se realiza cuando la preferencia del modelo o del
objeto tienen el valor Create Static panels on request.
El sitio funcionar siempre como si fuera dinmico, esto significa que los links
siempre son al objeto web panel dinmico.
SSP Directory
Este parmetro es til en muchos casos en que una nueva generacin de SSP no significa
que toda la informacin anterior deje de ser vlida.
FUNCIN SETENVPROPERTY
La funcin SetEnvProperty permite configurar los parmetros adicionales.
La sintaxis es:
Por ejemplo:
FUNCIN COPYSTATICFILES.
Esta funcin permite realizar la copia de las SSP generadas a otro directorio, por
ejemplo:
&aux = copystaticfiles()
Consideraciones en C/SQL
Consideraciones en Java
Consideraciones en Visual Basic
Estatizacin de Web Components
Cuando se genera como Static Panel un Web Panel que incluye Web Components,
tambien se estatiza el Web Component dentro de la pgina.
Consideraciones
En la generacin de los smart static panels, los parmetros juegan un papel muy importante,
ya que el nombre del archivo creado depende de los valores de los mismos, por lo que para
que funcione correctamente la llamada entre web panels dinmicos y smart static panels es
necesario que se pasen y se reciban los parmetros con el mismo tipo de datos.
Por ejemplo, tener un programa A que llame a uno B pasando un parmetro en un Numrico
de 10 (N(10)) y el B lo reciba en un N(10,2) dar problemas ya que se generar con decimales
(como el llamado)pero se invocar sin decimales (como el llamador).
R: Estatico es el HTML resultado de la ejecucin de un SSP. Es decir, hay web panels dinmicos
(un EXE, un servlet) hay SSP (un EXE o servlet con la property "generation mode" en SSP) y hay
HTMLs que son el resultado de la ejecucin de un SSP.
Normalmente un sitio se formar con dinmicos y/o HTMLS pero en el "background" se tienen
dinmicos y SSPs que generaron esos HTMLs.
R: si, es decir, puedo tener algunos dinmicos y otras generadas mediante SSP.
SSP-Dinmico, Dinmico-SSP.
dependiendo del mismo es lo que se hace. Normalmente sern sitios con web panels
dinmicos y tambien SSP. Pero un ejemplo totalmente SSP puede ser para armar un CD tipo
Demo de mi sitio y distribuirlo. Se indican todos los objetos como SSP, y ejecutando
CALL(HMAIN) generarn todos los HTMLS del mismo.
Como solucin para bajar la carga del servidor Web, se pueden definir algunos SSPs y otros
Dinmicos.
Estos parmetros adicionales se pasan en la lnea de comandos despus de los parmetros que
el nombre del programa C pudiera tener.
Ejemplo:
Limitaciones
El generador C/SQL no soporta la propiedad genexus.static.copydir y la funcin copystaticfiles.
Estos parmetros adicionales se pasan en la lnea de comandos antes del nombre del
programa Java. La sintaxis es diferente dependiendo de la mquina virtual que se utilice.
Mquina Virtual
Si se ejecuta con la maquina virtual de Sun o IBM, y la cantidad de web panels estticos a
generar es grande, se recomienda aumentar la memoria mxima disponible para la aplicacin.
Esto se hace agregando un parmetro -Xmx<memoria en MB>m al 'java.exe'.
Por ejemplo:
EJEMPLO:
java -dgenexus.staticweb.dir=c:\
-dgenexus.staticweb.dynurl=http://server:8080/servlets
-dgenexus.staticweb.overwrite=false
Por ejemplo:
set
classpath=GeneXusclassr.zip;j:\tomcat\lib\servlet.jar;j:\drivers\jt400.jar;j:\jdk11\lib\classes.zip
;
Parmetro
NOTA: Para poder utilizar las funciones que permiten configurar los parmetros adicionales
desde las aplicaciones GeneXus (funcin setenvproperty), se debe configurar la preference
Functions = Allow non-standard functions tanto en diseo como en prototipo.
Para poder ejecutar los SPPs y que los mismos generen los HTMLs correspondientes se deben
seguir los siguientes pasos:
- Compilar el Web Panel que tiene la propiedad Generation Mode=Smart Static Panel
(generando la pgina ASP y la DLL), o alternativamente ejecutarlo en forma
interpretada (si se quiere se puede cerrar el browser y dejar solamente la ejecucin
del VBP).
- Ejecutar el objeto que va a establecer los parmetros y llamar al SSP.
- Al ejecutarse los SSP se despliega una ventana que indica cuales fueron los HTMLs
generados por la ejecucin de los SPPs. Esta ventana se corresponde con un utilitario
llamado GXLOG.EXE.
Ejemplo
Se tiene un Web Panel (PruebaSSP) que ser ejecutado como SSP y Work Panel (Llamador)
que ser el encargado de ejecutarlo.
A continuacin se detallan los pasos a seguir para ejecutar los SSP:
Event 'Llamada
call(HPruebaSSP, .)
EndEvent
genexus.staticweb.dynurl para indicar la URL correspondiente a los Web Panels dinmicos que
sern llamados desde los SSPs (http://localhost/cgi-bin/)
genexus.staticweb.overwrite para que no se sobreescriban los SSP para los que ya existe un
archivo .html con ese nombre.
Compilar el Web Panel PruebaSSP (se genera la pgina ASP y la DLL) o si se quiere
ejecutarlo en forma interpretada.
Ejecutar el Work Panel Llamador, y ejecutar el evento Llamada.
Al ejecutar el evento Llamador se generan las pginas HTML correspondientes al SSP, que
quedarn en el directorio d:\ssp.
Limitaciones temporales
El generador VB no soporta el parmetro genexus.static.copydir y la funcin
copystaticfiles.
No se pueden encriptar los parmetros de los Web Panels generados como estticos.
No se pueden utilizar funciones de Cookies en Web Panels generados como
estticos.
Si se realiza la ejecucin de SSPs, se cierra el utilitario GXLOG.EXE y se vuelve a
realizar una nueva ejecucin (sin haber cerrado previamente el programa que
ejecut el SSP y el proyecto del Web Panel con la propiedad Generation
Mode=Smart Static Panel en caso de ejecutarlo interpretado) se produce el siguiente
error:
Para que no ocurra, se debe cerrar el programa que ejecut el SSP (y el proyecto del Web
Panel en caso de ejecutarlo interpretado), y volverlos a ejecutar.
INTRODUCCION AL CAPITULO 14
En el desarrollo de una aplicacin web, la calidad de la interfaz con la que
interacta el usuario determina el xito de la aplicacin. La calidad de la misma
est definida por una serie de pautas y tcnicas. A este conocimiento se le llama
Usabilidad.
A lo largo de este captulo desarrollaremos cada uno de estos puntos para lograr
aplicaciones web exitosas y fciles de usar.
Estructura de la aplicacin
Diseo de la aplicacin
Diseo del contenido
ESTRUCTURA DE LA APLICACIN
Con estructura de la aplicacin nos referimos a la ubicacin de los diferentes elementos para
que sean encontrados de forma intuitiva por el usuario y utilizados de forma correcta. Hay que
tener esta estructura bien definida antes de aplicar un diseo.
Es importante que la estructura del sitio est reflejada en todas las pginas en
forma consistente.
Es recomendable:
Mostrar las barras de navegacin en todas las pginas. Con formato: Numeracin y vietas
No cambiar la ubicacin de las opciones de los mens segn cambien las
pginas (mantener consistencia).
Aplicar los mismos conceptos para las mismas acciones (links, botones,
bullets, etc.).
No poner links a la misma pgina en la que me encuentro.
Permitir que el usuario siempre controle la navegacin: no deshabilitar botones
estndares de los navegadores ni botones del mouse.
Si usa un mapa del sitio (Sitemap) brinde la informacin de donde est el
usuario en cada momento. Puede incluir una pequea descripcin de qu
ofrece cada opcin del men.
Navegacin
La navegacin de una aplicacin permite ir a las distintas partes, sectores,
pginas de la aplicacin rpidamente y en forma intuitiva. La estructura del sitio
se debe reflejar en la navegacin permitiendo contestar las siguientes preguntas:
Dnde estoy?
- Dentro del universo de sitios/ aplicaciones web
Esto se logra mostrando el logo del sitio/ aplicacin web en todas las
pginas. La ubicacin habitual del mismo, y por lo tanto el lugar donde el
usuario lo ir a buscar, es la esquina superior izquierda. Esta imagen debe
tener siempre un enlace a la pgina de inicio de la aplicacin o la pgina
principal del sitio.
Dnde estaba?
- Para indicar las pginas que el usuario ya visit, conviene dejar los
colores de los enlaces con los colores por defecto del navegador.
-
A dnde puedo ir?
- Mostrar todas las opciones a donde puede ir el usuario desde la pgina
actual, sin marearlo con demasiadas opciones. Si las opciones son
muchas, convieene agruparlas por reas o sectores y dentro de los
mismos mostrar submens.
1. Pgina de Inicio
Si bien hay un enlace en el logo de cada pgina, nunca est de ms
repetirlo ya que la pgina inicial es a la que se retorna con ms asiduidad.
Men de reas
Muchas veces se usa el rea de cabezal para ubicar un men de reas o categoras dentro
de la aplicacin o del sitio. Generalmente se utiliza cuando hay demasiadas opciones
para ubicar en el men izquierdo (ms de 10). Categorizar los enlaces y agruparlos en
reas simplifica la navegacin hacindola ms intuitiva.
Men izquierdo
Este men contiene las opciones de navegacin del sitio, todos los lugares del sitio a
donde se puede acceder.
En muchos sitios el men izquierdo cambia segn el rea en la que el usuario se
encuentre.
Se debe mantener el mismo diseo del men, independientemente de las opciones, para
que al usuario sepa cmo usarlo ya que aprendi su uso en otras reas del sitio.
Links
Hay tres tipos de links:
Cuando se definen links subrayar las palabras importantes y brindar Con formato: Numeracin y vietas
informacin suficiente para que el usuario se sienta atrado a seguir el link.
Relacionar la informacin con links del tipo "ms sobre tal tema", o sobre el
autor, etc.
Usar link title siempre que no sea obvio a donde va el link, para que
aparezcan los tooltips:
oSi el link es externo, el nombre del sitio
oSi es interno, el nombre del subsitio.
oInformacin adicional que se aplique
oEl tooltip debe tener menos de 60 caracteres.
Mantener siempre el color predeterminado para los diferentes links.
Siempre usar los mismos nombres para acceder al mismo contenido.
1. Velocidad de carga
2. Pblico objetivo
3. Uso de la aplicacin
4. Mximo aprovechamiento de los temas
Velocidad de carga
El tiempo que demora en cargarse la totalidad de una pgina determina la percepcin que va a
tener el usuario de ese sitio o aplicacin. Si la aplicacin demora en cargarse, el usuario
pensar que no es buena, que no le solucionar sus problemas de forma correcta. Si la demora
es excesiva, el usuario puede llegar a pensar que la empresa no es fiable.
Usar texto en vez de imgenes siempre que se pueda (ej: para los mens) Con formato: Numeracin y vietas
El formato de las imgenes siempre debe de ser .gif o .jpg, nunca .bmp, ya que
este formato pesa mucho ms que los anteriores.
Usar herramientas para disminuir el peso de las imgenes. Ej:
http://www.netmechanic.com/GIFBot/optimize-graphic.htm
No usar imgenes animadas.
No usar flash, ya que no slo demora ms la carga de la pgina, sino que
muchas veces requiere que el usuario instale la tecnologa.
No hacer pginas que requieran el uso excesivo de las barras de
desplazamiento horizontal. Esto no slo ahuyenta al usuario por el tiempo
que le consume, sino tambin por la cantidad de contenido que se le
presenta. Es mejor hacer pginas ms cortas, con la informacin suficiente, o
armar ms pginas a partir de una.
Pblico objetivo
Debe tener en cuenta quin ser el pblico objetivo a quin se dirige, quines sern los
usuarios- a la hora de disear y elegir los colores, los tamaos de las letras y tamaos de las
pantallas.
Por ejemplo, si el pblico objetivo est integrado por desarrolladores, se puede hacer un sitio
o una aplicacin con letras de tamao 8 puntos, pero no se recomienda usar este tamao para
un pblico masivo.
Uso de la aplicacin
Cuando est diseando tambin debe considerar cul es la finalidad de la aplicacin para no
entorpecer el uso del servicio que se desea brindar.
Si se trata de un sitio Web donde se ofrece bastante texto para leer no es recomendable que
las pginas tengan sectores que llamen ms la atencin que el contenido principal de la
pgina. Por ejemplo, las imgenes animadas son centros de atencin. Es realmente molesto
tener imgenes movindose en distintas partes de la pgina cuando se tiene que leer.
Si el sitio web es un portal, donde se espera encontrar muchos focos de atencin (textos
cortos, muchos links) es ms adecuado usar imgenes animadas.
Escribir lo ms corto y conciso posible. Se dice que en Internet hay que escribir
entre un 50% y un 25% menos de lo que se escribira en papel
Poner las conclusiones al principio y una opcin para ver el detalle de esa
conclusin
Tipo de letras
Se deben tener las siguientes consideraciones a la hora de elegir el tipo de letra a utilizar en
una aplicacin Web:
Legibilidad
La buena tipografa depende -entre muchas otras variables- del contraste visual
entre una fuente y otra, y entre los bloques de texto, los ttulos, y el espacio en
blanco alrededor. Lo que ms atrae al ojo es el contraste fuerte con patrones
distintivos.
Mrgenes
Los mrgenes definen el rea de lectura de una pgina, separando el texto
principal de lo que lo rodea.
Los usuarios en Internet en general no leen los textos palabra a palabra, sino que escanean las
pginas tomando algunas palabras de cada prrafo para entender la idea general de la pgina.
La alineacin izquierda facilita este tipo de lectura.
LINKS DE INTERS
Usabilidad
Sitios con artculos sobre usabilidad y temas relacionados con mejora en los sitios Web
En espaol
http://www.masterdisseny.com/
http://sunsite.dcc.uchile.cl/~rbaeza/inf/usabilidad.html
http://www.alzado.org/
En ingls
http://www.useit.com/
http://www.37signals.com/
http://www.usabilitynet.org/
http://usableweb.com
http://www.w3.org/TR/WCAG20/
http://www.hildesheim.co.uk/usability/index.html
Herramientas
Herramientas para reducir el peso de las imgenes
http://www.netmechanic.com/GIFBot/optimize-graphic.htm
http://www.creatingonline.com/crunchers.htm
http://www.gifworks.com/
Toolbar con varias herramientas de anlisis y optimizacin de
sitios
http://www.nils.org.au/ais/web/resources/toolbar/install.html
http://www.anybrowser.com/linkchecker.html
Llamaremos instalacin local a aquella que es independiente de una conexin a una red e
instalacin remota a la restante.
Adems, como el generador GENEXUS C/SQL permite acceder a los datos utilizando la
tecnologa de acceso SQL Embedded u ODBC, llamaremos instalacin SQL Embebida a aquella
que accede a los datos mediante sentencias SQL embebidas en el cdigo fuente e instalacin
ODBC a la que se conecta va ODBC.
Es posible tener cualquiera de las combinaciones, instalacin SQL embebida local, SQL
embebida remota, ODBC local, ODBC remota. Detallaremos a continuacin los requerimientos
especficos de cada caso.
Compilador C
Rutinas de soporte del generador
Compilador
Normalmente en ambientes UNIX, el compilador C viene incluido con el sistema
operativo. Si se utiliza ODBC como tecnologa de acceso a los datos, se requiere
un compilador C++, el cual no viene incluido. Puede utilizarse el compilador GCC,
que puede obtenerse en http://gcc.gnu.org
Las rutinas de soporte son un conjunto de archivos (bibliotecas, include files, etc.)
que son utilizadas (referenciados) por los programas generados por el generador
C/SQL. Estas rutinas se distribuyen en formato fuente y deben ser instaladas
(compiladas, etc.) antes de intentar compilar o ejecutar una aplicacin
generada.
DBMS Precompilador
Informix ESQL C
Oracle Pro*C
Instalacin ODBC
Instalar las rutinas de soporte para ODBC.
Ver Configuracin de ODBC en ambiente Unx.
Instalacin remota
Los siguientes son requerimientos especficos para el caso de realizar una instalacin remota:
Conexin TCP/IP
Esquema de transferencia: Copy/FTP
Activacin del servicio REXEC
Cada estacin de trabajo deber disponer de una conexin va TCP/IP con el servidor donde se
realizar la compilacin.
Esta conexin se utiliza para transferir los fuentes generados al servidor y para la ejecucin de
comandos remotos (REXEC) requeridos para efectuar la compilacin de programas.
Transferencia de fuentes
La transferencia de fuentes de los programas generados permite tres esquemas
bsicos: FTP, Copy y Don't transfer.
Los dos primeros asumen que el directorio del modelo (especificado en Model
Properties/Target path) no est en el servidor (o no coinciden con el directorio de
programas a donde se desea transferir/copiar los fuentes) y que, por
consiguiente, se necesita transferir los fuentes all generados para poder
compilarlos.
Unix
Normalmente, este servicio se encuentra instalado y activo. Si no lo
estuviera, los siguientes son los pasos a seguir para activarlo. Se requiere
autorizacin especial (root) para realizar esta tarea.
Windows
Para usar el servicio de FTP se requiere tener instalado Internet Information
Server 4.0 o Personal Web Server 4.O en adelante.
En el caso de Personal Web Server el servicio de FTP no se instala por
defecto.
Activacin del servicio de REXEC
Con el fin de realizar la compilacin de los fuentes generados, se requiere el
servicio de ejecucin remota (REXEC) activo en el servidor.
El servicio REXEC siempre debe estar activo para compilar los fuentes generados.
Para hacerlo la operativa vara en funcin del sistema operativo del servidor.
Unix
Normalmente, este servicio se encuentra instalado y activo. Para verificar
que el servicio est activo, ejecute los siguientes pasos:
Nota: An cuando est activado (el test anterior fue satisfactorio), puede
que no sea posible acceder al servicio desde su PC (mquina de desarrollo
donde est instalado GENEXUS y el generador C/SQL). Normalmente, esto
se manifiesta al intentar instalar las rutinas de soporte o compilar un
programa generado, mediante un mensaje del tipo Invalid login o 'The
login is not correct' (el mensaje puede variar dependiendo del servidor Unix
pero el sentido es el mismo). En este caso, la causa probable del problema
es que la direccin IP del PC no es una direccin vlida desde la cual, el
servidor Unix, pueda recibir solicitudes de REXEC o que la direccin IP del PC
vare pues se est utilizando DHCP. Ver comentarios del mensaje Invalid
login en la seccin Problemas Comunes.
Si el servicio no est activado, los siguientes son los pasos a seguir para
activarlo. Se requiere autorizacin especial (root) para realizar esta tarea.
Windows
Este sistema operativo no provee en forma nativa (al momento de la
escritura de este manual) del servicio de ejecucin remota REXEC. El
servicio necesario puede ser provisto por programas de diferentes casas de
software y debe ser comprado aparte.
Para compilar en este ambiente, el generador C/SQL, utiliza archivos del Pro*C
que el usuario debe copiar al directorio de las rutinas de soporte, modificando
dicha copia segn el siguiente detalle.
Hacer una copia del archivo 'proc.mk' que, normalmente, est en el directorio
$ORACLE_HOME/precomp/demo/proc en el directorio donde se instalaron las
rutinas de soporte.
INCLUDE=$(I_SYM). $(PRECOMPPUBLIC)
CFLAGS=-I. -O
CFLAGS=-I. -O $(GX_INC)
build: $(OBJS)
build64:
build_static: $(OBJS)
build_static64:
$(SAMPLES) $(OBJECT_SAMPLES):
Requerimientos .Net
Los requerimientos de software de Web objects en .Net se van a dividir en dos partes, los
requerimientos para el ambiente de desarrollo y los requerimientos en produccin.
Requerimientos para desarrollo
Adems de los requerimientos bsicos de GeneXus 8.0 (espacio en disco, cantidad de
memoria, etc.), cada equipo deber disponer de:
PLATAFORMA .NET
Para utilizar esta versin es necesario tener instalada la versin release del
Framework Redistributable 1.1 y el runtime de Jsharp (en caso de generar
reportes PDF).
GENEXUS
o Development environment GeneXus 8.0
o Generador .Net 8.0
OTROS
- Cliente y servidor de Base de datos de prototipo.
Requerimientos en produccin
REQUERIMIENTOS ESTACIN DE TRABAJO
En la estacin de trabajo de los usuarios de una aplicacin desarrollada con Web objects lo
nico que se necesita es disponer de un browser y una conexin al servidor donde estn los
Web Panels.
REQUERIMIENTOS SERVIDOR
Los requerimientos en produccin son similares al ambiente de desarrollo.
Instalacin en el Cliente
Alcanza solamente con un browser.
Instalacin en el servidor
Alcanza solamente con una copia de los objetos y el archivo de configuracin web.config.
Windows 98, Windows 2000, Windows XP con un Personal Web Server instalado o con
Internet Information Server 4.0 o superior.
En principio puede ser tambin Windows 95 o cualquier sistema operativo
que soporte un Personal Web Server de Microsoft.
En el caso de Windows NT 4.0 (o superior) se necesita el Internet Service
Manager.
Instalar Visual Basic 6.0 SP3 o superior
Instalar Visual Interdev
Permisos de creacin de objetos COM
Hay que ejecutar la aplicacin Dcomcnfg, que se encuentra en el directorio
system32 del servidor, para dar permisos de creacin de objetos al usuario
que ejecuta los objetos Web.
Puesta en produccin
Una vez que los objetos Web fueron probados en forma interpretada se deben compilar y
llevar al servidor de produccin.
La informacin sobre como poner en produccin los objetos Web VB generados como
WebClasses se encuentra en:
Introduccin
Existe una API especificada por Sun Microsystems que se llama 'Java Servlet API'. Esta API
define la forma de ejecutar lo equivalente a los objetos web de GENEXUS (web panels, web
transactions, web components), por lo tanto, el generador Java, por cada objeto web de
GENEXUS, genera lo que se llama un Servlet.
Los Servlets proveen una gran cantidad de ventajas que el generador Java aprovecha, como
por ejemplo, la utilizacin de un pool de conexiones a la base de datos y la multiplataforma.
A su vez, el generador Java provee una funcionalidad adicional que consiste en que los Objetos
objetos Web web pueden enviar la pgina HTML comprimida, para que sea descomprimida en
tiempo real por el navegador. La compresin se realiza solo si el navegador indica que es capaz
de descomprimirlo. Esta opcin puede deshabilitarse con la preferencia 'Auto compress web
pages', para contemplar el hecho de que algunos navegadores no reporten correctamente su
capacidad para descomprimir las pginas, y no las puedan desplegar correctamente. En las
pruebas que hemos realizado, esta funcionalidad se ha comportado de forma correcta con
todos los navegadores.
Requerimientos
Para poder ejecutar Servlets, es necesario contar con:
1) Un Servidor Web
2) Un Motor de Servlets
3) JavaServer Web Development Kit
El Servidor Web y Motor de Servlets, son dos servicios que se requieren (en un mismo servidor
fsico, o no) para poder ejecutar Servlets.
En teora, las aplicaciones GENEXUS pueden ejecutarse con cualquier Motor de Servlets que
sea compatible con la especificacin de Servlets 2.1 o posterior.
A continuacin explicaremos los pasos en orden, que se deben seguir para configurar y utilizar
estos requerimientos. Explicaremos en forma conceptual y genrica cada punto, y tomaremos
a modo de ejemplo, la opcin de utilizar el Motor de Servlets RESIN para Windows, en forma
local, con el fin de mostrar un ejemplo prctico concreto.
Al final de este captulo, se incluyen URLs a papers tcnicos que describen la configuracin de
otros motores de servlets.
Configuracin de un Motor de Servlets
Para ejecutar una aplicacin web Java, se debe configurar un motor de servlets; para ello se
deben realizar algunos pasos, que si bien varan un poco segn el motor de servlets que se
vaya a utilizar, bsicamente los pasos a seguir, son similares.
Qu es una webapp?
Cada motor de servlets crea y maneja una webapp. El nombre webapp resulta de la
abreviacin de "web application" y consiste en un directorio base, que contiene a su vez una
estructura de subdirectorios determinada, en la cual se deben distribuir los archivos que sean
necesarios para la ejecucin de una aplicacin web.
Los tipos de archivos involucrados en la ejecucin de una aplicacin web, pueden ser los
servlets (archivos .class), contenido esttico y libreras adicionales (archivos .JAR).
Una vez visto este concepto, pasemos a detallar entonces los pasos a seguir para configurar un
motor de servlets:
A modo de ejemplo, si se utiliza RESIN en Windows, en forma local, se deben seguir los
siguientes pasos:
b. Para verificar que se estn tomando las standard de GENEXUS y cul versin,
se debe ejecutar:
http://localhost:8080/servlet/com.genexus.webpanels.gxver
Script Name: Indica el nombre del script utilizado para compilar los objetos C/SQL. Se asume
que este archivo se encuentra en el directorio especificado en Support Files.
Program Directory: Esta opcin es slo informativa e indica el valor especificado en la opcin
"Programs directory".
Transfer
FTP Service: se selecciona para transferir va FTP.
Copy Files: se selecciona para copiar los fuentes.
Force transfer: bajo el directorio de la aplicacin se crea un directorio "Update" que contiene
un archivo vaco con el mismo nombre del archivo que se transfiere, de forma que al transferir
se comparan las fechas y si est actualizado la transferencia no se realiza. Si se marca, siempre
se transfieren todos los archivos.
Submit Mode
REXEC: se selecciona si se desea ejecutar la compilacin en forma remota (otro servidor).
Local Exec: se selecciona si se compila sobre la misma mquina donde est el modelo.
Port: Es el nmero de puerto activo del servicio REXEC. Normalmente es el 512. Este servicio
es utilizado para ejecutar comandos remotos, es requerido para compilar los programas.
Timeout (sec.): Esta opcin le indica a GeneXus cunto tiempo debe dar al servidor para
responder. 0 le indica que espere en forma indefinida.
PROGRAMS DIRECTORY AS SEEN FROM CLIENT: Este campo es vlido slo si se seleccion
Copy files como mtodo de transferencia de archivos. Es el nombre del directorio donde van
los programas visto desde el cliente.
PROGRAMS DIRECTORY AS SEEN FROM FTP: Es anlogo al anterior, pero cuando se elige FTP
service como mtodo de transferencia. Si el directorio no existe el mismo es creado al realizar
la transferencia.
START URL: Es el directorio base para los objetos web. Al seleccionar un objeto web del
dilogo del F5 (Run) y presionar el botn Execute, se va a abrir el browser por defecto definido
en la estacin de trabajo.
COMPILER PATH: Determina el path del compilador (csc.exe), este se encuentra bajo el
directorio de instalacin del framework en
C:\WINNT\Microsoft.NET\Framework\v1.1.4322
VIRTUAL DIRECTORY: Determina la URL base de ejecucin, esta contiene el directorio virtual a
ser creado (si no existe) por GeneXus en el Internet Information Service (IIS) local. El momento
de la creacin es luego de la compilacin y reorganizacin.
Execution Mode
1) Referenciar en el classpath las clases necesarias para compilar los servlets (clases
correspondientes al JavaServer Web Development Kit). El archivo puede llamarse servlet.jar o
jsdk.jar o jsdk22.jar (dependiendo del Motor de Servlets que se utilice) y por lo general se
encuentra en el subdirectorio LIB del Motor de Servlets. Estas clases se deben referenciar en el
classpath, adems, del resto de los archivos de clase que se requieran referenciar en dicha
variable de entorno.
2) Indicar en el Web Server Root la URL que el navegador utilizar como base para la
ejecucin de los servlets.
Siguiendo el ejemplo que venimos viendo en el cual se utiliza el Motor de Servlets RESIN para
Windows, instalado en forma local, a continuacin indicamos lo que corresponde
completar en las opciones de ejecucin para dicho caso:
1) classpath=gxclassr.zip;.;<driverjdbc>;c:\resin\lib\jsdk23.jar
PROPERTIES A CONSIDERAR EN EL
DESARROLLO DE OBJETOS WEB
En los modelos GeneXus, existen properties que aplican exclusivamente a los objetos web.
Algunas a nivel del modelo de diseo por lo que aplican a toda la base de conocimiento y otras
se encuentran a nivel de los generadores (por lo que aplican al modelo de prototipo o
produccin que lo utilice).
Properties generales
Estas properties se definen a nivel del modelo de Diseo. Se setean mediante la opcin
File/Edit Model/Properties teniendo abierto el modelo de diseo.
GENERATION MODE
Esta property permite especificar si los objetos web del modelo se generarn
como objetos dinmicos (acceden a la base de datos) o como pginas html
inteligentes (smart static panels).
Existe tambin la propiedad a nivel de objeto con los mismos valores que la
propiedad del modelo y tambin el valor Use model's property value.
FOCUS CONTROL
Esta property permite determinar si los objetos web, al mostrar su pgina,
intentan posicionar el foco en el primer control de entrada (no read-only) o
dejan librado al Browser la posicin del foco.
Existe tambin la propiedad a nivel de objeto con los mismos valores que la
propiedad del modelo y tambin el valor Use model's property value.
PROTOCOL SPECIFICATION
Esta property permite especificar el protocolo a utilizar en la url generada para
invocar a los objetos web.
Tiene tres valores posibles: Unsecure (HTTP), Secure (HTTPS) y Do not specify.
El valor por defecto es Unsecure (HTTP), que fuerza a generar HTTP como
protocolo en la llamada al web panel e indica que el protocolo a utilizar es el
Hypertext Transfer Protocol.
El valor Secure HTTPS: fuerza generar HTTPS como protocolo e indica que el
protocolo a utilizar es el Secure Hypertext Transfer Protocol. Para utilizar este
protocolo es necesario disponer de un servidor seguro.
Properties de .Net
Estas properties se definen a nivel del modelo .Net y se setean mediante la opcin File/Edit
Model/Properties teniendo abierto dicho modelo.
Namespace
Determina la forma de hacer el rendering de los controles HTML ( para EditBox, CheckBox,
RadioButtons, ListBox y Buttons), en web panels y web transactions. Por default esta en "No".
Cuando el valor es Yes, indica que el rendering se hace utilizando controles .Net para generar
el HTML necesario. Estando en "No" indica que use el rendering standard generado por
GeneXus en todas sus plataformas, este ltimo garantiza compatibilidad en el look and feel
entre las distintas plataformas Web generadas por GeneXus.
El valor en NO es til para evitar el armado del makefile del developer men, este es muy
costoso ya que debe generar todos los response file (*.rsp) cada vez que se compila un objeto.
Compiler options
La informacin de esta property se incluir en el .rsp que se usa para compilar el main.
Es til por ejemplo para generar informacin de debug (incluyendo el string /debug) o para
incluir una dll dentro del namespace (/r:xxx.dll ).
Para el manejo del contenido esttico, se centralizan todos estos archivos en un directorio
determinado, en el servidor donde correr la aplicacin web. Para indicar este directorio se
utiliza la preference Static content base URL.
Nota: Esto es vlido para las imgenes que no estn involucradas con los objetos HTML. Por
ejemplo las imgenes que se ponen en los background de las tablas o celdas no estn
comprendidas en el caso anterior. Este tipo de imgenes no van a concatenar ni la URL de la
webapp, ni la preference Static content base URL.
El resto del contenido esttico como ser los javascripts (*.js) y el archivo styles.css que tambin
debe estar fsicamente en el mismo directorio que las imgenes, no es necesario copiarlos
manualmente como el caso de las imgenes, sino que en tiempo de compilacin, el generador
los copia al mismo. Para ello hay que especificarle en la preference Static content directory
seen from client el path al mismo, con formato X:\imagenes, donde X:\ es el mapping a la URL
de la webapp.
Propsito
Permite especificar el directorio donde se transferirn los servlets
generados. En tiempo de compilacin de cada objeto web, el generador los
copiar al directorio especificado.
Notas:
Es necesario especificar este valor antes de generar, ya que se utiliza
para la generacin del archivo de make.
El path debe ser relativo al cliente, es decir un path visto desde el PC
en el que se est trabajando con GENEXUS.
Se copiarn adems de los archivos .class, los archivos .cfg, los
cuales contienen la informacin de las preferencias ingresadas; por lo
tanto, si se modifica algn valor de las preferencias del modelo, es
necesario volver a generar y compilar algn objeto web. Adems,
para que se tome en cuenta este cambio al ejecutar, es necesario
reiniciar el servidor de servlets.
Ejemplos de valores
H:\servlets - Si el motor de servlets est instalado en una mquina
mapeada con el drive H y servlets es el nombre del directorio
donde deben residir los servlets.
C:\resin\doc\web_inf\classes Si el motor de servlets es el RESIN y
esta instalado localmente en el directorio C:\resin.
Propsito
Indica el directorio donde los servlets buscarn el contenido esttico
(imgenes, javascritps y styles.css) utilizado en los objetos web
correspondientes. Los servlets siempre ejecutan en el servidor, por lo que
este directorio debe especificarse relativo al directorio correspondiente a la
base URL de la webapp.
Notas:
Ejemplo de valores
Si se crea un directorio llamado images bajo el directorio raz del webapp
donde se instalaron los servlets, y a l se copian todas las imgenes
necesarias, y en diseo solo se especifica el nombre de la imagen, entonces
en esta preference habra que poner /images.
Preference Static Content directory seen from client
Propsito
Permite especificar el directorio donde se transferirn los javascripts (archivos
*.js) que se generan para los menubars de objetos web y web panels
generados como estticos. En tiempo de compilacin, el generador los copiar
al directorio especificado.
Notas:
En este mismo directorio tambin habrn archivos de imgenes que se
utilicen en los objetos web. Los mismos se deben copiar manualmente
a este directorio, y en los programas generados se referenciarn
utilizando el valor de la preference Static Content Base URL
concatenada con el nombre de cada imgen.
Ejemplos de valores
X:\images - Si el servidor web est instalado en una mquina, mapeada
con el drive X y es el directorio images el utilizado para dejar el
contenido esttico.
C:\resin\doc\images Si el motor de servlets es el RESIN, est instalado
localmente en el directorio C:\resin y se le cre el directorio images
donde se copiaron las imgenes.
Con formato: Ancho: 21 cm, Alto:
29,7 cm, Distancia del encabezado
desde el borde: 1,25 cm, Distancia del
Preference Auto compress web pages pie de pgina desde el borde: 1,25
cm, Sin Encabezado de primera pgina
Propsito diferente
Valores
Yes: envan la pgina comprimida.
No: no envan la pgina comprimida. Es posible que algunos navegadores
no reporten correctamente su capacidad para descomprimir las pginas, y
no puedan desplegarlas correctamente.