SIU-Guaraní
POWER BUILDER
Curso PowerBuilder
Personalizaciones SIU-GUARANI Básicas
Presentación de PowerBuilder
Barras de herramientas
Estos componentes son los botones gráficos que se encuentran en cada painter. Entre ellas se encuentran
la PowerBar
(utilizada en todo el
entorno de
PowerBuilder) y la
PainterBar (que es
única para cada
painter diferente).
(FIGURA)
Ayuda en línea
Esta ayuda es muy extensa; la mayoría de la documentación disponible de PowerBuilder, está incluida en
esta ayuda.
Guardar el trabajo
Después de completar un período de trabajo hay que guardar lo realizado; para hacerlo se ha de abrir el
menú File y seleccionar Save (Figura), así se guarda el objeto de PowerBuilder con sus propias
características.
Salir de PowerBuilder
Para abandonar completamente PowerBuilder, pulsar File | Exit. Antes de salir, PowerBuilder cierra todos
los painters abiertos y pregunta si
se quieren guardar o no los
cambios recientes, como se ve en
la Figura. Una respuesta Yes
guarda los cambios y cierra, una
respuesta No sale sin guardar los
cambios, mientras que Cancel no
efectúa la salida.
Hay que intentar el empleo de las barras de herramientas, los botones de cierre y las ventanas de control de
menú, en vez de los menúes, para las operaciones de guardado y salida, ya que es una forma más sencilla
y rápida. Es recomendable guardar periódicamente el trabajo sin salir cuando se elabora una tarea larga
dentro de un painter.
Presentación de painters
Utilización de menúes
Los menúes disponibles en el principio de las aplicaciones son importantes para desplazarse entre las
ventanas y para realizar ciertas tareas. Para llegar al painter de menú se pulsa doble click sobre un objeto
Menú.
Para crear un nuevo menú hay que pulsar en el botón New y así se abre el Menú Figura
Guardar el menú
Cuando se quiera guardar el menú se
elige File Save para abrir el cuadro de
diálogo Menú mostrado en la Figura y ahí
se puede guardar. Hay que asegurarse de
que esta resaltada la librería de aplicación
correcta en el cuadro Save cada vez que
se guarde un objeto nuevo.
Utilización de ventanas
Una ventana (wíndow) es una caja
rectangular que aparece en la pantalla
cuando se ejecuta un programa de
Windows. Se puede saber lo que es una
ventana, pero es posible que no se sepa
que hay varios tipos y montones de
diferentes maneras de programar para ellas
Pulsando New se crea una y se abre el
pintor de ventanas (ver Figura).
Guardar la ventana
Cuando se quiera guardar la ventana
dentro del painter de la aplicación,
hay que seleccionar File Save; esto
abrirá el cuadro de diálogo Save
Window que nos muestra la Figura y
se puede guardar la ventana.
En el espacio para texto se escribe el
nombre de la ventana, se insertan los
oportunos comentarios, se pulsa
sobre la PBL apropiada y se acepta
con OK.
Se utilizará la herencia (inheritance) para crear otras ventanas. Pulsar en el icono inherit para llegar al
cuadro de diálogo de la figura (en vez de en el botón New).
En este cuadro seleccionar la ventana antecedente de la cual se va a heredar, y pulsar el botón OK (ver
Figura).
• La PowerBar está presente todo el tiempo en PowerBuilder. Permite moverse entre la mayoría de los
pintores y contiene algunas herramientas como, por ejemplo, el icono Run Current Application, que
ejecuta el programa que se desarrolla en ese momento.
• La PainterBar es diferente para cada pintor. Contiene herramientas que se pueden necesitar dentro de
un pintor.
• La StyleBar es para manipulación de textos, con ella se puede cambiar cualquier tamaño de texto, tipo
de letra o estilo.
Aparece, como en la Figura, el cuadro de diálogo Create Library, en el que hay que introducir el nombre de
archivo para la librería y el directorio donde se quiere almacenarla. Cuando se ha terminado, se pulsa Save
o la tecla Enter.
Ahora aparecerá la
página de propiedades
para la librería (ver
Figura) en la que se
pueden introducir los
comentarios para la
PBL.
Para abrir la página de propiedades para una librería, se selecciona el nombre de la librería y se ejecuta uno
de los siguientes pasos:
• Pulsar el icono Properties en el Library PainterBar.
• Seleccionar Library Properties en el menú Library.
Selección de entradas
La mayoría de las funciones del pintor de librerías requieren que se seleccione primeramente una o varias
entradas. Se puede seleccionar una única entrada de PBL o definir un conjunto de entradas de PBLs en las
diversas formas siguientes:
• Para seleccionar una única entrada de PBL, pulsar sobre ella con el ratón.
• Para seleccionar varias entradas en una PBL, pulsar el nombre de la PBL y luego. o bien pulsar en el
icono Select AII de la Líbrary PainterBar, o bien elegir Library Select AII. Se resaltarán todas las
entradas como se ve en la Figura.
• Para seleccionar un rango de entradas, se puede pulsar en la primera y luego presionar Shift mientras
se arrastra el ratón pulsado hasta la última entrada. No se puede seleccionar un rango único que cruce
los límites de la PBL.
• Para seleccionar rangos adicionales no contiguos después de que se han elegido las entradas, se
mantiene pulsada la tecla Ctrl mientras que se selecciona la primera entrada de un nuevo rango y se
pulsa Ctrl+Mayús hasta llegar a la última entrada de este rango.
• Se pueden seleccionar varias entradas no contiguas Se mantiene presionada la tecla Ctrl mientras se
pulsa con el ratón en cada entrada. El resultado se ve en la Figura
Para copiar o mover una entrada o entradas desde una librería a otra, se seleccionan las entradas
deseadas y se realiza una de las siguientes operaciones:
• Pulsar el icono Copy o el icono Move en la PainterBar de la librería.
• Seleccionar Entry l Copy, o bien, Entry l Move en el menú de la librería.
La ejecución de una de estas acciones abre el cuadro de diálogo Select Library (ver Figura). Pulsar en el
adecuado directorio de destino y PBL, y luego pulsar OK. Las entradas se copiarán o trasladarán a la PBL
de destino.
PowerBuilder pedirá la confirmación de que se quiere realmente el borrado en cada entrada, como se ve en
la Figura. Pulsar Yes (como confirmación) para borrar la entrada.
También se pueden importar entradas de librería desde archivos de texto. Para hacerlo, se pulsa el icono
Import y se abre el cuadro de diálogo Select Import Files de la Figura. Aquí se eligen los archivos que se
quieren importar hasta la aplicación en curso de PowerBuilder.
Finalmente, se debería ver el cuadro de diálogo Import File into Library Entry (ver Figura) y, desde él,
seleccionar dónde se quiere situar la entrada importada.
Regeneración
Regeneración es un proceso muy importante en el desarrollo de aplicaciones en PowerBuilder, ya que
vuelve a compilar todas las entradas de librería que se seleccionen. Durante la ejecución pueden ocurrir
problemas cuando los objetos antecedente y descendiente tienen definiciones en conflicto. Esto pasará si
se hacen modificaciones en los objetos antecedentes y no se regeneran los descendientes. Por ejemplo, si
se cancela un control en una ventana antecedente, las ventanas descendientes mantendrán la suposición
de que el control existe todavía. Si se abren las ventanas descendientes en el painter de ventana,
PowerBuilder podrá quitar las referencias al control cancelado. Regenerando todos los objetos en una
aplicación se asegurará que problemas como éste se identifiquen y se resuelvan antes de que sea
ejecutada.
Para regenerar hay que seleccionar las entradas que se quieran someter a este proceso (generalmente
todas las de un PBL) y pulsar el icono Regeneration; así todas ellas quedarán regeneradas. Ver figura.
Utilización de DataWindows
1. Se puede crear o
modificar un objeto
DataWindow . Por ahora
se pulsa New para crear
uno nuevo. Se abre así el
cuadro New DataWindow
(ver Figura).
2. En el cuadro New
DataWindow, se
selecciona DataSource y
Presentation Style.
También se pueden fijar
DataWindow Options,
como se desarrolla en las
secciones siguientes.
Quick Select
El painter Quick Select permite construir un SQL Select solamente desde tablas que tengan una relación
predefinida entre la clave principal y la clave externa. En otras palabras. cuando se construye un Quick
Select, la primera tabla de la base de datos que se elija en la selección determina qué otras tablas (si
existen) se pueden tener en la selección. Sólo se podrá seleccionar desde otras tablas que tengan una
relación de clave externa con (o desde) la primera tabla elegida.
SQL Select
La elección de SQL Select proporciona más control sobre el proceso de pintado de SQL Select. Se puede
seleccionar desde múltiples tablas, incluso si no tienen una relación predefinida entre la clave principal y la
clave externa.
Stored procedure
Esta forma de obtener datos se utiliza cuando es necesario ejecutar un procedimiento almacenado en la
base de datos para traer los datos.
External
En este caso el objeto DataWindow es llenado manualmente por el usuario, se debe indicar de antemano
que columnas y que tipos de datos tendran las columnas para poder ser utilizada.
Freeform
Este estilo se utiliza frecuentemente para las ventanas de entrada de datos. Normalmente sólo muestra una
fila cada vez y no tiene información de encabezamiento ni de resumen. Se puede ver un objeto DataWindow
sin formato (freeform) en la Figura.
Tabular
Muestra típicamente varias filas de información cada vez. Es normal que este estilo tenga un segmento de
encabezamiento que contenga los títulos de las columnas. También suele tener un pie de página y filas de
resumen al final del informe. Una factura es un excelente ejemplo de un objeto DataWindow tabular, ya que
muestra muchas filas a la vez (líneas de factura) y tiene información de encabezamiento (los nombres y
direcciones de la compañía y del cliente, la fecha, etc.). así como una información de resumen (el IVA y el
importe total de la factura).
Grid
Este estilo de objeto DataWindow recuerda mucho a una hoja de cálculo; obliga al programador a situar las
columnas del segmento de detalle en una línea. Puede tener segmentos de encabezamiento, resumen y pie
siempre que estén dentro de una cuadrícula. Su mejor empleo es cuando se necesitan las características de
una hoja de cálculo, como las columnas que pueden ser dimensionadas de nuevo.
Label
Se utiliza para imprimir etiquetas de correo para informes.
N-Up
Normalmente se utiliza sólo para informes en los que se imprimirán múltiples filas resultantes en una única
línea de impresión. Cuando se define un informe N-Up, se especifica cuántas filas se dispondrán
horizontalmente en cada línea de impresión del detalle.
Group
Estos informes permiten crear grupos (o interrupciones de control) para clasificar y resumir.
Crosstab
Estos informes permiten resumir un gran número de filas de detalle en un pequeño número de filas de
resumen. Los Crosstab son los típicos resúmenes de dos vías mostrados en una cuadrícula. Por ejemplo,
resumiendo las ventas por productos dentro de las regiones, producirá una fila en el informe para cada
producto y una columna para cada región, con resúmenes en cada celda.
Graphs
Este estilo presenta los datos en formato de gráficos o cuadros.
Rich Text
Esta presentación se utiliza para incorporar datos dentro de un texto a partir de un archivo en Rich Text
Format (RTF).
OLE 2.0
Este estilo de presentación permite usar una aplicación de servidor OLE para gestionar la presentación del
objeto DataWindow. Por ejemplo un objeto DataWindow OLE que utiliza a Excel como aplicación servidora.
Composite
Este es un objeto DataWindow que sólo contiene otros objetos DataWindow. No tiene DataSource y se
emplea exclusivamente para informar.
Estilo de edición
Edit es el estilo por defecto, seleccionándolo en la ficha Edit de la página de propiedades de la columna del
objeto DataWindow (como en la Figura), se pueden definir muchas características de edición para la
columna.
Limit: En el cuadro Limit se especifican cuantos caracteres puede introducir el usuario. Si se especifica cero,
podrá introducir una cantidad ilimitada de ellos.
Accelerator: El cuadro Accelerator permite definir una tecla o secuencia de teclas que dirigirán el foco a la
columna asociada con ellas. (Recordemos que dirigir el foco (set focus) a una columna o control, significa
llevar el cursor a esa columna).
Format: Normalmente se emplea el cuadro Format para las columnas numéricas; introducir aquí un formato
produce que se adapten a él los datos de las columnas que han sido escritos. Por ejemplo, si se escribe
$#,### en el cuadro Format y el número 1234 como dato para la columna, este número se mostrará como
$1.234.
Auto Selection: Al activar esta casilla se le está diciendo a PowerBuilder que se resalte la columna cuando
reciba el foco y, como toda la columna se ha seleccionado, cualquier caracter que se escriba sustituirá a su
contenido actual. Si no se activa Auto Selection, el cursor irá al principio de la columna cuando ésta reciba
el foco.
Show Focus Rectangle: Si ésta característica está activada, PowerBuilder trazará un tenue rectángulo
alrededor de la columna si ésta tiene el foco.
Display OnIy: Para marcar una columna de solo-mostrar hay que activar esta casilla. Por defecto el usuario
está autorizado a editar la columna (También se puede conseguir el mismo efecto por medio del Tab Order).
Empty String is NULL: Una cadena vacía no se considera normalmente como NULL, pero cuando ésta
casilla está activada, PowerBuilder la convierte en NULL.
Password: Esta característica le dice a PowerBuilder que oculte el valor de una columna mostrando
asteriscos (*) en su lugar. Esta opción es útil para las columnas que se utilizan para introducir contraseñas,
cuyo valor no debe ser visto.
Required: Con esta opción se impide que la columna pierda el foco salvo que se introduzca un valor.
Auto Horz ScroII: Se activa esta casilla para permitir un deslizamiento horizontal automático. Si está
activada se pueden escribir más caracteres de los que entran en el campo de edición ya que mientras se
teclea el campo se va deslizando horizontalmente. Por defecto está sin activar, lo que quiere decir que sólo
se pueden introducir tantos caracteres como la columna pueda mostrar.
Auto Vert Scroll: Para que una columna se deslice verticalmente de forma automática cuando se necesite,
hay que activar esta casilla de verificación. Por defecto no se producirá el deslizamiento vertical.
Horz ScroIl Bar: Activándola, se crea una barra de deslizamiento horizontal en la columna.
Vert Scroll Bar: Activándola, se crea una barra de deslizamiento vertical en la columna.
Use Code Table:Esta opción utiliza una tabla de códigos para convertir en un valor mostrado, un valor de
dato introducido. Por ejemplo, se puede activar esta opción e introducir lo siguiente:
Si el usuario introduce uno de los valores de dato listados, la columna mostrará su valor asociado, y, si el
valor introducido no está en la lista, se verá el valor del dato en lugar del valor mostrado.
Validate Using Code Table: Cuando está activado, el usuario está forzado a introducir uno de los valores de
datos listados. Introducir cualquier otra cosa producirá un mensaje de error que diga que el valor introducido
para esta columna no pasa la prueba de validación.
Sorted: Activando esta casilla se muestra la lista de Display Values en un orden ascendente.
AIIow Editing: Alguna vez se querrá ofrecer al usuario una lista para elegir, pero otras veces se preferirá que
sea el propio usuario el que escriba su selección. Activando esta propiedad se le permiten al usuario ambas
posibilidades. Si la propiedad no está activada, el usuario tiene que rellenar la columna eligiendo en el
cuadro de lista.
Always Show List: Esta casilla de verificación convierte el cuadro de listas desplegable en un cuadro de
lista. Activando la casilla, el cuadro de lista siempre esta visible; si se desactiva, el cuadro de lista de
columna sólo se desplegará si la columna recibe el foco.
Always Show Arrow: Esta casilla siempre muestra la flecha que abre el cuadro de lista. Si está desactivada,
la flecha se mostrará cuando la columna reciba el foco.
Se utiliza la tabla de código para que el cuadro de lista desplegable muestre las selecciones, cualquiera de
éstas que elija el usuario se traducirá después a un valor de dato apropiado.
Las propiedades que se pueden definir para RadioButton son las siguientes:
Column Across: El cuadro Column Across controla el número de botones de radio que se muestran a lo
ancho del objeto DataWindow.
Left Text: Esta casilla de verificación le dice a PowerBuilder que ponga el texto en el lado izquierdo del
botón de radio. Si la casilla está desactivada, el texto se situará al lado derecho.
Scale Circles: Con esta casilla se le dice a PowerBuilder que escale el botón de radio a mayor o a menor
dependiendo del tamaño de la letra de la columna.
3-D: Por medio de esta casilla se le dota al botón de radio de un borde inferior, lo que, normalmente, le da
un aspecto visual agradable.
Data Value For: Con esta opción se define qué valores se han de retomar para cada estado de la casilla.
Normalmente, este valor de dato es S o N.
Scale: Propiedad similar a la Scale Circle utilizada para los botones de radio: ajusta el tamaño de la letra a
lo requerido por la columna.
3-States: No siempre las casillas de verificación han de ser Si o No, ya que PowerBuilder permite casillas de
tres estados, puede ser activada, desactivada o gris. Si se activa, aparece la opción Other en la lista Data
Value For, como se ve en la Figura.
el estilo EditMask en la ficha Edit de la página de propiedades y se obtienen las opciones disponibles para
este componente.
Algunas de estas opciones son las mismas que ofrece el estilo de editor por defecto, pero hay algunos
atributos nuevos para EditMask que son los siguientes:
Mask: Se utiliza este cuadro para seleccionar un EditMask predefinido desde el PowerBuilder; hay muchos
de ellos y pueden también ser EditMask definidos por el usuario.
Type: Normalmente el cuadro Type se establece como Display Only. La única vez que se permite cambiar el
Type es cuando PowerBuilder no puede determinar el tipo de dato de la columna.
Spin Control: Permite al usuario utilizar el ratón para incrementar o disminuir el valor de EditMask situando
un botón con una flecha hacia arriba y otro con la flecha hacia abajo dentro de la casilla del editor de
máscara. Activando Spin Control se pueden introducir atributos empleados en el Spin.
Spin Increment: Es el incremento (o disminución) del valor real del EditMask que se
puede conseguir con la pulsación en las flechas; cada vez que se pulsan se modifica en más o en menos.
Por ejemplo, si se tiene un incremento de 100 y el valor inicial de la casilla es 0, con una pulsación se
mostrará 100, con dos pulsaciones se mostrará 200, etc.
Code Table y Code Table Options: Esta tabla de código se define exactamente como aquellas tablas que se
han visto en el estilo de edición por defecto, en el estilo de los botones de radio y en las cajas de lista
desplegables. No obstante, cuando en EditMask se utiliza una Code Table, como en la Figura, el Spin
Control pasa a través de los valores de la Code Table en lugar de incrementar o disminuir el valor de la caja
EditMask.
Para que PowerBuilder pueda recuperar la lista desplegable desde una tabla de base de datos, las listas se
construyen utilizando los objetos DataWindows desplegables. que son también un tipo de cajas de lista
desplegables. En lugar de utilizar una tabla de código cableado el Drop-Down DataWindow (DDDW)
recupera su lista de valores de datos y de muestra por medio de un objeto DataWindow; por consecuencia
un DropDownDataWintow es un objeto DataWindow dentro de otro.
Para añadir un DropDownDataWindow al estilo de edición de una columna, lo primero que hay que hacer es
crear el objeto DataWindow utilizado para mostrar la lista de valores. Normalmente, estos objetos
DataWindows se construyen con el
estilo de presentación tabular.
En el diseño de la DataWindow, se
cancelan todos los titulares y todas las
columnas que no se quieren mostrar,
Como lo que se quiere mostrar es
solamente el código ésta será la única
columna que se vea (ver Figura).
Se guarda el DDDW con un nombre que empiece por dddw, , y se vuelve al ítem DataWindow; se
selecciona una columna, se abren las propiedades de edición y se elige Drop-Down DataWindow para el
estilo de edición.
Se ven ahora las propiedades
para este estilo, se elige el objeto
DataWindow que se quiera
asociar con esta columna (ver la
Figura).
Bandas de la dw
La ubicación de los objetos dentro del objeto DataWindow puede tener lugar en diferentes sectores del
objeto, estos sectores son llamados bandas
Los encabezados y colas de grupo aparecen para cada grupo en el reporte. Se pueden anidar tantos grupos
como se requiera.
En la pantalla, el pie de página aparece después del Detalle y del Sumario en el painter de DW. En el papel
este aparece en el final de cada página.
Para realizar cálculos sobre las filas del grupo se utilizan las bandas y para los campos computados se
utiliza la sintáxis “for group #”
Por ejemplo, para realizar la suma de ventas de los días del mes de enero se utilizará la siguiente sintaxis
en el campo computado:
En la solapa de expresiones se pueden escribir expresiones para la propiedad especifica asociada al objeto
columna. Utilice la función If() para incluir testeos condicionales en una expresión:
Existen muchas funciones, entre ellas, funciones que le permitirán basar un cambio de una columna en el
status de una fila en una DW.
Por ejemplo, se pretende proteger el campo clave de aquellas filas que sean traídas de la base de datos, es
decir, solo se podrán modificar las claves de las filas nuevas, entonces en la propiedad Protect se debería
utilizar la siguiente expresión:
If(IsRowNew(),0,1)
Reportes complejos
Creación de crosstabs
Para usar el estilo crosstab:
Luego, mediante la solapa general en las propiedades del reporte anidado se pueden asociar los
argumentos del reporte anidado con los argumentos o columnas del reporte base.
1. Crear una nueva datawindow con estilo composite. En este estilo no se seleccionará ninguna fuente de
datos (Figura)
4. Presionar click derecho sobre el reporte principal o sobre los componentes para modificar los
argumentos.
Varias opciones que están disponibles en la hoja de propiedades permiten cambiar la apariencia del reporte,
las mas relevantes son: (Figura)
Trail Footer: Esta opción controla la impresión del pié de página, si está seleccionada fuerza al pié de
página a aparecer inmediatamente al final del reporte, de otra forma aparecerá al final de la hoja.
Los reportes componente son objetos dentro del reporte compuesto. Para acceder a dichos objetos se debe
utilizar el nombre de cada componente. Como cualquier otro objeto en la datawindow, se puede nombrar a
un objeto reporte usando la hoja de propiedades.
Se utiliza la función getchild() para retornar una referencia a un reporte anidado. Luego se podrá utilizar la
referencia a la datawindow para manipular el reporte.
datawindowchild ldwc_reporte
dw_compuesta.getchild(“dw_empleados”,ldwc_reporte)
Imprimir reportes
Para imprimir una sola datawindow se utiliza la función print(). PowerBuilder utilizará las fuentes y la
disposición en pantalla que aparecen en el objeto DataWindow.
dw_reporte.print(true)
El argumento opcional en la función print() determina si se mostrará un cuadro de dialogo que permite al
usuario cancelar la impresión. Por defecto el argumento es true, lo que significa que el cuadro de diálogo
aparecerá
De la datawindow
Se pueden modificar las opciones relacionadas con la impresión del objeto DataWindow como parte de su
definición, se seleccionará la solapa Print Specifications de las propiedades del objeto DataWindow.
Las especificaciones de impresión principalmente permiten cambiar los márgenes, el tamaño del papel y la
orientación. (Figura)
De la impresora
Se puede permitir a los usuarios acceder al cuadro de diálogo de las opciones de impresión en cualquier
momento.
Se puede codificar una opción de menú o un botón que contenga el siguiente código:
PrintSetup()
El código anterior provoca la aparición del cuadro de diálogo de las opciones de impresión.(Figura)
Validaciones en la DataWindow
Las validaciones basadas en el servidor, por otro lado, generalmente tienen su lugar en forma de controles
de integridad referencial, restricciones, procedimientos almacenados y triggers. Son controles centralizados,
fáciles de mantener y actualizar y garantizan que los datos son verificados, aún si el programador olvido
hacerlo en la aplicación.
Reglas de validación
Las reglas de validación son expresiones que generan un resultado booleano (VERDADERO o FALSO). Por
lo tanto, cuando se construye una regla, se construye una expresión de manera que el resultado pueda ser
evaluado como verdadero o falso. Puede ser pensado como una sentencia if:
Las reglas son ejecutadas automáticamente cuando se modifica una columna y se presiona ENTER, TAB,
flecha arriba, flecha abajo o se clickea en otro objeto de la dw.
También se procesan las funciones de update() y acceptext().
En el campo Validation Expression se podrá ingresar la validación o hacer doble click para ingresar a una
ventana que permitirá la especificación de la regla.
Un edit mask consiste en caracteres especiales que determina lo que el usuario puede o no ingresar.
También contiene signos de puntuación para ayudar al usuario.
Un edit mask pre-valida el ingreso del usuario al hacer foco en el tipo correcto de datos. (Figura)
Se deberá asegurar que todos los datos requeridos son ingresados antes de enviar una sentencia SQL a la
base de datos.
Para hacer que una columna sea de ingreso obligatorio se deberá chequear la opción requiered de la
solapa edit en el painter dw. (Figura)
Hay que tener en cuenta que la validación se ejecuta si el usuario posiciona el foco en la columna, de otra
manera, no se realiza ninguna validación.
Tabla de códigos
Trabajar con tablas significa tener una representación alternativa de los datos en la base para ser
mostrados al usuario.
La tabla de códigos posee datos que son internos (códigos), que pueden ser guardados en la base o
utilizados en consultas y datos externos, que son mostrados al usuario (display).
Este tópico ya fue tratado al ver los estilos de edición de la dw.
Validación de datos
Ingresar la clave ddv=1 en la propiedad tag del campo que contiene la dddw.
En este ejemplo también tenemos la clave dda=. Esta clave indica los campos del objeto datawindow que
forman parte de los argumentos de Retrieve de la dropdown datawindow.
En este caso, el campo se llama “plan”, el cual tiene asignada una dropdown datawindow que contiene dos
argumentos de retrieve (unidad Academica y carrera), para ello se le indica al objeto uo_dw que los valores
de los argumentos los recupere de los campos unidad_academica y carrera.
Esto se indica de la siguiente forma: dda=unidad_academica, carrera;
Verificar que estos campos deben existir en la SELECT utilizada en el objeto datawindow:
SELECT dba.sga_planes.unidad_academica,
dba.sga_planes.carrera,
dba.sga_planes.plan
FROM dba.sga_planes
Valores requeridos
Para indicar los campos que necesitan que tengan un dato ingresado al momento de Grabar, se debe
setear la propiedad “Required”. Al Grabar los datos ingresados en una datawindow, el objeto “uo_dw” valida
si existe algún campo requerido con valor Nulo.
En este ejemplo se intentó grabar sin asignar un Tipo de Aula. El Nombre del campo que muestra la
ventana de mensaje lo recupera del título del campo que tenia seteada la propiedad Requiered. Para ello el
nombre del Titulo del campo debe ser el nombre del campo en la datawindow + el postfijo “_t”, es decir
“tipo_aula_t”. De no encontrarse el campo de texto que indica que es título de ese campo, mostrara el
nombre que tiene asignado el campo en la datawindow.
Para indicar esto, se seteara en el atributo “tag” del campo “Legajo” las siguientes claves:
Clave Descripción
val= nombre_dw_validacion Nombre del objeto datawindow de Validación
rtv= campo1, campo2, …, Lista de campos del objeto datawindow que seran usados como
campo_n argumentos de Retrieve en el objeto datawindow de Validación.
El campo donde se encuentran estas claves, es decir el campo
que se desea validar, no debe estar indicado en esta clave, ya
que se considera como último argumento de Retrieve de la dw
indicada en la clave val.
Esta clave puede no estar, pero siempre, la dw de validación
tendrá un argumento de retrieve que es el valor del campo que
se desea validar. En este ejemplo el campo legajo.
dev= campo1, campo2, …, Lista de campos que seran cargados con un valor, si se encontró el
campo_n dato que se busca. En este ejemplo validar si existe el legajo
ingresado
Las claves con sus valores, deben estar separadas por coma (;)
Para el ejemplo los valores son:
val= dval_alumno_legajo;
dev= , , , apellido, nombres;
rtv= unidad_academica, carrera /* además de estos dos campos, esta el campo 'legajo'*/
Como puede observarse el objeto datawindow “dval_alumno_legajo” tiene tres Argumentos de Retrieve
(unidad_academica, carrera, legajo) pero solo los dos primeros argumentos son indicados en la clave rtv
(rtv=unidad_academica, carrera) ya que como ultimo argumento se pasa implicitamente el valor del campo
legajo.
Ordenamiento
Por ejemplo:
• Si se desea ordenar por el campo “Legajo”, el nombre del Título del campo legajo deberia ser: legajo_t
• Para ordenar por el campo “Apellido y Nombre” el nombre de este Título debería ser: nombre_alumno_t
Búsqueda de datos
Boton de búsqueda
A veces se necesita una ayuda para buscar ciertos datos en una datawindow, ello puede conseguirse
agregando un boton en la datawindow para tener la posibilidad de abrir una ventana de búsqueda y
selección del dato que necesitamos.
En la dw desde donde se abrirá la ventana de búsqueda, hay que colocar un botón con las siguientes
características:
• El nombre del Botón debe comenzar con el prefijo busq_ . Por ejemplo: busq_alumnos
• En la propiedad tag deberá tener los siguientes códigos (deben estar separados por punto y coma (;)
uno de otro:
Claves Descripción
dobj= Nombre de la dw de búsqueda
nombre_datawindow_busqueda
wnd= nombre_ventana_busqueda Nombre de la Ventana de busqueda a Abrir. Si se personaliza esta
ventana, debería ser heredada de la ventana w_busqueda. Si no se
especifica este campo, la ventana por default es la w_busqueda.
cdw= nombre_control_datawindow Nombre del control datawindow que contiene la dw de busqueda en
la ventana w_busqueda. Por default es el control dw uo_dw_filtros.
cmp=nombre_campo1, Lista de campos del objeto datawindow a los cuales se les quiere
nombre_campo2,..., asignar un valor. Estos valores son los que devuelve la ventana
nombre_campoN w_busqueda.
Debe tenerse en cuenta el orden y el tipo de dato de los campos de
la SELECT del objeto datawindow de busqueda (identificado en la
clave dobj)
param= parametro1, parametro2, Lista de los nombres los campos del objeto datawindow que seran
parametro3, ...., parametroN usados como argumentos de Retrieve en el objeto datawindow de
búsqueda.
Se convertiran todos los valores de los campos a string.
Esta clave no debe estar si el objeto datawindow de busqueda no
tiene argumentos de Retrieve.
cntf= n Cantidad de filas que se visualizarán en el objeto datawindow de
busqueda. Esta clave no es obligatoria, por default se visualizarán 5
filas.
Las únicas claves requeridas son dobj y cmp, los demás pueden no estar (tienen asignados valores por
default)
Ejemplo 1:
“wnd=w_busqueda ; cdw= uo_dw_filtros ; dobj=dbusq_alumnos; cmp=legajo, nombre_alumno, tipo_doc,
nro_doc; cntf=12 ; param=unidad_academica”
En este ejemplo, se abrirá la ventana de busqueda w_busqueda, en ésta se creará el control datawindow
uo_dw_filtros, el objeto datawindow a visualizar es dbusq_alumnos, los campos que serán cargados con
el valor retornado por la ventana de búsqueda son: legajo, nombre_alumno, tipo_doc y nro_doc (Estos
campos deben estar en este orden en la SELECT del objeto datawindow de la ventana de búsqueda), y el
campo que se utilizará como argumento de retrieve en el objeto datawindow dbus_alumnos es el valor del
campo unidad_academica.
Ejemplo 2:
“wnd=w_busqueda_ug; dobj=d_localidades_encontradas;cntf=10;
cmp=localidad,loc,dpto_ptdo,prov,pais,cp;”
Ejemplo 3:
“dobj=dbusq_alumnos; cmp= , , apellido, nombre, ,localidad”
En este caso se recuperarán los valores de los items que estan en el 3ro, 4to y 6to lugar de los campos de
la SELECT de la datawindow “dbusq_alumnos”.
Importante: La estructura que devuelve la Ventana de búsqueda corresponde al orden de los campos de la
SELECT de la datatawindow de búsqueda definida en dobj. Por este motivo es que deben coincidir los
campos que se indican en la clave cmp (deben coincidir en orden y tipo de datos).
La select podría tener mas campos pero estos serán ignorados en la datawindow original.
Se desea recuperar y cargar los valores de los campos: apellido, localidad y edad, la clave cmp debe
estar compuesta de la siguiente forma:
El string ingresado en la clave cmp tiene 5 items, donde solamente 3 (apellido, localidad y edad) son los
nombres de los campos de la dw que se quiere cargar con los datos devueltos por la ventana de búsqueda.
Se desea recuperar y cargar los valores de los campos: legajo, apellido, y nro_documento, la clave cmp
debe estar compuesta de la siguiente forma:
El string ingresado en la clave cmp tiene 5 items pero solamente 3 de estos items seran seteados en los
campos de la datawindow.
El 1er, 2do y 5to parámetro corresponden a los campos legajo, apellido y nro_documento, los cuales
seran seteados con los valores que devuelve la ventana de búsqueda.
El 3er y 4to parámetro corresponden a nombre y nro_documento, estos no fueron indicados en la clave
cmp por consiguiente no seran seteados en la datawindow.
• Los campos por los que se desea realizar la búsqueda, NO deben ser de tipo “Computed Field”.
Debido a que estos son ubicados en la clausula WHERE de la Query en la datawindow cuando se
realiza la búsqueda.
• El boton tiene como nombre dbusq_alumno. En la propiedad tag de este boton se encuentra el siguiente
string:
wnd=w_busqueda;cdw=uo_dw_filtros;dobj=dbusq_alumno; cntf=8 ; cmp=carrera,legajo,apellido,nombres;
param=unidad_academica;”
Como se ve, la consulta tiene un argumento de Retrieve (:ua) el cual fue pasado como parametro a la
ventana ya que se lo indico en la clave param (param=unidad_academica)
La Clave cmp indica que debe asignarse valor a los campos carrera, legajo, apellido y nombres. Estos
valores son recuperados de los campos de la select: dba.sga_alumnos.carrera, dba.sga_alumnos.legajo,
dba.sga_personas.apellido y dba.sga_personas.nombres. Si quisiera solo el legajo y nro de Inscripcion, la clave
quedaría conformada de la siguiente manera: cmp= ,legajo, , , ,nro_inscripcion
El cuadro Select Application permite la elección de diferentes aplicaciones como se muestra en la Figura.
Para crear una nueva aplicación, simplemente hay que seleccionar File New y se esplegará el cuadro de
diálogo que se ve en la Figura, el cual abre a su vez el cuadro New (ver Figura). Se elige la solapa Start
Wizards y se selecciona el objeto aplicación.
Aquí se selecciona un PBL existente o se introduce el nombre de un nuevo PBL en que se almacenará la
aplicación. Cuando se ha terminado de seleccionar o introducir el PBL de una nueva aplicación, hay que
pulsar en Finish.
En el cuadro de diálogo Select Library se elige PBLs para añadir a la ruta de búsqueda: cuando se ha
terminado, pulsando Open aparecerá el nombre del PBL elegido para la ruta de búsqueda, como se aprecia
en la Figura.
En este
momento el
sistema
requiere un
nombre para
el
ejecutable,
el nombre
del archivo
de recursos,
las opciones
para
construir el
proyecto, las
opciones
para
generar el
código y las
opciones
relativas a
las
bibliotecas
(véase la
Figura).
Una vez terminado. siempre que se utilice el pintor de proyectos para compilarlo de nuevo, éste se
encargará de regenerar. convenir las bibliotecas en DLLs, emplear todos los recursos deseados y compilar
la aplicación para obtener un archivo EXE de Windows.
Pulsar File, Save en el menú para almacenar la definición del proyecto en un archivo
PBL. Para ello se abre el cuadro de diálogo Save Project
Opciones de construcción
La definición del proyecto sirve para definir y guardar las opciones que deben emplearse para crear los
archivos ejecutables. En las siguientes secciones se abordan cada una de estas opciones.
Prompt for Overwrite Hay que marcar esta opción si se desea que PowerBuilder pida
siempre confirmación antes de escribir sobre un archivo existente (EXE, PBD o DLL).
Rebuild Las opciones posibles son Incremental o Full. Es recomendable realizar una construcción completa
(regenerar) de todas las definiciones de los objetos de la aplicación antes de crear los archivos ejecutables
definitivos.
Una reconstrucción de actualización (Incremental) puede serlo más conveniente para crear archivos
ejecutables preliminares durante la fase de desarrollo y pruebas. Únicamente se regeneran las definiciones
de los objetos que han cambiado desde la última reconstrucción.
Tanto si se están construyendo ejecutables para su uso en plataformas de 16-bits como de 32-bits, se debe
realizar una reconstrucción total para tener la certeza de que el archivo EXE se regenera adecuadamente.
Machine Code Es preciso seleccionar esta opción para construir los archivos de código máquina
ejecutables (EXE y PBDs).
Trace Information Cuando se selecciona esta opción al generar código máquina se activa una
característica muy importante. Esta opción permite rastrear el curso de la ejecución de la aplicación y la
creación y destrucción de los objetos. La información de rastreo se almacena en un archivo de texto que
puede abrirse después con cualquier editor de texto. Puede emplearse por ejemplo Microsoft Word para
revisar e imprimir este archivo. Como rastrear la ejecución de la aplicación puede reducir su rendimiento y
puesto que el archivo generado puede ser muy voluminoso, sólo es recomendable seleccionar esta opción
durante la última fase de producción.
Error Context Information Hay que marcar esta opción si se desea que PowerBuilder muestre la
información sobre el contexto (objetos, sucesos y el número de línea del script) en los errores que sucedan
durante la ejecución del código máquina.
Optimization Tanto para Windows como para Macintosh, se puede optimizar el tamaño y la velocidad de
los archivos ejecutables en código máquina.
PBD Hay que marcar esta opción para construir una biblioteca de ejecución dinámica (el Pcode de una PBD
o el código máquina de una DLL para un entorno específico).
Resource File Name Es preciso asignar un nombre para el archivo de recursos de PowerBuilder (PBR) si
se quieren incluir los recursos empleados (BMPs o ICOs) en una biblioteca dinámica. Si no se copian en
dicha biblioteca, los recursos deben incluirse en el ejecutable (EXE) o bien distribuirse como archivos
externos independientes.
Para asignar un nuevo objeto DataWindow hay que escribir el código anterior y añadir el dataWindow object
al archivo de recursos:
libraryOrigen.pbl (dw_ejemplo)