Professional Documents
Culture Documents
5
Ultima actualización: 14/02/02
Indice
Instalación ___________________________________________________________ 4
Requerimientos ___________________________________________________________________4
Instalación y activación _____________________________________________________________4
GXProtection 2000: Esquema de Administracion de Licencias Centralizadas. ___________________5
Funcionalidades del Development Environment _____________________________ 9
Sección específica Development Environment ___________________________________________9
Integración GeneXus Query con GeneXus _____________________________________________16
Editores __________________________________________________________________20
Editor de estructura - Transacciones __________________________________________________20
Administración de preferencias ______________________________________________________26
Editor de Propiedades _____________________________________________________________38
Editor de Pictures _________________________________________________________________41
Nuevo Editor de forms – Activex ____________________________________________________46
Select object _____________________________________________________________________49
Nuevo “View” de Objetos __________________________________________________________51
Colores del Form Grafico___________________________________________________________55
Diálogos __________________________________________________________________58
Diálogos de creación e impacto ______________________________________________________58
Distribución y Consolidación________________________________________________________59
Listados en XML _________________________________________________________________66
Atributos _________________________________________________________________74
Límite de atributos ________________________________________________________________74
Truncado de objetos y atributos ______________________________________________________74
Variables basadas en atributos _______________________________________________________77
Nuevas Propiedades de atributos _____________________________________________________78
Dominio como array ______________________________________________________________81
Primary Key _____________________________________________________________________84
Comandos ________________________________________________________________88
Comando For To Step _____________________________________________________________88
Comando Submit _________________________________________________________________88
Reglas ___________________________________________________________________91
Regla Prompt On _________________________________________________________________91
Msg y error con expresiones ________________________________________________________92
Definición de parámetros de IN y OUT ________________________________________________92
Objetos __________________________________________________________________95
Fechas y Versión del Objeto ________________________________________________________95
Ambientes ________________________________________________________________99
Definición de ambientes en un modelo ________________________________________________99
Help ____________________________________________________________________103
HTML Help ____________________________________________________________________103
Ayuda y Documentación HTML para atributos/dominios/variables _________________________111
Tipos de Datos ___________________________________________________________115
Nuevos Tipos de Datos ___________________________________________________________115
Tipo de Datos DBConnection ______________________________________________________115
Tipo de Datos WebWrapper________________________________________________________119
Tipo de Datos WebSession ________________________________________________________122
Tipo de Datos XMLWriter_________________________________________________________125
Tipo de Datos XMLReader ________________________________________________________135
Tipo de Datos para el manejo de planillas Excel ________________________________________143
Tipo de Datos para el manejo de documentos Word _____________________________________152
Tipos de Datos para el manejo de correos _____________________________________________159
Tipo de Datos HttpClient, HttpResponse y HttpRequest __________________________________185
Funciones _______________________________________________________________193
Funciones estándar _______________________________________________________________193
Funcion FileExist()_______________________________________________________________194
Función DeleteFile _______________________________________________________________195
Funciones de lectura y escritura del registro de Windows _________________________________195
Funciones de Encriptación _________________________________________________________197
Función Sleep___________________________________________________________________200
Función StrSearch _______________________________________________________________201
Función StrReplace ______________________________________________________________203
Función Isnull __________________________________________________________________204
Nombres Largos en función UserId() y Workstation() ___________________________________205
Funcionalidades Generales ____________________________________________ 207
Call dinámico ___________________________________________________________________207
Protocolo SOAP _________________________________________________________________208
Reportes PDF ___________________________________________________________________214
Consideraciones para manejo de reportes PDF en C/SQL _________________________________215
Consideraciones para manejo de reportes PDF en Visual Basic ____________________________217
Consideraciones para manejo de reportes PDF en Java ___________________________________218
Reportes/Procedimientos con salida XML_____________________________________________223
Funcionalidades para Aplicaciones Web _________________________________ 226
Transacciones Web ______________________________________________________________226
Web Components ________________________________________________________________235
Embedded pages ________________________________________________________________242
Create SSP on request ____________________________________________________________246
WAP__________________________________________________________________________248
Encriptación de Parámetros ________________________________________________________253
Paginado de subfiles en Web Panels _________________________________________________256
Uso de Web Panels en reglas prompt_________________________________________________259
Propiedades______________________________________________________________262
Propiedad OnClickEvent para imágenes ______________________________________________262
Propiedades BackColorEven, BackColorOdd de Subfiles _________________________________264
Propiedad Columns subfiles freestyle ________________________________________________267
Propiedad PageCount _____________________________________________________________269
Propiedad RecordCount ___________________________________________________________269
Propiedad Rows subfiles __________________________________________________________270
Propiedad Cache Expiration Lapse __________________________________________________271
2
Propiedad Enable para botones en objetos web _________________________________________271
Eventos _________________________________________________________________273
Evento refresh con múltiples subfiles ________________________________________________273
Evento click en Text block y Combo _________________________________________________274
Métodos _________________________________________________________________276
Método JSEvent _________________________________________________________________276
Funcionalidades para aplicaciones Win __________________________________ 278
Múltiples Subfiles _______________________________________________________________278
Acceso a las Propiedades de la Menu Bar _____________________________________________283
Opciones Confirm y Close en Menu bar ______________________________________________285
Propiedad When To Refresh _______________________________________________________285
Propiedad Caption en items de controles Radio Button ___________________________________286
Propiedades Caption y Visible en Tab Dialogs _________________________________________287
Funcionalidades para aplicaciones Cliente/Servidor ________________________ 288
Múltiples conexiones por modelo ___________________________________________________288
Comando SQL __________________________________________________________________292
Metodos de Conexion con Tecnologia ODBC__________________________________________293
Primary key index clustering _______________________________________________________295
Preferencia Lock Time-out(seconds) _________________________________________________296
Configuración de Trace (GeneXus DB Activity Trace)___________________________________298
Funcionalidades Específicas de los Generadores___________________________ 301
C#______________________________________________________________________301
Sección específica del generador C# _________________________________________________301
C/SQL __________________________________________________________________302
Sección Específica C/SQL _________________________________________________________302
C/SQL - Acceso vía ODBC ________________________________________________________305
Generación de Web Objects como ISAPI _____________________________________________306
Preferencia "Extension for WEB programs" ___________________________________________310
C/SQL- impresión gráfica en windows _______________________________________________311
Java ____________________________________________________________________315
Sección específica del generador Java ________________________________________________315
Transacciones con back-end HTTP __________________________________________________333
Servidores de aplicaciones JAVA 7.0 y 7.5 en el mismo host ______________________________335
Setup para aplicaciones generadas con GXWS Deployment _______________________________337
Propiedad Provider de subfile ______________________________________________________339
Instalación de aplicaciones Java como servicio NT con JSrvAny ___________________________340
Aplicaciones Multi-tier con http como protocolo de comunicación _________________________342
War Deployment ________________________________________________________________348
Visual Basic______________________________________________________________355
Sección Específica del generador Visual Basic _________________________________________355
Generacion de SSP con el Generador Visual Basic ______________________________________360
Integridad referencial en Visual Basic ________________________________________________362
Propiedad "Prompt for Confirmation" ________________________________________________364
Visual Fox Pro ___________________________________________________________366
Sección Específica Generador Visual FoxPro __________________________________________366
3
Instalación
Requerimientos
Para que esta versión funcione correctamente, es necesario tener instalado Internet
Explorer 6.0 o posterior. En el caso de ser necesaria su instalación, se incluye una
versión de dicho software en el directorio Utilities\Internet Explorer 6.0 del CD. Se
deberá ejecutar el archivo IE6SETUP.EXE.
NOTA:
Algunas “features” tienen requerimientos propios, por lo cual es recomendable leer
la sección de “Requerimientos” de cada una de ellas.
Instalación y activación
Instalación
La instalación de esta versión es similar a la de cualquier otra versión de GENEXUS.
Una diferencia menor con respecto a las instalaciones anteriores es la creación del
grupo de programas “GeneXus Utilities”, que posee shortcuts a diferentes utilitarios
proporcionados con la versión. Dichos utilitarios son los siquientes:
Activación
Para autorizar el GeneXus Development Environment y los generadores que
requieran autorización deberá realizar los siguientes pasos:
4
3. Seleccione todos los productos a autorizar.
4. Presione Authorize, seleccione la opción Request License y continúe con los
pasos del asistente para enviar los Site Code a su distribuidor. La solicitud
se puede realizar vía web (automática) o puede generar un archivo con
cada uno de los site code de los productos y enviar ese archivo a su
distribuidor vía e-mail.
5. Una vez obtenido los Site Key o el archivo con los mismos, presione el
botón Authorize nuevamente y selecione la opción Enter Licenses para
ingresar las claves de activación.
(1)
Licencias Centralizadas: si se desea mantener las licencias en forma
centralizada, será necesario instalar el GeneXus Protection Server (versión 2.0 o
superior) en un servidor NT o Windows 2000. La funcionalidad del mismo es
servir licencias a cualquier cliente de la red independientemente de donde se
encuentre instalado el producto (en un PC local, en el mismo servidor y/o en un
servidor diferente).
Introducción
El License Manager, que es el administrado de licencias que se instalada con el
producto que utiliza GXProtection 2000 (GeneXus, GXplorer, etc.), puede ser
manipulado por cualquier usuario que tenga acceso al producto. En ciertos casos es
deseable tener un usuario o grupo de usuarios que actúen como administradores de
las licencias y restringir de esta forma el acceso a otros usuarios.
Alcance
GeneXus 7.0 upgrade 1 o superior
GXplorer 4.0 o superior
Descripción
La administración de licencias centralizadas permite definir un grupo de usuarios
los cuales podrán utilizar el producto1, y un grupo de usuarios como
administradores del License Manager, evitando así que usuarios no autorizados
puedan autorizar, desinstalar y transferir las licencias.
1
Con producto en este documento nos referimos a cualquier aplicación que utilice
5
GXProtection 2000, por ejemplo, GeneXus y GXplorer.
Por ser el GENEXUS Protection Server una aplicación DCOM que corre bajo
Windows NT/2000, la solución se basa en el esquema de seguridad propio del NT y
DCOM.
Hasta ahora cualquier usuario que estaba bajo el dominio del servidor que contiene
el GENEXUS Protection Server podía, tomando las licencias de ese servidor,
utilizar el producto como realizar cualquiera de las acciones del License Manager
(Autorización, Desinstalación, Transferencia, Log Setting). No se requería realizar
ninguna configuración adicional.
Con esta nueva funcionalidad, primero se desea mantener lo anterior para aquellos
usuarios que no les interese una administración segura de las licencias, de forma
de evitar configuraciones innecesarias. Para esto, basta con dejar marcada la
propiedad ‘Use Default Access Permissions’ en la sección ‘Security’ del
ProtSrvService en el DCOMCnfg (es el valor por defecto).
Grupos de Usuario
Básicamente se tienen que definir dos grupos de usuarios: grupo Administrador y
un grupo que contendrá los usuarios de la aplicación o producto..
Los usuarios del grupo Administrador son los únicos que pueden manipular las
licencias del servidor correspondiente, mediante el License Manager. O sea, son los
que tendrán permisos para Autorizar, Desinstalar y Transferir las licencias.
¿QUIÉN ES EL ADMINISTRADOR?
Si existe un grupo de usuarios en el NT (creado mediante el User Manager) con
nombre ‘GXProtAdmin’, entonces sólo los usuarios pertenecientes a ese grupo
podrán manipular el License Manager.
Si no existe un grupo con ese nombre, cualquier usuario es el administrador.
Nota: El grupo tiene que tener exactamente ese nombre (no es case sensitive).
6
¿QUIÉNES SON LOS USUARIOS?
Aquellos que se den de alta en el DCOMCnfg con derecho a acceso a la aplicación
‘GXPrtService’.
En este caso se pueden dar de alta usuarios individuales o grupos de usuarios.
Puede ser cualquier grupo de ese dominio, incluso el GXProtAdmin si se desea que
estos usuarios también puedan ejecutar la aplicación.
COMBINACIONES POSIBLES
Existen diferentes niveles de acceso al Licence Manager y al producto, dependiendo
si existen los grupos o no, y en caso de que existan, si se dan de alta en el
DCOMCnfg o no.
Nota: Si esta creado VACIO el grupo GXProtAdmin nadie puede administrar las
licencias.
7
3. Ejecutar el DCOMCnfg en el servidor, seleccionar la aplicación ‘ProtSrvService’ y
en la sección de seguridad marcar 'Use custom access permissions' y con el
botón Edit agregar los dos grupos creados en 1.
4. Reiniciar el servicio ‘ProtSrvService’.
Consideraciones
• Sobre el paso 2 de la sección ‘Configuración del Servidor’:
- Si se esta con Windows 2000 se tiene que hacer un ‘Log Off’ para que los
cambios sean tomados en cuenta.
- El nombre del grupo de usuarios puede ser cualquiera pero el del grupo
Administrador se debe llamar ‘GXProtAdmin’ (no importa las mayúsculas y
minúsculas, sólo el nombre).
8
Funcionalidades del Development
Environment
Compatibilidad
• En la versión GeneXus 7.5 se realizaron varios cambios
en las preferencias del modelo y DBMS Options con respecto a la versión
7.0, algunos de estos cambios son:
Cabe destacar que el cambio en los valores por defecto de las preferencias
provocarán un cambio en el comportamiento de las aplicaciones que
los utilizaran. Por este motivo se recomienda revisar detenidamente la
sección del generador XXX en el documento “Administración de
Propiedades”.
9
Se discontinúa el Generador FoxPro for Windows en esta versión. Por más
información consulte SAC 10671.
Los modelos que posean más de 9999 atributos no podrán ser abiertos con
las versiones anteriores, dando un error como el siguiente:
Internal error 3 in mdl-c_ie1b
ISAM Error 0- ?-?-?
Nuevas funcionalidades
10
Figura 1 – Seteo de las opciones de especificación en las User Preferences
11
Figura 2 – Opciones a configurar en la especificación
Este diálogo aparece sólo en caso que NO se esté en Diseño, ya que en Diseño las
opciones son fijas (View navigation).
Se actualizaron los listados de tablas y atributos, para que al dar botón derecho
sobre una tabla o un atributo y seleccionar 'List' se muestran los listados en
formato XML. Lo mismo sucede al realizar el cross reference sobre un atributo.
12
se muestra un mensaje de que el mismo no puede ser listado.
Optimización Open/Create KB
Se optimizó la opción File Open/Create KBase, para aquellas bases de conocimiento
con varios modelos.
Intellitips
Se implementaron los intellitips en layout reportes y procedimientos.
Se modificó el comportamiento de los intellitips, solo quedaron para variables,
propiedades y métodos. Se agregó el Ctrl-espacio para que habrá los intellitips
sobre los controles de pantalla.
Por ejemplo al escribir el ‘(‘ luego de la regla default aparece el tooltip indicando los
parametros necesario y el tipo de dato de los mismos.
Browser de objetos
El botón Display Results que está en la opción Tools/Browser, queda habilitado
después de mostrar los resultados. Esto permite refrescar la pantalla cuando el
diálogo no se cierra y se realizan modificaciones.
13
Nuevas opciones en el menu de objetos
En el menú de objetos llamado desde el Menu/Object con el objeto abierto o con
clic-derecho sobre el objeto se agregaron las siguientes opciones:
14
Clic sobre un objeto – Lista de Objetos
Se compatibiliza el diálogo de lista de objetos al estándar de Windows al cliquear
sobre cualquier objeto en el diálogo de objetos o presionando el botón F2 se
permite modificar el nombre del Objeto.
Se agrega:
Edición de un Fuente
Al modificar cualquier fuente se le agrega un asterisco “*” indicando que esta
pendiente el salvado del mismo.
15
List Last Navigation por Modelo
El listado de navegación se guarda por Usuario/Modelo. Por lo tanto la opción Lista
Last Navigation del Menu Tools muestra la última navegación del modelo
posicionado.
Introducción
A partir de la versión de GENEXUS 7.5 se integra GENEXUS QUERY a GENEXUS.
Alcance
• GENEXUS QUERY Manager.
• GENEXUS QUERY.
• GENEXUS 7.5.
Objetivo
El objetivo de esta feature es trabajar con GENEXUS QUERY desde GENEXUS de
forma integrada. De esta forma incorporamos a las consultas dinámicas como parte
integrante del desarrollo de nuestras aplicaciones.
Para ello cada vez que se realiza un impacto en la base de datos en un modelo
GENEXUS, se permite generar/impactar la metadata de GX QUERY, asociada al
modelo, en forma transparente para el usuario.
De esta forma se podrá invocar en cualquier momento al GENEXUS QUERY que
permitirá realizar consultas dinámicas sobre todos los atributos del modelo
GENEXUS.
16
Descripción
Desde GENEXUS se invoca automáticamente o a pedido el GX QUERY Manager
(para generar la metadata) y el GX QUERY (para realizar consultas dinámicas).
PROTOTIPO
Para los modelos de tipo “Prototipo” el funcionamiento de la herramienta es a
pedido. Una vez realizada la instalación la primera vez que se genere un
impacto/creación de cada modelo al finalizar la misma se desplegará un mensaje
indicando si se desea ejecutar el producto QUERY Manager para crear una
metadata asociada al modelo, como detalla la siguiente figura:
17
Las posibilidades son las siguientes
PRODUCCIÓN
Para los modelos de tipo “Producción” el valor por defecto es ejecutar GENEXUS
QUERY Manager siempre; por lo que al finalizar la actualización del modelo
directamente se crea/actualiza la metadata. Si desea modificar esta configuración
deberá modificar el parámetro de la Figura 5.
Catálogos y Metadatas
Cada Base de Conocimiento GENEXUS mantenida con la versión 7.5 tiene un
identificador de Kb único. GENEXUS QUERY Manager accede a esta información al
realizar un impacto por lo que le permite saber sobre que metadata hacer el
impacto. Por defecto se genera una metadata por cada para KB/Modelo, sobre el
18
catálogo que se encuetre activo.
Consideraciones
• La integración sólo es válida para cualquier Base de Conocimiento
mantenida con GENEXUS 7.5 o superior.
• La llamada a GENEXUS QUERY Manager se realiza en las siguientes
condiciones en caso que esté configurada:
o Después de realizar el impacto
o Llamando explícitamente desde Tools / QUERY Manager.
• La llamada a GX QUERY es a pedido y permitira consultar todos los
atributos de la base de conocimiento.
• Al ejecutar el QUERY Manager a pedido desaparece GENEXUS, y hasta que
no se cierre esta aplicación no se activa nuevamente.
• No es posible definir qué atributos se van a exportar desde GENEXUS. El
valor predeterminado es Todos los Atributos, sin embargo se puede
configurar desde el GxQuery Manager, mediante el Wizard de Carga de
metadatas, una vez seteado esto en el GxQuery Manager, se mantendrá
siempre que se impacte esa metadata.
• Si GENEXUS QUERY no se encuentra correctamente instalado aparecerá el
siguiente error al intentar seleccionar las herramientas desde el diálogo
asociado “Error: Tool interface not supported”, debiendo realizar una
reparación de la instalación desde el Panel de Control.
• No es posible modificar el catálogo si se trabaja integrado a GENEXUS.
• Como el GENEXUS QUERY Manager analiza todas las transacciones en cada
impacto, para modelos grandes, el tiempo de carga de la metadata puede
ser importante. En este caso se recomienda realizar la carga de la metadata
a pedido y no en cada impacto.
• Cuando se crea la metadata se infiere automáticamente de las preferences
del modelo GENEXUS las propiedades de conexión. En caso de utilizar
Microsoft Access se configura automáticamente un Data Source con nombre
“KBName-ModelName" referenciando la base de datos.
19
Editores
Introducción
A partir de esta versión se modifica el “look and feel” relacionado al editor de
estructuras.
Alcance
Objetos: Transacciones.
Lenguajes: Todos.
Interfaces: Win, Web.
Descripción
Se realiza un cambio en la interfaz para el manejo de estructura de transacciones
manteniéndose las siguientes consideraciones:
Por ejemplo: Supongamos que se tiene una transacción donde se administran los
distintos artículos existentes en la empresa, detallando para cada uno de ellos, el
stock mínimo, máximo y una lista de precios. Una estructura tentativa que modele
esta situación podría ser la siguiente:
ArtId*
ArtDsc
TipArtId
ArtStkMin
ArtStkAct
(ArtFchLta*
ArtPrecLta)
Figura 6 - Estructura ejemplo
20
Al grabar la transacción, se pide que el usuario ingrese los distintos tipos de datos
asociado a los nuevos atributos y posteriormente la estructura es desplegada de la
siguiente manera para la versión anterior:
ArtId <ENTER>(1)
ArtDsc <ENTER>
TipArtId <ENTER>
ArtStkMin <ENTER>
ArtStkAct <ENTER>
(ArtFchLta <ENTER><ENTER> <TAB> (1)
ArtPrecLta) <SAVE>
Figura 8 - Ingreso de una transacción
21
Además se agrega funcionalidad para manipular simultáneamente varios atributos,
facilitándole al usuario la manipulación de los mismos:
Para realizar cualquiera de las operaciones detallada en el paso anterior, basta con
seleccionar una lista de atributos y utilizar las opciones Special Copy o Move
disponibles en el menú de opciones:
Movimientos
La siguiente figura detalla los posibles movimientos a realizar:
22
UP Y DOWN
Se pueden seleccionar un conjunto de atributos y moverlos dentro de su nivel hacia
arriba y hacia abajo utilizando las siguientes opciones:
Move Up = CTRL + UP
Move Down = CTRL + DOWN
INDENTACIÓN (LEFT/RIGHT)
Utilizando la tecla de función Tab y SHIFT Tab o las opciones del menú pop up
Left/Right es posible indentar o no un atributo dentro de la estructura. Al presionar
la opción Left el atributo seleccionado se elimina del nivel donde se encuentra y se
ingresa sobre el nivel superordinado a continuación del subnivel donde se
encontraba anteriormente, mientras que presionando la opción Right el atributo
seleccionado es insertado en la última posición del primer subnivel existente. Si
desea ingresar un atributo sobre un subnivel ya existente deberá presionar Right
(para que inserte un nuevo nivel) y posteriormente Left (para que cambie el
atributo de nivel).
Al igual que en el punto anterior es possible realizar dicha operación con el mouse
directamente utilizando la funcionalidad Drag & Drop.
MOVIMIENTOS
Se debe utilizar la opción Drag and Drop, o botón derecho y la opción Move (Figura
11)
COPIA
La opción Copia permite copiar la definición de uno o varios atributos al
portapapeles. En este caso se almacena internamente una estructura en formato
XML con la lista de atributos seleccionado. Esto posibilita la inserción de atributos
en cualquier parte de la estructura de la transacción.
23
Figura 12 - Copia de atributos
Si realiza la operación “Paste” sobre cualquier objeto que no sea la estructura podrá
verificar que se inserta líneas similares a la Figura 12.
Si el usuario lo desea podrá crear un archivo XML indicando la estructura que desea
para la transacción. Al copiarla y pegarla sobre la estructura de transacciones se
actualiza la vista con los nuevos atributos a partir del atributo seleccionado.
SPECIAL COPY
La opción “Special Copy” se utiliza para copiar el nombre del atributo en formato
plano. Las opciones se despliegan en la siguiente figura:
Operaciones
A continuación se detallan las operaciones válidas:
EDIT
Permite editar el nombre de un atributo existente Se debe seleccionar un atributo y
presionar SPACE o haciendo doble click sobre el mismo.
24
FORMULA
Permite ingresar la fórmula asociada al atributo seleccionado. Esta opción es sólo
válida si se encuentra seleccionado un atributo.
LIST
Despliega la opción “Attribute Listing” sobre el atributo seleccionado. En caso de
realizar una selección múltiple la operación se realiza para el primer atributo
seleccionado.
CROSS REFERENCE
Obtiene la referencia cruzada detallando los objetos en donde se encuentra. Al igual
que el punto anterior si la operación se realiza sobre una selección múltiple solo
aplica al primer atributo seleccionado.
SET KEY
Al seleccionar una lista de atributos y presionar la tecla ‘*’ (asterisco) se marca
como clave la lista de atributos seleccionado. En caso que los mismos ya sean clave
la selección es eliminada. En caso que se realice una múltiple selección se considera
la cantidad de objetos que tiene asociado una clave y dependiendo de esto es la
operación que se realiza. En caso que la cantidad de atributos secundarios sea
mayor se infiere que el usuario quiere marcar la múltiple selección como clave, por
lo tanto se marcan como clave. En caso que la cantidad de atributos sin clave sea
mayor se considera que el usuario quiere eliminar todos los atributos seleccionados
de la llave por lo que se elimina la llave para todos. Como regla general se marca
como clave en caso que la cantidad de atributos sin clave sea mayor que la
cantidad de clave existentes en la selección. Para los primeros atributos de cada
nivel no se realiza esta operación debido a que es obligatoria la inclusión de por lo
menos un atributo clave por nivel.
25
Figura 14 - Insertar un atributo
INSERT LEVEL
Inserta un nivel sobre la estructura. Si el ítem seleccionado es un atributo entonces
se considera como un nivel paralelo, de lo contrario es un nivel subordinado (hijo).
DELETE
Permite eliminar un atributo o nivel de la estructura dependiendo de donde se
encuentre. Si se está seleccionando un atributo éste es eliminado de la transacción.
En caso que se esta seleccionando la raíz de un subnivel se eliminan todos los
atributos subordinados.
COPY
Permite copiar la definición de un atrbuto.
PASTE
Permite pegar/insertar la definición de un atrbuto.
Administración de preferencias
Introducción
En esta versión se realiza una reorganización de las preferencias en dos niveles. Por
un lado se introduce un nuevo editor de propiedades para la manipulación de las
mismas y se unifican también la administración de las mismas.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Procedimientos, Reportes.
Lenguajes: Todos.
Interfaces: Win, Web.
26
Descripción
Como consecuencia de la unificación de propiedades se registran los siguientes
cambios.
A continuación se detallan los cambios que afectan a los generadores. Para cada
propiedad modificada se detallan los cambios realizados.
Diseño
Nuevas Preferencias
Significant Attribute name length
Significant Table name length
Significant Object name length
Generador Java
Se registran los siguientes cambios para el generador Java.
27
Initialize not referenced No Yes
attributes
Show Form After Start Event Before Start Event
Show Menu Bar Yes No
Skip read only columns Yes No
Add Button Bitmap gxconfirm_add.gif
Delete Add Button gxconfirm_dlt.gif
Bitmap
Update Button Bitmap gxconfirm_upd.gif
28
(1) – La opción es eliminada.
Nuevas preferencias
First Record
Next Record
Previous Record
Auto Center Objects in 0,0
Fast First Row
Encrypt URL parameters
Http back-end base URL
Help Mode
Enable read-only pool
Read-only pool size unlimited
Maximum number of clients per connection
Read-write pool size unlimited
On Request SSP Server Directory
On Request SSP Client URL
Help Files Base URL
Expand Dynamic calls
Preferencias eliminadas
Remote GXDB++ Location
Generate makefile
Read-only pool
Read-write pool
Multi tier location
Authenticate users using LDAP
Calculator on numeric fields
Calendar on date fields
Generate rebuild redundancy programs
Show in TaskBar (SDI)
Skip Read-Only Columns
Automatic Remote Procedure Host
Generador C/SQL
Se implementan los siguientes cambios para el generador C/SQL.
29
Show Connection Dialog Show Connection Dialog in WinForms
Nuevas preferencias
Reorganize Server Tables
Encrypt URL Parameters
Web Server Module Protocol
30
Extensions for Web Programs
On Request SSP Server Directory
On Request SSP Client URL
Generate Developer menu MakeFile
Help Files Base URL
Check memory allocation
Expand Dynamic calls
31
Show Status Yes Always
Bar No Never
Field Exit Enter, Tab, Shift-Tab Tab Enter
Print Method VB Native Printing Native Printing
Show Yes Always
Connection No Never
Dialog in
WinForms
Preferencias eliminadas
Visual Basic Version
Generate Web Panels as Web Classes
Nuevas preferencias
Declare Local Referential Integrity (Access)
Procedure and Report Generation
Force Generation of Developer Menu
Main Web Project Name
Generation Mode
Encription Key
On Request SSP Server Directory
On Request SSP Client URL
Help Files Base URL
Expand Dynamic calls
32
Cambio en descripciones de las preferencias
Preferencia Descripción Descripción Actual
Anterior
Confirm Confirm each action Yes
Transaction Do not confirm each No
action
NOTAS:
• La preferencia “Auto Skip” se elimina ya que a partir de ahora la propiedad
“Field Exit” posee una opción que realiza lo mismo. El valor es “Passing Last
Char” que permite cambiar el foco al próximo control válido al finalizar de
llenar el campo actual.
• La propiedad “Combo Style” aplica solamente a combos definidos dentro de
subfiles.
33
Color in read only fields Original Grayed (Windows
Default)
Show Connection Dialog Yes Automatic
in WinForms
Nuevas preferencias
Expand Dynamic calls
34
Nuevas propiedades del DBMS
Lock timeout
User id
User password
Connect to server (1)
Oracle Version
Generador C#
Las preferencias que aplican al generador C# consta de:
Específicas C#
Use .Net Controls
Application Namespace
Compiler flags
DISEÑO
Nuevas Preferencias
Objeto Grupo Propiedad
Columnas de Subfiles Appearance Format
Subfiles Appearance Rows
Preferencias Eliminadas
Objeto Grupo Propiedad
Atributos Appearance Width
Height
Columnas de Subfiles Appearance Height
RUNTIME
Nuevas Preferencias
Objeto Grupo Propiedad
Subfiles Appearance BackStyle
columnas de subfiles Appearance Format
Preferencias Eliminadas
35
Objeto Grupo Propiedad
Atributos Appearance Width
Height
columnas de subfiles Appearance Height
TitleBackStyle
Los valores posibles que pueden tomar las primeras cinco propiedades son:
Descripción
(3)
Use Model’s preference value
Yes
No
Cambio de descripción
Propiedad Descripción Actual Nueva Descripción Aplica a
Table Name Table name Name Access, DB2
6000, DB2 400,
Informix, Oracle,
SQLServer
File Name File Name Name AS400 Native,
DBCFDIX,
36
DBFIDX
Library Database Location Location Access, AS400
Native, DB2/400,
DBFCDX,
DBFIDX,
Informix,
SQLServer,
ORALCE
Index Name Index Name Name Access, AS400
Native, DB2
6000, DB2/400,
Informix,
SQLServer,
ORALCE
TAG Name TAG Name Name DBFIDX
Schema Schema Schema Name Informix, Oracle,
SQLServer
37
Compatibilidad
A continuación se detallan las consideraciones a tener en cuenta al abrir bases de
conocimiento creadas con versiones anteriores a GENEXUS 7.5.
• Valor por Defecto: Si se tiene seteado el valor por defecto, puede ocurrir que en
ciertas propiedades los valores cambien al abrir la base de conocimiento con la
nueva versión. Si desea consultar a cerca de qué propiedades cambian podrá
consultar la sección “Cambio de Valor Por Defecto” de cada generador.
• Preferencias Nuevas o Eliminadas:Algunas de las propiedades eliminadas
deberan setear su valor en un nuevo valor de alguna otra propiedad existente o
nueva. Por ejemplo deja de existir la Propiedad AutoSkip y la Propiedad Field
Exit agrega un nuevo valor para poder setear la opción Autoskip.
• Nuevas Descripciones: Al abrir un modelo con la nueva versión de GENEXUS, las
descripciones de las mismas son actualizadas automáticamente y esto no
determina ningún cambio de comportamiento en el modelo.
Editor de Propiedades
Introducción
En la versión GeneXus 7.0, fue introducido un nuevo editor de propiedades para
administrar las propiedades relacionadas a la configuración de la Base de Datos, así
como también las propiedades relacionadas a los controles de los objetos
desarrollados con el editor HTML. A partir de esta versión se unifican todos los
diálogos de administración de propiedades a este nuevo editor.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Reportes, Procedimientos.
Lenguajes: Cobol, RPG, Visual FoxPro, Visual Basic, Java, C/SQL, C#
Interfaces: Web, Win.
Descripción
Se unifica la edición de propiedades mediante la utilización del editor incluído en la
versión 7.0. Esto implica un cambio en la forma de guardar, acceder, editar y
agrupar las definiciones de propiedades de:
• Modelos.
• Objetos.
• Controles (en caso de utilizar el nuevo editor de forms).
Agrupamiento de Preferencias
El criterio de agrupación utilizado consiste en dividir las Preferencias en generales o
específicas de una plataforma. El objetivo es dar al usuario mayor claridad y
38
facilidad de uso.
Funcionalidad
A partir de esta versión el editor de propiedades tiene la capacidad de guardar su
estado anterior. Esto permite que al abrir el objeto nuevamente se “recuerde”
(expandiendo/contrayendo) el estado del árbol de propiedades.
39
se encuentre expandido el árbol en el cuál se encuentra dicha propiedad.
Los valores que puede tomar la columna “Default” son los siguientes:
Valor Descripción
Se toma el valor por defecto
Indica que el usuario cambió explícitamente
el valor de la propiedad
Para moverse entre las propiedades es posible utilizar la tecla Tab y Shift Tab.
40
Nuevo Editor de Forms
Se unifica también el manejo de propiedades para el nuevo editor de forms.
A partir de esta versión se utiliza el nuevo editor para configurar las propiedades de
cualquier objeto creado con el nuevo editor de Forms.
Al realizar doble click o presionar la tecla Enter sobre cualquier control, se abre un
diálogo con las propiedades del mismo. El orden de aparición de propiedades es el
siguiente:
Editor de Pictures
Introducción
El objetivo de es facilitar la creación de pictures (máscaras o formatos de edición)
41
sobre los atributos o variables de Transacciones, Work Panels, Web Panels y
Reportes.
Descripción
Las pictures son máscaras o formatos de entrada sobre los datos. En versiones
anteriores, se permitía la edición de las mismas de forma manual. Se integra en
esta versión a la definición de atributo/variable el poder seleccionar “pictures
preestablecidas”, siendo éstas las de uso más común y que no dependen del
generador utilizado.
Definición de pictures
Para poder definir una pictures, se debe utilizar el TAB Advanced del dialogo de
creación/edición de atributo/variable. Dentro del mismo se encuentra el Tag
“Picture”, donde se muestran las opciones disponibles dependiendo del tipo de
datos que se haya seleccionado al definir el atributo/variable.
Propiedades
Numéricos
42
Left Fill
Valores:
• Blank: los ceros no significativos no se muestran, pero el número 0 si.
• Blank when Zero: los ceros no significativos no se muestran, y el
número 0 tampoco.
• Zero: se muestran los ceros no significativos.
INPUT OUTPUT
N(7,2) 0 123.5
Blank ZZZ9.99 0.00 123.50
Blank when zero ZZZZ.ZZ 123.5
Zero 9999.99 0000.00 0123.50
Thousand Separator
Valores:
• True: con separador de miles.
• False: sin separador de miles.
INPUT OUTPUT
N(7,2) 456 1123.5
True Z,ZZ9.99 456.00 1,123.5
False ZZZ9.99 456.00 1123.5
Prefix
43
esperado. (por ejemplo en Visual Basic no se admite el símbolo ! como
prefijo).
Alfanuméricos
Case
Valores:
• None: mostrar y almacenar el texto como se ha escrito y permitir la
combinación de mayúsculas
• Upper: mostrar y almacenar el texto todo en mayúsculas.
Ejemplo:
INPUT OUTPUT
C(10) “Hola Mundo”
None Hola Mundo
False @! HOLA MUNDO
Fecha y Hora
44
Date Format
Valores:
• None: se muestra la fecha con el formato por defecto del generador (que
es el año con dos digitos) • Year with two digits (99/99/99): mostrar
la fecha con dos dígitos en el año
• Year with four digits (99/99/9999): mostrar la fecha con cuatro
dígitos en el año.
Ejemplo:
INPUT OUTPUT
Date 122501
None
Year with two digits (99/99/99) 99/99/99 12/25/01
Year with four digits (99/99/9999) 99/99/9999 12/25/2001
Hour Format
Valores:
INPUT OUTPUT
DateTime 123699
Only Hour (hh) 99 12
Hour and minutes (hh:mm) 99:99 12:36
Hour, minuts and seconds
99:99:99 12:36:59
(hh:mm:ss)
45
Observaciones
En el caso de Objetos Web las pictures numéricas aplican únicamente en
campos de solo lectura no así en campos de entrada.
Introducción
La característica fundamental del nuevo editor de forms (o formularios) es que está
construido sobre un contenedor de controles ActiveX. Esto permite que además de
los controles estándar (atributos, botones, etc.) puedan ser utilizados controles
ActiveX en la definición de formularios.
Alcance
Objetos: Work Panels
Lenguajes: Java(*) – Visual Basic – Visual FoxPro
Interfaces: Web
Descripción
Por defecto, todos los forms son creados con el editor anterior que no soporta
ActiveX. Sin embargo, en los Work Panels es posible utilizar este nuevo editor. Para
ello se debe configurar la propiedad de los mismos ‘Use New Form Editor’ en su
valor ‘True’.
46
Luego de esto se debe salvar y cerrar el objeto; al abrirlo nuevamente se abrirá
presentando el nuevo editor.
Nota:
Se sugiere utilizar este editor únicamente en el caso en que se desee incluir
controles ActiveX en el formulario.
Controles en general
El movimiento de los controles dentro del form, también puede realizarse utilizando
las flechas del teclado. Si además se presiona la tecla de Mayúscula (Shift) se
ignora el grid mientras se realiza el movimiento.
Controles ActiveX
47
desea insertar.
Edición de Propiedades
Junto con este editor existe un nuevo editor de propiedades para los controles.
48
Al dar doble click o Enter sobre algún control, se abre un diálogo con las
propiedades del mismo.
Consideraciones generales
No se encuentra implementada la conversión de forms desde/hacia este
editor.
No se soporta por el momento parámetros en la definición de los eventos
de los controles ActiveX.
Los siguientes ActiveX no pueden ser utilizados por el momento:
ActiveMovieControl object
Microsoft NetShow player
RealVideo ActiveX Control (32 bits) object.
Ejemplos
Los ejemplos demuestran cómo insertar controles de tipo Treeview y Progressbar
en un Work Panel así como su funcionamiento.
Select object
Introducción
A partir de esta versión se modificó el selector de objetos, permitiendo ver las
descripciones de los objetos en forma completa.
Descripción
Al seleccionar el selector de objetos se ofrece una pantalla como la que se muestra
a continuación.
49
Figura 17 – Selector de Objetos
50
Patrones de búsqueda
Se permite buscar por el inicio de la descripción de los objetos, la forma de hacerlo
es: <coma><dos puntos><pattern> como por ejemplo: ,:i
Figura 18 – Búsqueda
Introducción
A partir de esta versión se modifica la vista asociada a todos los objetos GeneXus,
principalmente para mejorar la interfaz haciendola mas clara y amigable al usuario.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Procedimientos, Reportes, Data
Views, Menues, Menu Bars.
Lenguajes: Todos.
Interface: Win, Web.
51
Descripción
En esta versión se cambia el “view” de todos los objetos GeneXus. Para permitir
tener una representación más intuitiva así como también una manera de separar
los distintos aspectos que componen un objeto, permitiendo que los componentes
de un objeto sean mas fácilmente accesibles lo que mejora el trabajo de definición
de los mismos.
Transacciones
Las transacciones permiten definir los objetos de la realidad. A partir de esta
versión, también es posible generar transacciones disponibles para aplicaciones
Internet (transacciones en el Web), obteniendo toda la potencia de este tipo de
objetos para el ingreso de datos.
En este caso se separan las distintas partes que conforman la transacción en
distintas vistas.
Figura 19 - Transacciones
52
Reportes y Procedimientos
Los reportes y procedimientos definen procesos no interactivos de extracción y/o
actualización de datos. Por un lado los procedimientos tienen la posibilidad de
extraer información y/o actualizar la base de datos (procesos batch).Como
contrapartida los reportes están encargados de recuperar la información a partir de
los datos almacenados sin tener la posibilidad actualizarlos.
Web Panels
Los Web Panels son objetos que permiten construir páginas WEB dinámicas que
interactúan con la base de datos.
Work Panels
Los objetos Work Panles permiten definir consultas interactivas a la base de datos.
53
A continuación se detallan los distintos Tabs que lo componen:
Menues
Los menues están encargados de organizar al resto de los objetos y por lo general
marcan los puntos de entrada a la aplicación.
Figura 23 – Menues
Data Views
Los Data Views son objetos que permiten manejar archivos externos como si
pertenecieran a la Base de Conocimiento.
Menu Bar
Los objetos MenuBar permiten que los formularios hagan uso de su propia Menu
Bar o Tool Bar.
54
Figura 25 - Menu Bar
Consideraciones
En caso que la base de conocimiento tenga objetos privados se eliminan ciertos
tabs dependiendo del objeto, debido a que no es posible acceder a esas secciones
en caso que el mismo sea privado.
A continuación se detallan los distintos Tabs que son eliminados para cada objeto.
Introducción
A partir de la versión 7.5 de GeneXus, en las propiedades de los controles del form
(sólo modo gráfico) se pueden especificar colores dependientes del esquema de
colores de Windows. El color definitivo a utilizar se recalculará en función del
esquema de colores en tiempo de ejecución. También se pueden especificar este
tipo de colores en el "Control Info" de los atributos.
Alcance
Objetos: Transacciones, Work Panels y Reportes.
Lenguajes: Visual FoxPro, Visual Basic, Java, C/SQL, C#.
55
Interfaces: Win Form
Descripción
En las propiedades de los controles dentro del form gráfico (incluyendo el propio
Form) y Control Info de atributos se cambió la paleta para la selección de colores.
Ahora es posible especificar colores dependiente del esquema de Windows. El color
definitivo a utilizar se recalculará en función del esquema de colores en tiempo de
ejecución.
Con esta opción todas las pantallas generadas de la aplicación respetan el esquema
de colores de Windows y cambian dinámicamente (vale decir, si el usuario final
cambia el esquema de Windows de colores, al ejecutar nuevamente la aplicación, la
misma vuelve a tomar los colores predeterminados desde Windows).
También se incluye una paleta para la selección de colores que no dependan del
esquema de Windows de la máquina.
56
Si el color (RGB) que tenía el control (edit, text, columnas subfile, etc.) es el mismo
utilizado por el esquema de colores estándar de Windows (ya sea para Windows
95/98/NT o para Windows 2000), entonces se asume que era un color estándar y
se sustituye el RGB por el color estándar correspondiente a ese control/propiedad.
Si no es el color predeterminado se mantiene el mismo color.
Ejemplo:
Se tenían los siguientes controles:
Quedan convertidos a:
Consideraciones
• Al consolidar en 7.0 un XPW exportado con la versión 7.5 o superior se
pierde la información de colores. Esto se debe a que ya no se exportan los
colores “viejos”.
57
Diálogos
Diálogos de creación e impacto
Introducción
A partir de esta versión se modificaron los diálogos de creación de un modelo,
creación de la base de datos e impacto de la base de datos.
Descripción
Cuando no existe una base de datos para el modelo se genera la siguiente pantalla:
58
Distribución y Consolidación
Introducción
A partir de la versión 7.5 de GeneXus se modifica el formato de los archivos de
exportación del Knowledge Manager (KMW). El formato usado hasta el momento
(XPW) era un formato propietario de ARTech, ahora el mismo pasa a ser XML.
Los usuarios contarán con un formato conocido que puede ser procesado por una
gran cantidad de herramientas hoy en día.
Descripción
El archivo de exportación XPW usando hasta ahora contenía toda la información de
los objetos distribuidos en forma estructurada. A partir de esta versión ese
contenido se almacena en XML, formato estándar para el intercambio de
documentos estructurados.
Distribución
Una vez seleccionado los objetos a distribuir e ingresado el nombre del archivo de
distribución, se crea automáticamente un archivo comprimido de extensión XPZ
(XPW Zipped) con un archivo XML dentro conteniendo la información de los objetos
y/o atributos distribuidos. El archivo comprimido se crea con el nombre:
<Distribution Name>.XPZ y los xml internos con nombre: <Distribution
Name>_<nro de archivo>.XML
59
Figura 3 – Distribution Name
60
DISTRIBUTE OPTIONS
Append to file
Si en el Distribution Name del diálogo de distribución se ingresa el nombre de un
archivo que ya existe, al salir del campo se habilita la sección Distribute Options
para poder agregar la nueva distribución al archivo existente.
Si se marca la opción Append, se crea un nuevo archivo XML dentro del mismo ZIP.
Siguiendo con el ejemplo anterior, se crearía un archivo MyExport_2.xml en el
archivo MyExport.zip. Si ya existe un archivo con ese nombre dentro del zip, se
incrementa el sufijo en uno y se vuelve a intentar.
XPW Format
Mediante esta opción es posible distribuir objetos con el formato anterior de
exportación (XPW). De esta forma se podrá consolidar este archivo en versiones
7.0 o anteriores de GeneXus. Cabe recordar que aquellos objetos que usen
funcionalidades de la nueva versión no podrán ser consolidados, generando ciertos
errores en el Consolidation Log de las versiones anteriores.
Encriptación
Cuando se exporta un conjunto de objetos en el cual alguno es Privado, todo el
archivo de distribución es encriptado, por tanto los archivos generados dentro del
XPZ no podrán ser procesados como XML.
Consolidación
Una vez seleccionado el “Distribution File” en el diálogo de consolidación, se puede
ver en el campo “Type” el tipo de archivo que se va a consolidar (ver Figura 5 -
Diálogo de Consolidación).
XPZ
Cuando se selecciona un archivo con este formato, el KMW recorre el contenido del
archivo XPZ y consolida cada uno de los archivos internos, siempre y cuando
tengan el formato XML adecuado.
XML
61
En algunos casos puede ser necesario consolidar algún XML en particular de todos
los que contiene el XPZ. Para este caso se puede descomprimir y consolidar
directamente el XML.
XPW
Para poder tener compatibilidad con el pasado se creo un componente que es el
encargado de realizar la conversión de un archivo XPW a un archivo XML.
El KMW de GeneXus cuando se le especifica que se quiere consolidar un XPW lo que
hace es llamar al conversor el cuál le devuelve un archivo XML temporal que luego
GeneXus consolida. Por tanto la consolidación de XPW es más lenta que la de XML o
XPZ.
62
Figura 6 - Lista de objetos a consolidar
CONTROLES AL CONSOLIDAR
Control de Fecha de Modificación
Se agrega una nueva opción: “Do not overwrite newer objects” (ver Figura 5 -
Diálogo de Consolidación) para no sobrescribir objetos con fecha de modificación
más nueva. Por información más detallada acerca de esta nueva facilidad consulte:
Versión y Fechas de Objetos.
Control de Preferences
A partir de la versión 7.5 en el archivo de exportación se incluyen las preferencias
de Diseño “Function” y “Significant Attribute/Objact/Table Name length”.
63
se le presenta al usuario una pantalla mostrando las mismas preguntando si de
todas formas desea consolidar o no.
Si el usuario cancela, en el log aparece el error de que el modelo no fue
consolidado mostrando las diferencias. Si el usuario confirma, en el log se muestra
al principio que el modelo no cambio los valores pero con un Warning mostrando
las diferencias (ver Figura 7 - Log de Consolidación).
CONSOLIDATION LOG
El formato del archivo “GXIMPORT”, que se crea en la consolidación en el directorio
del usuario, es XML. Esto permite que el log de consolidación sea mostrado en
formato HTML como se puede ver en la siguiente figura.
64
Figura 8 - Estadísticas
Ejemplos
Si bien el contenido y estructura del XML es análoga al XPW usado hasta ahora, el
hecho de tener la información con este formato tiene varias ventajas. Por ejemplo,
el usuario podrá definir un XLS para ver el contenido de la exportación en un
formato personalizado, o abrir el archivo con Internet Explorer 5.5 o superior, el
cual tiene su propio XLS para ver el contenido del XML en forma de árbol. Con esto
es más fácil localizar un área en particular de la exportación. En el ejemplo de
abajo se muestra la información de la Transacción Clientes y se ignora lo demás:
<?xml version="1.0" encoding="UTF-7" ?>
- <ExportFile>
+ <Model>
+ <KMW>
- <GXObject>
- <Transaction>
- <Info>
<Name>Clientes</Name>
<Description>Clientes</Description>
</Info>
<ObjInfo />
+ <PrivateObjInfo>
+ <Documentation>
+ <Help>
<LastUpdate>2001-03-19 09:52:00</LastUpdate>
+ <Structure>
- <![CDATA[
CliCod*
CliNom
CliDir
CliSexo
]]>
+ <Variable>
+ <Variable>
+ <Variable>
+ <Variable>
+ <Variable>
+ <Variable>
+ <Form>
+ <HTMLForm>
65
- <Rules>
- <![CDATA[
Parm( &Clicod , &Mode );
CliCod = &Clicod if Update or Delete;
Noaccept( CliCod ) if Update or Delete;
]]>
</Rules>
</Transaction>
</GXObject>
+ <Attributes>
+ <GXObject>
+ <GXObject>
</ExportFile>
Consideraciones
• No es posible consolidar Objetos Privados distribuidos con versiones anteriores
que estén encriptados en el XPW.
Listados en XML
Introducción
Los diagramas de impacto, navegación y los listados de tablas, atributos, subtipos y
objetos se muestran como HTML.
Descripción
Los diagramas en se muestran como HTML lo cual tiene las siguientes ventajas:
Al poseer links se permiten acceder a los objetos GeneXus, a las definiciones de los
atributos, a las tablas desde los diferentes diagramas y listados. Todos los links que
se pueden realizar en los listados y en las navegaciones también aceptan botón
derecho con las opciones pertinente a cada caso. A su vez los diagramas tienen la
facilidad de permitir ocultar o mostrar información.
Diagrama de Impacto
Al realizar una impacto de la base de datos se muestra un diagrama como el
siguiente:
66
Table CLIENTES conversion procedure
CLIENTES is new
Table Structure
Attribute Type Value Taken From
CliId N(4)
CliNom C(30)
CliDir C(30)
CliTel N(6)
PaisCod C(4)
IvaCod N(4)
Table Structure
Attribute Type Value Taken From
CliId N(4) CLIENTES
CliNom C(30) CLIENTES
CliDir C(30) CLIENTES
CliTel N(6) CLIENTES
PaisCod C(4) CLIENTES
IvaCod N(4) CLIENTES
CliSexo C(1) Null
Diagrama de Navegación
Environment
67
Levels
Level CLIENTES
• CLIENTES ( CliId )
o PAISES ( PaisCod )
o TRATAIVA ( IvaCod )
Prompts
Table Program In Parameters Out Parameters
Listado de Tablas
El listado de tablas muestra la información de los atributos, indicando la
descripción, el tipo, si ellos son fórmula, y si son subtipos. Seleccionando la tabla se
puede acceder a la definición de la misma mostrando los índices que posee.
A su vez clickeando en cada uno de los atributos se puede acceder a su definición.
Table Instalac
Name Instalac
Description Instalaciones
ID 9
Table Structure
Name Description Type Formula Subtype of
InstNro Nro. Instalacion N (4.0)
InstFch Fecha Instalacion D
InsCliId InsCliId N (4.0) CliInst.CliId
68
EqId Equipo Codigo N (4.0)
En caso de seleccionar ver detalles (Show Detailed List) para la tabla se muestra el
siguiente listado, el cual muestra la información anterior agregando la información
de los índices, las subordinaciones y superordinaciones de la tabla y los prompts
asociados a la misma.
Table Instalac
Name Instalac
Description Instalaciones
ID 9
Table Structure
Name Description Type Formula Subtype of
InstNro Nro. Instalacion N (4.0)
InstFch Fecha Instalacion D
InsCliId InsCliId N (4.0) CliInst.CliId
EqId Equipo Codigo N (4.0)
Indices
Name Type Attributes
IInstalaciones Primary Key InstNro
IInstal3 Foreign Key InsCliId
IInstal2 Foreign Key EqId
CliInst User InsCliId , InstNro
Subordinated To
Id Table By:
1 Clientes InsCliId
6 Equipos EqId
Superordinated To
Id Table By:
3 Contrat1 InstNro
5 Llamado1 InstNro
Associated Prompts
GX0090
Listado de Atributos
El listado de atributos muestra el tipo del mismo, a que tablas pertenece, en que
objetos se encuentra, y cual es el control de ese atributo.
Attribute CliSexo
Description Sexo
ID 61
Type C (1)
69
Name Description
Clientes Clientes
Transactions
Name Description In
Clientes Clientes Structure , Form
Prompts
Name Description In
GX0010 Selection List CLIENTES Conditions
Control Info
Name Value
'Femenino' F
'Masculino' M
Listado de Subtipos
El listado de subtipos mostrado es el siguiente, permitiendo acceder a la definición
de los atributos clickeando en el mismo o mediante botón derecho y la opción List.
Group CliCont
Attribute Type Supertype
ContCliId Pri. CliId
ContCliNom Inf. CliNom
Listado de Objetos
El listado de objetos desde la opción de menú Tools/List Objects muestra la
información del objeto, la fecha de creación, el generador asociado, los programas
llamados, los llamadores, reglas, eventos, subrutinas, condiciones. En el caso de
listar un objeto privado se muestra un mensaje de que el mismo no puede ser
listado.
Name
Description Factura
Folder
Id 9
Created 1998-08-21 13:06:44
Updated 1998-08-21 13:06:44
70
Updated 1998-08-21 13:06:44
Generators (*) - Visual Basic (Default)
Layout
header
end
for each FacFch
where FacFch =&facfch
eject
endfor
Rules
parm(&facfch ) ;
Variables
Name Description Type Length Decimals Picture
Today Today Date 8
Time Time Character 8
Page Page Number 6 ZZZZZ9
Line Line Number 6 ZZZZZ9
Output Output Character 3
Pgmname Pgmname Character 11
Pgmdesc Pgmdesc Character 30
facfch facfch Date 8
Cross References
Call by
Called
EmiFac
71
¿ Dónde es guardada la información de los diagramas de
especificación y reorganización?
EN LA ESPECIFICACIÓN
El especificador graba un archivo llamado gxnavig con formato XML en:
<directorio KB>\<gxuser>
Este archivo tiene todos los objetos que fueron especificados, el status de cada
objeto y una referencia al archivo XML de cada objeto.
A su vez graba un archivo XML por cada objeto especificado en:
<directorio KB>\gxspc<numero modelo>\gen<numero
generador>\nvg
EN LA REORGANIZACIÓN
Al realizarse una reorganización se guarda el gxiar bajo el directorio del usuario en
la base de conocimiento.
Los archivos XML generados son guardados en :
<directorio KB>\<gxuser>\mdl<numero modelo>\gen<numero
generador>
72
Figura 26 – Selector de Tablas
73
Atributos
Límite de atributos
Introducción
Se aumentó el límite de atributos a nivel del modelo. Esto resulta de mucha utilidad
para bases de conocimiento corporativas donde se requería la definición de más
atributos.
Descripción
A partir de esta versión el límite de atributos por modelo pasó de 9.999 a 32.767.
Compatibilidad
Si el número de atributos en la base de conocimiento no supera el límite de 9.999,
la base de conocimiento es almacenada igual que en las versiones anteriores de
GeneXus.
En cambio si se superan los 10.000 atributos se almacena en forma diferente el
identificador (ID) de los atributos, quedando incompatible la base de conocimiento
para las versiones anteriores.
Al querer abrir un modelo de la versión GeneXus 7.5 con más de 9.999 atributos
con versiones anteriores da el siguiente error:
Introducción
A partir de esta versión se permite indicar cuantos son los caracteres significativos
para determinan la unicidad de los nombres de los objetos, atributos y tablas.
Descripción
Se agregaron tres nuevas propiedades en el modelo de diseño, las cuales permiten
modificar la cantidad de caracteres que se consideran significativos para identificar
un nombre, ya sea de atributo, objeto o tabla.
74
Figura 27 – Propiedades diseño
Las propiedades son:
En caso de colocar un valor menor que el mínimo permitido para cada caso muestra
el siguiente mensaje de error:
75
Figura 28 – Error al colocar un valor menor al permitido
Se puede disminuir el valor a cuanto truncar los atributos, objetos y tablas siempre
que no exista ningún atributo, objeto, tabla que tenga los mismos caracteres
significativos. Al realizarlo se presenta el siguiente mensaje de error.
Los nombres que no se pueden modificar son los de: Folder, Grupos, Modelos y
Programas externos que tienen TODOS los 30 caracteres significativos.
Consideraciones
• Para SQL Server no pueden utilizarse nombres largos (de mas de 8
caracteres) para objetos si la tecnología de acceso es SQL Embebido
(generador C/SQL).
76
Variables basadas en atributos
Introducción
En el diálogo de definición de variables se agregó un nuevo botón para definir
variables basadas en un atributo.
Descripción
En el diálogo de definición de variables se permite definir una variable basada en
un atributo mediante el botón “Add Based On”.
77
Figura 31 – Diálogo de selección de atributos
Introducción
Se agregan nuevas propiedades relacionadas a los atributos GeneXus. En la
ventana de edición de un atributo se agrega un nuevo “Tab” denominado
“Advanced” que permite configurar la descripción que será utilizada en las distintas
interfaces gráficas de los objetos GeneXus.
Alcance
Objetos: Transacciones.
Lenguajes: Todos.
Interfaces: Web, Win.
Descripción
Se agrega un nuevo “Tab” denominado “Advanced” que permite configurar las
siguientes opciones sobre cualquier atributo:
78
• Title: Permite definir la descripción utilizada en las estructuras planas, como
por ejemplo primer nivel de una transacción, descripción de las variables en
los prompts, títulos de reportes generados con el report wizard (primer
nivel).
• Column Title: Permite definir el título asociado al atributo en las columnas
de un subfile.
79
Figura 33 - Tab "Advanced" definiendo un atributo
Figura 34 - Título
80
Figura 35 – Título de la Columna
Introducción
A partir de la versión Solís es posible definir un dominio como “array” (vector) para
cualquier tipo de dato. Hasta ahora, si bien una variable podía ser un array, los
Dominios sólo podían ser escalares.
Esto puede resultar útil para definir vectores de meses, años, etc y tenerlos en un
dominio para “padronizarlos”.
Descripción
Definición de Dominios
En el diálogo de definición de dominios se agregó la sección Dimensions dando la
posibilidad de definir un dominio como array.
81
Figure 1 - Definición de Dominio Array
Variables y otros dominios pueden estar basados en un dominio array, pero no los
atributos debido a que no tienen dimensiones.
Esto permite que se pueda tener un dominio genérico escalar, como por ejemplo,
“Teléfonos” y luego definir el dominio “Teléfonos por cliente” basado en anterior
(infiere el tipo) pero de una dimensión (Filas = 10).
82
En este caso, como DOM_ESC tiene otro dominio basado en él (DOM_2), DOM_ESC
no tendrá habilitada la sección Dimensiones. Esto se debe a que posiblemente
DOM_2 pueda tener a su vez atributos basados en él.
• Una variable basada en un dominio simple puede definirse como array, ya que
pueden definirse filas y columnas para la misma.
Una gran diferencia que tienen con los dominios es que las variables no
deshabilitan la definición del dominio base.
NOTA: Debido a que las variables no son globales, sino que pertenecen a cada
objeto, cuando en el dominio se realiza un cambio, éste se propaga a las variables
en el momento de apertura del objeto (cuando se lee la definición de variables).
83
“orientado a variables”.
Resumen
Dominio Base de tipo Escalar
Variables, atributos y dominios pueden estar basados en él.
Atributos y dominios basados en él deshabilitan la sección Dimensión del
dominio base.
Variables y dominios basados en él pueden modificar su propia definición de
dimensiones.
Variables heredan los cambios de dimensiones y tipo de datos del dominio
base; los atributos y dominios sólo los cambios de tipo de dato.
No puede pasar a array si hay atributos y dominios basados en él. Si hay
sólo variables da warning.
Primary Key
Introducción
Se permite utilizar los atributos integrantes de una clave primaria sin la necesidad
de que se encuentre en el formulario, haciendo la asignación correspondiente en las
reglas.
Alcance
Objetos: Transacciones.
Lenguajes: Todos.
Interface: Win, Web.
84
Descripción
Se levanta la restricción existente donde cada atributo que integra una llave
primaria debe estar en el formulario.
Ejemplo
Se realiza un work Panel denominado “Trabajar con Artículos” donde se listan la
lista de artículos existentes. Para cada uno de los valores se permite realizar las
siguientes operaciones:
85
Figura 36- Reglas relacionadas al Work Panel
86
Figura 39 - Detalle del "Artículo 1"
87
Comandos
Comando For To Step
Introducción
A partir de esta versión se ha implementado el comando “For To Step” el cual es
útil cuando es necesario iterar cierta cantidad de veces a partir de un cierto valor.
Alcance
Objetos: Transactions, Work panels, Procedures, Reports, Web Panels
Lenguajes: RPG, Cobol, Java, VB, VFP, C/SQL, C#
Interfaz: Win y Web
Descripción
Se ha implementado el comando “For To Step” donde se permite indicar el
comienzo y el fin del bucle, indicando cual es el salto.
La sintaxis es la siguiente:
Es un bucle desde el valor <inicio> de &Var mientras que &Var sea <= que
<fin>, el mismo se incrementa de a <salto>. El valor por defecto de <salto> es
1. El valor de <salto> puede ser negativo.
Comando Submit
Introducción
Hasta la versión 7.0 de GeneXus, el comando submit se utilizaba en ambiente
Windows para lanzar un proceso en forma asíncronica en el AS/400.
A partir de la versión 7.5 se agrega la posibilidad de utilizar este comando para
someter procesos, tanto en ambientes Win como en ambites Web.
88
Alcance
Objetos: Reportes, Procedimientos
Lenguajes: C/SQL – C# - Visual Basic - Java (en próximas versiones)
Interfaces: Win - Web
Descripción
El comando Submit, permite ejecutar programas en forma asíncronica, la sintaxis
es la siguiente:
Submit(‘Proceso’,’SubmitParms’[,<Parm1>, … ,<ParmN>])
Proceso
Es el nombre del programa a llamar. Puede ser un objeto GeneXus o un programa
externo. Los objetos válidos dentro de GeneXus son reportes y procedimientos que
no tengan salida. Este parámetro debe ir entre comillas simples.
SubmitParms
Se utiliza para indicar ciertos parámetros referentes a la ubicación, usuario,
contraseña que utilizará el proceso invocado.
Este parámetro es utilizado unicamente en ambiente Win, por el momento es
ignorado por todos los generadores.
Parm1 … ParmN
Son los parámetros que recibe el programa a llamar, los mismos pueden ser
atributos o variables. No se soporta el pasaje de expresiones o constantes. Es
recomendable verificar que la definición de cada uno de los parámetros coincida
con los tipos de datos del programa.
Consideraciones Generales
El procedimiento o reporte llamado con el comando Submit, debe se main y tener
configurada la propiedad ‘Call protocol’ con el valor ‘Command Line’.
Esto se debe a que el llamado con el comando Submit se traduce como el llamado a
un exe.
El archivo se debe llamar igual que el nombre del main (exe para aplicaciones Win
y dll para aplicaciones Web) que realiza la llamada mediante submit, y se debe
crear una sección llamada [GxFiles] con la entrada:
89
SubmitPath=<Camino donde está el exe>
Si se tiene más de un objeto main que realiza submit, se debe generar un INI por
cada uno.
El camino debe terminar con \.
Error Type:
HLLAMO_WebObj (0x800A0035)
File not found
/cgi-bin/hllamo.asp, line 13
Page:
POST 25 bytes to /cgi-bin/hllamo.asp
POST Data:
BUTTON1=Enter&sCallerURL=
Ejemplo:
Se tiene un objeto main llamado Prueba que realiza un submit a un
procedimiento llamado Proceso.
Cuando se pone en producción la aplicación, suponiendo que el exe procedimiento
(proceso.exe) se encuentra en el directorio c:\archivos se debe crear el archivo
prueba.ini con la siguiente información:
[GxFiles]
SubmitPath=’c:\archivos\’
Ejemplos
En el siguiente ejemplo se utiliza el comando submit para llamar a un programa
denominado ‘Prog’ pasándole como parámetros &A y &B.
Event ‘UsrEv’
Submit(‘Pprog’,’’,&A, &B)
Endevent
90
Reglas
Regla Prompt On
Introducción
A partir de esta versión se permite definir el control que activa la llamada a un
determinado prompt en objetos Web, en lugar del bitmap utilizado por defecto.
Alcance
Objetos: Web Panels, Transactiones
Lenguajes: Java, C/Sql, Visual Basic
Interfaz: Web
Descripción
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.
91
Msg y error con expresiones
Introducción
Las reglas MSG y ERROR y el comando MSG permiten como parámetro una
expresión, y no solamente un string o variables como en versiones anteriores.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Reportes, Procedimientos.
Lenguajes: Java – Visual Basic – Visual Fox – C/SQL.
Interfaces: Web Form, Win Form.
Descripción
Tanto las reglas MSG y ERROR (utilizadas para enviar mensajes de advertencia y
error al usuario respectivamente) como el comando MSG permiten tener
expresiones como parámetros de las mismas. La expresión debe ser de tipo
Character.
Error(Str(A));
Error(Concat(Concat('El valor' , Str(A*2/100)), ' no es correcto') ) IF A >= 10;
Msg(Concat('Valor de B: ' , B));
Msg(Concat('Fecha Ingresada: ', DtoC(C)) );
Msg(Concat('Fecha Hora Ingresada ', TtoC(D)) );
Esto simplifica la programación y puede resultar muy útil para depurar secciones de
código, debido a que no se requiere el uso de variables auxiliares para asignar
funciones y/o expresiones de tipo Character.
Introducción
Históricamente, en GeneXus los parámetros siempre fueron de Entrada/Salida. Esto
simplificaba la programación y además se correspondía con los lenguajes en los que
se estaba generando.
El objetivo de esta funcionalidad es poder indicar el tipo de pasaje de los
parámetros.
92
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Procedimientos, Reportes
Lenguajes: Java, Visual Basic, Visual FoxPro
Interfaz: Web, Win
Descripción
Esta funcionalidad permite definir el tipo de pasaje de parámetros, pudiendo elegir
entre uno de los siguientes valores: entrada (in), salida (out) o entrada/salida
(inout). El valor por defecto será inout.
La definición del tipo de pasaje de parámetros permite, por un lado, una mejor
especificación de la semántica de las interfaces, y por otro lado, permite optimizar
el pasaje de parámetros de las aplicaciones de acuerdo a la arquitectura en la que
éstas se implementan. En la mayoría de los lenguajes es más eficiente pasar por
referencia que por valor. Pero en Java, por ejemplo, los parámetros solo se pueden
pasar por valor, por lo que para lograr la funcionalidad de pasarlos por referencia
es necesario hacer conversiones de parámetros, lo cual puede redundar en un
overhead importante. Por otro lado, cuando se está ejecutando en forma distribuida
(Java, C/SQL, DCOM, etc), la utilización de parámetros del tipo out tiene la ventaja
de que no es necesario enviar dicho parámetro en la invocación. En cambio si los
parámetros se definen de inout implica que hay que pasar todos los parámetros.
Esto tiene como consecuencia que se envíen más bytes de los necesarios, lo cual es
bastante inconveniente, especialmente en entornos tales como Internet.
Sintaxis
REGLA PARM
Consideraciones Generales
Programas llamados como UDP/UDF
En los programas que son llamados con UDP o con UDF, el valor por defecto varía
de generador en generador. En los generadores: Java, Visual Basic, Visual FoxPro,
Fox Pro for Windows y Xbase, el valor por defecto es inout para todos los
parámetros, comportamiento que puede ser modificado por el usuario mediante la
definición del tipo de pasaje. Mientras tanto, en el resto de los generadores (Cobol,
RPG, C/SQL) el valor por defecto es in para todos los parámetros, salvo el último
93
que es de tipo out, y cualquier definición del tipo de pasaje, por parte del usuario,
es ignorada por el generador.
Consideraciones
No funciona el indicador in con parámetros del tipo Array.
Un parámetro definido como In puede ser pasado como parámetro a otro
programa donde esté definido como Out o InOut. La especificación no esta
controlando este caso pero es considerado un error y será validado en
futuras versiones.
94
Objetos
Introducción
Hasta la versión 7.0 no se distinguía en un objeto entre la fecha de modificación y
fecha de consolidación. Esto hacía que cuando un objeto era consolidado, la fecha
de modificación o edición del mismo se sobrescribiera con la fecha de consolidación,
perdiendo de esta forma información acerca de su fecha de actualización real.
Descripción
Versión del objeto
A partir de la versión 7.5. al salvar un objeto se graba junto con la información del
mismo la versión de GeneXus con que fue salvado. Esto permite dar un mensaje
más amigable al abrir el objeto con una versión más vieja que la que fue salvado.
En el “Open KB” se avisa si hay algún objeto salvado con una versión más nueva
con la siguiente advertencia:
Warning: Some objects in this Knowledge Base were saved with a GeneXus NEWER
version (<version>), that cannot be open with this version.
Do you want to open the Knowledge Base anyway?
El mismo control se realiza cuando se abre un modelo ya que puede haber modelos
congelados que no tienen ningún objeto salvado con una versión más nueva.
95
La Fecha de Creación se almacena al crear un nuevo objeto. Entiéndase por crear
un nuevo objeto cuando se hace New Object o cuando se consolida un objeto en
una KB que no existe.
FECHA DE MODIFICACIÓN
Una de las cosas que permite el mantener la fecha de modificación en la
consolidación es evitar sobrescribir objetos más nuevos. Para esto se agregó en el
diálogo de consolidación del Knowledge Manager la opción:
Do Not Overwrite Newer Objects
96
actualización igual a la de la KB origen.
IMPACT OBJECT
En el diálogo de Impact Object es posible ver los objetos que tengan igual fecha de
modificación pero difieran en la fecha de consolidación. Para esto se agregó la
opción “Equal but different consolidation date” en los filtros de dicho diálogo (ver
siguiente figura).
TIME ZONE
IMPORTANTE: Para que el control de fechas antes mencionado pueda realizarse
adecuadamente, es necesario tener correctamente configurado el ‘TIME ZONE’ de
Windows en los PC origen y destino.
Compatibilidad
• Lo siguiente aplica a la primer consolidación en GeneXus 7.5 de objetos que
97
hayan sido consolidados con versiones anteriores de GeneXus:
98
Ambientes
Introducción
Se ha modificado el diálogo de definición de Modelos (Model Properties) en la
versión 7.5 para facilitar la definición de modelos en base a ciertas características
que tendrá el mismo, como ser, lenguaje a utilizar, tipo de interface y DMBS.
Descripción
Al crear un nuevo modelo o editar uno existente aparecerá el siguiente diálogo para
definir las propiedades del mismo:
99
Language
User interface
DBMS
En Language aparece un combo con todos los lenguajes soportados por GeneXus,
estos son: C#, C/SQL, Cobol, Java, RPG, Visual Basic y Visual FoxPro, Xbase for
DOS.
Luego de elegir el lenguaje, el usuario podrá seleccionar el tipo de interface que
desea utilizar para el ambiente principal (Win o Web Form) y el DBMS. Los valores
disponibles para User Interface y DBMS dependen del Lenguaje seleccionado. A
continuación se muestra una tabla con los valores posibles para cada lenguaje.
100
Figura 11 - Ambientes de un modelo
PROMPT
Un Win Prompt (Web Pompt) se genera, en Prototipo o Producción, sólo si se
especifica una transacción que lo utilice. Esto quiere decir que exista una
transacción que sea generada en ambiente Win (Web).
Cuando algún modelo tiene Win y otro Web forms se tienen ambos prompts en
diseño.
101
¿Cómo se generan los objetos Web?
Debajo del directorio del modelo (DataXXX) se crea un directorio Web que es
donde se guardan todos los objetos generados en ambiente Web.
En el caso de las aplicaciones Visual Basic que usan base de datos Access, en el
directorio Web sólo se guardan los objetos Web, no la base de datos. La
GX_DATA.MDB se continúa generando en el directorio del modelo DataXXX, los
objetos Web acceden a este directorio para tomar los datos.
Es por esta razón que se recomienda utilizar la preferencia a nivel de modelo “Local
Database File” para indicar la ubicación de la base de datos (absoluta o relativa),
porque sino al poner en producción una aplicación Web no se encontrarán los datos
(porque se buscarán en el directorio “padre” del objeto no en el directorio actual).
F5 – Run
En el diálogo de ejecución (Run) se puede filtrar la lista de programas a
compilar/ejecutar por ambiente.
Además, para el caso de VB y Java, el ambiente que se define por defecto al abrir
la KB con la 7.5 es con interfaz Win. Esto haces que todos los Web Panels estén
marcados como main pero sin generador asociado, y el combo para seleccionar
un generador está vacío dado que no hay un ambiente Web definido (porque no
existía en la 7.0). La solución en este caso es modificar las opciones de estos
objetos para asociarle el ambiente correspondiente. Para esto, se recomienda hacer
lo siguiente:
Si la mayoría de los objetos main de la aplicación se generan en ambiente Win, se
deja el ambiente Default con User Interface Win, se crea un ambiente secundario
Web y se asocia este ambiente a los Web Panels (Information->Option->Generated
for). Es posible eliminar la propiedad Main a aquellos que no lo requieran.
Si en algún caso no se corresponde el ambiente con la interfaz del objeto, esto será
indicado en la navegación del mismo con la siguiente advertencia:
“This object cannot be generated on this environment.”
102
Help
HTML Help
Introducción
A partir de esta versión se cambia la forma de generación de la ayuda, para pasar a
generar en formato HTML. Este mecanismo permite la definición de ayuda para
aplicaciones en el Web. Además se incorpora la posibilidad de empaquetar toda la
ayuda generada en un único archivo de formato CHM, con todas las características
que esto acarrea como son la posibilidad de buscar en la ayuda generada, definir
índices, etc.
Alcance
Lenguajes: Java – Visual Basic – Visual Fox Pro – C/SQL –C#
Interfaces: Win - Web
Descripción
Se definen un nuevo esquema de ayuda, en el que se permite seleccionar entre
dos formatos: CHM y HTML.
En esta versión, se genera por cada objeto/atributo/variable un documento HTML
que contiene el texto de ayuda definido en GeneXus para el mismo. En ambos
casos se genera un directorio HELP bajo el directorio del modelo, en el que se crea
un archivo extensión HTML por cada objeto/atributo/variable que tenga ayuda.
En el caso de CHM, se crea además un archivo de nombre APPHLP.CHM en el
directorio del modelo.
CHM
HTML
103
Definición de Ayuda
En GeneXus existen dos instancias de ayuda, la ayuda a nivel de objeto
(Transacción, Work Panel, etc) y la ayuda de los distintos atributos/variables dentro
de estos.
Para definir la ayuda de un objeto, se debe hacer seleccionar la Tab Page HELP del
objeto.
Generación de la Ayuda
La opción para generar el help de objetos/atributos GeneXus se encuentra en la
barra de herramientas, bajo el item Build.
104
aplicación.
El wizard consta de tres pasos
Paso 1
Type of Help
Existen dos formas: CHM y WEB. La principal diferencia entre ambos es que para la
generación WEB no se requiere el uso de un compilador, simplemente se generan
los archivos HTML correspondientes a cada ayuda de objeto.
CHM
La elección de esta opción implica tener un compilador de ayuda HTML, a través del
cual generar el archivo APPHELP.CHM utilizado luego por la aplicación GeneXus.
105
HTML
La principal característica de este formato es el poder generar ayuda que no sea
compatible solo con la plataforma Windows GUI.
Paso 2
Define opciones que modifican propiedades del archivo de definición del proyecto.
106
Project Settings
Define opciones que modifican propiedades del archivo de definición del proyecto.
Estas opciones aplican sobre todo para el caso de generar un archivo CHM o
utilización de un activeX o componente Java para el Web. Solo aplica si se
seleccionó CHM en el paso 1.
INCLUDE FULL-TEXT SEARCH
Habilita la posibilidad de realizar búsquedas de texto sobre todos los documentos
que conforman el CHM. Esta opción no es válida si se está generando para el Web.
CUSTOM CONTENTS
Al igual que la página por defecto, también se genera un archivo de contenido. El
archivo de contenido define una estructura de árbol que permite organizar los ítems
dentro de la ayuda.
En GeneXus no hay forma de indicar como agrupar los ítems de la ayuda, así que
por defecto se genera una raíz del árbol, de la que cuelgan todos los tópicos de
ayuda. Los únicos ítems que aparecen anidados es en el caso de las variables que
poseen ayuda, en ese caso estos ítems aparecen anidados debajo de la ayuda del
objeto en el cual están definidas.
Este archivo de contenido puede editarse con el HTML HELP Workshop y de esta
forma crear un árbol mejor organizado personalizado. Si ese archivo es salvado con
otro nombre, puede utilizarse en esta opción en vez de generar el archivo por
defecto.
107
CUSTOM INDEX
Idem al archivo de contenido, pero para el archivo de definición del índice.
En el caso del archivo de índice, puede utilizarse el HTML HELP Workshop para
darle un orden alfabético a los ítems.
Paso 3
Compilación de la ayuda.
Este paso solo es valido válido si se genera la ayuda en formato CHM, en caso de
generar HTML, el proceso termina en el paso 2.
El HTML Help Workshop presenta una herramienta para la edición de los archivos
anteriormente descritos (cuya interfaz es la siguiente figura).Se abre el HTML Help
WorkShop para compilar la ayuda generada.
Se inicia el proyecto en el que se muestran todos los archivos que se incluyen así
como la configuración del mismo.
Se debe compilar el proyecto por medio del botón o la opción Compile del ítem
File del menú. Esto genera un archivo llamado APPHLP.CHM en el directorio del
modelo.
108
Consideraciones generales
• La ayuda se define a nivel de modelo, prototipo/producción.
• Cada vez que se genera la ayuda, se sobrescriben TODOS los archivos htm
(aunque no hayan sido modificados).
• No se borran archivos HTM. Si se renombran objetos/atributos/variables,
quedan creados los documentos con los nombres anteriores.
• Los documentos HHP, HHC, HHK se sobrescriben si son default (es decir, si
no son personalizados).
• Existe un documento con ciertos TIPS sobre el HTML Help Workshop, como
son agregar botones, poder visualizar un CHM desde un browser, etc.
• En el caso de procedimientos y reportes con protocolo SOAP, la ayuda es
anexada en el WSDL del mismo, mas detalles en la documentación de SOAP
Para incluir ayuda en una aplicación Web, debemos generar la misma como HTML,
ya que los browser por defecto no pueden interpretar el formato CHM.
Para indicar el directorio donde se ubican los archivos de Ayuda (HTM) se creó la
preferencia del modelo Help Files Base URL, bajo el grupo Web Information.
En dicho directorio, que puede indicarse absoluto o relativo, se deben colocar los
109
archivos de ayuda generados en formato HTM correspondiente a cada objeto (no se
tiene en cuenta la ayuda a nivel de variables/atributos)
La ayuda se maneja a nivel de JavaScript, por lo que se debe tener en el directorio
de la aplicación (o de archivos estáticos en el caso de Java) el JavaScript
gx_help.js .
Help Mode
Esta preferencia define que tipo de ayuda van a utilizar las aplicaciones, es
independiente de cómo se realice la ayuda.
110
En el caso de tener esta última seleccionada se habilita la siguiente
preferencia:
Introducción
Al definir atributos, variables o dominios, se permite agregarles tanto sea ayuda
como documentación HTML, con este fin existen opciones de edición de formato
HTML en el dialogo de definición de los mismos.
Alcance
Lenguajes: Java – Visual Basic – Visual Fox Pro – C/SQL –C#
Interfaces: Win - Web
Descripción
Al definir un atributo, dominio o variable, en los TAB page Help y Documentation se
encuentran opciones de edición del formato HTML.
111
Opciones de edición
1. Tipo de fuente
2. Tamaño de la fuente
Los valores válidos son del 1 al 7, el tamaño real que se aplica a la fuente para
cada uno de estos valores está definido por el Internet Explorer.
3. Formato de párrafo
112
4. Negrita, Itálica y Subrayado
5. Color
9. Visualización de detalles
Shortcuts
1. Selección de todo el documento (Ctrl + A)
2. Copiar (Ctrl + C)
3. Pegado (Ctrl + V)
4. Cortar (Ctrl + X)
5. Búsqueda de texto (Ctrl + F)
6. Deshacer (Ctrl + Z)
7. Rehacer (Ctrl + Y)
8. Negrita (Ctrl + N)
9. Itálica (Ctrl + I)
113
10. Subrayado (Ctrl + U)
11. Borrar (Supr or Delete)
114
Tipos de Datos
Introducción
El objetivo del tipo de datos DBConnection es permitir que las opciones de
configuración para las conexiones ODBC a la base de datos puedan ser
determinadas en tiempo de ejecución.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Reportes, Procedimientos.
Lenguajes: Visual Basic – Visual Fox – C/SQL.
Interfaces: Web Form, Win Form.
115
Descripción
Para poder modificar las opciones de configuración de los diferentes datastores en
tiempo de ejecución desde un objeto GeneXus, se debe definir una variable del
tipo de datos DBConnection y luego invocar a los métodos y propiedades
necesarios.
Propiedades:
DatastoreName
&MyConn = GetDatastore(“Default)
ODBCDatasourceName
ODBCFileDatasourceName
ODBCDriverName
UserName
UserPassword
116
ConnectionData
ShowPrompt
ErrCode
ErrDescription
Métodos:
Connect()
Disconnect()
117
generado con la preference "Connect at first request" y la
conexión aun no se hizo.
Códigos de Error:
0 No Error No hubo error.
1 Unknown Error Error no conocido, puede ocurrir cuando
se pide la descripción de un código de
error que no existe.
2 No GeneXus Datastore Se uso un método o propiedad sobre
attached una variable que no tiene asociado un
datastore. Se soluciona asignando
previamente la propiedad
DatastoreName.
3 Internal Error: Function El método o propiedad recibió un error
call failed comunicando un valor al acceso a datos.
Normalmente se debe a un valor de
parámetro no válido o fuera de rango.
Ejemplo
A continuación se detalla un ejemplo de utilización en un objeto GeneXus:
Variables
Comienza Fuente GX
&MyConnection = GetDatastore("default")
&MyConnection.Disconnect
&MyConnection.UserName = "Administrador"
&MyConnection.Password = "Adm!Password"
&MyConnection.ShowPrompt = 2
&MyConnection.Connect
Fin Fuente GX
118
Consideraciones generales
Introducción
WebWrapper es un nuevo tipo de datos de GeneXus que permite encapsular la
ejecución de los objetos Web (el código HTML generado). En particular permite
enviar el contenido de un Web Panel por mail.
Alcance
- Objetos: Transacciones, Work Panel, Web Panel, Procedimientos
- Lenguajes: Java - Visual Basic – C/SQL – C#
- Interfaces: Web, Win
Descripción
Para poder enviar el contenido de un Web Panel vía mail desde un objeto GeneXus
es necesario definir una variable de tipo WebWrapper, para luego aplicar los
métodos y propiedades necesarios.
La idea es capturar el contenido de un Web Panel en su código HTML, y enviar este
vía 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 código del Web Panel.
119
Propiedades:
Object
Objeto Web a encapsular en la variable de tipo WebWrapper
Metodos:
GetResponse
Consideraciones Generales
Los objetos Web Panel de GeneXus, no son estáticos, por este motivo al enviarlos
vía mail, en realidad se está enviando una imagen estática. Por lo tanto cualquier
evento que se produzca en el Web Panel que realice un post al servidor ( por
ejemplo hacer click en un botón, disparar un procedimiento, etc) producirá que se
abra el web panel en el browser, en la dirección especificada en la propiedad
BaseURL.
120
En Outlook XP el comportamiento es el siguiente: el POST lo hace el propio Outlook
(no se abre un browser para hacer el POST). Luego se abre un browser haciendo un
GET de la página para mostrarla. Pero dicho GET se hace solamente si no había una
redirección en el evento que ejecutó el POST. (De todas formas, el evento se ejecuta
siempre).
Por ejemplo, si se tiene un evento asociado a un botón que graba algo en la base de
datos y asigna cierto valor a una variable que está en el form. En Outlook 2000 y
Outlook Express, al apretar dicho botón en el mensaje se ejecutará el evento, por lo
que se hará el cambio a la base de datos, y se abrirá un browser donde se verá en el
form la variable con el valor que se le asignó en el evento. En Outlook XP se
ejecutará el evento, haciendo el cambio en la base de datos, pero el form de
respuesta nunca se mostrará. Luego se abrirá un browser donde se desplegará el
form SIN MODIFICAR LA VARIABLE.
Otro ejemplo: el evento asociado al botón modifica la base de datos y hace un call a
otro webpanel. En Outlook 2000 y Outlook XP, al apretar el botón se hace la
modificación a la base de datos y se abre un browser donde se muestra el Web Panel
llamado. En Outlook XP se hace la modificación 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 programación 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 tendría en el evento
Refresh algo así:
Event Refresh
if base de datos fue modificada
webcomponent.object = create( HGracias, pars...)
else
webcomponent.object = create( HMailForm, pars...)
endif
End Event
• El objeto Web que se crea para enviar por mail por medio de la función
Create no puede ser main, si puede ser un WebComponent.
• La propiedad BaseUrl debe estar después de la función Create.
121
Consideraciones específicas del generador Visual
Basic
En caso de tener en el Web Panel que se envía como Web Wrapper Link o
Embedded Pages a objetos GeneXus del mismo modelo, se debe indicar la
preferencia del objeto “Generation Mode” en Smart Static Panel.
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 parámetros al
Hnotify. También tiene entre sus atributos secundarios a CliNom, con el nombre del
cliente, y CliMail, con la dirección de correo el electrónico 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
Introducción
WebSession es un nuevo tipo de datos de GeneXus que permite almacenar datos
en una sesión de usuario del servidor Web. De esta manera se pueden tener
variables globales, accesibles mientras la sesión esté activa.
Alcance
- Objetos: Transacciones, Web Panel, Procedimientos
- Lenguajes: Java - Visual Basic - C#
- Interfaces: Web
Descripción
Los servidores Web permiten manejar el concepto de sesión. Una sesión se
identifica por una clave única, que se mantiene mientras el usuario continúe en el
sitio Web.
122
El objeto WebSession permite almacenar información que será visible desde
cualquier objeto Web dentro de la sesión 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 métodos y propiedades adecuados.
Propiedades:
Id
Metodos:
Set(key, value)
Permite hacer una entrada en la sesión 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 sesión se guarda en una cookie en el cliente, aunque esto es
transparente para el programador.
123
• La validez de la Websession es similar a la validez de las cookies que solo
valen por la sesión. Esto quiere decir que si se abre una instancia nueva del
browser, se pierde la sesión, pero si abro en una ventana nueva se mantiene.
• Los datos y el ID de una sesión 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 sesión
Ejemplos
For each
Where UsrNom = &User
Where UsrPsw = &Password
&Session.Set(“Name”, UsrNombre)
Call (HWelcome)
When none
Return
//Usuario no valido
endfor
124
De esta manera validamos el usuario con la base de datos y en caso de los valores
correspondan guardamos el nombre del usuario en la sesión y vamos a un Web
Panel de bienvenida (HWelcome) .
Luego en el Web Panel Welcome definir en el evento Start:
&UsrNombre = &session.Get(“Name”)
If Trim(&UsrNombre)=””
Return ///Sesión no valida
Else
TX.Caption = “Bienvenido “+ &UsrNombre + “a nuestro sitio!”
Endif
Introducción
El objetivo del tipo de datos XMLWriter es proveer la posibilidad de grabar archivos
XML de un modo más sencillo que las funciones incluidas en versiones anteriores. El
documento XML contiene una introducción a dicho lenguaje.
Se recomienda leer también el documento XMLReader.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Reportes, Procedimientos.
Lenguajes: Java – Visual Basic – Visual Fox – C/SQL – C#.
Interfaces: Web Form, Win Form.
Descripción
Para poder crear un archivo XML desde un objeto GeneXus, se debe definir una
variable de un nuevo tipo de datos denominado XmlWriter (xmlwrt) y luego invocar
a los métodos necesarios para crear los nodos que lo componen.
Métodos:
MÉTODOS BÁSICOS:
Open([FileName])
125
“standard output”. En caso de ser un objeto web se genera
en el response. (Funciona con CGI, ISAPI WebClasses y
Servlets).
FileName – Character
OpenToString()
WriteStartElement(<ElementName>)
<ElementName> - Character
WriteElement(<ValueName>, <ElementValue>)
<ValueName> - Character
<ElementValue> - Character
WriteText(<Value>)
<Value> - Character
WriteRawText(<Value>)
<Value> - Character
126
WriteAttribute(<AttriName>, <AttriValue>)
<AttriName> - Character
<AttriValue> - Character
WriteEndElement()
Close()
Cierra el documento.
OTROS MÉTODOS:
WriteComment(<Comment>)
Ejemplo:
WriteComment(‘Comentario’) genera lo siguiente:
<!— Comentario -->
<Comment> - Character
WriteEntityReference(<Entity>)
Ejemplo:
WriteEntityReference(‘Entidad’) genera lo siguiente:
&Entidad;
<Entity> - Character
WriteCData(<DataValue>)
Ejemplo:
127
WriteCData(‘Value’) genera lo siguiente:
<![CDATA[value]]>
<DataValue> - Character
WriteProcessingInstruction(<Action>, <Value>)
Ejemplo:
WriteProcessingInstruction(‘play’, ‘sound = “Hello.wav”’)
genera lo siguiente:
<? Play sound=”Hello.wav” ?>
<Action> - Character
<Value > - Character
WriteStartDocument([StandAlone])
Ejemplo:
WriteStartDocument() genera lo siguiente:
<?xml version=”1.0” enconding=”ISO-8859-1” ?>
WriteDocType(<DocName> [,SubSet])
Ejemplo:
WriteDocType(‘<book>’, ‘<!ENTITY ge “entity”>’) genera lo
siguiente:
<!DOCTYPE <book> [<!ENTITY ge “entity”>]>
<DocName> - Character
SubSet – Character
WriteDocTypeSystem(<DocName>,<uri> [,SunSet])
128
Escribe la declaración DOCTYPE del documento XML con una
declaración de tipo SYSTEM. Si se incluye un SubSet se ingresa entre
corchetes al final de la declaración.
Ejemplo:
WriteDocTypeSystem(‘<book>’, ‘file.dtd’) genera lo
siguiente: <!DOCTYPE <book> SYSTEM “file.dtd”>
<DocName> - Character
<uri> - Character
SubSet – Character
Ejemplo:
WriteDocTypePublic(‘<book>’,‘Id’,
‘http://www.ser.com/dtd’) genera lo siguiente:
<!DOCTYPE <book> PUBLIC “Id”
“http://www.ser.com/dtd”>
<DocName> - Character
<PubId> - Character
<uri> - Character
Subset - Character
Propiedades:
Indentation
Define cuantos caracteres se utilizan para indentar el código generado. Por
defecto es 2.
IndentChar
Define el carácter que se utiliza para indentar el código generado. Por
defecto se utiliza un espacio en blanco.
ErrCode
Retorna un valor mayor que cero en caso de haber ocurrido un error durante
la generación del documento XML.
ErrDescription
Contiene la descripción del error ocurrido cuando ErrCode tiene un valor
distinto de cero.
ResultingString
Permite consultar el valor del documento XML que se encuentra en un buffer
interno cuando el documento se creó a partir del método OpenToString().
129
El documento retornado puede ser incompleto si se invoca a la propiedad
antes de la ejecución del método close()
MÉTODOS:
<LocalName> - Character
Prefix - Character
NameSpaceURI - Character
Ejemplo:
WriteNSElement(‘Precio’, ’20.5’, ‘http://www.genexus.com’)
genera lo siguiente:
<prefijo:Precio>20.5</prefijo:Precio>
o
<Precio xmlns=” http://www.genexus.com”>20.5</Precio>
<LocalName> - Character
NameSpaceURI - Character
<Value > - Character
WriteAttribute(<LocalName>, <Value>)
130
prefijo correspondiente a una determinada URI.
&writer.Open(‘ejemplo.xml’)
&writer.WriteNSStartElement(‘a’)
&writer.WriteAttribute(‘xmlns:p1’, ’http://www.artech.com’)
&writer.WriteAttribute(‘xmlns’, ‘http://defecto.com’)
&writer.WriteAttribute(‘att’, ‘a1’)
&writer.WriteNSElement(‘b’, ’http://www.artech.com’)
&writer.WriteAttribute(‘att’, ‘a1’)
&writer.WriteAttribute(‘p1:att2’, ‘a2’)
&writer.WriteNSElement(‘b’, ’http://www.genexus.com’)
&writer.WriteAttribute(‘xmlns:p1’,’http://www.genexus.com’)
&writer.WriteAttribute(‘xmlns:p2’,’http://www.artech.com/segundo’)
&writer.WriteAttribute(‘p2:att1’, ‘a1’)
&writer.WriteEndElement()
&writer.Close()
<a
xmlns:p1="http://www.artech.com"
xmlns="http://defecto.com"
att="a1">
<p1:b
att1="a1"
p1:att2="a2"
/>
<p1:b xmlns:p1="http://www.genexus.com"
xmlns:p2="http://www.artech.com/segundo"
p2:att1="a1"
/>
</a>
Ejemplo
El siguiente procedimiento genera un archivo llamado Reunion.xml que contiene
datos de una reunión, indicando que integrantes participaron de la misma, y cuales
son las tareas de cada uno.
for each
&filexml.open('Reunion.xml')
&filexml.WriteStartDocument()
&filexml.WriteStartElement('REUNION')
&filexml.WriteAttribute('Fecha', dtoc(ReuFch) )
131
&filexml.WriteElement('FECHA', dtoc(ReuFch) )
&filexml.WriteComment('Descrpción de la reunión')
&filexml.WriteCData(ReuDsc )
&filexml.WriteStartElement('INTEGRANTES')
for each
&filexml.WriteElement('INTEGRANTE', ReuPerNom )
endfor
&filexml.WriteEndElement()
&filexml.WriteStartElement('TAREAS')
for each
&filexml.WriteStartElement('TAREA')
&filexml.WriteElement('RESPONSABLE', ReuTarPerNom)
&filexml.WriteCData(ReuTarDsc )
&filexml.WriteEndElement()
endfor
&filexml.WriteEndElement()
&filexml.WriteEndElement()
&filexml.Close()
endfor
132
</TAREAS>
</REUNION>
133
Glosario
Las siguientes definiciones fueron extraídas de “Extensible Markup Language (XML)
1.0 (Second Edition)”; por más información referirse a
http://www.w3.org/TR/2000/REC-xml-20001006 ; y para el caso de los
Namespaces referirse a http://www.w3.org/TR/1999/REC-xml-names-19990114/
• CDATA sections may occur anywhere character data may occur; they are
used to escape blocks of text containing characters which would otherwise
be recognized as markup. CDATA sections begin with the string "<![CDATA["
and end with the string "]]>".
134
associated document type declaration and if the document complies with the
constraints expressed in it.
The XML document type declaration contains or points to markup
declarations that provide a grammar for a class of documents. This grammar
is known as a document type definition, or DTD. The document type
declaration can point to an external subset (a special kind of external entity)
containing markup declarations, or can contain the markup declarations
directly in an internal subset, or can do both. The DTD for a document
consists of both subsets taken together.
Introducción
El objetivo del tipo de datos XMLReader es proveer la posibilidad de leer el
contenido de los archivos XML. El documento XML contiene una introducción a dicho
lenguaje.
Se recomienda leer también el documento XMLWriter.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Reportes, Procedimientos.
Lenguajes: Java – Visual Basic – Visual Fox – C/SQL – C#.
Interfaces: Web Form, Win Form.
Descripción
Para poder leer el contenido de un archivo XML desde un objeto GeneXus, se debe
definir una variable de un nuevo tipo de datos denominado XmlReader y luego
invocar a los métodos y propiedades necesarios para obtener la información de los
nodos que lo componen.
La idea básica del funcionamiento es la siguiente: existe un método Read() que se
comporta a manera de cursor avanzando al siguiente nodo del archivo, luego
utilizando ciertas propiedades como por ejemplo Name y Value se puede obtener
los datos del nodo, en este caso el nombre y el valor del mismo. De esta forma
utilizando el método Read() se “navega” a lo largo del documento en forma
secuencial obteniendo los distintos nodos del mismo.
Métodos:
MÉTODOS BÁSICOS:
135
Open(<FileName>)
<FileName> – Character
OpenFromString(<DocXML>)
Read()
ReadType(<NodeTypeConstraint> [,NameConstraint])
<NodeTypeConstraint> – Character
NameConstraint – Character
GetAttributeByIndex(<Index>)
<Index> – Integer
136
GetAttributeByName(<Name>)
<Name> – Character
ExistsAttribute(<Name>)
<Name> – Character
Close()
Cierra el documento.
OTROS MÉTODOS:
SetDocEncoding (<Encoding>)
<Enconding> - Character
SetNodeEncoding(<Encoding>)
137
<Enconding> - Character
Skip()
Permite saltear un elemento completo con todos sus hijos.
Solo es válido para nodos de tipo Element.
ReadRawXML()
Permite obtener texto XML plano a partir del inicio de un elemento.
Solo es válido para nodos de tipo Element.
AddSchema(<URI>, [Namespace])
Indica que se va a utilizar el “schema” de la <URI> para
validar el XML del [Namespace] indicado.
Si no se indica [Namespace], se toma el del atributo
targetNamespace del esquema.
Lo indicado en este método tiene prioridad sobre el atributo
schemaLocation del documento XML (en caso de que exista).
Para utilizar este método hay que indicar en la propiedad
ValidationType que se realice validación por esquema o automática.
<URI> – Character
Namespace – Character
Propiedades:
PROPIEDADES BÁSICAS
Nodetype
Retorna el tipo de nodo actual obtenido por el método Read o ReadType.
Los valores posibles son:
1- Element
2- EndTag
4- Text
8- Comment
16 - WhiteSpace
32 - Cdata
64 - ProcessingInstruction
128 - DocumentTypeElementType
EndTagType
TextType
CommentType
WhiteSpaceType
CDataType
ProcessingInstructionType
DoctypeType
Estas propiedades contienen valores constantes que pueden utilizarse para
comparar el resultado de la propiedad NodeType o con el método
ReadType
Name
Retorna el nombre del nodo actual obtenido por el método Read o
138
ReadType.
Solo es válido para nodos de tipo Element y EndTag.
Value
Retorna el valor del nodo actual obtenido por el método Read o ReadType.
Solo es válido para los nodos de tipo Text, Comment, ProcessingInstruction,
DocumentType y Element
IsSimple
Indica si el nodo actual obtenido por el método Read o ReadType responde a
una estructura del tipo <Elemento>Valor</Elemento>
AttributeCount
Retorna la cantidad de atributos que posee el nodo actual obtenido por el
método Read o ReadType.
Solo es válido para nodos de tipo Element.
EOF
Retorna si se alcanzo el final del docuemnto.
ErrCode
Retorna un valor mayor que cero en caso de haber ocurrido un error durante
el procesamiento de un documento XML.
ErrLineNumber; ErrLinePos
Retornan el numero de linea y posición dentro de la misma respectivamente
en caso de que ErrCode sea distinto de cero.
ErrDescription
Retorna la descripción del error en caso de que ErrCode sea distinto de cero.
OTRAS PROPIEDADES
ReadExternalEntities
Esta propiedad booleana indica si deben leerse las entidades externas
parseadas que forman parte del documento XML que se esté procesando
(esto incluye el subconjunto externo del DTD). Si la lectura está habilitada,
el objeto XMLReader leerá y procesará en forma transparente para el
usuario toda referencia a archivos o URLs externas que sean incluidas por el
documento. En caso contrario, las referencias a entidades externas son
ignoradas.
RemoveWhiteSpaces
Esta propiedad booleana indica si deben eliminarse los espacios en blanco,
tabuladores y finales de línea del inicio y fin del valor de un nodo de tipo
TEXT o ELEMENT.
El valor por defecto es TRUE.
RemoveWhiteNodes
Esta propiedad booleana indica si deben pasarse por alto los nodos de tipo
WhiteSpace al procesar un documento.
El valor por defecto es TRUE.
139
SimpleElements
Esta propiedad determina si los elementos con una estructura simple como
la siguiente
<elemento>valor</elemento>
o
<elemento/>
son procesados como un único nodo de tipo Element
El valor por defecto es TRUE.
ValidationType
Esta propiedad determina como se va a validar el XML leído.
Los valores posibles son:
• 0 – No se realiza validación
• 1 – Validación automática
• 2 – Validación por medio de DTD
• 3 – Validación por medio de un “Schema”
• 4 – Validación por medio de XDR
Cuando se elige validación automática el comportamiento es el siguiente
(extraído de la documentación de .NET):
140
MÉTODOS:
Los siguientes métodos retornan los distintos componentes del nombre de
un atributo indicado por <Index>.
Solo son válidos para nodos de tipo Element.
Las posiciones se numeran desde 1.
GetAttributeName(<Index>)
GetAttributePrefix(<Index>)
GetAttributeLocalName(<Index>)
GetAttributeURI(<Index>)
<Index> - Integer
PROPIEDADES
Las siguientes propiedades sólo son válidas para nodos de tipo Element y
EndTag.
Name
Retorna el nombre completo prefijo:nombrelocal
Prefix
Retorna el prefijo que representa al name space del nombre
LocalName
Retorna el nombre sin el prefijo que representa al name space.
NameSpaceURI
Retorna el URI usado para identificar al name space.
Entity references
Por defecto, tanto las entidades internas como externas son procesadas
automáticamente reemplazando las referencias por sus valores. El procesamiento
de las externas sin embargo puede ser desactivado usando la propiedad
ReadExternalEntities.
Se dispone además de las siguientes funcionalidades:
MÉTODOS
Los siguientes métodos permiten acceder a la notación y entidad
referenciadas por un atributo de tipo ENTITY.
El atributo puede especificarse por medio de su posición en el texto o por su
nombre y no se verifica que sea de tipo ENTITY. Si ninguna declaración fue
141
hecha en el DTD del documento para el valor atributo se devuelve una
cadena vacía.
Solo son válidos para nodos de tipo Element.
Las posiciones se numeran desde 1.
GetAttEntityValueByIndex(<Index>)
GetAttEntityValueByName(<Name>)
GetAttEntityNotationByIndex(<Index>)
GetAttEntityNotationByName(<Name>)
<Index> - Integer
<Name> - Character
Ejemplo
Se tiene el siguiente documento XML, llamado Reunion.xml
142
</TAREAS>
</REUNION>
&readfile.open(‘Reunion.xml’ )
&readfile.ReadType(1, 'INTEGRANTES')
&readfile.read()
do while &readfile.name <> 'INTEGRANTES'
&Integrante = &readfile.value
&readfile.read()
enddo
&readfile.close()
&readfile.open(‘Reunion.xml’)
&exito = &readfile.ReadType(1, 'RESPONSABLE')
do while &readfile.value <> &Integrante
&exito= &readfile.ReadType(1, 'RESPONSABLE')
If &exito = 0
Exit
Endif
enddo
If &exito <> 0
&readfile.read()
&tareas = &readfile.value
else
&tareas = Nullvalue(&tareas )
Endif
&readfile.close()
Introducción
La finalidad de este nuevo tipo de datos es unificar las funciones de interacción con
la generación de planillas Excel para los distintos lenguajes generados.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Procedimientos, Reportes
Lenguajes: Java, Visual Basic , Visual FoxPro
Interface: Win, Web
143
Descripción
Para utilizar esta nueva funcionalidad se creó el tipo de datos llamado
ExcelDocument que permite, a través de sus propiedades y métodos generar y
manejar planillas de Microsoft Excel.
ExcelCells
Las propiedades y métodos disponibles para este tipo de datos son los siguientes:
PROPIEDADES
Bold
Especifica si las celdas se muestran en negrita (1) o no (0).
Sintaxis: &ExcelDocument.Cells(…).Bold
Color
Especifica el color de las celdas.
Sintaxis: &ExcelDocument.Cells(…).Color
Si se especifica un valor positivo se tomará dicho valor como índice de color de Excel. En
cambio, si se especifica un valor negativo (excepto –1), se tomará su valor absoluto como
número de color en el esquema RGB (es decir, como un valor retornado por la función RGB).
Si se especifica el valor –1, se toma el color por defecto definido en Excel.
144
Date
Valor de las celdas en formato de fecha y hora.
Sintaxis: &ExcelDocument.Cells(…).Date
Font
Especifica la fuente utilizada para desplegar el valor de las celdas.
Sintaxis: &ExcelDocument.Cells(…).Font
Italic
Especifica si las celdas se muestran en itálica (1) o no (0).
Sintaxis: &ExcelDocument.Cells(…).Italic
Number
Valor de las celdas en formato numérico.
Sintaxis: &ExcelDocument.Cells(…).Number
Size
Especifica el tamaño de la fuente utilizada para desplegar el valor de las celdas.
Sintaxis: &ExcelDocument.Cells(…).Size
Text
Valor de las celdas en formato de texto.
Sintaxis: &ExcelDocument.Cells(…).Text
145
devolverá la cadena vacía.
Type
Devuelve el tipo del valor de una celda determinada.
Sintaxis: &ExcelDocument.Cells(…).Type
Underline
Especifica si las celdas se muestran subrayadas (1) o no (0).
Sintaxis: &ExcelDocument.Cells(…).Underline
ExcelDocument
Las propiedades y métodos disponibles para este tipo de datos son los siguientes:
146
Hide (ninguno)
Open FileName Carácter
Print Preview Numérico
RenameSheet SheetName Carácter
RunMacro MacroName Carácter
Par1 … Par30 (Cualquiera)
Save (ninguno)
SelectSheet SheetName Carácter
Show (ninguno)
Unbind (ninguno) Numérico
PROPIEDADES
AutoFit
Ajustar automáticamente o no el ancho de las columnas.
Sintaxis: &ExcelDocument.AutoFit
Delimiter
Separador de campos a utilizar al abrir archivos de texto.
Sintaxis: &ExcelDocument.Delimiter
ErrCode
Código de error de la última operación.
Sintaxis: &ExcelDocument.ErrCode
ErrDescription
Mensaje de error de la última operación.
Sintaxis: &ExcelDocument.ErrDescription
ErrDisplay
Desplegar o no mensajes de error.
147
Sintaxis: &ExcelDocument.ErrDisplay
MacroReturnText
Ultimo valor de tipo carácter devuelto por un llamado a una macro mediante el
método RunMacro.
Sintaxis: &WordDocument.MacroReturnText
Nota:
- Esta propiedad no está disponible para el generador Java.
MacroReturnNumber
Ultimo valor numérico devuelto por un llamado a una macro mediante el método
RunMacro.
Sintaxis: &WordDocument.MacroReturnNumber
Nota:
- Esta propiedad no está disponible para el generador Java.
MacroReturnDate
Ultimo valor de tipo fecha devuelto por un llamado a una macro mediante el
método RunMacro.
Sintaxis: &WordDocument.MacroReturnDate
Nota:
- Esta propiedad no está disponible para el generador Java.
ReadOnly
Abrir el próximo documento como sólo lectura.
Sintaxis: &ExcelDocument.ReadOnly
Template
Nombre del template a utilizar para documentos nuevos.
148
Sintaxis: &ExcelDocument.Template
Indica el camino y el nombre del archivo que se que se utilizará como Template en
las próximas llamadas al método Open con un nombre de archivo no existente.
El valor por defecto es la cadena vacía. En este caso se utilizará el template
por defecto.
El tipo de archivo puede ser cualquiera permitido por Excel para utilizarlo
como Template. Si es el string vacío, se usará el template por defecto. Por
defecto, no hay template asignado y por lo tanto se utiliza el template por
defecto.
MÉTODOS
Cells
Devuelve una celda o un conjunto de celdas.
Devuelve un objeto ExcelCells con las celdas que componen el área que comienza
en la fila Row y columna Column y tiene Height celdas de alto y Width celdas de
ancho.
Si no se especifican los parámetros Height y Width se devolverá solamente la celda
ubicada en la fila Row y columna Column
Clear
Borra el contenido y el formato de todas las celdas de la hoja activa.
Sintaxis: &ExcelDocument.Clear()
Close
Salva y cierra el documento.
Sintaxis: &ExcelDocument.Close()
Hide
Oculta el documento.
Sintaxis: &ExcelDocument.Hide()
149
Open
Abre el documento especificado.
Sintaxis: &ExcelDocument.Open(FileName)
Print
Imprime el documento en la impresora por defecto.
Sintaxis: &ExcelDocument.Print([Preview])
Nota:
- Para poder utilizar este método se debe configurar la preferencia “Functions
= Allow non standard functions” en diseño y prototipo.
RenameSheet
Renombra la hoja activa al nombre especificado.
Sintaxis: &ExcelDocument.RenameSheet(SheetName)
RunMacro
Ejecuta una macro contenida en el documento con los parámetros que se
especifiquen.
Notas:
• Los parámetros son sólo de entrada. Si la macro llamada devuelve
valores, éstos quedarán almacenado en las propiedades
MacroReturnText, MacroReturnNumber y MacroReturnDate, dependiendo
de su tipo.
• Hay un máximo de 30 parámetros, esto es una limitación de Word.
• Esta función no está disponible para el generador Java.
• Si se utiliza este método con Office 97, no es posible utilizar
parámetros, esto es una limitación de Office 97. Por esta razón
tampoco es posible invocar las propiedades MacroReturnText,
MacroReturnNumber y MacroReturnDate en este caso.
Save
Guarda el documento a disco.
150
Sintaxis: &ExcelDocument.Save()
SelectSheet
Cambia la hoja activa a la especificada.
Sintaxis: &ExcelDocument.SelectSheet(SheetName)
Show
Muestra el documento en pantalla.
Sintaxis: &ExcelDocument.Show()
Unbind
Permite dejar abierta la planilla Excel, luego de finalizar la aplicación.
Sintaxis: &ExcelDocument.Unbind()
Este método es útil si se desea que una planilla permanezca abierta luego de que
se pierde de alcance el objeto ExcelDocument, incluso luego de finalizada la
aplicación.
Al liberar una planilla se pierde por completo la referencia entre el objeto
ExcelDocument y el documento abierto. Las operaciones sobre el objeto
ExcelDocument no afectan más al documento. De hecho, el objeto ExcelDocument
se comporta como si no tuviera un documento abierto hasta que no se llame
nuevamanete al método Open.
Código Mensaje
0 Ok
2 Workbook no longer valid (sucede cuando un libro que
fue abierto desde un programa es cerrado a mano por el
usuario).
3 Application no longer valid (sucede cuando Excel es
cerrado a mano por el usuario).
4 Invalid template
5 Invalid worksheet name
6 Invalid font properties
7 Invalid cell value
8 Invalid cell coordinates
9 Invalid file name
10 Could not open file
11 Error running macro
12 Could not save file
151
Consideraciones Generales
- Los métodos descritos anteriormente fueron implementados de forma tal
que devuelven (como si fueran funciones) el código de error, por lo que es
posible llamarlos como funciones.
Por ejemplo:
&Err = &ExcelDocument.Open(Archivo)
Introducción
La finalidad de este nuevo tipo de datos es unificar las funciones de interacción con
la generación de documentos Word para los distintos lenguajes generados.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Procedimientos, Reportes
Lenguajes: Java, Visual Basic , Visual FoxPro
Interface: Win, Web
Descripción
Para utilizar esta nueva funcionalidad se creó el tipo de datos llamado
WordDocument que permite, a través de sus propiedades y métodos generar
documentos de Microsoft Word.
152
WordDocument
Las propiedades y métodos disponibles para este tipo de datos son los siguientes:
PROPIEDADES
ErrCode
Código de error de la última operación.
Sintaxis: &WordDocument.ErrCode
153
ErrDescription
Mensaje de error de la última operación.
Sintaxis: &WordDocument.ErrDescription
ErrDisplay
Desplegar o no mensajes de error.
Sintaxis: &WordDocument.ErrDisplay
MacroReturnText
Ultimo valor de tipo carácter devuelto por un llamado a una macro mediante el
método RunMacro.
Sintaxis: &WordDocument.MacroReturnText
Nota:
- Esta propiedad no está disponible para el generador Java.
MacroReturnNumber
Ultimo valor numérico devuelto por un llamado a una macro mediante el método
RunMacro.
Sintaxis: &WordDocument.MacroReturnNumber
Nota:
- Esta propiedad no está disponible para el generador Java.
MacroReturnDate
Ultimo valor de tipo fecha devuelto por un llamado a una macro mediante el
método RunMacro.
Sintaxis: &WordDocument.MacroReturnDate
Nota:
- Esta propiedad no está disponible para el generador Java.
ReadOnly
Abrir el próximo documento como sólo lectura.
154
Sintaxis: &WordDocument.ReadOnly = Valor
Template
Nombre del template a utilizar para documentos nuevos.
Sintaxis: &WordDocument.Template(Template)
Indica el camino y el nombre del archivo que se que se utilizará como Template en
las próximas llamadas al método Open con un nombre de archivo no existente.
El valor por defecto es la cadena vacía. En este caso se utilizará el template
por defecto.
Text
Texto completo del documento.
Sintaxis: &WordDocument.Text
MÉTODOS
Append
Sintaxis: &WordDocument.Append(Text)
Close
Salva y cierra el documento.
Sintaxis: &WordDocument.Close()
Hide
Oculta el documento. Si ningún documento está visible, oculta el Word.
155
Sintaxis: &WordDocument.Hide()
Open
Abre el documento especificado.
Sintaxis: &WordDocument.Open(FileName)
Print
Imprime el documento en la impresora por defecto.
Nota:
- Para poder utilizar este método se debe configurar la preferencia “Functions
= Allow non standard functions” en diseño y prototipo.
Replace
Permite sustituir todas las ocurrencias de un texto por otro.
156
minúsculas, si tiene valor 0 se sustituirán todas las
ocurrencias
Este parámetro es opcional, el comportamiento
por defecto es como si tuviera valor 0.
MatchWholeWord Numérico Si tiene valor 1 sólo se sustituirán aquellas
ocurrencias que no formen parte de otra palabra,
si tiene el valor 0 se sustituirán todas las
ocurrencias
Este parámetro es opcional, el comportamiento
por defecto es como si tuviera valor 0
Nota:
- La sustitución se realiza solo en el texto del documento, no se contempla el
texto del cabezal (Header) y el pie de página (Footer) para realizar la
sustitución.
RunMacro
Ejecuta la Macro indicada, contenida en el documento, con los parámetros que se
especifiquen.
Notas:
• Los parámetros son sólo de entrada. Si la macro llamada devuelve
valores, éstos quedarán almacenado en las propiedades
MacroReturnText, MacroReturnNumber y MacroReturnDate,
dependiendo de su tipo.
• Hay un máximo de 30 parámetros, esto es una limitación de Word.
• Esta función no está disponible para el generador Java.
• Si se utiliza este método con Office 97, no es posible utilizar
parámetros, esto es una limitación de Office 97. Por esta razón
tampoco es posible invocar las propiedades MacroReturnText,
MacroReturnNumber y MacroReturnDate en este caso.
Save
Guarda el documento Word a disco.
Sintaxis: &WordDocument.Save()
SaveAs
Guarda el documento a disco con un nuevo nombre, y opcionalmente se puede
seleccionar un nuevo tipo de archivo.
157
FileName Carácter Nuevo nombre del documento Word.
FileType Carácter Nuevo tipo de archivo que se desea generar a partir del
documento Word.
Los tipos de archivo válidos son:
DOC (Formato de Word)
RTF (Rich Text Format)
HTM (HyperText Markup/ HyperText Markup
Language)
DOT (DOC Template)
TXT (Texto)
Este parámetro es opcional, el tipo de archivo por defecto
es DOC.
DOSText Carácter En caso de especificar tipo TXT se podrá especificar si el
formato del texto a utilizar será el de DOS (valor 1) o no
(valor 0).
Este parámetro es opcional, el valor por defecto es 0.
LineBreaks Numérico En caso de especificar tipo TXT indica si se agregará un
salto de página al final de cada línea (valor 1) o no (valor
0).
Este parámetro es opcional, el valor por defecto es 0.
Show
Muestra el documento en pantalla.
Sintaxis: &WordDocument.Show()
SpellCheck
Ejecuta el corrector ortográfico en el documento.
Sintaxis: &WordDocument.SpellCheck()
Unbind
Permite dejar abierto el documento Word, luego de finalizar la aplicación.
Sintaxis: &WordDocument.Unbind()
158
Códigos y Mensajes de Error
Los valores posibles son:
Código Mensaje
0 Ok
2 Document no longer valid (sucede cuando un
documento que fue abierto desde un programa es
cerrado a mano por el usuario).
3 Application no longer valid (sucede cuando Word
es cerrado a mano por el usuario).
4 Invalid template
5 Invalid file name
6 Could not open file
7 Could not save file
8 Invalid value
9 Error running macro
10 Could not complete operation
Consideraciones Generales
- Los métodos descritos anteriormente fueron implementados de forma tal
que devuelven (como si fueran funciones) el código de error, por lo que es
posible llamarlos como funciones.
Por ejemplo:
&Err = &WordDocument.Open(Archivo)
Introducción
La finalidad de estos nuevos tipo de datos es unificar las funciones de interacción
con el envío y recepción de mensajes para los distintos lenguajes generados.
159
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Procedimientos, Reportes
Lenguajes: C/SQL (solo SMTPSession y POP3Session), Java, Visual Basic , Visual
FoxPro, C# (solo OutlookSession, SMTPSession y POP3Session)
Interface: Win, Web
Descripción
Para utilizar esta nueva funcionalidad se crearon los siguientes tipos de datos:
160
MailRecipientCollection Colección de objetos de tipo
MailRecipient.
StringCollection Colección de objetos de tipo Carácter.
OutlookSession
Las propiedades y métodos disponibles para este tipo de datos son los siguientes:
PROPIEDADES
AttachDir
Directorio de archivos adjuntos.
Sintaxis: &OutlookSession.AttachDir
Count
Cantidad de mensajes a recibir.
Sintaxis: &OutlookSession.Count
161
la cantidad de mensajes no leídos, mientras que si se abrió la carpeta especificando
que se recibirán todos los mensajes, retornará la cantidad total de mensajes.
EditWindow
Indica si se mostrará o no la ventana de edición del mensaje antes de enviarlo.
Sintaxis: &OutlookSession.EditWindow
ErrCode
Código de error de la última operación.
Sintaxis: &OutlookSession.ErrCode
ErrDescription
Mensaje de error de la última operación. La lista de mensajes se detallan en la
propiedad ErrorNumber.
Sintaxis: &OutlookSession.ErrDescription
ErrDisplay
Indica si se desplegará o no mensajes de error.
Sintaxis: &OutlookSession.ErrDisplay
NewMessages
Indica si se recibirán solamente los mensajes nuevos o todos los mensajes.
Sintaxis: &OutlookSession.NewMessages
162
El valor de esta propiedad tendrá efecto a partir del próximo llamado al
método ChangeFolder.
MÉTODOS
ChangeFolder
Cambia la carpeta desde la cual se recibirán mensajes.
Notas:
- Reglas para la correcta definición de nombres de carpetas. La notación es
similar a la utilizada en DOS y UNIX para navegar entre directorios, con
algunas excepciones.
163
Public Folders
Favorites
All Public Folders
General
Delete
Elimina del servidor el último mensaje que haya sido recibido mediante el método
Receive.
Sintaxis: &OutlookSession.Delete()
MarkAsRead
Marca como leído el último mensaje que haya sido recibido mediante el método
Receive.
Sintaxis: &OutlookSession.MarkAsRead()
Receive
Devuelve los datos del siguiente correo en la sesión actual.
Si el correo tiene archivos adjuntos y se especificó un directorio en la propiedad
AttachDir, éstos se graban a disco, de lo contrario no se guardan.
Sintaxis: &OutlookSession.Receive(Message)
Nota:
- El parámetro Message es de tipo MailMessage.
164
Send
Envía un mensaje.
Sintaxis: &OutlookSession.Send(Message)
Notas:
- El parámetro Message es de tipo MailMessage.
- Si alguna dirección de destino no puede ser resuelta, se mostrará la ventana
de edición, como si la propiedad EditWindow tuviera valor 1.
MAPISession
Las propiedades y métodos disponibles para este tipo de datos son los siguientes:
PROPIEDADES
AttachDir
Directorio de archivos adjuntos.
Sintaxis: &MAPISession.AttachDir
165
Count
Cantidad de mensajes a recibir.
Sintaxis: &MAPISession.Count
EditWindow
Indica si se mostrará o no la ventana de edición del mensaje antes de enviarlo.
Sintaxis: &MAPISession.EditWindow
ErrCode
Código de error de la última operación.
Sintaxis: &MAPISession.ErrCode
ErrDescription
Mensaje de error de la última operación. La lista de mensajes se detallan en la
propiedad ErrCode.
Sintaxis: &MAPISession.ErrDescription
ErrDisplay
Indica si se desplegará o no mensajes de error.
Sintaxis: &MAPISession.ErrDisplay
166
NewMessages
Indica si se recibirán solamente los mensajes nuevos o todos los mensajes.
Sintaxis: &MAPISession.NewMessages
Profile
Perfil a utilizar para comenzar una sesión.
Sintaxis: &MAPISession.Profile
MÉTODOS
ChangeFolder
Cambia la carpeta desde la cual se recibirán mensajes.
Sintaxis: &OutlookSession.ChangeFolder([FolderName])
Delete
Elimina del servidor el último mensaje que haya sido recibido mediante el método
Receive.
Sintaxis: &MAPISession.Delete()
167
Login
Inicia una sesión.
Sintaxis: &MAPISession.Login
Logout
Finaliza la sesión.
Sintaxis: &MAPISession.Logout
MarkAsRead
Marca como leído el último mensaje que haya sido recibido mediante el método
Receive.
Sintaxis: &MAPISession.MarkAsRead
Nota:
- Para poder utilizar esta propiedad se debe configurar la preferencia
“Functions = Allow non standard functions” en diseño y prototipo.
Receive
Devuelve los datos del siguiente correo en la sesión actual.
Si el correo tiene archivos adjuntos y se especificó un directorio en la propiedad
AttachDir, éstos se graban a disco, de lo contrario no se guardan.
Sintaxis: &MAPISession.Receive(Message)
Nota:
- El parámetro Message es de tipo MailMessage.
Send
Envía un mensaje.
Sintaxis: &MAPISession.Send(Message)
Notas:
- El parámetro Message es de tipo MailMessage.
- Si la dirección de algún destinatario no puede ser resuelta, se mostrará una
ventana de resolución de nombres que dará a elegir al usuario el
168
destinatario correcto de entre los posibles destinatarios para la dirección
especificada.
- Se fuerza el envío inmediato de mails luego de hacer un Send. Esto tiene
como consecuencia que si se utiliza conexión telefónica a Internet, se realice
el discado al llamar al método Send.
SMTPSession
Las propiedades y métodos disponibles para este tipo de datos son los siguientes:
PROPIEDADES
AttachDir
Directorio de archivos adjuntos.
Sintaxis: &SMTPSession.AttachDir
Especifica cuál será el directorio base para búsqueda de los archivos adjuntos al
mensaje (propiedad Attachments).
El valor por defecto es la cadena vacía ( “”).
Authentication
Indica si se intentará o no autentificación con el servidor.
169
utilizar. Estos valores serán tomados en cuenta en el próximo llamado al
método Login.
ErrCode
Código de error de la última operación.
Sintaxis: &SMTPSession.ErrCode
ErrDescription
Mensaje de error de la última operación. La lista de mensajes se detallan en la
propiedad ErrCode.
Sintaxis: &SMTPSession.ErrDescription
ErrDisplay
Indica si se desplegará o no mensajes de error.
Sintaxis: &SMTPSession.ErrDisplay
Nota:
- Esta propiedad no está disponible en el generador C/SQL.
Host
Dirección del servidor SMTP.
Sintaxis: &SMTPSession.Host
Password
Contraseña a utilizar para autenticarse en el servidor.
Sintaxis: &SMTPSession.Password
170
Port
Puerto del servidor SMTP en el Host.
Sintaxis: &SMTPSession.Port
Sender
Datos del emisor a incluir en los mensajes enviados.
Sintaxis: &SMTPSession.Sender
Timeout
Tiempo de espera máximo, en segundos, para esperar por una respuesta del
servidor luego de cada pedido.
Sintaxis: &SMTPSession.Timeout
UserName
Nombre de usuario a utilizar para autenticarse en el servidor.
Sintaxis: &SMTPSession.UserName
MÉTODOS
Login
Inicia una sesión con un servidor SMTP.
171
Sintaxis: &SMTPSession.Login
Logout
Finaliza la sesión con un servidor SMTP.
Sintaxis: &SMTPSession.Logout
Send
Envía un mensaje.
Sintaxis: &SMTPSession.Send(Message)
Notas:
- El parámetro Message es de tipo MailMessage.
POP3Session
Las propiedades y métodos disponibles para este tipo de datos son los siguientes:
172
PROPIEDADES
AttachDir
Directorio de archivos adjuntos.
Sintaxis: &POP3Session.AttachDir
Count
Cantidad de mensajes a recibir.
Sintaxis: &POP3Session.Count
ErrCode
Código de error de la última operación.
Sintaxis: &POP3Session.ErrCode
ErrDescription
Mensaje de error de la última operación. La lista de mensajes se detallan en la
propiedad ErrCode.
ErrDisplay
Indica si se desplegará o no mensajes de error.
Sintaxis: &POP3Session.ErrDisplay
173
El valor por defecto es 0.
Nota:
- Esta propiedad no está disponible en el generador C/SQL.
Host
Dirección del servidor POP3.
Sintaxis: &POP3Session.Host
NewMessages
Indica si se recibirán solamente los mensajes nuevos o todos los mensajes.
Sintaxis: &POP3Session.NewMessages
Password
Contraseña a utilizar para autenticarse en el servidor.
Sintaxis: &POP3Session.Password
Port
Puerto del servidor POP3 en el Host.
Sintaxis: &POP3Session.Port
Timeout
Tiempo de espera máximo, en segundos, para esperar por una respuesta del
servidor luego de cada pedido.
174
Sintaxis: &POP3Session.Timeout
UserName
Nombre de usuario a utilizar para autenticarse en el servidor.
Sintaxis: &SMTPSession.UserName
MÉTODOS
Delete
Elimina del servidor el último mensaje que haya sido recibido mediante el método
Receive.
Sintaxis: &POP3Session.Delete()
Login
Inicia una sesión con un servidor POP3.
Sintaxis: &POP3Session.Login
Logout
Finaliza la sesión con un servidor POP3.
Sintaxis: &POP3Session.Logout
Receive
Recibe un mensaje.
Sintaxis: &POP3Session.Receive(Message)
175
Nota:
- El parámetro Message es de tipo MailMessage.
MailMessage
Las propiedades disponibles para este tipo de datos son las siguientes:
PROPIEDADES
Attachments
Lista de nombres de archivos adjuntos al mensaje. Los elementos de la lista deben
se separan mediante el caracter “;”.
De no especificar una ruta completa, al enviar un mensaje los archivos adjuntos se
buscarán en el directorio especificado por la propiedad AttachDir.
Sintaxis: &Message.Attachments
Nota:
- Si se utiliza modo SMTP: En la ruta de los archivos adjuntos puede
utilizarse tanto la barra (/) como la contrabarra (\) como separador de
directorios. De esta manera se brinda compatibilidad entre los ambientes
UNIX y Windows.
BCC
Lista de destinatarios ocultos (Blind Carbon Copy) de un mensaje. Los elementos
de la lista deben separarse mediante el caracter “;” (punto y coma).
Sintaxis: &Message.BCC
CC
Lista de destinatarios secundarios (Carbon Copy) de un mensaje. Los elementos de
la lista deben separarse mediante el caracter “;”.
Sintaxis: &Message.CC
176
DateReceived
Fecha y hora en que fue recibido el mensaje por el servidor.
Sintaxis: &Message.DateReceived
DateSent
Fecha y hora en que fue enviado el mensaje.
Sintaxis: &Message.DateSent
From
Emisor del mensaje.
Sintaxis: &Message.From
HTMLText
Cuerpo del mensaje en formato HTML (HyperText Markup Language).
Sintaxis: &Message.HTMLText
Notas:
- MAPI: Esta propiedad no se soporta si se utiliza modo MAPI.
- Outlook: Si bien esta propiedad se soporta en Outlook, no es posible
manejar un mensaje con contenido en texto simple y HTML a la vez. Se
tomará como contenido definitivo el último que se asigne. Al recibir un
mensaje con contenido HTML la propiedad Text contendrá el mismo texto
que la propiedad HTMLText pero sin formato (omitiendo los tags del
lenguaje HTML).
- SMTP/POP3: Es posible manejar mensajes con contenido en texto simple
y HTML a la vez. De enviar un mensaje de este tipo, el cliente que lo reciba
mostrará siempre que pueda el contenido HTML. Si el cliente no es capaz
que manejar contenido HTML mostrará el contenido en texto simple.
Subject
Asunto del mensaje.
Sintaxis: &Message.Subject
Text
Cuerpo del mensaje en formato de texto simple.
Sintaxis: &Message.Text
To
Colección de destinatarios primarios del mensaje.
177
Sintaxis: &Message.To
MailRecipient
Las propiedades disponibles para este tipo de datos son las siguientes:
PROPIEDADES
Name
Nombre del destinatario.
Sintaxis: &Recipient.Name
Nota:
- Outlook: No es posible utilizar esta propiedad al recibir un correo para
las propiedades To, CC, Bcc y From, si se trabaja con Outlook. Esto
significa que no es posible utilizar To.name, CC.name, Bcc.name, o
From.name en modo Outlook.
Address
Dirección de correo del destinatario.
Sintaxis: &Recipient.Address
Nota:
- Outlook: No es posible utilizar esta propiedad al recibir un correo para
las propiedades To, CC, Bcc y From, si se trabaja con Outlook. Esto
significa que no es posible utilizar To.address, CC.address, Bcc.address,
From.address en modo Outlook.
MailRecipientCollection
Las propiedades y métodos disponibles para este tipo de datos son los siguientes:
178
Clear (ninguno)
Item Index Numérico
New Name Carácter
Address Carácter
PROPIEDADES
Count
Cantidad de elementos en la colección.
Sintaxis: &Message(...).Count
MÉTODOS
Add
Agrega un objeto de tipo MailRecipient a la colección.
Sintaxis: &Message(...).Add(Recipient)
Clear
Vacía la colección. Todos los elementos de la colección son eliminados.
Sintaxis: &Message(...).Clear()
Item
Devuelve un objeto de tipo MailRecipient que esté almacenado en la colección.
Sintaxis: &Message(...).Item(Index)
New
Devuelve un objeto de tipo MailRecipient que esté almacenado en la colección.
179
Crea un nuevo objeto de tipo MailRecipient dentro de la colección, en el nombre y
dirección especificados en los parámetros Name y Address respectivamente.
Si el parámetro Address es una cadena vacía, la llamada al método New es
ignorada.
StringCollection
PROPIEDADES
Count
Cantidad de elementos en la colección.
Sintaxis: &Message(...).Count
MÉTODOS
Add
Agrega un objeto de tipo MailRecipient a la colección.
Sintaxis: &Message(...).Add(String)
Clear
Vacía la colección. Todos los elementos de la colección son eliminados.
Sintaxis: &Message(...).Clear()
Item
Devuelve un objeto de tipo MailRecipient que esté almacenado en la colección.
180
Sintaxis: &Message(...).Item(Index)
181
Consideraciones Generales
- Los métodos descritos anteriormente fueron implementados de forma tal
que devuelven (como si fueran funciones) el código de error, por lo que es
posible llamarlos como funciones.
Por ejemplo:
&Err = &OutlookSession.Send(Mensaje)
Ejemplos
A continuación se presentan ejemplos de Eventos en GeneXus que permiten el
envío y recepción de mails con los diferentes tipos de datos (OutlookSession,
MAPISession y SMTPSession/POP3Session).
OutlookSession
La variables &Envio y &Recibo deben estar definidas de tipo MailMessage,
&Mensaje debe ser de tipo OutlookSession y las variables &DirTo y &DirCc deben
ser de tipo MailRecipient.
Event 'Enviar'
&DirTo.Address = ‘isidoro@cañones.com
&DirTo.Name = ‘Isidoro Cañones’
&Envio.To.Clear()
&Envio.To.Add(&DirTo)
&DirCc.Address = ‘cachorra@bazuka.com
&DirCc.Name = ‘Cachorra Bazuka’
&Envio.Cc.Clear()
&Envio.Cc.Add(&DirCc)
&Mensaje.Editwindow = 1
// Si se utiliza Outlook no es necesita realizar el login, directamente se usa el
método Send
&Mensaje.Send(&envio)
if &Mensaje.ErrCode <> 0
msg(&Mensaje.ErrDescription)
endif
EndEvent
Event 'Recibir'
&Mensaje.NewMessages = 1
&Mensaje.ChangeFolder("Inbox")
&Mensaje.Attachdir = ‘d:\archivos’
// Recibo el mensaje
182
&Mensaje.Receive(&Recibo)
&Mensaje.MarkAsRead()
&From = &Recibo.From.Address
&Sub = &Recibo.Subject
&Textohtml = &Recibo.HTMLText
EndEvent
MAPISession
La variables &Envio y &Recibo deben estar definidas de tipo MailMessage,
&Mensaje debe ser de tipo MAPISession y las variables &DirTo y &DirCc deben ser
de tipo MailRecipient.
Event 'Enviar'
&DirTo.Address = ‘isidoro@cañones.com
&DirTo.Name = ‘Isidoro Cañones’
&Envio.To.Clear()
&Envio.To.Add(&DirTo)
&DirCc.Address = ‘cachorra@bazuka.com
&DirCc.Name = ‘Cachorra Bazuka’
&Envio.Cc.Clear()
&Envio.Cc.Add(&DirCc)
&Mensaje.Login()
&Mensaje.Send(&Envio)
if &Mensaje.ErrCode <> 0
msg(&Mensaje.ErrDescription)
endif
&Mensaje.Logout()
EndEvent
Event 'Recibir'
&Mensaje.Attachdir = ‘d:\archivos’
&Mensaje.NewMessages = 1
&Mensaje.Profile = ‘Mi perfil’
&Mensaje.Login()
&Mensaje.Receive(&Recibo)
&Mensaje.MarkAsRead()
&Sub = &Recibo.Subject
&Textohtml = &Recibo.HTMLText
&From = &Recibo.From.Address
183
&Fechaenv = &Recibo.DateSent
&Fecharec = &Recibo.DateReceived
&Mensaje.Logout()
EndEvent
SMTPSession/POP3Session
La variables &Envio y &Recibo deben estar definidas de tipo MailMessage,
&MensSMTP debe ser de tipo SMTPSession y &MensPOP3 de tipo POP3Session y
las variables &DirTo y &DirCc deben ser de tipo MailRecipient.
Event 'Enviar'
&DirTo.Address = ‘isidoro@cañones.com
&DirTo.Name = ‘Isidoro Cañones’
&Envio.To.Clear()
&Envio.To.Add(&DirTo)
&DirCc.Address = ‘cachorra@bazuka.com
&DirCc.Name = ‘Cachorra Bazuka’
&Envio.Cc.Clear()
&Envio.Cc.Add(&DirCc)
&MensSMTP.Login()
&MensSMTP.Send(&envio)
if &MensSMTP.ErrCode <> 0
msg(&MensSMTP.ErrDescription)
endif
&MensSMTP.Logout()
EndEvent
Event 'Recibir'
&MensPOP3.Host = ‘Servidor POP3’
&MensPOP3.UserName = ‘Mi usuario’
&MensPOP3.Password = &contra
&MensPOP3.NewMessages = 1
&MensPOP3.Login()
&MensPOP3.Receive(&Recibo)
184
&From = &Recibo.From.Address
&Fechaenv = &Recibo.DateSent
&Fecharec = &Recibo.DateReceived
&Sub = &Recibo.Subject
&Textohtml = &Recibo.HTMLText
EndEvent
Introducción
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).
Lenguajes: Java – Visual Basic – Visual Fox– C/SQL – C#.
Interfaces: Web Form, Win Form.
Descripción
Los tres tipos de datos que se definen para interactuar con http son:
HttpClient
Permite armar un request, enviarlo a una URL y leer los resultados.
HttpResponse y HttpRequest
Permiten leer los datos del request y grabar el response. Son objetos disponibles
solo en WebProcs.
185
HttpClient
Este objeto refleja una conexión 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 conexión.
Tipo- Integer
BaseURL
Indica la URL base de los request que se hagan al host.
Tipo- String
StatusCode
Retorna el código de error HTTP.
Tipo- Integer
ReasonLine
Retorna el texto del error HTTP.
Tipo- String
ErrCode
Retorna si ocurrió algún error en algún comando, en cuyo caso retorna un
valor distinto de cero.
Tipo- Integer
ErrDescription
Retorna el menaje del error si ocurrió alguno en algún comando.
Tipo- String
Basic y Digest
Son constantes que determinan un tipo de autenticación. Se utilizan en el
método AddAuthentication.
Basic=0 : Para autentificar se envía el usuario y password sin encriptar.
Digest=1: Para autentificar se envía el usuario y password encriptados.
ProxyHost y ProxyPort
Permiten especificar un proxy http. En ambiente windows se utiliza
186
automáticamente el que esta configurado en la máquina.
ProxyHost- String
ProxyPort- Integer
MÉTODOS
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’.
Ejemplo: AddVariable(“CliCod”, &CliCod)
<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 método en la URL definida. Se pondría 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
187
<Password>- String
HttpRequest
Este objeto permite leer el request http. Puede instanciarse solo en el contexto de
un WebProc.
PROPIEDADES
Method
Retorna el método 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 porción de URL correspondiente el nombre del directorio virtual.
Tipo- String
ScriptName
Retorna el nombre del objeto con la extensión correspondiente que se esta
ejecutando, tal como aparece en la URL
Tipo- String
Referrer
Retorna la URL del llamador
Tipo-String
QueryString
Retorna la porción de la URL que está después del signo “?”; o sea los
parámetros.
Tipo- String
RemoteAddress
Devuelve la dirección del cliente.
Tipo- String
ErrCode
Retorna si ocurrió algún error en algún comando, en cuyo caso retorna un
valor distinto de cero.
Tipo- Integer
188
ErrDescrption
Retorna el menaje del error si ocurrió alguno en algún comando.
Tipo- String
MÉTODOS
GetVariable(<Variable>)
Retorna en un String el valor con el que viene cargada la
<Variable> en el post.
<Variable>- String
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ó algún error en algún comando, en cuyo caso retorna un
valor distinto de cero.
Tipo- Integer
ErrDescrption
Retorna el menaje del error si ocurrió alguno en algún 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
189
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 para enviar un XML en el body de un http request.
XMLWriter.openResponse(HttpResponse)
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 vía http, pasándole
parámetros en un XML y recibiendo los mismos también en un XML.
<parameters>
<a>valor</a>
<b>valor</b>
</parameters>
El XML que se devuelve es igual, con los valores de ‘A’ y ‘B’ modificados.
190
&writer.WriteElement("a", &A)
&writer.WriteElement("b", &B)
&writer.WriteEndElement()
&writer.close()
&reader.openResponse(&client)
&reader.read()
&reader.read()
&a = val(&reader.value)
&reader.read()
&b = val(&reader.value)
&reader.close()
&writer.openResponse(&Response)
&writer.WriteStartElement("parameters")
&writer.WriteElement("a", &A)
&writer.WriteElement("b", &B)
&writer.WriteEndElement()
&writer.close()
191
Consideraciones para el generador Java
En el caso de que se ejecute el motor de servlet en Windows, la aplicación obtendrá
automáticamente la configuración del proxy http y la lista de hosts para los que no
se debe utilizar el proxy.
192
Funciones
Funciones estándar
Introducción
A partir de la versión 7.5 de GeneXus todas funciones soportadas por GeneXus
pasan a ser funciones estándar, por más que las mismas sólo estén disponibles
para algunos generadores.
Hasta ahora si una función1 no estaba implementada para todos los generadores no
se consideraba como estándar y para poder salvarla y especificarla se debería
modificar la preferencia “Function” al valor “Allow non-standatd function on saving”
y “Allow non-standatd function when specifying” en Diseño y en
Prototipo/Producción respectivamente.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Reportes, Procedimientos.
Lenguajes: Cobol, RPG, Visual FoxPro, Visual Basic, Java, C/SQL, C#
Interfaces: Web, Win.
Descripción
Todas aquellas funciones1 que estén implementadas para algún generador de
GeneXus se denomina Funciones Estándar y las mismas se clasifican en:
Las mismas se diferencian con distintos colores en el editor GeneXus. Las Normales
aparecen en Marrón, las No Portables en Rojo y las Discontinuadas en Marrón claro.
1
Al hablar de funciones en este documento nos referimos tanto a las funciones
propiamente dichas como a las propiedades, métodos y eventos, de controles
soportados por GeneXus.
193
Funcion FileExist()
Introducción
El objetivo de esta función es permitir verificar la existencia de un archivo, en una
cierta ubicación.
Alcance
Objetos : Transacciones, WorkPanels, WebPanels, Procedimientos, Reportes
Lenguajes: C/SQL, Java, Visual Basic y Visual FoxPro
Interface: Win, Web
Descripción
Esta función recibe un string como parámetro con el camino y nombre del archivo a
verificar y retorna un 1 en caso de éxito y 0 en otro caso.
Sintaxis:
&res = FILEEXIST(&archivo)
Siendo:
- &archivo, un string con el nombre y camino del archivo
- &res, un numérico que retorna 1 en caso de éxito y 0 en caso contrario.
Ejemplo
Camino relativo:
&archivo = “misdoc\docu.doc”
&res = FILEEXIST(&archivo)
El camino relativo se toma a partir del directorio por defecto donde se encuentra el
programa. En el caso de objetos C/SQL y Java se recuerda que el directorio se
considera en el servidor de procesos y no en la estación de trabajo.
194
buscara el archivo docu.doc en el disco C del Web Server, mientras que si se utiliza
en un procedimiento VB será el disco C de la estación de trabajo.
Camino absoluto:
&archivo = “\\server\c\misdoc\docu.doc”
&res = FILEEXIST(&archivo)
Función DeleteFile
Introducción
Se implementó la función DELETEFILE, la cual permite borrar un archivo.
Alcance
Objetos: Procedimientos, Reportes, Transacciones, Web panels, Work panels
Generadores: C/SQL – JAVA – VB – VFP – C#
Interfaces: Web y Win
Descripción
Sintaxis: &var = deletefile(&filename)
Ejemplo
&filename= “c:\Temp\report.gxr”
&var=deletefile(&filename)
Introducción
A partir de la versión 7.5, se incluyen funciones que permiten escribir y leer
195
información en el registro de Windows desde GeneXus.
Alcance
Objetos: Transacciones, Workpanels, Webpanels, Procedimientos y Reportes.
Lenguajes: Visual Basic, Visual FoxPro
Descripción
Permiten tener un manejo avanzado del registro de Windows, por eso se
recomienda utilizarlas con precaución.
Algunos usos de estas funciones serían, poder guardar configuración del usuario
conectado, o preferencias de alguna aplicación. Así como también poder obtener la
ubicación del directorio temporal de la máquina, o el idioma del sistema operativo.
Funciones
WRITEREGKEY
Permite ingresar información en el registro de Windows.
READREGKEY
Permite leer información del registro de Windows.
196
Es de tipo carácter.
&String Valor almacenado en el &Path especificado.
Es de tipo carácter.
Consideraciones Generales
• No es posible grabar cualquier sección del registro de Windows, sólo se
permiten grabar valores bajo las siguientes carpetas:
HKEY_LOCAL_MACHINE\Software
HKEY_USERS\Software
HKEY_CURRENT_CONFIG\Software
Ejemplo
El siguiente ejemplo muestra el uso de estas funciones desde GeneXus.
Event Start
&path = 'HKEY_LOCAL_MACHINE\Software\Empresa'
&Value = 'C:\Program Files\Aplicacion'
EndEvent // Start
Event 'Grabar'
&Ret = WriteRegKey(&Path, &Value)
EndEvent // 'grabar'
Event 'Leer'
&String = ReadRegKey(&Path)
EndEvent // Enter
Funciones de Encriptación
Introducción
En algunos casos es necesario tener información segura en las aplicaciones no Web,
por lo que se necesita tener funciones de encriptación que puedan ser utilizadas
en cualquier objeto GeneXus.
197
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Procedimientos, Reportes
Lenguajes: C/SQL, Java, Visual Basic, Visual FoxPro, C#
Interfaces: Web, Win
Descripción
Las funciones que se implementaron son las siguientes:
GetEncryptionKey
Esta función genera una nueva clave de encriptación de hasta 32 caracteres de
largo.
Se utiliza para inicializar la encriptación.
Encrypt64
Encripta el valor recibido como parámetro, utilizando la clave indicada.
Decrypt64
Desencripta el valor recibido en el primer parámetro, utilizando la clave indicada.
198
función GetEncryptionKey().
Consideraciones generales
• Siempre se debe trabajar con claves generadas por la función
GetEncryptionKey, no se puede utilizar cualquier valor para la clave.
Las claves que se deben utilizar para la encriptación deben ser números
Hexadecimales, de un largo determinado y en lo posible aleatorias. Por esta
razón, dado que el algoritmo es público, la fortaleza de esta implementación
está en la clave por lo que se recomienda fuertemente utilizar esta función
para generar las claves, ya que garantiza un nivel de seguridad mayor.
• El valor devuelto por la función Encrypt64 es codificado en Base64. El largo
del valor devuelto es el largo del texto ajustado a un múltiplo de 16 bytes
(por ejemplo, si el texto tiene largo 1, se ajusta a largo 16), multiplicado por
4 dividido 3.
• Tener en cuenta que la clave para encriptar y desencriptar debe ser la
misma, por eso si se encripta algún parámetro y se guarda en una base de
datos por ejemplo, para ser utilizado pasado un tiempo, también se debe
guardar la clave, porque para realizar la desencriptación se debe utilizar la
misma clave.
• Las funciones están basadas en el algoritmo 'TwoFish'
(http://www.counterpane.com/twofish.html) y son las mismas que se usan
para el manejo de parámetros encriptados en los Web Panels.
Ejemplos
Estas funciones pueden ser útiles en el caso que se quiera guardar información
encriptada en la base de datos.
En este caso se pueden utilizar las funciones de la siguiente forma:
Procedimiento
.........
&Clave = GetEncryptionKey() // Genera la clave de encriptación.
&Var1 = Encrypt64(&Info, &Clave) // Devuelve la encriptación de la
información, utilizando la clave generada
anteriormente, este sería el valor que se
guarda en la base de datos.
199
Cuando se necesite el valor original de la información se debe obtener de la
siguiente forma:
Función Sleep
Introducción
Se implementó la función SLEEP. Permite hacer una pausa por una determinada
cantidad de segundos en la ejecución de un programa.
Alcance
Objetos: Procedimientos, Reportes, Transacciones, Web panels, Work panels
Generadores: C/SQL – VB – JAVA – VFP – C#
Interfaces: Web y Win
Descripción
Sintaxis: &var = sleep(<segundos>)
<segundos> puede ser una variable o una constante
Esta función sirve por ejemplo para implementar un "demonio" que se ejecute cada
tantos segundos. La idea es tener un loop infinito y que se espere una cantidad de
segundos entre cada iteración, por lo que se recomienda su uso en procesos tipo
‘batch’ mas que en aplicaciones interactivas, donde la aplicación se ‘muere’
mientras no finaliza el timeout especificado.
Ejemplo
&var=sleep(15) – Espera 15 segundos y en &var devuelve 0
200
&var=sleep(0) – Espera 0 segundos y en &var devuelve 0
Función StrSearch
Introducción
La función StrSearch permite buscar un string dentro de otro.
Esta función posee dos variantes, la función StrSearch y la función StrSearchRev.
La diferencia entre estas funciones es la dirección de búsqueda del string,
StrSearch busca de izquierda a derecha mientras que StrSearchRev lo hace en el
sentido contrario, de derecha a izquierda.
Alcance
Objetos: Procedimientos, Reportes, Transacciones, Web panels, Work panels
Generadores: C/SQL – Visual Basic - Java – Visual FoxPro – C#
Interfaces: Web y Win
Descripción
Se implementaron las siguientes funciones standard en GeneXus:
StrSearch
Sintaxis: &Ret = StrSearch( &Str1, &Str2 [, &StartChar] )
&Str2 String de búsqueda. Puede ser de tipo Char, Varchar o Long Varchar.
201
variable es de tipo Numérico positivo.
StrSearchRev
Sintaxis: &Ret = StrSearchRev( &Str1, &Str2 [, &StartChar] )
&Str2 String de búsqueda. Puede ser de tipo Char, Varchar o Long varchar.
Consideraciones Generales
Si Str1 esta vacío o el largo es menor que Str2 ambas funciones retornan 0 ya que
no se puede realizar la búsqueda.
Si Str2 esta vacío retorna StartChar si fue inicializado o 1 en otro caso. Para el caso
de StrSearchRev se retorna StartChar o StrLen.
Ejemplo
StrSearch(&str1,"a" ) retorna 6
202
StrSearchrev(&str1, "a") retorna 27
Función StrReplace
Introducción
La función StrReplace permite reemplazar las ocurrencias de un string por
otro.
Alcance
Objetos: Procedimientos, Reportes, Transacciones, Web panels, Work panels
Generadores: C/SQL – Visual Basic - Java – Visual FoxPro – C#
Interfaces: Web y Win
Descripción
La función StrReplace retorna un string resultado de reemplazar todas las
ocurrencias del string &Str2 que se encuentren en &Str1, por el string &Str3.
&Ret Es es string retornado por la función con los reemplazos realizados. Esta
variable puede ser de tipo Char, Varchar o Long varchar.
Consideraciones Generales
203
Ejemplo
&Source = “Prueba#de#la#función#StrReplace”
Función Isnull
Introducción
La función IsNull() permite determinar si el valor de un atributo es NULL del DBMS.
Alcance
Objetos: Todos los objetos
Lenguajes: C/SQL - Java - Visual Basic – Visual FoxPro – C#
DBMS: SQL Server, Oracle, Informix, DB2
Interfaces: Win/Web
Descripción
En algunos casos es necesario determinar si el valor de un atributo se corresponde
con el NULL del DBMS. Este valor es diferente al nullvalue (obtenido por
ej.utilizando la función Nullvalue(<Atributo>), que GeneXus determina según el
tipo de dato/DBMS.
Sintaxis:
IsNull(<Atributo>)
204
Retorno:
Valor booleano
Ejemplo
For each
Where IsNull(CliNom)
.
.
Endfor
Este For each navegaría los registros de Clientes que tuvieran el atributo CliNom
con el valor NULL del DBMS.
Otro ejemplo:
For each
If IsNull(CliNom)
.
endif
.
.
Endfor
Este ejemplo sería similar al For each anterior, y debería navegar los mismos
registros, la diferencia sería que en el primer caso la condición se resolvería en el
servidor, y en el segundo ejemplo se haría en el cliente.
Consideraciones Generales
• La utilización de la función solo es válida dentro de For eachs y Conditions
de subfiles con tabla base.
Introducción
Se modifica el comportamiento de la funciones userid y workstation en Visual Basic y
Visual Fox.
205
Alcance
Objetos: Transacciones, Workpanels, Webpanels, Procedimientos y Reportes.
Lenguajes: Visual Basic y Visual FoxPro
Interfaces : Win y Web
Descripción
Hasta la versión 7.0 se truncaba el nombre de usuario y Workstation a un máximo
de 10 caracteres.
Los generadores RPG y Cobol no cambia porque los usuarios son de 10 caracteres
max.
Esto funciona con VFP y VB, con FPW y Xbase no cambiaron el comportamiento
(siempre truncan).
206
Funcionalidades Generales
Call dinámico
Introducción
El objetivo de esta funcionalidad es poder realizar llamadas a objetos GeneXus en
forma dinámica.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Procedimientos, Reportes
Lenguajes: Java, Visual Basic, Visual FoxPro, c#, C/SQL, Cobol, RPG
Interfaz: Web, Win
Descripción
Esta funcionalidad permite que el especificador transforme un CALL dinámico (que
hace referencia a una variable o atributo como primer parámetro) en un DO CASE
con tantos CASEs como programas existan en la KB con la misma cantidad y tipo
de parámetros referenciados en el CALL. Es una alternativa muy interesante, sobre
todo para aquellos lenguajes que no soportan el CALL variable.
• Los numéricos tienen que ser exactamente iguales sin importar si tienen
signo o no.
Sintaxis
CALL(&OBJECT, [PARM1, PARM2,…])
Donde &object es una variable o atributo de tipo string que contiene el nombre del
objeto GeneXus a llamar.
207
Consideraciones Generales
Preference Expand dynamic calls
Para poder utilizar esta funcionalidad se debe configurar la Preferencia Expand
dynamic calls en Yes (el valor por defecto es No para todos los generadores).
Consideraciones
Los parámetros efectivos que aparecen en el CALL dinámico no pueden ser
del tipo array (esto es controlado por el especificador).
Protocolo SOAP
Introducción
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 más utilizado.
Su especificación describe el contenido que debe tener un mensaje XML para ser
usado en una invocación remota.
Alcance
Objetos llamadores (Clientes)
Objetos: Todos los objetos
Lenguajes: C/SQL - Java - Visual Basic – Visual FoxPro – C#
Interfaces: Win/Web
Los objetos llamadores son los que invocan servicios mediante SOAP
208
Los objetos llamados son los brindan un servicio invocado mediante SOAP
Descripción
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
ningún tipo de interfaz con el usuario.
Se requiere un servidor Web que haga el hosting de los servicios a ser invocados.
Cliente
Los objetos que van a invocar al servicio web, a los que llamaremos
‘Clientes’, pueden ser cualquier objeto GeneXus. La invocación se hace
con el comando call() de GeneXus.
Locations
Para indicar cual va a ser la ubicación de los servicios invocados se utiliza un
esquema conocido como Locations.
Manejo de errores
209
Comportamiento frente a un error
Los posibles códigos de error que pueden ser retornados mediante la función
GetSOAPErr() son los siguientes:
• Mayor que 0 y menor que 10000: Algún parámetro retornado por el servidor
no tiene el nombre esperado. El código de error indica la posición del
parámetro que ocasionó el conflicto.
210
• Menor que 0 y mayor que -10000: Sucedió un error al interpretar el XML de
respuesta. Sucederá por lo general si la respuesta no es XML o no es XML
bien formado. Si se toma el valor absoluto del código de error el resultado
corresponderá a un código de error del objeto XMLReader. De todas formas,
getSOAPErrMsg() retornará una descripción del error.
Casos
211
Veremos a continuación diferentes combinaciones entre Clientes y Servidores, y su
implementación en cada caso:
C/SQL
(*) (*) (*) (*)
Java
Visual Basic
Visual Fox
X X X X
(*) – El generador C/Sql adoptó 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 vía 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 característica 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, característica no disponible hasta ahora.
Por la naturaleza del protocolo SOAP los programas generados con GeneXus
212
pueden ser invocados por cualquier cliente SOAP no generado por GeneXus.
http://localhost:80/c/sqlsolis/prg/nombredeprograma?wsdl
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 información acerca del uso del Servicio, parámetros 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. Por
mas información consultar la documentación del Help HTML.
En los elementos line se genera el Help del objeto. Solo la parte de texto es
generada, ignorándose el resto. Se generan líneas con un máximo de 80
caracteres, en caso de que la línea de Help sea mas larga, se generan tantos
elementos line como sean necesarios.
Consideraciones Generales
213
Reportes PDF
Introducción
Se implementó la generación de reportes GeneXus con formato PDF además de los
formatos ya soportados (txt, gxr, rtf).
Con los reportes PDF se cuenta con mayor potencialidad para el desarrollo de
aplicaciones web. El reporte generado como PDF puede visualizarse directamente
desde el browser.
Alcance
Objetos: Reportes
Generadores: C/SQL – VB – JAVA
Interfaces: Web y Win
Descripción
Para generar un reporte como PDF se debe utilizar la regla ‘output_file’ de la
siguiente forma:
output_file("test.pdf", "pdf");
Nota: El nombre de archivo debe contener la extensión pdf, es decir que la misma
no se asume.
PDF en el WEB
También es posible utilizar la regla Output_file en reportes y procedimientos para
poder ejecutarlos desde el web. Para ello es necesario setear la propiedad CALL
PROTOCOL = http. Recordar que el reporte o procedimiento puede ser invocado
desde el browser y por consiguiente debe ser main.
Nota: En este caso el reporte es “ejecutado” dos veces: una vez por el browser y
otra vez por el acrobat reader.
Tamaño de páginas
Se soportan todos los tamaños de página que es posible definir en Genexus, a
saber:
214
Tipo Medidas
Carta 8 1/2 x 11 pulgadas
Oficio 8 1/2 x 14 pulgadas
Ejecutivo 7 1/4 x 10 1/2 pulgadas
A4 210 x 297 mm
A5 148 x 210 mm
B5 182 x 257 mm
Sobre #9 3 7/8 x 8 7/8 pulgadas
Sobre#10 10 4 1/8 x 9 ½ pulgadas
Sobre DL 110 x 220mm
Sobre C5 162 x 229 mm
Sobre B5 176 x 250 mm
Sobre Monarch 3.875 x 7.5 pulgadas
Tamaño del usuario
Requerimientos
Para poder generar reportes PDF, se requiere tener instalado el software Acrobat
Reader en el cliente.
Requerimientos
Para habilitar el soporte del formato PDF con el generador C/SQL, es necesario
obtener previamente la biblioteca PDFLIB. La misma se distribuye en Internet en
www.pdflib.com. En ese mismo sitio es posible (y recomendable) consultar sobre
sus diferentes opciones de licenciamiento.
Para la versión GENEXUS 7.5 se utilizó la versión 401 de PDFLIB, los links para esta
versión son:
UNIX: http://www.pdflib.com/pdflib/download/pdflib-4.0.1.tar.gz
WINDOWS: http://www.pdflib.com/pdflib/download/pdflib-4.0.1.zip
INSTALACIÓN EN WINDOWS
1. Antes de instalar las rutinas de soporte del generador C/SQL es
necesario:
215
(PDFLIB)” en la página “General Options” del setup wizard
(GXCSetup) para las rutinas de soporte del generador GX C/SQL
e indicar el path donde se instaló la biblioteca pdf (en el
ejemplo: c:\pdflib4).
INSTALACIÓN EN UNIX
1. Antes de instalar las rutinas de soporte del generador C/SQL es
necesario:
• Descomprimir el archivo pdflib-x.x.x.tar.gz
Consideraciones C/SQL
A continuación se detallan las consideraciones a tener en cuenta al usar el
generador C/SQL para la impresión de reportes PDF.
SOPORTE DE IMÁGENES
La PDFLIB provee soporte de varios formato de imágenes, como los jpeg, gif,
tiff. En particular no se soporta el formato bitmap (bmp).
WORD WRAPPING
La función que se utiliza para dibujar texto hace “word wrapping”, por lo tanto
todo texto que no “entra” en el rectángulo de una línea de alto no aparece en el
PDF. Para evitar este problema cuando el texto está justificado a la izquierda no
se utiliza la función mencionada anteriormente, de forma que se dibuje el texto
completamente. En este caso puede suceder que el texto se solape con algo a la
derecha.
FONTS
En la documentación de la biblioteca PDFLIB, se encuentran los tipos de letra
soportados por la misma. A continuación se encuentra el detalle de los mismos
para la versión 401:
Courier
Courier-Bold
Courier-Oblique
216
Courier-BoldOblique
Helvetica
Helvetica-Bold
Helvetica-Oblique
Helvetica-BoldOblique
Times-Roman
Times-Bold
Times-Italic
Times-BoldItalic
Symbol
ZapfDingbats
Problemas comunes
A continuación se describen problemas específicos al usar la biblioteca pdflib con el
generador C/SQL.
Posible Causa
No se encuentra el archivo pdflib.upr al momento de ejecutar el objeto.
Solución
Copiar el archivo mencionado al directorio de ejecución o agregar la
ubicación del mismo en el path del servidor.
Ver (‘Requerimientos/C/SQL/Instalación en Windows’)
PDFLIB runtime error: Metrics data for font ‘MS xxx’ not found
Este error se produce al ejecutar el reporte.
Posible Causa
El tipo de letra seleccionado en el reporte no es soportado por el formato
pdf. En particular esto sucede con los tipos de letra de Microsoft.
Solución
Modificar el tipo de letra seleccionado en el reporte.
Introducción
En este documento se describen las consideraciones a tener en cuenta a la hora de
utilizar los reportes PDF con el generador Visual Basic.
Para obtener información general de los reportes PDF referirse al documento
Reportes PDF.
217
Reportes PDF en el Web
Para poder ejecutar reportes PDF en el Web, generados con el generador Visual
Basic se debe utilizar un procedimiento main con la propiedad “Call Protocol =
HTTP” (WebProc) con la función RespondFile llamando al reporte PDF.
El reporte PDF debe haberse generado previamente.
Requerimientos
Para poder generar reportes PDF con Visual Basic se debe tener instalada la dll que
se encuentra en: www.pdflib.com.
Hay una versión de demo que se puede utilizar para pruebas, para bajar la versión
de demo ingresar a la página seleccionar la opción ‘Download page’ y bajar el
ActiveX del link ‘PDFlib-4.0.1-activex.exe’.
Luego de bajarlo se debe ejecutar el exe para instalar la versión de demo.
Introducción
Generando los reportes como PDF, es posible ejecutarlos en otra plataforma que no
sea Windows, ya que los PDF no requieren de la dll del Report Viewer.
Alcance
Objetos: Reportes
Lenguajes: Java
Interfaces: Win Form, Web Form.
Descripción
Tener en cuenta los siguientes puntos:
218
*** Error: No method named "getPrinter" was found in type
“com/empresa/aplic/onnn"
Editando este archivo es posible setear los márgenes izquiero y superior en las
propiedades ‘LeftMargin’ y ‘TopMargin’ respectivamente. Por ejemplo:
LeftMargin=3.5
TopMargin=2
Fonts embebidos
Puede darse que en el reporte GX se incluyan determinados fonts que el usuario
final no cuente con ellos al ejecutar este reporte. La forma de evitar esto es
embeber en los reportes generados los fonts deseados.
La forma de incluir esta lista es a través de un utilitario que viene en las clases
standard (gxclassr.zip) del generador Java llamado ‘PDF Font Config’.
219
En la lista de la izquierda se visualizan los fonts utilizados en el reporte y en
‘Sample text’ se puede ver el font seleccionado en ella.
Con el botón ‘>>’ se permite agregar el font seleccionado para que sea embebido
en los reportes.
En ‘Fonts Locations’ se especifica el lugar de donde el servidor tomará las fonts a
ser embebidos en los reportes. En caso de ser un servidor windows, no es
necesario especificarlo, ya pueden ser ubicados, sin embargo en un UNÍS si es
requerido.
Una solución es utilizar una biblioteca AWT que no necesite soporte gráfico
nativo. Esto es lo que hace la librería PJA (Pure Java Toolkit). Esta biblioteca se
encuentra en http://www.eteks.com/pja/en.
220
EJECUCIÓN DE REPORTES CON PJA EN JDK 1.2+:
Una vez obtenido el archivo pja_2.3.1.zip, debe descomprimirse la biblioteca PJA
de él. El archivo de la librería es ‘PJA.jar’ y se encuentra bajo el directorio
‘pja_2.3.1/lib’ del zip.
Para poder generar reportes en ambientes donde el AWT estándar no puede ser
utilizado, se deben tener las siguientes consideraciones:
Java -Xbootclasspath/a:/home/libs/pja.jar
-Dawt.toolkit=com.eteks.awt.PJAToolkit
-Djava.awt.graphicsenv =
com.eteks.java2d.PJAGraphicsEnvironment uTest
Para obtener un archivo .pjaf hay que descomprimir la biblioteca PJA como se
describió anteriormente y hay que descomprimir la biblioteca de utilidades del
PJA (pjatools.jar) utilizando el WinZip o la utilidad JAR del JDK:
221
Una vez obtenidos estos dos archivos, y teniendo estas dos bibliotecas en el
classpath se debe ejecutar la utilidad de extracción de fonts PJA (llamada
com.eteks.tools.fontcapture.PJAFontCapture) desde una máquina que tenga
disponible el AWT nativo.
Hay que guardar un font .pjaf cualquiera, ya que es necesario para poder utilizar
la biblioteca PJA con JDK1.1.x.
222
/jdk1.1.8/lib/classes.zip y las clases estándar GeneXus se encuentran en
/home/libs:
Introducción
Esta nueva característica permite que los reportes y procedimientos puedan enviar
los datos del mismo a un archivo con formato XML en el caso que el
reporte/procedimiento tenga call protocol internal, o a la pantalla del browser en el
caso que tenga call protocol HTTP. Se ignora la presentación y se toma en cuenta
sólo los valores de los atributos y variables que se encuentren dentro de los Print
Blocks.
De esta forma es muy simple crear un archivo con formato XML, utilizando toda la
potencia y simplicidad que los reportes proveen, evitando tener que utilizar
funciones de bajo nivel para hacerlo.
Alcance
Objetos: Reportes, Procedimientos.
Lenguajes: Java – Visual Basic – Visual Fox – C/SQL.
Interfaces: Web Form, Win Form.
Descripción
Esta funcionalidad se implementa mediante la propiedad de objeto Report Output,
y la regla Output_file:
Regla Output_file: Se debe indicar el nombre del archivo a generar e indicar que
el formato del archivo es xml.
223
Los tags es lo que está escrito entre los caracteres de menor y mayor, por ejemplo
‘<Cliente>’. Lo anterior es un ejemplo de tag abierto. Todo tag abierto debe tener
un tag cerrado de la forma ‘</Cliente’>.
Un elemento es un tag abierto y cerrado junto con el contenido del medio, por
ejemplo ‘<Cliente>Juan</Cliente>.
• Los tags correspondientes a los grupos for each llevan el nombre de la tabla
base seguida de la palabra Group, por ejemplo <ClienteGroup>.
• Los tags correspondientes a los items dentro de los grupos llevan el nombre
de la tabla base, por ejemlo <Cliente>.
• Los atributos o variables que están en Print Blocks fuera de un for each no
se generan dentro de ningún grupo, sino directamente con los tags
correspondientes a los nombres de atributo o variable.
Objeto GXxmlwrt
Para generar el xml el reporte utiliza internamente un objeto de tipo XMLWriter
llamado GXxmlwrt.
Este objeto puede ser utilizado para lo siguiente:
• Utilizando métodos y/o propiedades sobre el objeto GXxmlwrt se puede
agregar información adicional al xml generado por el reporte.
• Se puede concatenar el contenido de reportes o procedimientos con salida
xml pasando el objeto Gxxmlwrt por parámetro al igual que se hace en los
reportes tradicionales con la variable &line.
Ejemplo
Se tiene el siguiente código en un reporte:
for each
:print PaiCod, PaiNom
for each
:print CiuCod, CiuNom
224
Endfor
Endfor
225
Funcionalidades para Aplicaciones
Web
Transacciones Web
Introducción
Hasta la versión GENEXUS 7.0, los generadores Internet disponen únicamente del
objeto Web Panel para ser ejecutados desde un navegador. A partir de la versión
7.5, se generan también transacciones para disponer en las aplicaciones Internet
de toda la potencia de este tipo de objetos en el ingreso de datos.
Alcance
Objetos: Transacciones
Lenguajes: C/SQL – Java - Visual Basic – C#
Interface: Web
Descripción
Las Transacciones Web no son un nuevo tipo de objeto GeneXus, sino un nuevo
form para las transacciones tradicionales que permiten su ejecución en
navegadores.
La ventaja de estas transacciones es que facilitan la distribución de la aplicación, ya
que sólo se requiere un navegador instalado en el cliente.
Para diseñar este nuevo form Web, que será el que se visualizará en ambientes
Internet se utiliza el mismo editor HTML que en el diseño de Web Panels.
226
seleccionar la opción Object/Web Form del menú GeneXus:
227
Diseño del Form Web
Existen algunas consideraciones en el diseño del form de las Transacciones Web
que se detallan a continuación:
Aplicar Cambios
Al presionar este botón es que se realizan los cambios (inserción o
modificación) en la base de datos para la instancia de la llave primaria del
primer nivel que esté, en el momento de ser presionado el botón.
Verificar
Al presionar este botón se validan los datos que se ingresaron (se calculan las
fórmulas, se obtienen atributos inferidos, etc.) permitiendo al usuario
corroborar visualmente los valores antes de confirmarlos. No actualiza la
base de datos (salvo que en las reglas se invoque un programa que sí la
actualice y además, realice un COMMIT). El código del botón de Check hace
un Rollback automático por si llamó a algún programa que actualizó la base
de datos.
228
Borrar Todo
Elimina la instancia utilizando el valor de llave primaria del primer nivel que
esté en el navegador, en el momento de ser presionado el botón.
Movimiento
Los botones de movimiento aplican únicamente al primer nivel y están
deshabilitados cuando la Transacción Web recibe instanciado el modo.
Los registros a mostrar en una Transacción Web cumplen las
restricciones de filtros que se apliquen por alguna de las
siguientes causas:
Seleccionar
El botón ‘Seleccionar’ permite al usuario ejecutar el prompt asociado a la
transacción en una nueva ventana del browser.
Este botón no se deshabilita nunca, pero al llamar al autoprompt sólo se
actualizan los atributos que son editables. Si se actualizó alguno de los
atributos al retornar del autoprompt se fuerza un get siempre y cuando el
botón ’Get’ esté en el form.
Consideraciones Generales
La principal diferencia de las Transacciones Web con las transacciones de las
aplicaciones tradicionales es el diálogo que emplean, lo que implica diferencias en
la validación de los datos y en el disparo de las reglas.
Con este tipo de diálogo, las reglas se disparan en dos momentos: al ingresar a la
transacción (las que no tienen condiciones de disparo) y también al confirmar los
datos. Esto determina diferencias en el comportamiento de aplicaciones que
tienen diálogo campo a campo:
229
attribute’. El ‘After(Attribute)’ se comporta como el ‘After (Level)’
• Los atributos de la tabla extendida se cargan al momento de confirmar los
datos y no antes. El usuario puede visualizarlos presionando el botón
‘Check’.
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 botón
y la nueva página es mostrada. Toda modificación a la base de datos que se haga
durante la “vida” debe ser confirmada o eliminada antes de que la Transacción
Web “muera” y retorne la página resultante.
Como consecuencia, una Transacción Web inicia una UTL (unidad de trabajo lógica)
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
Transacción Web, ésta iniciará otra (nueva) UTL.
Por todo esto, no aplica la propiedad ‘Commit on Exit’ en las Transacciones Web.
Control de concurrencia
Las Transacciones Web utilizan el diálogo pseudo-conversacional. Esto implica que,
mientras el usuario esta realizando modificaciones a los datos o simplemente
viéndolos, no existe ningún tipo de locks en la base de datos.
El control de cambios (es decir la validación entre la lectura inicial y la
confirmación) se realiza a nivel de cada tabla involucrada en la Transacción Web.
Los valores leídos 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.
Es importante notar que el control de cambios se realiza sobre todos los atributos
involucrados salvo aquellos de tipo Long VarChar por su tamaño.
Prompts
Para cada Transacción Web se genera un Web Panel que será el prompt por
defecto (autoprompt), y los prompts correspondientes a las claves foráneas que
se tengan.
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 Transacción Web, en su lugar se aconseja utilizar default(Att,today()).
Lo mismo ocurre con la variable &time y la función Time() correspondiente.
El comportamiento de la regla default es diferente que en las aplicaciones no
Web. Si se ingresa a una Transacciones Web en modo Insert, la regla se dispara
al ingresar a la Transacción, y no luego de ingresar la clave como en las
aplicaciones no Web.
230
Transacciones Web sin Modo instanciado
Las transacciones Web pueden invocarse sin recibir el modo instanciado. Se detalla
el comportamiento de las mismas dependiendo de la acción: inserción,
modificación o eliminación de registros.
Modo Insert
Al ingresar a una Transacción Web de este tipo, se comienza en modo Insert, y se
despliega una pantalla con la siguiente forma:
Luego de actualizada la base de datos, se despliega el mensaje ‘Los datos han sido
actualizados’:
231
Modo Update
Para entrar en modo Update, se deberá poner un valor en la clave y presionar el
botón ‘Get’ ( ). Esto hace que se carguen los datos del registro.
Al cargar los datos también se traen las descripciones. Se pueden modificar los
datos y presionar el botón ‘Aplicar Cambios’, y se actualizarán los datos con un
procedimiento análogo 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 botón ‘Get’), y luego presionar el botón ‘Borrar Todo’, lo que
provoca que se deshabilite dicho botón. En el caso de trabajar con confirmación, se
desplegará el mensaje ‘Confirme la eliminación de los datos’:
232
Al presionar el botón ‘Aplicar Cambios’, se eliminarán los datos y de desplegará el
mensaje ‘Los datos han sido eliminados’:
233
Transacciones Web con Modo instanciado
Las Transacciones Web que se invocan instanciando el modo Insert, Update o
Delete, deshabilitan los botones de movimiento entre registros y los botones ‘Get’,
‘Seleccionar’ y ‘Borrar Todo’.
Modo Delete
Cuando se invoca una Transacción Web instanciando el modo Delete siempre se
despliega el mensaje ‘Confirme la eliminación de los datos’, sin importar si se esta
trabajando con confirmación o no. Al presionar el botón ‘Aplicar Cambios’, se
elimina el registro.
• Eliminación de líneas
Cuando se desea eliminar alguna línea del subfile, se debe marcar la misma con el
check box, y presionar el botón de ‘Aplicar Cambios’, no de ‘Borrar Todo’. Este
último eliminará toda la transacción, no las líneas marcadas.
Cuando se compila una Transacción Web, para poner en producción, se debe copiar
al directorio donde estará la DLL y la página ASP correspondiente a la Transacción
Web los archivos *.js que se encuentran en el directorio del modelo y el prompt.gif,
para que aparezca el botón de prompt en las claves foráneas.
234
Ejemplos
En http://www.artech.com.uy/cgi-bin/webartech/hdcver03.exe?N,31,0,409 se
encuentran ejemplos de Transacciones Web.
Además, existe otro ejemplo que utiliza Transacciones Web en el siguiente link
http://www.artech.com.uy/cgi-bin/webartech/hdcver03.exe?S,31,0,423, donde se puede ver
lo fácil que es realizar altas, bajas y modificaciones con Transacciones Web, sin la
necesidad de tener que definir Web Panels y procedimientos auxiliares para esta
tarea.
Web Components
Introducción
Normalmente cuando se desarrolla una aplicación hay muchas partes de la misma
que pueden ser reutilizadas en varios objetos.
El objetivo de los Web Components es permitir un alto grado de reutilización de
estas partes (componentes) disminuyendo así el costo de desarrollo y
mantenimiento de las aplicaciones.
Alcance
Objetos: Web Panels
Lenguajes: C/SQL – Java – Visual Basic – C#
Interfaces: Web
Descripción
Los ‘Web Components’ son Web Panels que tienen una propiedad que indica que
son componentes. Es decir, pueden ser ejecutados en forma independiente como
cualquier otro Web Panel o pueden formar parte de otro objeto web (Web Panel o
Web Transaction); por ende permiten a los diseñadores de aplicaciones Web
GeneXus un alto grado de reutilización de los mismos.
Cualquier parte de un Web Panel que se repita en varios objetos webde una
aplicación, puede ser definida como Web Component.
Algunos ejemplos: menús, login, área que permite la personalización, etc.
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ú.
235
como Web Component no pierde ninguna de sus caracteristicas, por lo tanto, si es
un Web Panel MAIN, puede ser ejecutado en forma autónoma.
Los Web Components se generan dentro del mismo HTML del Web Panel que los
contiene. Esto significa que el servidor resuelve la inclusión del Web Component en
tiempo de ejecución y devuelve al navegador el código HTML con el Web
Component ya incluido.
236
Para determinar el objeto que se va a desplegar en lugar del control Web
Component, se utilizan las propiedades del mismo. El web panel a desplegar se
puede fijar en diseño o en tiempo de ejecución, como se describe a continuación.
Propiedades
El objeto Web Component tiene las siguientes propiedades de diseño:
237
ControlName: Nombre del control
Object: Permite asociar un objeto de tipo web panel al web component. Sólo
se aceptanobjetos con la propiedad Web Component en YES.
Parameters: Permite especificar la lista de parámetros con los que se
invocará el web component.
PROPIEDADES MODIFICABLES EN EJECUCIÓN
A continuación se detallan las propiedades de los Web Components que se
pueden modificar en tiempo de ejecución:
Do Case
Case &Var=”Objeto1”
Create(Objeto1)
Case &Var=”Objeto2”
Create(Objeto2)
....
endcase
238
Por lo tanto, al compilar el web panel ‘padre’ C/SQL y VB compilan en forma
automática los posibles Web Components llamados.
Observaciones
En diseño, el tamaño del Web Component permanece fijo, pero en
ejecución, el tamaño quedará sujeto al espacio ocupado por el mismo. La
forma de fijar el tamaño del Web Component en ejecución es entonces
incluyéndolo en una tabla y fijando el tamaño de la celda.
Un Web Component puede a su vez contener otros Web Components.
Los parámetros de los Web Panels cuando son utilizados como Web
Components no son opcionales. Notar que esto es una diferencia con los
Web Panels ‘comunes’ cuyos parámetros sí son opcionales.
La asignación 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 pasarán solamente la primera vez que se crea. En
sucesivos POST, los parámetros se recordarán del render anterior.
Si se asigna un Web Component en cualquier otro evento (Refresh,
Load, de usuario, etc.), los parámetros se pasarán siempre que se
ejecute dicho evento.
Si se asigna el web panel en la propiedad Object del control Web
Component en diseño, el pasaje de parámetros se realiza en forma
análoga 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 parámetro el color y asignarlo
en el evento Start del Web Component.
En ejecución, 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 demás controles.
No se soporta el uso de atributos como primer parámetro de la función
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
C#, donde cada objeto tiene su propio .class o .dll. Esto no
necesariamente es un problema para Visual Basic o C (los servidores
tienen tecnología de “swapping” lo cual implica que no haya perdida de
performance por el tamaño del EXE o ASP).
239
Web Components en área plana del objeto Web
Ejemplo:
A B
En este caso el orden de los eventos cuando se ejecuta por primera vez es el
siguiente:
240
el Web Component B
241
1. Evento START del Web Panel
2. Lectura de variables del Web Panel
3. Evento de usuario del Web Panel
4. Evento REFRESH del Web Panel
5. Evento START del Web Component A
6. Lectura de variables del Web Component A
7. Evento START del Web Component B
8. Lectura de variables del Web Component B
9. Evento REFRESH del Web Component A y evento LOAD del subfile en
el Web Component A
10. Evento LOAD del subfile del Web Panel
11. Evento REFRESH del Web Component B y evento LOAD del subfile en
el Web Component B
Todos los eventos del Web Component (START, REFRESH y LOAD si tiene
subfiles) se ejecutan cada vez que aparece el Web Component.
Ejemplo
El siguiente ejemplo ayuda a entender mejor la funcionalidad de los Web
Components, su utilidad y potencia:
http://www.gxtechnical.com/cgi-bin/HDCenter.exe?2,5,36,407
Para ver el ejemplo funcionando, se debe ejecutar el web panel ‘hcontent’.
Embedded pages
Introducción
El objetivo de las ‘Embedded Pages’ es poder incluir información externa, es decir
desplegar el contenido de cualquier URL en objetos web generados por GeneXus.
Alcance
Objetos: Web Panels, Web Transactions
Lenguajes: C/SQL – Java – Visual Basic – C#
242
Interfases: Web
Descripción
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 página u objeto web
GeneXus, cuyo contenido luego será incluido en ejecución 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 mínimo Internet Explorer
4.0, Netscape 6.0 o versiones superiores.
243
Tambien es posible insertarla con un solo clic en el ícono de barra de controles.
Propiedades
El control ‘Embedded Page’ tiene las siguientes propiedades:
244
ControlName: Nombre del control.
BorderStyle
Scrollbars
Source
TooltipText
Height
Width
Align
PROPIEDADES MODIFICABLES EN EJECUCIÓN
A continuación se detallan las propiedades modificables en tiempo de ejecución:
BorderStyle
TooltipText
Source
Visible
Height
Width
HeightUnit
WidthUnit
245
Observaciones
Si en las propiedades del control no se especifica la propiedad Source,
entonces en el evento START o REFRESH se debe asignar algún valor a
la misma. Por ejemplo EP.Source = “http://www.genexus.com”, siendo
EP el nombre del control ‘Embedded Page’.
Se permite la asignación dinámica de URLs, es decir se permite algo del
estilo
&url = “http://www.genexus.com”
EP.Source = &url
Se pueden incluir Embedded Pages dentro de subfiles
freestyle.
Ejemplo
El siguiente ejemplo demuestra la funcionalidad básica de las ‘Embedded Pages’:
http://www.gxtechnical.com/cgi-bin/HDCenter.exe?2,5,36,604
Introducción
Se agregó el valor Create Static Panels on request para poder generar las páginas
SSP (Smart Static Panels) a demanda.
Alcance
Objetos: Web Panels
Lenguajes: C/SQL – JAVA – Visual Basic
Interface: Web
Descripción
Se agregó el valor Create Static panels on request a la preferencia Generation Mode
de la sección Web Information. Además de la preferencia Generation Mode, existe
también la propiedad –con el mismo nombre- a nivel de objeto.
246
Este valor significa que al ejecutar el web panel con acceso dinámico,
automaticamente se generará la página estática correspondiente a la instancia de
datos.
Permite tener un sitio compuesto por paginas dinámicas y páginas estáticas sin que
sea necesario ejecutar un proceso que genere todo el sitio en forma estática con
anterioridad, sino que estas páginas estáticas se generarán para las instancias de
datos que se requiera cuando se ejecute la página dinámica correspondiente en el
sitio.
El sitio funcionará siempre como si fuera dinámico, esto significa que los links
siempre son al objeto web panel dinámico.
Consideraciones
El generador C/SQL no utiliza las preferencias On request SSP server directory y On request
SSP URL de la sección Web Information, sino que utiliza dos nuevas entradas en el archivo
de configuracion gxcfg.ini en la sección Web, como se muestra a continuación:
[Web]
OnRequestSSPServerDir = <directorio>
OnRequestSSPClientDir = <url>
Ejemplo:
247
http://myserver/cgi-bin/ssphtm/
[Web]
OnRequestSSPServerDir = c:\inetpub\cgi-bin\ssphtm\
OnRequestSSPClientDir = http://myserver/cgi-bin/ssphtm/
WAP
Introducción
En los últimos años tanto Internet como la telefonía celular han tenido un gran
crecimiento y se han hecho accesibles a millones de personas. Es posible ahora unir
estas dos tecnologías accediendo de forma fácil y rápida a la información que
brinda Internet desde los teléfonos celulares (ó móviles).
A partir de esta versión GeneXus permite generar salidas para Internet móvil,
generando objetos con contenido WML.
Alcance
Objetos: WebPanels
Lenguajes: Visual Basic, Java, C/SQL y C#
Interfaces: Web
Algunas definiciones
WAP (Wireless Aplication Protocol)
Es el protocolo más común de Internet Móvil.
Internet móvil es el término comercial para acceder a información de Internet a
través de dispositivos móviles.
Los dispositivos móviles más comunes son los teléfonos celulares con
“microbrowser” pero también entran en esta categoría, los dispositivos de tipo palm
y cualquier dispositivo de información portátil, que pueda disponer de una conexión
inalámbrica.
Este protocolo consiste en un modelo de capas que incluyen un IP inalámbrico,
capas de seguridad (WSL) y lenguajes de descripción de contenidos entre ellos
WML.
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 más estricto en la sintaxis.
WML vs HTML
Por el tamaño de la pantalla, es imposible traducir o ver de forma satisfactoria una
página de web normal (HTML) en un celular. El tamaño, los tipos de letra, las
imágenes y la cantidad de información que se soporta en el WEB no se puede
248
soportar en un microbrowser y no es práctico hacerlo.
La navegación, además, es diferente, el usuario no tiene ratón, ni teclado por lo
que el ingreso de datos debe ser limitado y la navegación, mucho más simple.
MicroBrowser
Es un software instalado en el teléfono o dispositivo inalámbrico que interpreta el
WML (y el WMLScript, WTAI, etc.) y despliega la información en la pantalla.
Es posible acceder a emuladores de celulares y sus microbrowser. Algunos de los
más conocidos son UP Browser (Unwired Planet) de Phone.com, RS380 Ericsson,
Nokia, etc.
Arquitectura
La arquitectura es similar a Internet. El cliente es el teléfono celular con
MicroBrowser y en el servidor se encuentra la lógica en objetos (ejecutables o ASP)
con contenido WML o sea que al ser interpretados por los browsers generan WML.
Descripción
Para generar Web Panels con contenido WML, se implementó una nueva propiedad
(a nivel de objeto) denominada ‘Tag Language’.
Los valores de la propiedad son:
• HTML
• WML
Requerimientos
Para testear esta característica directamente en la máquina de desarrollo es
necesario tener instalado el emulador de microbrowser.
Recomendamos el UP Browser (UP.SDK version 4.0) que es posible bajarlo de:
http://www.openwave.com/products/developer_products/sdk/
El producto es sin cargo, para acceder al mismo se debe realizar la registración en
dicha página.
El archivo ocupa aproximadamente 7 MB.
Diseño
Se deben definir los Web Panel como hasta el momento y configurar la propiedad
‘Tag Language = WML’.
En el diseño del objeto se deben tener en cuenta las siguientes limitaciones del
lenguaje generado (WML):
249
memoria de los móviles y el tamaño de la pantalla.
• Las pantallas permiten entre 4 a 8 líneas de texto, dependiendo del móvil,
por lo que no se recomienda que las pantallas superen estos tamaños. No es
conveniente que se tenga scroll en una pantalla de teléfono 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 anidación de tablas y/o subfile freestyle
o Subfiles comunes
o Campos LongVarchar
o La letra ñ
o Tag <BR>
o Botones
o Cookies
o Encriptación de parámetros
Ejecución
Al igual que cualquier aplicación para Internet, los Web Panels Visual Basic pueden
ser generados como Webclasses o como CGI.
En ambos casos luego de compilado el objeto se debe ejecutar desde el emulador
celular, esto se realiza escribiendo la dirección donde se encuentra el Web Panel en
la barra de direcciones del mismo.
Ejemplo
Se desea desplegar un texto de prueba en un teléfono celular, los pasos a seguir
son los siguientes:
250
Es aconsejable verificar el código generado, en el Tab ‘Source’, teniendo en cuenta
las consideraciones
251
- Si se producen errores en la pantalla del teléfono celular siempre se despliega el
siguiente mensaje:
‘Compile error: See info windows for details.’
Errores comunes
Error Síntoma
“Error : Invalid element ‘PCDATA’ in Se debe a la ausencia de <P> en
contents of card.” textblock o variable.
“Error : Invalid element ‘br’ in contents Se debe a un tag <BR> en el Source del
of card.” objeto
“Error : Uncompiled data from http La página no es WML es HTML, se debe
<head>.” configurar la preference ‘Tag
Language=WML’
“Error : Invalid element ‘textarea’” Se esta usando un longvarchar o un
char de varias líneas.
252
“Error : Missing entity “ntilde” Hay algún dato con la letra ñ y el
microbrowser no lo puede interpretar.
“Error : Invalid element ‘P’ in content of Se introdujo algun tag <P> anidado,
‘p’. excpectde PCDATA | em | b …” esto no es válido en WML
Consideraciones
Encriptación de Parámetros
Introducción
Los objetos Web generados con GeneXus, permiten visualizar los parámetros que
se pasan entre los objetos en la barra de dirección del navegador.
Esto hace que, si se pasa información reservada como parámetro entre objetos
Web (Número de cliente, por ejemplo), las aplicaciones no sean muy confiables en
cuanto a la seguridad, porque un usuario podría simplemente cambiar el valor de
dicho parámetro en la URL y disponer de información sobre la que no debería 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 parámetros sin que el usuario de la
aplicación los conozca o sea encriptar los parámetros.
En la versión 7.5 de GeneXus se implementa la encriptación de los parámetros de
253
los objetos Web que van en la URL en forma automática y transparente para el
usuario.
Alcance
Objetos: Web Panels, Transacciones
Lenguajes: C/SQL, Java, Visual Basic, C#
Interface: Web
Descripción
Para poder realizar la encriptación de parámetros en objetos Web se
implementaron funciones estándar que contienen las funciones básicas de
encriptación y algunas funciones adicionales (las que requieren manejo de
parámetros y cookies).
Session Key
Indica que se van a encriptar los parámetros que van en la URL,
utilizando una clave diferente para cada sesión. La encriptación se
realiza a través del uso de cookies locales.
Este valor ofrece un nivel de seguridad mayor, pero no permite
compartir URLs. Esto significa que no es posible para un usuario X
enviar una URL que tenga parámetros a otro usuario Y, ya que en
este caso la URL no va a funcionar porque se necesita la cookie
correspondiente para la desencriptación.
Site Key
Se encriptan los parámetros que van en la URL de los objetos Web,
pero la clave de encriptación va a ser la misma para todo el sitio.
En este caso no se utilizan cookies. Esto da un nivel de seguridad
menor pero facilita el traspaso de links.
254
Consideraciones Generales
Sesiones del Navegador
Una sesión del navegador queda determinada por una instancia del mismo. Por
ejemplo, si en un máquina se ejecuta el navegador de Internet y a partir de ese
navegador se abre otra sesión (a partir de la opción de menú File/New/Window o a
partir de un link), ambas sesiones pertenecen a la misma instancia del navegador.
255
Ejemplos
Si se tiene un Web Panel que recibe parámetros y no se utiliza la encriptación de
parámetros, la URL correspondiente al Web Panel será del estilo:
http://localhost/HINGRESO_WebObj/hdospar.asp?2,3
http://localhost/HINGRESO_WebObj/hdospar.asp?lQ/tK1lefxCZMVoXrnmrTQ==
Introducción
A partir de la versión GENEXUS 7.5 se brinda al usuario una serie de métodos que
habilitan el paginado automático en subfiles y subfiles freestyle.
Alcance
Objetos: Web Panels
Generadores: C/SQL – JAVA – Visual Basic – C#
Plataformas: Web
Descripción
El paginado de subfiles aplica a subfiles comunes y freestyle cuya propiedad ‘Rows’
tiene un valor diferente de cero. Los subfiles pueden estar anidados.
Existen algunas diferencias relacionadas con la paginación cuando un subfile tiene
tabla base o no. A continuación se describe la paginación en cada uno de estos
casos.
Métodos
A continuación se describen los métodos disponibles cuando un subfile tiene tabla
base.
FIRSTPAGE:
El método FirstPage lleva al usuario al primer conjunto de registros devueltos.
Los valores devueltos por este método son los siguientes:
256
0: Operación exitosa
1: No está habilitado el paginado en el subfile
NEXTPAGE
El método NextPage lleva al usuario al siguiente conjunto de registros.
Los valores devueltos por este método son los siguientes:
0: Operación exitosa
1: No está habilitado el paginado en el subfile
2: Ya se encuentra en la última página.
PREVIOUSPAGE
El método PreviousPage lleva al usuario al conjunto anterior de registros.
Los valores devueltos por este método son los siguientes:
0: Operación exitosa
1: No está habilitado el paginado en el subfile
2: Ya se encuentra en la primera página
LASTPAGE
El método LastPage lleva al usuario al último conjunto de registros. Puede ser
utilizado únicamente si el subfile tiene tabla base.
Los valores devueltos por este método son los siguientes:
0: Operación exitosa
1: No está habilitado el paginado en el subfile
3: El subfile no tiene tabla base
GOTOPAGE
El método GotoPage(PageNumber) permite acceder en forma directa a un
determinado conjunto de registros. Puede ser utilizado únicamente si el subfile
tiene tabla base.
Los valores devueltos por este método son los siguientes:
0: Operación exitosa
1: No está habilitado el paginado en el subfile
RESUMEN
A continuación se incluye una tabla con un resumen de los métodos disponibles
cuando un subfile tiene tabla base y cuando no.
Subfile Subfile
con tabla base sin tabla base
FirstPage
NextPage
257
PreviousPage
LastPage
GoToPage
Propiedades
Cada subfile dispone de las siguientes propiedades que son utilizadas en la
paginación:
• RecordCount
• PageCount
Consideraciones
• Si el subfile del web panel que se está paginando tiene filtros, se debería
agregar el método FirstPage dentro del evento que aplica el filtro, a los
efectos de evitar que el resultado desplegado corresponda a la página en la
que se encontraba anteriormente.
Implementación
El paginado se realiza por "número de registro". Esto quiere decir que, la página 1
tendrá los registros del 1 al valor de la propiedad Rows, la página 2 los que van del
Rows +1 al Rows * 2 y así sucesivamente. Para mostrar la página 2, internamente,
se "pasa por" los registros de la página 1 sin mostrarlos. En general, para mostrar
la página N, se "pasa por" los registros de las páginas anteriores (N-1) sin
258
mostrarlos.
Ejemplo
Los métodos de paginado de subfiles pueden ser utilizados en los eventos escritos
por el usuario. Por ejemplo:
Event Start
&Count = MySubfile.RecordCount
If &Count > MySubfile.Rows
Pagina2.Visible = 1
EndIf
If &Count > MySubfile.Rows * 2
Pagina3.Visible = 1
EndIf
Endevent
Event Siguiente.Click
MySubfile.NextPage()
Endevent
Event Anterior.Click
MySubfile.PreviousPage()
Endevent
Event Enter
MySubfile.FirstPage()
Endevent
Introducción
En muchas circunstancias, en una transacción Web es necesario utilizar Web Panels
de usuario en lugar de las listas de selección generadas automáticamente por
GENEXUS, mediante el uso de la regla Prompt.
259
Alcance
Objetos: Transacciones
Lenguajes: C/SQL – JAVA - Visual Basic – C#
Interface: Web
Descripción
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
transacción 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 más parámetros de tipo output. Puede tener de in, de
inout también 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 diseño ReturnOnClick en True. Puede tener habilitada
esta propiedad en más 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 parámetros definidos como de output) no se
determinan al realizar click, sino al desplegarse la pantalla por lo que tienen
que tener el valor válido a retornar en cada Load (si se muestra un subfile,
por ejemplo).
Si uno de los atributos variables, text blocks o imagenes del form que tienen la
propiedad de diseño ReturnOnClick en True también tiene programado el evento
Click, el código 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, también se
implementó la función ReturnOnClick() (sin parámetros) que puede ser asignada a
la propiedad Link de cualquier control (que tenga esta propiedad).
260
Ejemplos
Prompt de Clientes
Un prompt de clientes se programa así:
En los Eventos:
event Subfile1.load
&CliCod = CliCod
endevent
En el form:
Un subfile que tiene CliNom y CliCod, donde CliNom (por ejemplo) tiene la
propiedad ReturnOnClick en true.
261
Propiedades
Introducción
El evento Click permite asociar eventos definidos por el usuario a las imágenes. A
partir de la versión GENEXUS 7.5, es posible asociar también los eventos estándar
de los objetos Web a las imágenes empleando la propiedad OnClickEvent.
Alcance
Objetos: Web Panels, Web Transactions
Lenguajes: C/SQL – JAVA – Visual Basic – C#
Interface: Web
Descripción
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 estándar de GeneXus (como First, Next,
Previous, Last, Enter, etc.) a una imagen.
Las propiedades disponibles en Diseño para una imagen son las que se detallan en
el siguiente diálogo:
262
Esta propiedad es usada principalmente en las Transacciones Web para poder
asociar imágenes a los eventos estándar: Previous, Next, etc. Hasta este
momento, solamente se podían asociar a los botones. En Web Panels, sirve para
asociar el evento Enter a las imágenes.
Ejemplo
¿CÓMO DEFINIR LOS BOTONES DE DESPLAZAMIENTO EN UNA TRANSACCIÓN
WEB USANDO IMÁGENES?
Al definir una Transacción Web y crear el form HTML por defecto, se generan los
siguientes botones de desplazamiento:
Para sustituir dichos botones por imágenes, se deben borrar los botones e
insertar cinco imágenes, definiendo en cada una de ellas el evento estándar de
GeneXus correspondiente.
263
En el form HTML y en la ejecución del objeto se vería como:
Introducción
Se implementó la posibilidad de modificar en tiempo de ejecución el color de fondo
de las líneas pares e impares de un subfile o subfile Freestyle cuyo ‘BackColorStyle’
sea ‘Report’. De esta forma el diseñador de objetos Web tiene mayor libertad para
resolver la configuración del mismo en tiempo de ejecución, permitiendo una mayor
parametrización del sitio.
Alcance
Objetos: Web Panels, Web Transactions
Lenguajes: C/SQL – VB – JAVA – C#
Interface: Web
Descripción
264
\\DIONISIOD\VOLR\InfoPrototipo\English\GeneXus\Internet\Docum\Manuals\7.5\B
ackColorOdd.doc
\\DIONISIOD\VOLR\InfoPrototipo\Espanol\GeneXus\Internet\Docum\Manuals\7.5\B
ackColorOdd.doc
Ejemplo
En el siguiente ejemplo se muestra como se puede modificar el color de las líneas
pares/impares de un subfile o subfile Freestyle en tiempo de ejecución,
dependiendo del valor elegido en un radio button.
La implementación consta del siguiente código:
Event Start
If null(&col) // &col es la variable definida como RadioButton
Usuarios.Visible = 0
Endif
Endevent
Event Refresh
Do Case
Case &col=1
Usuarios.Visible = 1
Usuarios.TitleBackColor = RGB(40,2,202)
Usuarios.BackColorEven= RGB(5,107,165)
Usuarios.BackcolorOdd = RGB(29,135,255)
Case &col=2
Usuarios.Visible = 1
Usuarios.TitleBackColor = RGB(253,114,53)
Usuarios.BackColorEven = RGB(238,140,0)
Usuarios.BackColorOdd = RGB(254,181,40)
EndCase
Endevent
265
En la siguiente pantalla se observa el resultado de seleccionar los tonos de naranja
como colores del subfile:
266
Propiedad Columns subfiles freestyle
Introducción
Se implementó la posibilidad de modificar en tiempo de ejecución, la cantidad de
columnas de un subfile Freestyle. Esta nueva funcionalidad agrega dinamismo a los
Web Panels, permitiendo modificar la forma de desplegar datos en un subfile
Freestyle.
Alcance
Objetos: Web Panels
Lenguajes: C/SQL – Visual Basic – JAVA – C#
Interfases: Web
Descripción
\\DIONISIOD\VOLR\InfoPrototipo\Espanol\GeneXus\Internet\Docum\Manuals\7.5\C
olumns.doc
Ejemplo
En el siguiente ejemplo se muestra cómo puede modificarse la forma de desplegar
los datos, dependiendo de la configuración elegida por el usuario. Para poder
hacerlo, se almacena en una tabla la configuración seleccionada por el mismo
(cantidad de columnas a desplegar). En el Web Panel simplemente se recupera
dicho valor y se lo asigna a la propiedad Columns del subfile Freestyle, como se
detalla a continuación:
Event Refresh
Listarec.Columns = WebFabCnf
Endevent
267
En la siguiente figura se puede observar la configuración seleccionada por el
Usuario2 (WebFabCnf=2):
268
Propiedad PageCount
Introducción
Para facilitar el uso de la paginación automática en subfiles de Web Panels, se
agrega una nueva propiedad denominada PageCount, que permite obtener en
tiempo de ejecución la cantidad de páginas de la tabla base de un subfile o subfile
Freestyle.
Alcance
Objetos: Web Panels
Lenguajes: C/SQL – JAVA – Visual Basic
Interface: Web
Descripción
La propiedad PageCount devuelve la cantidad de páginas del subfile en base a las
propiedades Rows y Columns del mismo. Al igual que la propiedad RecordCount,
devuelve –1 si el subfile no tiene tabla base.
Propiedad RecordCount
Introducción
Para facilitar el uso de la paginación automática en subfiles de Web Panels, se
agrega una nueva propiedad denominada RecordCount, que permite obtener en
tiempo de ejecución la cantidad de registros de la tabla base de un subfile o subfile
Freestyle.
Alcance:
Objetos: Web Panels
Lenguajes: C/SQL – JAVA – Visual Basic
Interface: Web
269
Descripción
La propiedad RecordCount aplica únicamente a subfiles que tienen tabla base y
retorna un número mayor o igual a cero representando la cantidad de registros de
la tabla base del subfile que cumplen las condiciones de selección. Puede retornar -
1 si no existe navegación para la tabla base del subfile.
Introducción
Se implementó la posibilidad de modificar en tiempo de ejecución, la cantidad de
filas de un subfile o subfile Freestyle. Esta nueva funcionalidad agrega dinamismo a
los Web Panels, permitiendo modificar la forma de desplegar datos en un subfile o
subfile Freestyle.
Alcance
Objetos: Web Panels, Transacciones
Lenguajes: C/SQL – VB – JAVA – C#
Interfases: Web
Descripción
Se puede modificar la propiedad Rows de un subfile o subfile Freestyle en tiempo
de ejecución.
Para hacerlo se debe agregar la siguiente línea en un evento del Web Panel:
Subfile.Rows=n
siendo Subfile el nombre del control subfile o subfile Freestyle y n un número, una
variable o un atributo igual o mayor que cero, correspondiente al número de filas
que se van a desplegar.
Si el valor asignado es 0, se despliegan todos los registros de la tabla.
270
Propiedad Cache Expiration Lapse
Introducción
Cuando se accede a páginas web para consultas se utilizan recursos del servidor
web y posiblemente del servidor de base de datos de aplicaciones. Si estas
páginas se acceden repetidas veces pero el contenido no cambia tan a menudo,
es cuando se hace necesario utilizar esta propiedad que permite que la página
se almacene en el cliente durante un cierto lapso de tiempo. De esta forma es
posible reducir los recursos necesarios en el servidor.
Esta funcionalidad esta disponible a partir de la version 7.5 de GeneXus.
Alcance
Objetos: Web Panels
Generadores: C/SQL – JAVA – Visual Basic – C#
Plataformas: Web
Descripción
Esta propiedad del objeto web panel causa que se incluyan los headers
necesarios para ‘cachear’ la pagina generada.
El valor que se permite ingresar es la cantidad de segundos que dura la pagina
‘cacheada’.
Por defecto (es decir si no se tiene valor ingresado) la página no se cachea.
Introducción
Esta propiedad permite habilitar/deshabilitar botones de objetos WEB en tiempo
de ejecución.
Alcance
Objetos: Web Panels, Transacciones
Lenguajes: Java – Visual Basic – C/SQL – C#
Interfaz: Web
Descripción
Esta propiedad se puede modificar dentro de alguno de los eventos del Web
Object.
La sintaxis es la siguiente:
<ButtName>.Enable=<valor>
donde:
271
deshabilitarlo.
272
Eventos
Introducción
En la versión GeneXus 7.5 se implementó el evento Refresh en los Web Panels
que utilizan múltiples subfiles.
De esta forma se puede programar la lógica que no está asociada a ningún
subfile en un evento independiente.
Alcance
Objetos: Web Panels
Lenguajes: C/SQL – JAVA - VB
Interface: Web
Descripción
El nombre de este evento es simplemente Refresh. En la versión GeneXus 7.0
cuando se incluyó la posibilidad de definir múltiples subfiles en un Web Panel, el
evento Refresh quedó asociado a cada subfile. Es decir podían programarse
tantos eventos Refresh como controles de tipo subfile hubieran definidos.
ORDEN DE DISPARO
1. Start
2. Refresh
3. Refresh Subfile 1
4. Load Subfile 1
5. Refresh Subfile 2
6. Load Subfile 2
273
2. Nueva lectura de las variables de la pantalla.
3. Código correspondiente al evento asociado al botón
seleccionado
4. Refresh
7. Refresh Subfile 1
8. Load Subfile 1
9. Refresh Subfile 2
10. Load Subfile 2
Ejemplo
¿ Cuándo se debe usar el evento Refresh? Algunos ejemplos son:
Introducción
Se implementó el evento click sobre los controles de tipo text block y combo en
los web panels. De esta forma se puede programar cierta lógica al hacer clic
sobre estos controles, cosa que antes solo era posible para las imágenes.
Particularmente para el caso de los combos se puede programar acciones a
partir del valor seleccionado en el mismo.
Alcance
Objetos: Web Panels
Lenguajes: Java – Visual Basic – C/SQL – C#.
Interfaces: Web Form.
Descripción
Para el caso de los controles de tipo text block el evento se ejecuta al hacer clic
sobre el mismo.
En el caso de los controles de tipo combo el evento se ejecuta al variar el valor
que contiene el control.
Nota: En el caso de tener definido sobre un control de tipo text block además
del evento click la propiedad link, los resultados pueden ser impredecibles
(puede ejecutarse el evento o tener en cuenta la propiedad según el generador
y la versión). En cualquier caso no es recomendable tener programadas ambas
a la vez.
274
Ejemplo
Event &Pais.Click
&Ciudad.Clear()
For each
Where PaiCod = &Pais
&Ciudad.Additem(CiuCod ,CiuDsc )
Endfor
EndEvent // &Pais.Click
En este ejemplo, al elegir una opción del combo ‘pais’ (siempre y cuando el
valor elegido sea distinto del existente previamente) se ejecuta el evento clic del
mismo, cargando de esta forma las ciudades correspondientes al país
seleccionado en el combo ciudad.
275
Métodos
Método JSEvent
Introducción
El método JSEvent permite utilizar el evento “Click” y “OnChange” de los
controles para disparar código Java Script.
Alcance
- Objetos: Web Panel, Transacciones
- Lenguajes: Java - Visual Basic - C# - C/SQL
- Interfaces: Web
Descripción
El método JSEvent sirve para asignar código Javascript a los eventos JavaScript
“click” y “onchange” de los controles en el form web.
Los controles habilitados son:
Sintaxis
Control.JSEvent( 'evento_javascript', "su_código_javascript")
276
Consideraciones Generales
• Por medio del JSEvent, se pueden llamar funciones JavaScript que se
encuentren en el código HTML del Form o en archivos externos js. En caso
de que la función se encuentre en un archivo externo, se debe incluir un
TextBlock en el form y se le debe asignar en el evento “Start” el código:
“<SCRIPT language=JavaScript src="archivo_JavaScript.js"></SCRIPT>
Ejemplos
Ejemplo 1
Se tiene un Web Panel con un TextBlock (TX1) en el form. Se define los
siguientes eventos:
Event Start
EndEvent // Start
Event TX1.Click
Call(Hmain)
EndEvent // TX1.Click
Ejemplo 2
Por defecto en las transacciones con interfaz web se asigna únicamente la ayuda
del objeto al botón HELP que está en el form, no así la ayuda de los atributos.
Una forma de asignar esta es por medio del método JSEvent.
Para esto se debe remplazar la etiqueta del atributo por un TextBlock , y
asignarle a este en el evento Start la descripción del atributo y :
TextBAtt1.JSEvent('onclick',"GX_help('', 'HLP_Atributo.htm')")
277
Funcionalidades para aplicaciones
Win
Múltiples Subfiles
Introducción
El objetivo es tener la posibilidad de diseñar Objetos de consulta (Work
Panels o Web Panels) con más de una grilla o subfile y así potenciar el
desarrollo de los mismos, entre otras cosas para resolver en el mismo
objeto accesos a diferentes tablas.
Alcance
- Objetos: work panels, web panels
- Lenguajes: Java, Visual Basic, Visual FoxPro, C/SQL, C#
- Interfaces: Web (Java, Visual Basic, C/SQL, C# )
Win (Java , Visual Basic, Visual FoxPro)
Descripción
El uso de varios subfiles, implica un cambio en la forma de especificar en
GeneXus las reglas, los eventos y las condiciones asociados a los mismos.
ATRIBUTOS Y VARIABLES.
Un atributo/variable puede pertenecer a más de un subfile. No es posible
referenciar un atributo/variable de un subfile, o sea no se permite:
PROPIEDADES.
Las propiedades de los subfiles conservan la implementación y comportamiento
actual ya que siempre estuvieron asociadas al objeto.
278
PRECEDENCIAS
Por defecto las propiedades del objeto son asignadas a cada uno de los subfile.
Si se definen a nivel de subfile estas prevalecen sobre las propiedades del
objeto
EVENTOS.
Los eventos del subfile conservan su comportamiento actual.
Los eventos Load y Refresh deben referenciar al subfile usando la siguiente
nomenclatura:
Event <Subfile Control Name>.<Refresh | Load>
....
EndEvent
COMANDOS.
Los comandos que actúan específicamente sobre el subfile cambian de forma de
que, en caso de haber más de un subfile, se pueda determinar a cuál subfile se
aplica, estos comandos son:
For each line: Este comando debe incluir una referencia al subfile de la
siguiente forma: For each line IN <Subfile Control Name>
Load: Dispara la carga del subfile. La sintaxis continua siendo Load,
pero debe incluirse dentro del evento load asociado a dicho subfile.
Ejemplo
Event Subfile1.Load
…
Load
Endevent
Refresh
Al disparar el comando, se disparan en orden las reglas standalone, el
refresh general y el refresh de cada subfile (en caso de mas de un subfile).
REGLAS.
Order: Quedan asociadas al subfile. (Se puede editar dando clic con
botón derecho sobre el subfile).
Hidden: Queda asociado al subfile.
PRECEDENCIAS
Order: Si el conjunto de atributos de la regla se corresponde con los de
algún subfile y este tiene un orden asignado explícitamente este último
es el que se toma en cuenta.
Hidden Si se define a nivel de subfile este prevalece sobre la regla.
CONDITIONS.
Las condiciones se pueden indicar por cada subfile o en forma general para el
objeto.
279
Si hay condiciones generales y particulares sobre los mismos atributos, se
toman en cuenta todas.
Tampoco participan los atributos que están en los Eventos (fuera de los grupos
For each). Estos, deberán pertenecer a la tabla extendida de alguno de los
subfiles.
CARGA.
La carga se realiza para cada subfile de forma independiente, es decir, aún si los
datos que se muestran en ambos subfiles están relacionados, el especificador no
relaciona las cargas.
280
subfile
Order
En el caso de tener mas de un subfile la rules Order (general a nivel de
objeto) es ignorada.
Search
Queda asociado al objeto.
La regla search se toma solamente para el primer subfile.
PROPIEDADES DE SUBFILE
Las propiedades del objeto :
- Load Record
- Load At startup
- Automatic refresh
- When to refresh
- Refresh timeout
se implementan a nivel de subfile.
MÉTODOS DE SUBFILE
Refresh Al disparar el método de cualquier subfile, se refresca solo dicho
subfile
Event sub1.Load
for &i = 1 to 100
Load
endfor
EndEvent // sub1.Load
Event sub2.Load
for &i = 1 to 100
Load
endfor
EndEvent // sub1.Load
Cuando se haga un 'page down' en un subfilo, al retornar al otro, los valores de &i
que quedan en un subfile no quedan en el otro.
ToChart Dibuja una gráfica sobre los campos recibidos por parámetro,
también recibe el nombre del gráfico.
Sintaxis Subfile.ToExcel('name',att/var,att/var)
Esta función no es soportada por el generador Java
281
Los últimos 2 parámetros son opcionales. La variable &planilla, también
opcional, es de tipo ExcelDocument, y permite manipular la planilla.
Compatibilidad
es análogo a:
&planilla = SfTip.ToExcel('filename.xls',row,col)
&planilla.Cells(1,1) = "Titulo1"
&planilla.Cells(1,2) = "Titulo2"
El código: call('gxxlscre',filename,row,col,Title(),0,&table)
es análogo a :
&planilla = SfTip.ToExcel(filename,row,col)
&planilla.unbind()
Tabla : Este parámetro permite pasar los registros de una tabla a Excel.
Esto no es posible de implementar con el método toexcel, por lo tanto no
es posible hacerlo para más de un subfile.
282
Ejemplo :
Se tiene la tabla de países y la de ciudades, queremos desplegar un subfile con
los países y para cada uno sus respectivas ciudades. Se debería programar
Event SfPais.Load
For each
&PaisCod = PaisCod
&PaisNom = PaisNom
Load
Endfor
EndEvent
Event Sfciudad.Load
For each
where PaisCod = &PaisCod
&CiuCod = CiuCod
&CiuNom = CiuNom
load Endfor
EndEvent
Event SfPais.OnLineActivate
Sfciudad.Refresh()
EndEvent
Introducción
El acceso a las propiedades de la menu bar en tiempo de ejecución permite a los
usuarios, entre otras cosas, habilitar o no algunas opciones de la misma y
cambiar la apariencia de las opciones.
Alcance
Objetos: Work Panels, Transacciones
Lenguajes: Java – Visual Basic – Visual FoxPro
Interface: Win
283
Descripción
Las siguientes propiedades son aplicables a cada una de las opciones del objeto
Menu bar asociado a otro objeto GeneXus:
Propiedad Tipo
Caption Char
Checked Numeric (0|1)
Enabled Numeric (0|1)
Visible (*) Numeric (0|1)
Sintáxis:
MenuBar.<Opción>.<Propiedad> = <Valor>
Donde:
<Opción> es el nombre (‘Name’) de la opción (‘Item’) de la Menu bar.
<Propiedad> es una de las propiedades especificadas en la tabla.
<Valor> es el nuevo valor que tomará la propiedad.
Alcance:
Aplica a Work Panels y Transacciones
Ejemplos
1) Configuraciones varias dependiendo de los permisos del usuario:
Event Start
&Permisos = udp(PGetPermisos,userid())
if &Permisos = 1
MenuBar.GX_COPY.Caption = ‘Copiar’
MenuBar.Id_CliNew.Enabled=0
MenuBar.Id_CliDlt.Visible=0
Endif
EndEvent
Consideraciones
1) GeneXus no provee forma para seleccionar e insertar las distintas
propiedades.
2) Para utilizar esta funcionalidad es necesario asignar a la propiedad del
objeto ‘Functions’ el valor ‘Allow non-standard functions’.
284
Opciones Confirm y Close en Menu bar
Introducción
Hasta la versión GeneXus 7.0 no era posible ejecutar el evento Enter de un
objeto, o cerrar la ventana de un objeto desde la Menu bar asociada al mismo.
Alcance
Objetos: Menu Bar
Lenguajes: Visual Basic , Visual FoxPro, Java
Interface: Win
Descripción
Opción Confirm
Esta opción es un item más dentro del grupo ‘Actions’ de la Menu bar. Tiene el
mismo efecto que presionar el botón ‘Confirm’ de los objetos, realizando las
acciones asociadas al evento ‘Enter’ de los mismos.
Opción Close
Esta opción se encuentra dentro del grupo ‘File’ de la Menu bar. Cumple la
misma función que el botón ‘Close’ de los objetos, cierra el objeto que se tenga
abierto en ese momento.
Introducción
Es muy común que los Work Panels tengan variables que permiten de alguna
forma filtrar los registros desplegados en el o los subfiles (grillas). Esta
propidedad permite especificar en qué momento se debe refrescar el subfile, si
durante el ingreso de las variables de selección o filtros, o luego de haberlas
validado.
Alcance
Objetos: Work Panels
Lenguajes: Visual Basic – Visual FoxPro
Interface: Win
285
Descripción
La propiedad When To Refresh es de diseño, y se encuentra definida tanto a
nivel de objeto como a nivel de subfile. En el siguiente cuadro se observa como
se puede especificar a nivel de subfile:
Introducción
Esta propiedad permite cambiar en tiempo de ejecución los captions de las
distintas opciones de los controles Radio Buttons.
Alcance
Objetos: Work Panels, Transacciones
Lenguajes: Java – Visual Basic – Visual FoxPro
Interfaz: Win
286
Descripción
La sintaxis es la siguiente:
&radio.item(i).Caption = ‘Descripcion’
donde:
Introducción
Se implementaron las propiedades caption y visible para las páginas de los Tabs
Dialogs. Las mismas permiten determinar en tiempo de ejecución el caption
(título) de cada página, y hacerla visible o invisible.
Alcance
Objetos: Work Panels, Transacciones
Lenguajes: Java – Visual Basic – Visual FoxPro
Interfaz: Win
Descripción
La sintaxis es la siguiente:
tab.page(i).<Propiedad> = <Valor>
donde:
287
Funcionalidades para aplicaciones
Cliente/Servidor
Introducción
Esta funcionalidad permite establecer desde un programa más de una conexión
en forma simultánea a diferentes bases de datos (de diferentes fabricantes). Las
bases de datos pueden ser de cualquier DBMS soportado por GeneXus (SQL
Server, Informix, Oracle, DB2) Estas conexiones se realizarán a través de Data
Views definidos en la base de conocimiento.
Alcance
Objetos: Todos los objetos
Lenguajes: C/SQL - Java - Visual Basic – Visual FoxPro – C#
Interfaces: Win/Web
Descripción
Para implementar esta característica se definió un nuevo concepto en GeneXus,
al que se le dio el nombre de Data Store.
Se definirá un Data Store por cada base de datos diferente de la principal que se
quiera acceder desde el modelo original. En el caso de que se trabaje
solamente con la base de datos principal, no es necesario definir ningún Data
Store.
Definición en Diseño:
La creación de un nuevo Data Store se realiza en el modelo de Diseño,
utilizando la opción del menú File/Edit Model, en este dialogo se selecciona el
tab Data Store (ver figura abajo).
288
El único dato que se debe especificar en el modelo de Diseño de un Data Store
es su nombre, este nombre servirá como identificación a través de todos los
modelos de la misma Base de Conocimiento.
289
asociado a ese Data Store en ese modelo.
En este dialogo se editan las preferencias asociadas al Data Store, las que
varían dependiendo del DBMS seleccionado (por mas información consultar la
sección DBMS Options en las Release Notes de GeneXus 7.0).
Utilización
Al asociar el Data View a un determinado Data Store es que se indica a GeneXus
que determinada tabla debe ser accedida a través de la conexión de dicho Data
Store y no mediante la principal, que es su comportamiento por omisión. Para
esto, se agregó en la edición de los Data Views u en n combo box para elegir el
Data Store al que asociarlo:
290
Consideraciones generales
• En el diálogo de definición de Propiedades del Data Store en
Prototipo/Producción, la sección ‘Creation/Reorganization Information’
está de mas, ya que no aplica a las conexiones secundarias (el modelo
no reorganiza tablas que no sean de la base de datos principal). La única
propiedad que aplicaría es ‘Database Schema’, pero no esta
implementada. Para configurar el Schema, se debe hacer a nivel de Data
View, en ‘Platform Specific Information’.
291
(http://www.merant.com.) o de Openlink (http://www.openlinksw.com).
Comando SQL
Introducción
El objetivo de este comando es permitir la ejecución de sentencias SQL desde
las aplicaciones GeneXus Client/Server.
Alcance
Objetos: Transactions, Work panels, Procedures, Reports, Web Panels
Lenguajes: Visual Basic C/S - Visual FoxPro C/S - C/SQL – Java – C#
Interface: Win y Web
Descripción
En ocasiones especiales es necesario poder incluir sentencias SQL en los
programas generados de las aplicaciones Client/Server.
El uso más común, es para modificar los permisos de las tablas de la aplicación,
aunque puede utilizarse para realizar cualquier acción..
¿Cómo funciona?
Por ejemplo:
SQL DELETE * FROM CLIENTES
&Role = "MyRole"
SQL SET ROLE TO [!&Role!]
Otro ejemplo:
292
Consideraciones
• Es importante recordar que las sentencias SQL que se utilicen en el
comando SQL de GeneXus NO pueden retornar valores (retornar un
status, devolver registros RPC, etc.). Esto también implica que no se
tiene un manejo de errores, por lo cual si la sentencia produce un error
cancelará la aplicación (el usuario no tiene permisos, la tabla sobre la
que se opera no existe, etc)
Introducción
La conexión a la base de datos empleando la tecnología ODBC se realiza a
través de los Drivers que implementan, para un manejador de base de datos
específico, las funciones ODBC.
En versiones anteriores la conexión se realizaba únicamente a través de la
definición de un data source (para un driver particular). A partir de GENEXUS
7.5, es posible conectarse utilizando directamente el driver o un data source de
archivo.
Alcance
Objetos: Transacciones, Work Panels, Web Panels, Procedimientos, Reportes
Lenguajes: C/SQL, Visual Basic, Visual FoxPro
Interfaces: Web y Win
Tecnología de acceso a los datos: ODBC
Objetivo
Los nuevos métodos de conexión ODBC (empleando directamente el driver ó
utilizando un data source de archivo) amplían el alcance (usuarios y
computadores) de la conexión ODBC que se venía utilizando hasta ahora.
Utilizando data sources, la instalación de una nueva aplicación que accede a los
datos mediante ODBC implica la definición del data source correspondiente en
cada cliente. Estos nuevos mecanismos simplifican la etapa de instalación ya
que el data source puede reutilizarse.
293
Definiciones Generales
Los drivers son los componentes que procesan los requerimientos ODBC y
retornan los datos a la aplicación. Para usarlos, requieren ser instalados
previamente en el computador.
Los data sources son las fuentes de datos que determinan el acceso utilizando
un driver a una fuente de datos particular. Se identifican con un nombre y se
definen usando el ODBC Data Source Adminitrator. Requieren haber instalado
previamente el driver en el computador. Existen tres tipos de data sources: de
Usuario, del Sistema y de Archivo.
Configuración en GeneXus
En los modelos que utilizan la tecnología de acceso ODBC, se dispone de una
nueva preferencia que se configura a nivel de Data Store (en DBMS Options),
denominada “Connect Using” para la tecnología de acceso ODBC. Esta
preferencia indica la forma que se usará para indicar la fuente de datos ODBC a
utilizar.
294
Dependiendo del valor configurado en esta preferencia, se habilita una única
preferencia de las siguientes:
DRIVER
Esta opción esta disponible y su valor es requerido si se eligió el valor
“Driver” en la opción “Connect using”.
Debe ingresarse el nombre del driver tal como aparece en el ODBC
Manager bajo la columna “Name” del tab “Driver”.
Introducción
La propiedad (que existe a nivel de DBMS Options) permite definir si el índice
por llave primaria se crea ‘clustered’ o ‘not clustered’.
Alcance
DBMS: Informix, SQL Server
Lenguajes: C/SQL – Java – Visual Basic - Visual FoxPro – C#
Descripción
Esta DBMS Option aplica para cuando la propiedad Primary key Definition es
‘Index’.
Los valores configurables de esta propiedad son:
Clustered: (valor por defecto) En este caso se crea el índice con la
siguiente sintaxis: “CREATE UNIQUE CLUSTERED INDEX …”
295
“CREATE UNIQUE INDEX …”
FAQ
¿Qué significa que un índice sea Clustered?
Significa que el orden del índice a nivel físico coincide con el orden lógico.
Por más información referirse a ‘SQL Server Books Online’.
Introducción
A partir de la versión Solís, la preferencia, a nivel de Manejador de Base de
Datos, Lock time-out aplica además del AS/400 con acceso nativo a SQL Server
en las versiones 7.0 o superiores.
Alcance
Objetos: Transacciones.
Lenguajes: Java, Visual Basic, Visual FoxPro, RPG y Cobol
Interfaces: Win
Descripción
Es posible configurar esta propiedad solamente para el manejador AS/400,
cuando se utiliza como tecnología de acceso ‘AS/400 nativo’ (es decir,
generando RPG o Cobol, pero no en los accesos SQL) y para el manejador SQL
296
server con versión 7.0 o superior por las tecnologías de acceso empleadas por
todos los generadores Cliente/Servidor (C/SQL, Java, Visual Basic y Visual
FoxPro).
Utilidad
Por defecto cuando un programa GeneXus requiere un registro y éste se
encuentra lockeado, por ejemplo con SQL Server se mantiene al programa "en
espera" (sin responder) hasta que el registro se libere o lo cancela si ocurre un
Dead lock con otra aplicación.
Los síntomas de este comportamiento se pueden ver en una aplicación donde
dos usuarios concurrentes intenten acceder (por ejemplo, en una transacción) al
mismo registro. El primero accede al registro y el segundo no. Además, el
segundo no recibe ningún "feedback" de qué esta ocurriendo. Simplemente, la
aplicación que esta ejecutando queda "congelada".
La posibilidad de establecer un Timeout permite que el segundo usuario, en el
ejemplo anterior, pueda recibir el control nuevamente con el mensaje de que
alguien esta lockeando el registro.
El especificar un Timeout mayor que cero no cambia el funcionamiento de los
programas generados. Sólo indica cuánto tiempo, como máximo, esperará el
usuario para recibir el mensaje de registro lockeado. Esta información es tratada
de formas diferentes según sean objetos con interfaz o no.
En el caso de un objeto con interfaz (transacciones), pasado ese tiempo se le
devuelve el control al programa y se le despliega un mensaje al usuario para
que este decida si reintentará o cancelará la espera. En el caso de un objeto sin
interfaz, con manejador SQL Server continúa esperando por la liberación del
registro (solo se especifica cuánto tiempo existe entre los reintentos) hasta que
este se libere, con manejador AS/400, reintenta hasta diez veces el tiempo
especificado y luego envía un mensaje al operador de sistema
CONFIGURACIÓN
Se modifico el diálogo de DBMSOption en la sección “DataBase Information”
para configurar dicha propiedad.
297
Configuración de Trace (GeneXus DB Activity
Trace)
Introducción
Esta facilidad permite generar información de diagnóstico (trace) de forma de
hacer más rápida y efectiva la labor de detección y reporte de fallas en el
funcionamiento de la aplicación.
Aplica al Data View Generator y a las aplicaciones generadas con C/SQL (usando
tecnología de acceso ODBC), Visual Basic Cliente/Servidor, Visual FoxPro
Cliente/Servidor y C#.
Modo de activación
Utilizando el ejecutable gxtrccfg.exe es posible configurar algunas opciones de
la facilidad de generación de trace. Al ejecutarlo se despliega el siguiente
diálogo:
298
Las opciones configurables son:
Generate time cost Habilita la inclusión del tiempo consumido por cada rutina,
info en el log.
El tiempo se representa en tics.
(18 tics = 1 segundo)
299
Tracefile path Indica el directorio donde se generará la información de
trace. El mismo debe existir, de lo contrario no se habilita
el boton de OK. Debe especificarse solo el directorio, el
nombre del archivo de trace se genera automáticamente
con una combinación de letras y números diferente en
cada ejecución, y la extensión es ‘log’. En el caso de que se
esté ejecutando una aplicación que utiliza mas de una
conexión, se genera un archivo de trace por cada una de
ellas, cambiando el sufijo del nombre.
300
Funcionalidades Específicas de los
Generadores
C#
Requerimientos
Para compilar los programas generados por este generador es necesario tener
instalada la versión release del Framework SDK.
Funcionalidades
Este generador incluye todas las funcionalidades de los generadores web de la
versión GeneXus 75, con algunas excepciones desarrolladas en el siguiente
párrafo.
Consideraciones generales
Objetos WEB
No es posible la generación de objetos con Interfase GUI (Win), únicamente
objetos Web (Web Panels, Transacciones con form HTML, Procedimientos)
Reportes y procedimientos
En esta versión no se generan reportes. Los procedimientos no es posible
llamarlos desde la linea de comandos, no se soporta la propiedad Command
line.
Por mas información del generador dirigirse al Manual del Generador C# 7.5
301
C/SQL
Compatibilidad
IMPORTANTE
En la versión GeneXus 7.5 se realizaron varios cambios en las
preferencias del modelo y DBMS Options con respecto a la versión 7.0,
algunos de estos cambios son:
- Cambio de valores por defecto
- Nuevas preferencias
- Nuevos valores de preferencias
- Eliminación de preferencias
302
‘Command line’.
El error que se produce en cualquier objeto que tenga dicho comando es
el siguiente: “Don't know how to make xxxxxx_rpc.c, donde xxxxx es el
nombre del objeto”.
Nuevas funcionalidades
Generales
ACCESO VÍA ODBC
En la versión GENEXUS 7.5, el generador C/SQL permite trabajar únicamente
con ODBC, en lugar de SQL Embebido como tecnología de acceso a los datos.
Por más información referirse a la documentación: ODBC.
IMPRESIÓN GRÁFICA
En la versión GENEXUS 7.5 se implementó la generación de reportes gráficos
en ambiente Windows para el generador C/SQL. A partir de este momento el
usuario puede crear reportes gráficos utilizando el Report Viewer. Por más
información referirse al documento ‘C/SQL - Impresión gráfica’.
SOPORTE POSTGRESQL
En la versión GENEXUS 7.5 se implementó la posibilidad de utilizar el
manejador de base de datos POSTGRESQL con el generador C/SQL. Por más
información referirse al documento PostgreSQL.
303
objetos main C/SQL.
304
Aplicaciones Web
ISAPI
A partir de esta versión, se incluye una nueva forma de generar objetos Web
utilizando ISAPI. Por más información al respecto referirse al documento
ISAPI.
Introducción
Una nueva característica del generador C/SQL en la versión GENEXUS 7.5, es
que se puede trabajar únicamente con ODBC como tecnología de acceso a los
datos de la aplicación generada, en lugar de SQL Embebido.
Alcance
Objetos: Web Panels, Web Transactions, Procedimientos, Reportes
Lenguajes: C/SQL
Interface: Win - Web
Descripción
Para determinar el método de acceso a utilizar, se deben tener en cuenta varios
aspectos. Los requerimientos también son diferentes según el acceso.
Requerimientos
SQL EMBEBIDO
Cuando se genera C/SQL con SQL Embebido como método de acceso, es
necesario tener instalado en el servidor el pre-compilador correspondiente al
DBMS.
305
ODBC
Cuando se genera C/SQL con ODBC como método de acceso, es necesario
tener instalados los drivers ODBC correspondientes en el servidor.
UNIX
1. Configurar el ambiente ODBC en el servidor de procesos UNIX. (es decir,
instalar el manejador ODBC y el driver ODBC especifífico para el DBMS.
2. Instalar las rutinas de soporte (ejecutando el GXCSetup) con ODBC
3. Modificar la preferencia del modelo “Access Method” con el valor ODBC
4. En las opciones de ejecución (F5) ingresar en Script Name mkgxdata
5. Agregar en la preferencia “User Libraries” del modelo, las bibliotecas que
requiere el driver manager que se está utilizando. Para saber cuáles son
hay que editar el archivo makefile que viene como ejemplo con el driver
manager. Esto no se puede realizar en forma automática, ya que el
nombre de las mismas depende del ambiente.
WINDOWS
1. Instalar los drivers ODBC en el servidor de procesos Windows.
2. Dependiendo del mecanismo de conexión ODBC definido en el modelo
(preferencia Connect Using), será necesario definir en este servidor el
datasource especificado en el modelo. Este data source debe pertenecer
al sistema (“SYSTEM DSN”).
3. Instalar las rutinas de soporte (ejecutando el GXCsetup) con ODBC.
4. Modificar la preferencia del modelo ‘Access Method’ con el valor ODBC
5. En las opciones de ejecución (F5) ingresar en Script Name mkgxdata.bat
Introducción
Hasta la versión GENEXUS 7.0 los Web Panels generados por C/SQL eran
306
programas CGI (Common Gateway Interface). Estos programas CGI eran
ejecutados en el servidor y el código HTML resultante era enviado al browser del
cliente.
A partir de la versión 7.5, se incluye una nueva forma de generar Web Objects
utilizando ISAPI en ambientes Windows.
Alcance
Objetos: Web Panels, Web Transactions, Procedimientos, Reportes
Lenguajes: C/SQL
Interface: Web
Descripción
ISAPI (Internet Server Application Program Interface) provee un mecanismo
para desarrollar aplicaciones que se ejecutan en el espacio de direcciones del
servidor Web en ambientes Windows, teniendo acceso a todos los recursos
disponibles por dicho servidor.
!
• Estabilidad
• Recompilación de módulos
307
Para poder hacerlo es necesario reiniciar el servicio del Servidor Web. Existe una
solución a este problema que consiste en agregar la entrada
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W3SVC/Parameter
s/CacheExtensions=0 en el registro de Windows.
Por más información sobre esta característica se puede consultar:
http://msdn.microsoft.com/library/devprods/vs6/visualc/vccore/_core_what_are
_some_programming_tips_for_using_isapi_on_iis.3f.htm
Recomendación
Como conclusión, es recomendable el uso de Web Objects ISAPI en ambientes
donde la carga del Servidor Web es importante. Se recomienda también,
utilizar Web Objects CGI en ambientes de prototipo y utilizar ISAPI en
ambientes de producción una vez que la estabilidad de las aplicaciones ha sido
probada.
Estos objetos deben compilarse del mismo modo que los Web Objects CGI,
usando el boton COMPILE del Diálogo Run de GENEXUS. Se generan archivos
diferentes: para CGI los programas generados son ejecutables y para ISAPI se
generan bibliotecas dinámicas.
Generación de trace
Es posible activar la generación de trace en Web Objects ISAPI, lo cual puede
ser muy útil para determinar la causa de posibles problemas.
Para activarlo se debe ejecutar el archivo gxtrccfg.exe en el servidor donde
están los Web Objects e indicar el directorio de salida del trace. Luego de la
ejecución de los Web Objects, se crearán varios archivos con extensión .log
con la información de las operaciones realizadas.
308
Configuración Servidor Web.
Para la ejecución de Web Objects ISAPI, el Servidor Web debe ser Internet
Information Server 4.0 o superior en un ambiente Windows NT/2000.
Además, es necesario que el usuario que ejecute los Web Objects (normalmente
el usuario anónimo del Servidor Web), tenga permisos para ejecutar sentencias
ODBC, por lo que debe definirse con los permisos del grupo Powered Users.
• LOW(IIS Process)
Esta opción se comporta rigurosamente bajo las
condiciones comentadas hasta el momento. El módulo ISAPI
se ejecuta dentro del proceso del servidor de Web con
las ventajas y desventajas ya mencionadas.
• MEDIUM(POOLED)
Los módulos ISAPI que se ejecuten con esta opción se
ejecutan en un proceso separado al servidor de Web. Esto
hace que sea una alternativa más segura y de menor
performance que la anterior. Bajo esta opción si un
módulo provoca un error serio como un error general de
protección, el servidor de Web no sufrirá las
consecuencias, a lo sumo cancelarán otros módulos ISAPI
que compartan el proceso. Esta opción solo está
disponible en la versión 5.0.
• HIGH(ISOLATED)
Esta última opción hace que cada módulo ISAPI sea
ejecutado en un proceso aislado. Es la opción más segura
pero por sus características, casi no se distingue en
cuanto a sus ventajas del CGI.
Se puede decir que estas tres opciones tienen ventajas y desventajas que
cambian gradualmente según cual se utilice. Manejándolas se puede elegir entre
el compromiso de desempeño y solidez que cada aplicación Web requiera. La
opción ideal dependerá de la carga que deba soportar el sito Web, las
necesidades de disponibilidad y el grado de madurez de la aplicación y los
procesos de prueba que se hayan hecho.
CONFIGURACIÓN
Para configurar la opción de aislamiento a utilizar puede utilizarse la consola de
configuración del Internet Information Server. Normalmente esta opción se
define a nivel de directorio virtual aunque también es posible hacerlo a nivel de
módulo ISAPI (dll). Mas detalles sobre este asunto pueden encontrarse en la
propia documentación del Internet Information Server.
309
NOTA:
La generación ISAPI aplica únicamente a ambientes Windows. No aplica a los
ambientes UNIX.
Preguntas Frecuentes
1. ¿PUEDEN GENERARSE ALGUNOS WEB PANELS CGI Y OTROS ISAPI?
La preferencia Web Server Module Protocol determina el modo de
generación de los Web Objects, al ser a nivel del modelo aplica a todos
los Web Objects del mismo.
Introducción
En las versiones anteriores a GENEXUS 7.5, los objetos Web generados en
C/SQL para servidores UNIX no tenían ninguna extensión. Esto causaba que en
algunos Servidores Web no se pudieran configurar permisos diferentes para
archivos que estuvieran en el mismo directorio, situación muy común con los
objetos web y las imágenes o archivos javascripts utilizados por estos.
Para evitar esto, se implementa una nueva preferencia a nivel de modelo
denominada Extension for WEB Programs.
310
Web en lugar de ejecutarlos.
Alcance
Lenguajes: C/SQL
Descripción
La preferencia Extension for WEB Programs permite establecer cuál es la
extensión con la que se generan los ejecutables de Web (Web Panels, Web
Transactions y Procedimientos/Reportes con la propiedad call protocol
HTTP/SOAP) de un modelo C/SQL. No aplica a los programas de
creación/reorganización de la base de datos.
Introducción
Hasta la versión GENEXUS 7.5, el generador C/SQL disponía unicamente de la
impresión en modo texto de los reportes. A partir de ahora, se dispone también
de la impresión en modo gráfico para la plataforma Windows usando el Report
Viewer.
Alcance
Objetos: Procedimientos, Reportes
Lenguajes: C/SQL
311
Descripción
A continuación se describe el uso de la impresión gráfica en objetos C/SQL que
ejecutan en ambiente Windows.
Compatibilidad
Anteriormente se generaba únicamente salida de tipo texto de reportes, aún
cuando los reportes fueran gráficos.
Para mantener compatibilidad con las versiones anteriores, se agregan las
siguientes preferencias:
Instalación
Para poder utilizar esta característica, se agregaron los archivos estándar
rbuilder.dll y rbuilder.lib. Dichos archivos no se arman, sino que se copian al
subdirectorio "lib" del directorio de instalación de las rutinas de soporte durante
la instalación de las mismas (GXCSetup).
Antes de ejecutar cualquier reporte gráfico con el Report Viewer, es necesario
copiar la rbuilder.dll al directorio de los programas, o agregarla en el path del
servidor.
Preferencias
Si se está trabajando sobre plataforma Windows (valor “Windows” de la
preferencia ‘Target Operating System’) se agregan las preferencias:
312
"SHOW PRINTER DIALOGS ON REPORTS"
Se aplica cuando la salida del reporte es dirigida directamente a la impresora.
(&Output="PRN" o valor ‘Only to printer’ de la propiedad ‘Report Output’ del
objeto).
"REPORT VIEWER"
Bajo el grupo ‘Report Viewer’ se encuentran una serie de preferencias que
controlan la ejecución del Report Viewer. Las mismas se detallan a continuación.
Maximized
Esta preferencia controla si la ventana del Report Viewer aparece
maximizada o no. Los valores posibles son:
Always on Top
La preferencia ‘Always on top’ controla si la ventana va a aparecer delante
de las demás ventanas hasta que la misma sea cerrada.
Formas de ejecución
Los objetos C/SQL pueden ser ejecutados en diferentes formas, dependiendo de
la configuración de la propiedad ‘Call protocol’ del objeto. A continuación se
detallan las consideraciones necesarias para poder obtener el reporte gráfico en
cada caso.
313
Si la propiedad ‘Report Output’ tiene asignado el valor ‘Ask User’, al ejecutar
el objeto se visualiza el diálogo que se presenta a continuación, cabe
destacar que el mismo diferencia mayúsculas de minúsculas:
314
Java
Compatibilidad
Para aquellos usuarios que venían trabajando con alguna versión anterior del
generador se recomienda tener en cuenta los siguientes puntos:
• Solo es posible utilizar esta versión del generador con la versión 7.5 de
GeneXus. O sea, no es compatible con versiones anteriores (7.0, 6.1 ni
6.0).
• Para modelos con Web panels. Los web panels SOLO se generan en
modelos con User Interface = Web Form. Aquellos que tengan web
panels generados en un ambiente con User Interface = Win Form, deben
o bien cambiar la interafaz a Web, o bien definir en el modelo un nuevo
ambiente (File – Edit – Models - ‘Environments’ – Add) seleccionando a
Java como generador y Web Form como User Interface.
315
Nuevas funcionalidades
Generales
NO SE GENERAN MÁS LAS GXDB++
A partir de esta versión, se eliminó la generación de las GXDB++. Ahora,
para cada objeto GeneXus se genera una clase que se llama
objetogx$<nombre_de_datastore> y habrá uno para cada datastore.
NOTA
No será más necesario correr los 'Create Database' con Reorganize Server
Tables=no. En cambio, al hacer una reorganización, es necesario regenerar
aquellos objetos que utilizan las tablas cambiadas.
Esta nueva implementación facilita a aquellos usuarios que trabajen con RPG,
donde ambos generadores: RPG y Java debían ser el generador de la 'reorg'.
316
SOPORTE SDI Y MDI EN JAVA
A partir de 7.5, además de SDI se soporta MDI para WFC.
Para especificar una u otra forma se agregó una preference:
con valor YES por defecto. Esto implica un cambio en el comportamiento por
defecto de las aplicaciones, que se hizo con el fin de compatibilizar el valor
con el resto de los generadores. Para que la aplicación Java funcione como en
versiones anteriores, se debe cambiar este valor a ‘NO’.
jview com.genexus.PasswordChanger
317
Si existe un archivo que se llama crypto.cfg en el _mismo directorio_ que el
client.cfg/server.cfg, entonces se usan las claves de este archivo.
318
Se debe cambiar en estos programas externos el tipo de datos de los
parámetros y usar los tipos java como arrays[1], o sea
String[] a
byte[] b
Nueva sintaxis:
319
En el mismo se puede configurar:
320
partir de la 7.5 de GeneXus. Los mismos se obtienen de:
http://www.merant.com/products/datadirect/
321
MAYOR FACILIDAD PARA PROTOTIPAR EN MODELOS 3 CAPAS (RMI,
CORBA, DCOM)
Se implementó una forma de levantar al servidor de aplicaciones desde
GeneXus. Existe una nueva opción en el F5 que tiene las siguientes
características:
NAME = ApplicationServer
DESCRIPTION = GX Application Server
TYPE = Precompiled Utility
ENVIRONMENT = Java
REPORTES EN EL SERVIDOR
Se soporta la ejecucion de reportes en el servidor y visualizarlos en el cliente.
Para ésto se implementaron las siguientes funciones:
- getremotefile(&ServerFile, &LocalFile)
Copia un archivo del servidor al cliente
- opengxreport(&FileName)
Abre un .GXR
call(RReport, &FileName )
// Abrir el reporte
&a = opengxreport("report.gxr")
// Borrar el archivo
&a = deletefile("report.gxr")
322
CAMBIOS EN ESQUEMAS DE 3 CAPAS
Se realizaron los siguientes cambios en el esquema de 3 capas:
323
CAMBIOS EN LA IMPLEMENTACIÓN DEL POOL READ-ONLY
Se hicieron algunos cambios en relación al comportamiento del pool read-
only:
- El default del tamaño del pool read-only paso de '1' a infinito, para que
funcione bien con el default de la preference anterior.
Recycle connections
Se soporta una nueva funcionalidad en los pools de conexiones
324
denominada 'Recycle connections' que puede ser habilitada o no.
325
En el tab se piden los siguientes datos:
* Log JDBC Activity: Checkbox que indica si se quiere habilitar el log o no.
* Log Detail : Combo con valores High y Low. Indica en nivel de detalle del
log. Con nivel 'high' de detalle el tamaño del log queda mucho mas grande
que con nivel 'low'
326
usando la conexion (corresponde al valor de configuracion de
cantidad de usuarios por conexion)
327
Se realizaron cambios en los siguientes archivos del generador:
Aplicaciones Web
WAR DEPLOYMENT
Se implementó un nuevo Output processor llamado War deployment.
El mismo permite empaquetar en un archivo con extensión war todo lo
necesario para ejecutar una aplicación web en un servidor de servlets,
cumpliendo con el estándar J2EE.
<path al dataXXX>\web\DeveloperMenu.xml
Esta página tiene links a todos los objetos Web, estos son web panels,
transacciones con Web form, procedimientos con call protocol = http y
reportes con call protocol = http.
Consideraciones:
En esta página están 'hard coded' los links usando la URL que está en Web
Server Root especificado en las opciones de ejecucion. Esto implica lo
siguiente:
328
Para utilizarlo, depende de la Virtual Machine a utilizar, lo que es necesario
hacer:
Deployment Wizard
A partir de la 7.5 se dividió al Deployment Wizard en dos:
329
Si es una aplicación web, se llama al War deployment.
330
Se agregó al Wizard código para que chequee los Manifests de las
dependencias por inconsistencias (x ej, si pone un ContainerFiles con
un archivo que no existe o que tiene mal el case-sensitive). En estos
casos el Wizard devolverá un warning y algún hint (x ej, el case del
archivo) para ayudar al usuario.
331
SETUP PARA APLICACIONES GENERADAS CON GXWS DEPLOYMENT
Hasta esta versión la instalación de las aplicaciones armadas con el GeneXus
Web Start Deployment sólo podían ser instaladas desde un web server.
332
Transacciones con back-end HTTP
Introducción
Hasta ahora las transacciones en Java podían ser generadas en 2 capas o en 3
capas (usando los protocolos RMI, CORBA o DCOM). En las transacciones de 2
capas tanto la interfaz como el acceso a la base de datos se resuelve en el
cliente utilizando JDBC. En cambio, en las transacciones de 3 capas la interfaz
se resuelve en el cliente, pero el acceso a la base de datos se realiza en un
servidor de aplicaciones: el cliente se comunica con el servidor de aplicaciones
con algún protocolo de los soportados y el servidor se comunica con la base de
datos a través de JDBC.
Con esta feature el generador Java soporta que una transacción pueda tener un
‘back-end’ http. Este concepto es similar al de 3 capas, o sea la interface se
resuelve en el cliente y el acceso a la base de datos se resuelve en un servidor
web, pero con la diferencia que la comunicación entre estos componentes se
hace por medio de un POST http y no se necesita un servidor de aplicaciones
para el componente que se ejecuta en el servidor, solo alcanza con un motor de
servlets que lo ejecute.
Alcance
Objetos: Transacciones
Lenguajes: Java
Interfaces: Win Form.
Descripción
Cuando se indica que una transacción utilice un http back end, se genera un
objeto para el cliente (front-end) con el mismo nombre de la transacción, y un
objeto para el servidor (back-end), que se llama igual que el objeto pero con el
sufijo ‘_server’. Este objeto back-end es invocado por el front-end haciendo un
POST.
A nivel de objeto:
• La property ‘Use HTTP back-end’ en el grupo ‘Java Specific’ de las
transacciones. Los valores de esta propiedad pueden ser ‘Yes’ o ‘No’,
siendo el valor por defecto ‘No’
333
A nivel de modelo:
• La preference ‘HTTP back-end base URL’ en la sección Web Information.
El valor de esta preference es la URL donde se encuentran los objetos
que se ejecutan en el servidor web, de modo que el cliente pueda
invocarlos. Este valor se guarda en el archivo ‘client.cfg’. Por ejemplo,
podría ser http://localhost:8080/servlet/.
Ejemplo
Para definir que una transacción llamada ‘PruebaHttp’ tenga back-end http se
siguen los siguientes pasos:
334
De esta forma se genera un objeto llamado ‘TpruebaHttp.class’ en el
cliente y un objeto llamado ‘TpruebaHttp_server.class’ en el directorio
‘D:\servlets’. Al ejecutar el objeto en el cliente es invocado el objeto en
el servidor haciendo un POST.
Consideraciones generales
• Actualmente no hay soporte en el Deployment Wizard para determinar
que parte de la aplicación debe ejecutar en el servidor web.
Introducción
Hasta ahora no era posible levantar mas de un servidor de aplicaciones Java de
distintas versiones. Esto no permitía que en un mismo host convivieran una
aplicación 3 capas generada –por ejemplo- con la versión GeneXus 7.0 con una
generada con la versión 7.5.
Descripción
Veamos con más detalle la forma de lograrlo y las combinaciones válidas según
335
el o los protocolos de comunicaciones que estén siendo utilizados:
PROTOCOLO CORBA
PROTOCOLO DCOM
PROTOCOLO RMI
En la preference Application Server Host, para RMI, si se pone algo del tipo
servidor:puerto, se puede levantar mas de un servidor de aplicaciones en el
mismo equipo. Estos servidores de aplicaciones pueden ser indistintamente
de la version GeneXus 7.0 o 7.5. Si no se pone nada, el puerto es 1099 (que
es el valor default)
336
Setup para aplicaciones generadas con GXWS
Deployment
Introducción
Hasta ahora la instalación de las aplicaciones armadas con el GeneXus Web
Start Deployment sólo podían ser instaladas desde un Web server.
Descripción
Al GXWS Deployment se le agregó un tab ‘Advanced’ con las siguientes
opciones:
337
Target Directory:
Indica el directorio donde se copiarán los archivos del Setup. Si
se desea copiar a un CD, se debe copiar todo lo que queden en
este directorio. Si se copia este directorio en la raíz del CD, el
setup se disparará automáticamente al insertar el cd en el lector.
Install Virtual Machine:
Indica si se desea actualizar la versión de la Virtual Machine
automáticamente en el cliente al instalar la aplicación desde el
setup. Se puede instalar la VM de Microsoft o la de SUN. Si se
habilita esta opción se debe indicar si se desea instalar la versión
actual o una versión específica, además se despliega la siguiente
opción:
VM Location:
Indica la ubicación donde está la VM a instalar
Application URL:
Indica la URL del servidor HTTP donde va a residir la aplicación.
Si en el momento de crear el Setup no se conoce la ubicación final
del servidor, se debe dejar HTTP://, y debe setearse ‘Ask
Application URL’ para que la ingrese el usuario final.
338
Dependiendo de si se haya habilitado o no la opción de ‘Ask Application URL’ al
generar el setup, se podrá ingresar la URL de actualización de la aplicación
(Application updat URL).
Una vez instalada la aplicación, se crearán los shortcuts a los objetos de tipo
Main de la aplicación en el menú de inicio. La funcionalidad en cuanto a
ejecución y actualización automática de las aplicaciones y GXWS será igual que
si hubiera sido instalada a partir del .html.
Introducción
Esta propiedad de los subfiles permite que la carga del mismo se haga a partir
de un reporte/procedimiento con salida XML utilizando protocolo http.
Alcance
Objetos: Work Panels
Lenguajes: Java
Interfaces: Win Form.
Descripción
Los reportes/procedimientos con salida xml y call protocol HTTP se pueden
utilizar para implementar la propiedad provider de los subfiles. Esta propiedad
permite que la carga de datos de un subfile se pueda hacer a partir de un xml.
La idea consiste en crear un reporte/procedimiento xml que en un print block
contenga los mismos atributos que quiero cargar en el subfile y luego en la
propiedad provider del subfile pongo la URL del reporte/procedimiento.
Si quiero realizar carga de variables estas deben de tener el mismo nombre en
el workpanel y en el reporte/procedimiento.
Ejemplo
Supongamos que tengo un subfile con los atributos CliCod y CliNom. Creo un
339
reporte llamado Clientes que contiene dichos atributos en un print block y le
pongo salida xml y call protocol HTTP. Ingreso en la propiedad provider del
subfile la URL al reporte:
subfile.provider=http://localhost:8080/servlet/oClientes
Nota: La propiedad provider solo puede ser utilizada por el generador Java, pero
el reporte/proc con salida XML referenciado puede ser generado en cualquiera
de los generadores que lo permiten.
Introducción
Este documento explica como instalar como servicio una aplicación Java en
Windows NT, utilizando para ello un utilitario basado en una herramienta open
source llamada JsrvAny. (http://jsrvany.sourceforge.net/)
Alcance
Objetos: Transacciones, WorkPanels, Procedimientos, Reportes.
Lenguajes: Java
Interfaces: Win Form.
Descripción
Para instalar un servicio, es necesario ejecutar el jsrvany.exe con un conjunto
de parámetros que se detallan a continuación
340
servicio. Los valores posibles son ‘MS’, ‘JRE’, o
‘ANY’
-r Indica que se desea eliminar el servicio NT.
-h Imprime una ayuda en línea
341
• Archivo de Log: ‘c:\NTService.log’
Introducción
En el generador Java de la versión 7.5 existen dos nuevas opciones como
protocolo de ejecución en tres capas:
• Stateful HTTP
• Stateless HTTP
Alcance
Objetos: Work Panels, Transacciones, Procedimientos, Reportes.
Lenguajes: Java
Interfaces: Win Form.
Descripción
Stateful HTTP
Cuando se selecciona ‘Stateful HTTP’, la aplicación funciona del mismo modo
que con el resto de los protocolos (DCOM, RMI, CORBA), pero usando HTTP.
342
autenticarse con el servidor de aplicaciones.
• Es posible usar HTTPS (con algunas restricciones de ambientes), por lo
que se pueden tener canales de comunicación encriptados sobre internet.
• Se genera más tráfico. Los mensajes HTTP suelen ser mas grandes que
los mensajes CORBA/DCOM/RMI.
• Al tener que conectarse en cada requerimiento, es más lento. Esto es
solucionable si el servidor HTTP soporta HTTP 1.1, dado que en ese caso
el cliente HTTP mantiene la conexión viva por un tiempo dado. La
mayoría de los servidores soportan HTTP 1.1.
Stateless HTTP
Esta opción se comunica por HTTP pero trabaja de un modo diferente. Luego de
que finaliza un requerimiento del cliente al servidor, el servidor ‘desconecta’ al
cliente.
Todo esto implica que es altamente probable que una aplicación escrita en
343
GeneXus no funcione correctamente sin modificaciones en el diseño de la
misma.
344
Adicionalmente, todos los motores de servlets tienen una ‘Web Application’ por
defecto, que es la que generalmente se mapea a la url ‘/servlet/’. El resto de las
aplicaciones web (las que no son default), tienen un prefijo antes de ‘/servlet/’,
por ejemplo ‘/examples/servlet/’.
Para que funcione una aplicación en 3 capas con HTTP es necesario copiar el
archivo gxclassr.zip (en algunos motores de servlets es necesario renombrarlo a
gxclassr.jar), y los .JARs con los drivers JDBC al directorio WEB-INF\LIB.
Autenticación
Es posible utilizar la autenticación del servidor web como mecanismo de
seguridad de las aplicaciones que ejecutan en 3 capas con HTTP. En caso de que
el servidor esté configurado para que se necesite autenticación, la aplicación
cliente solicitará un usuario/contraseña, y la utilizará en el tráfico HTTP.
Adicionalmente, la función userid(‘server’) devolverá este nombre de usuario.
<tomcat-users>
<user name="tomcat" password="tomcat" roles="tomcat, manager" />
<user name="role1" password="tomcat" roles="role1" />
<user name="both" password="tomcat" roles="tomcat,role1" />
</tomcat-users>
345
da un nombre de rol determinado:
<tomcat-users>
<user name="tomcat" password="tomcat" roles="tomcat, manager" />
<user name="role1" password="tomcat" roles="role1" />
<user name="both" password="tomcat" roles="tomcat,role1" />
<user name="gx" password="gx" roles="appserveruser" />
</tomcat-users>
Notas
El codigo generado es el mismo para http stateful, corba, dcom, y rmi. Por lo
que para cambiar entre estos, solo basta cambiar el valor deseado en
preference protocol y regenerar forzado algun objeto para que se tomen en
cuenta los cambios en el client.cfg y server.cfg (Key REMOTE_CALLS).
Cambia el codigo generado para las transacciones cuando se usa http stateless.
Por lo que si se desea cambiar de un protocolo a otro, en el peor de los casos es
cuando se pasa de stateless a otro o de otro a stateless, donde habrá que
regenerar las transacciones.
Esto nos habilitaria a tener el mismo codigo configurado para que por ejemplo
en una intranet se use corba/RMI/DCOM y en internet use http. En teoria seria
mas rápido que con HTTP, y HTTP para Internet nos da escalabilidad y facilidad
para convivir con firewalls.
TIPs
Tip 1
Para testear que el gxclassr.zip vay a ser encontrado por el cliente, en el
browser probar lo siguiente en la URL:
346
<Name Server Host>/com.genexus.distributed.ServletAppServer
Por ejemplo:
http://servername:8080/servlet/com.genexus.distributed.ServletAppServer
Tip 2
class
com.genexus.distributed.stateless.transport.HTTPTransport/stateless
Connection refused
Tip 3
Si se tiene bien configurada la preference ‘Name Server Host’ y la gxclassr.zip
en el classpath del motor pero no se copió el server.cfg o en el web.xml se dio
mal la referencia, dara el siguiente error:
347
java.lang.InternalError: Server configuration file not found:
server.cfg
Tip 4
En caso de que encuentre un server.cfg por alguna razon, pero este no sea el
generado para ese modelo, puede presentarse un error de este tipo:
at
com/genexus/distributed/stateful/client/StatefulApplicationClient.getNewHan
dle (StatefulApplicationClient.java)
at com/genexus/db/UserInformation.getRemoteHandle
(UserInformation.java)
at com/genexus/db/UserInformation.getRemoteGXDBHandle
(UserInformation.java)
at com/genexus/db/DBConnectionManager.getDataStoreProvider
(DBConnectionManager.java)
at wtraamb.initialize (wtraamb.java)
….
War Deployment
Introducción
Los servlets pueden ser ejecutados por motores de servlet (Tomcat, Resin, Jrun,
etc), o por servidores J2EE (WebSphere, BEA Weblogic, etc).
Descripción
Al ejecutar el Deployment Wizard (form win) en un modelo donde se tienen
objetos Web, se permite seleccionar los manis para los que se desea armar un
.war que contenga todo lo necesario para ejecutar al web panel main y todos los
llamados. Adicionalmente dentro del war se van a agregar todos los archivos
que se encuentren en el directorio indicado en la preference “Static content
directory seen form client”
348
Al finalizar, se presenta un wizard que permite guiar la creación del .WAR con
las siguientes opciones:
349
Directory Additional Files
Add Files Agrega un contenido estático a los Additional Files en el
directorio seleccionado.
Remove Borra un contenido estático antes agregado en los Additional
Files Files.
Deployment Descriptor
En el wizard, en el tab ‘Deployment Descriptor’, se edita – en formato XML - el
descriptor del .war a generarse.
350
Instalación del war sobre motores de servlets
Tomcat 3
El war debe ser copiado al directorio /webapps del Tomcat. Luego al reiniciar al
motor el war es descomprimido.
Para ejecutar los servlets hay que utilizar la siguiente URL:
http://<servidor>:<puerto>/<Web_Application_Name>/servlet/<Nombre_servl
et> por ejemplo http://localhost:8080/EjemploWar/servlet/hmain
Si se quiere volver a instalar el war hay que borrar el directorio que creo el
Tomcat al momento de descomprimir el war.
Resin
El war debe ser copiado al directorio /webapps del Resin. Luego al reiniciar al
motor el war es descomprimido.
Para ejecutar los servlets hay que utilizar la siguiente URL:
http://<servidor>:<puerto>/<Web_Application_Name>/servlet/<Nombre_servl
et> por ejemplo http://localhost:8080/EjemploWar/servlet/hmain
Jun 3.0
Para instalar un war en el Jun 3.0 hay que utilizar el “Jun Management
Console”.
Dentro del Jun Management Console hay que seleccionar el “Jun Default
Server/Web Applications”. Ahí hay que seleccionar “Deploy an Applicaction” que
muestra esta pantalla.
351
Aquí hay que buscar el war generado e ingresar en “Application Name” el
identificador de la aplicación y en “Applicaction URL” algo que identifique a la
aplicación que luego va a ser utilizado en la URL para llamar a los servlets, por
ejemplo /miapp.
La URL queda de la siguiente forma:
http://<servidor>:<puerto>/miapp/servlet/<Nombre_Servlet>
WebSphere 4.0
Para instalar un war en el websphere 4.0 hay que utilizar el “Administrator’s
Console”.
352
Dentro del Administrator’s Console hay que seleccionar
“Nodes/<server>/Enterprise Applications”. Ahí hay que presionar el botón
“Install” que muestra esta pantalla.
353
Aquí hay que buscar el war generado en “Path” e ingresar en “Application
Name” el identificador de la aplicación y en “Context Root” algo que identifique
a la aplicación que luego va a ser utilizado en la URL para llamar a los servlets,
por ejemplo /miapp.
La URL queda entonces de la siguiente forma:
http://<servidor>:<puerto>/miapp/servlet/<Nombre_Servlet>
Aquí hay que dar siguiente sin cambiar nada y la aplicación queda instalada.
354
Visual Basic
Compatibilidad
IMPORTANTE
En la versión GeneXus 7.5 se realizaron varios cambios en las
preferencias del modelo y DBMS Options con respecto a la versión 7.0,
algunos de estos cambios son:
Workaround
Para volver para atras lo anterior (es decir, seguir generando single y
double, sin currency) hay que poner en el config.gx
WA0005=Y
355
de esta versión no es posible generar Web Panels como CGI, unicamente
es posible trabajar con Web Panels generados como WebClasses.
Por esta razón también se eliminó el diálogo de preferencias de ejecución
para Web Panels CGI (CGI-BIN path y StartUrl) que se configuraban en
el F5 de GeneXus (Build / Run / Botón de Options).
356
Nuevas funcionalidades
DEVELOPER MENU PARA APLICACIONES CON INTERFAZ WEB
Este objeto contiene a todos los objetos con interfaz Web que se haya definido
en el modelo.
Es el que aparece cuando se presiona F5 desde GX, con la descripción
“Developer Menu”.
Ejemplo:
Los siguientes comandos son válidos:
prncmd &pepe
prncmd \018 E \015
REORGANIZACIONES BATCH
A partir de la versión 7.5 es posible ejecutar las reorganizaciones Visual Basic en
forma batch.
rmenu -nogui
NombredelTab.SetFocus()
357
preference User Interface\Key Configuration\Field Exit para subfiles de
Transacciones.
Esto indica que si se selecciona este valor, cuando se ejecute una Transacción
con subfile, al completarse la información de cada uno de los campos del subfile,
el cursor automáticamente pasará al siguiente campo (en versiones anteriores
este valor se correspondía con la preference Auto Skip de Visual Basic).
Nota:
Cuando se utiliza este utilitario en proyectos Web, al seleccionar la
opción Run/Start del menu de Visual Basic, luego de cargar los objetos que
fueron modificados, se muestra una pantalla como la siguiente:
358
PROPIEDAD ‘ENABLED’ EN RUNTIME PARA BOTONES EN OBJETOS WEB
Se pueden habilitar/deshabilitar botones en tiempo de ejecución en Web Objects
utilizando la propiedad Enabled.
Esta propiedad se puede modificar dentro de alguno de los eventos del Web
Object.
Nuevas preferencias
‘FORCE GENERATION OF DEVELOPER MENU’
Esta preference se encuentra en la sección “General\VB Specific” y permite
indicar si se regenerarán el Developer Menu (MENU.VBP) y el objeto main que
incluye los Web Panels que se tienen en el modelo (GXWEBMN.VBP o como se
haya indicado en la preference “Main Web Project Name”), cada vez que se
genere cualquier objeto.
359
Las preferences criticas son:
El valor “As Classes (.CLS)” tiene como ventaja que las variables usadas por los
procedimientos y reportes sólo se definen en el momento que se van a utilizar,
destruyéndose luego de la ejecución de los mismos.
En cambio si se generan como módulos (valor “As Modules (.BAS)” de la
preference), en el momento de ejecutar el proyecto se reserva memoria para
estas variables, y se mantiene ocupada hasta finalizada la ejecución de la
aplicación.
Al tenerla como .CLS pueden aparecer problemas de performance en el caso
que se tenga muchas variables en los procesos que se ejecutan dentro de un
loop.
360
7.0/SmartStaticPanels.htm
Parámetro
SSP Directory genexus.staticweb.dir=<dir>
SSP Dynamic URL genexus.staticweb.dynurl=<url>
SSP Overwrite pages genexus.staticweb.overwrite=<”true”|”false”>
SSP Expand Links genexus.staticweb.links=<”true”|”false”>
NOTA: Para poder utilizar las funciones que permiten configurar los parámetros
adicionales desde las aplicaciones GeneXus (función setenvproperty), se debe
configurar la preference ‘Functions = Allow non-standard functions’ tanto en
diseño como en prototipo.
Para poder ejecutar los SPPs y que los mismos generen los HTMLs
correspondientes se deben seguir los siguientes pasos:
Ejemplo
Se tiene un Web Panel (PruebaSSP) que será ejecutado como SSP y Work
Panel (Llamador) que será el encargado de ejecutarlo.
Event 'Llamada’
&aux = setenvproperty('genexus.staticweb.dir', 'd:\ssp')
&aux1 = setenvproperty('genexus.staticweb.dynurl', 'http://localhost/cgi-
bin/')
&aux2 = setenvproperty('genexus.staticweb.overwrite', false)
call(HPruebaSSP, ….)
EndEvent
361
genexus.staticweb.overwrite para que no se sobreescriban los SSP para los
que ya existe un archivo .html con ese nombre.
Introducción
Se incorpora la posibilidad de declarar Integridad Referencial a nivel del DBMS
tanto en aplicaciones Cliente/Servidor como aplicaciones locales (Access).
Alcance
Lenguaje: Visual Basic
Interfaces: Web, Win
Descripción
Esta nueva propiedad, permite que al momento de crear la base de datos, se
registre en el DBMS (o Access) que se va a tener Integridad Referencial.
Por lo tanto, si por medio de procesos, o por el mismo DBMS (o Access) se
intenta violar la Integridad Referencial, se disparará un mensaje de error del
DBMS (o Access).
362
Consideraciones Generales
Ejemplo
Supongamos tenemos una aplicación con las siguientes estructuras (Con
Integridad Referencial):
Tabla Categorías
CatId*
CatNom
Tabla Clientes
CliId*
CliNom
CliTel
CatId
CatNom
For each
Defined by CatNom
Delete
Endfor
Este proceso intenta borrar registros de una tabla que están como clave foránea
en otra, por lo tanto se viola la integridad referencial.
363
Dependiendo del DBMS o si está en Access se presenta un error.
Por ejemplo en SQL Server se presenta el siguiente dialogo:
Sub 'Manejo_Error'
if &gxDBErr= 547 //Codigo de error de SQL Server
msg('Este Procedimiento no se puede realizar porque viola la
integridad referencial.')
Rollback
endif
EndSub // 'Manejo_Error'
Error_handler(‘Manejo_Error’)
Para conocer los códigos de error, consultar la documentación del DBMS que se
está utilizando.
Introducción
Esta propiedad de los reportes indica si se mostrará o no un diálogo para
confirmar si el reporte será ejecutado o no.
El diálogo que se muestra tiene el texto 'Is data ok ?', o su correspondiente en
cada idioma.
Alcance
Objetos: Reportes
Lenguajes: Visual Basic
Interface: Win
Descripción
Los valores posibles de esta propiedad son:
364
Yes Esto indica que se mostrará el diálogo de confirmación del
reporte
No No se mostrará el diálogo
Hasta la versión 7.0 de GeneXus el valor por defecto de la propiedad 'Prompt for
Confirmation' de reportes era Yes.
Esto es que por defecto se debería mostrar el diálogo.
365
Visual Fox Pro
Requerimientos
Las versiones de Visual FoxPro soportadas son:
• Visual FoxPro 6.0 SP5 o superior
• Visual Foxpro 7.0
Para obtener la última versión del generador Visual FoxPro para GeneXus 7.5,
siga este link: http://www.gxtechnical.com/cgi-
bin/HDCenter.exe?2,5,133,4:VFPCS:75:2
Compatibilidad
• IMPORTANTE
366
realice cualquier sentencia SELECT FOR UPDATE, da el siguiente error:
OdbcMessage:'[IBM][CLI Driver][DB2/NT] SQL0510N UPDATE or
DELETE is not allowed against the specified cursor.
SQLSTATE=42828
Nuevas Funcionalidades
Se han incluído las funcionalidades nuevas de GeneXus concernientes a la
interfase ‘Win’. Se destacan entre las mismas las tipos de datos de manejo de
XML, NSubfiles, tipos de datos de Office, tipos de datos de manejo de clientes
http,tipo de datos dbconnection, etc. Pero de todas las funcionalidades, la
mayor sin duda es la siguiente: Soporte de N DBMSes por modelo.
367