1. Suite de Desarrollo con
SmartObjects
Para aplicaciones en OpenEdge de Progress
Integrada al AppBuilder
Desarrollado por
Rafael Laya
email: rlayam@gmail.com
Celular (58) 4242429625
2. El Modelo de Desarrollo de Aplicaciones (ADM) es una metodología para construir
aplicaciones de Progress® 4GL basadas en componentes reutilizables llamados SmartObjects.
Fue actualizado para OpenEdge™ y así aprovechar las mejoras del Progress® 4GL.
Todos los archivos de soporte para la arquitectura ADM se encuentran en una estructura de
directorio en src/adm2
La arquitectura ADM tiene cuatro componentes básicos:
• Un conjunto jerárquico de clases de objetos a partir del cual desarrollar SmartObjects. Estos son
objetos de aplicación reutilizables (visualizables o no visualizables) que se asignan a archivos
fuente o unidades de compilación.
• SmartLinks, para establecer un sistema de mensajería definiendo enlaces (rutas de comunicación)
entre los SmartObjects.
• Propiedades, para definir los datos públicos asociados con SmartObjects obtenerlos y
configurarlos
• Superprocedimientos, para realizar acciones de SmartObject.
3. El diseño de esta arquitectura se basa en varias características importantes del Progress
4GL:
o Súper procedimientos
o Procedimientos persistentes
o Procedimientos
o Funciones internas
o Nombres de preprocesadores
o Tablas temporales
o Archivos de inclusión
Este diseño se implementa en el cuerpo de código de soporte de la arquitectura
y es totalmente compatible con AppBuilder.
Para obtener información sobre AppBuilder, consulte OpenEdge Development:
AppBuilder.
.
4. El ADM te muestra cómo se pueden resolver algunos de los problemas más comunes que se
encuentran en el desarrollo de aplicaciones a gran escala:
• Mantenibilidad: organizar su proceso de desarrollo para que las aplicaciones sean fáciles
de mantener.
• Aspecto y funcionamiento estándar: establece un aspecto y un funcionamiento coherentes
para dar a sus aplicaciones un toque profesional y mejorar la usabilidad.
• Reutilizabilidad : escribir código que pueda usarse una y otra vez.
• Ensamblaje de aplicaciones: organizar su proceso de desarrollo para que sea fácil
ensamblar e integrar rápidamente módulos de código para producir aplicaciones nuevas
y variadas.
• Independencia del módulo: reducción de problemas a gran escala en módulos de
componentes en los que se puede trabajar de forma independiente.
18. Vamos a usar un SmartDataObjects de Mantenimiento
19. Si le damos doble click con el mouse a la caja
Nos muestra que
hay un Query para
la tabla Mensaje
Si pulsamos el
botón Query
20. Se muestra el Query
Builder para que
podamos construir
nuestro Query
Seleccionamos la Tabla
Paciente
21. Pulsamos el botón
Add y luego a la
Tabla Mensaje del
lado de las
Selected Tables
colocamos el
cursor y pulsamos
el botón Remove
Ahora tenemos el
Query de Paciente
22. Vamos al menú del Query Builder y marcamos Sort
Y seleccionamos Cedula y
pulsamos el botón Add
Indicamos Ascending
23. Tenemos el Query de la tabla Paciente con el sort por
Cedula
Ahora pulsamos el botón Fields para incorporar los
campos de la tabla Paciente
25. Regresamos al AppBuilder y en el Menú pulsamos el botón Procedure Settings
Y Luego en el diálogo Procedure Settings el botón
Method Libraries
Podemos ver las librerías de la Suite que
contiene el código que controla el
SmartDataObjets y que aplica para
cualquier tabla
26. Si pulsamos el botón Edit Code Y cambiamos
ASSIGN
vnbMant = "Infrad-in0401.w". Por
ASSIGN
vnbMant = "Consultad-paciente.w".
Que será el Diálogo para hacer
mantenimiento de la tabla Paciente
Y procedemos a guardarlo como dt-paciente.w el
directorio SDO
28. Se nos presenta un Mago o Wizard para ayudarnos a
crear el Browser
Si pulsas Next en el Mago te muestra
un diálogo para que selecciones el
origen de los datos
Debe indicar SmartDataObject
Y Pulsamos el botón Browse
30. Si le das Next y luegoAdd Field Puedes seleccionar los campos que se mostraran
en el Browser
31. Una vez seleccionados los campos Terminamos con el Mago pulsando
el botón Finish y el Mago te felicita
32. Ahora vemos el browser que nos
creó el Mago
Si le damos doble click al objeto,
podemos cambiar el título a
Relación de Pacientes
33. Si pulsamos el botón Color
Podemos seleccionar como Foreground color el 1 azul
Y como Background color el 15 blanco
34. Y tenemos el Browser y lo salvamos en el directorio Consulta
35. Si pulsamos Procedure Settings y luego Pulsa el botón Method Libraries
Podemos ver las librerías de la Suite que
contiene el código que controla el SmartBrowser
y que aplica para cualquier tabla
36. En la lista de Template seleccionamos
Suite Viewer y pulsamos el botón OK
Y entonces aparece el Mago o Wizard y
debemos pulsar Next
37. El Mago te muestra un diálogo para que
selecciones el origen de los datos
Buscamos en SDOdt-paciente.w
38. Si pulsa el botón Next
Vamos a seleccionar los campos a mostrar en el
View y debemos pulsar Add Fields
39. Se muestran los campos disponibles Seleccionamos y pulsamos Add
43. Vamos a seleccionar un
Diálogo de
Mantenimiento de
media pantalla
Pulsamos el botón OK
44. Tenemos el Frame del Diálogo
Pulsamos el
botón con un
grafico de
base de
datos
Y cuando
pasamos el
cursor por
encima del
frame. El
cursor tiene
la misma
imagen del
gráfico
45. Te muestra un Diálogo de la Base de Datos y sus Tablas para procedas a
seleccionar los campos que vas a incorporar al Diálogo de mantenimiento
En nuestro caso seleccionamos Paciente y le damos OK
46. Se muestran los campos de la Tabla Paciente Los seleccionamos todos y pulsamos el botón Add y OK
47. Se muestra el Diálogo de Mantenimiento con los
campos seleccionados
Una vez organizada la presentación de los
datos y el orden de llenado lo vamos a
guardar con el nombre d-paciente.w en la
carpeta Consulta
48. Esta es la parte mas importante porque vamos ajustar el Código a las necesidades del proyecto
Si seleccionamos el campo Cedula y con el botón Edit Code se mos muestra el Código que va en el
triggers Leave y colocamos la validación si dejas el campo en blanco o con un valor inválido da un
mensaje de error y se devuelve al campo
49. Solamente vamos a exigir que ingrese información obligatoria a Cédula, Nombre y Dirección
50. Vamos a recorder que el Diálogo
d-paciente.w se direcciona desde el
SmartDataObjects dt-paciente.w
Y cuando pulsan un botón en la Windows se
va a ejecutar una rutina específica en el
dt-paciente que va a levanter el Diálogo
d-paciente.w
51. En el d-paciente.w la primera rutina que se ejecuta es PIDISDATO y alli se determina que botón
se pulsó y cuales van a ser las rutinas a ejecutarse
52. PIASIGNA
/*------------------------------------------------------------------------------
Purpose: Realizar asignaciones adicionales, para cuando existen campos
que no
se ven o que estan deshabilitados.
Parameters: <none>
Notes: Se colocan las asignaciones literales.
------------------------------------------------------------------------------*/
PIAYUCAM
/*------------------------------------------------------------------------------
Purpose: Realizar el llamado a las ayudas
Parameters: <none>
Notes: Cuando se regresa de la ayuda debe realizarse la busqueda del
registro y mostrarse en la pantalla
Colocar dentro del case el nombre del del campo y asociar a su
codigo, pueden basarse en el ejemplo.
------------------------------------------------------------------------------*/
PICREAREG
/*------------------------------------------------------------------------------
Purpose: Crear registro
Parameters: <none>
Notes: Coloca en la pantalla los valores iniciales, se realizan
asignaciones
directas al "SCREEN-VALUE" de los campos participantes.
------------------------------------------------------------------------------*/
PIMUESENC
/*------------------------------------------------------------------------------
Purpose: Si existe una tabla de la cual se dependa, se busca y muestra
Parameters: <none>
Notes:
------------------------------------------------------------------------------*/
PIDESPLIEGA
/*------------------------------------------------------------------------------
Purpose: Localiza el registro a dar mantenimiento
Parameters: <none>
Notes: Si existen registros depENDientes es en este punto donde se realizan
las busquedas adicionales.
------------------------------------------------------------------------------*/
PIVALCAP
/*------------------------------------------------------------------------------
Purpose: Realizar las validaciones asociadas a los diferentes campos.
Parameters: <none>
Notes: Se valida que los campos requeridos no esten vacios y los campos
catalogados existan en sus catalogos.
------------------------------------------------------------------------------*/
Rutinas en el Diálogo de Mantenimiento
53. Ejemplo de codificación
de la rutina de validación
PIVALCAP
PIVALCAP se ejecuta
Cuando se pulsa el
Botón Aceptar en el
Diálogo
54. Programado en el FRAME del Diálogo
F2 OR MOUSE-SELECT-DBLCLICK OF FRAME {&FRAME-NAME}
ANYWHERE
DO:
RUN PIAYUCAM.
END.
Si tienes un campo en el Diálogo que
tenga una ayúda debes colocar … Antes
del label para que el operador entienda
que puede invocar una ayuda
Si tienes el cursor en el campo y pulsas F2 o
haces doble click se ejecuta la rutina
PIAYUDACAM
55. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE PIAYUCAM Dialog-Frame
PROCEDURE PIAYUCAM :
/*------------------------------------------------------------------------------
Purpose: Realizar el llamado a las ayudas
Parameters: <none>
Notes: Cuando se regresa de la ayuda debe realizarse la busqueda del
registro y mostrarse en la pantalla
Colocar dentro del case el nombre del del campo y asociar a su
codigo, pueden basarse en el ejemplo.
------------------------------------------------------------------------------*/
ASSIGN
vidayuda = ?
vfecha = ?.
DO WITH FRAME {&FRAME-NAME}:
CASE SELF:NAME:
/* Colocar tantos bloques como ayudas necesite */
WHEN "Cedula" THEN DO:
ASSIGN
Consulta.Cedula:SCREEN-VALUE = ""
vnombre:SCREEN-VALUE = "".
RUN AyudasPacientes.w (INPUT-OUTPUT vidayuda).
FIND Paciente WHERE ROWID(Paciente) = vidayuda NO-LOCK NO-ERROR.
IF ERROR-STATUS:ERROR THEN RETURN NO-APPLY.
DISPLAY
Paciente.Cedula @ Consulta.Cedula
Paciente.Nombre @ vnombre
WITH FRAME {&FRAME-NAME}.
END.
END CASE.
END.
RETURN NO-APPLY.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
Programación de la rutina PIAYUDACAM
para el ejemplo anterior
Puedes tener ayudas para cualquier
cantidad de campos
En los Templates de la Suite hay ejemplo
de como se construye una ayuda
56. Seleccionamos una Windows que
tenga SmartObject para hacer
mantenimiento de la tabla Paciente
Pulsa OK
57. Me muestra una
Windows con
1. un browser
2. un view
3. un smartdataobject
4. botón Salir
5. botón Selec
6. botón Imprimir
7. botón Agregar
8. Botón Modif
9. Botón Eliminar
El ejemplo muestra la tabla de Programa
58. Si en el menú del AppBuilder pulsamos el botón RUN
59. Los menú de la
Windows están
alineados con
los botones
60. Si pulsamos el botón Selec o el Menú Seleccionar nos muestra
un diálogo para Seleccionar
Nota Importante
Los campos de Tipo de
Consulta se determinan
por el orden que se
colocaron en el
SmartDataObjest .
Solo se muestran los
primeros 8
62. Se muestra el resultado de la selección
Y si pulsamos
nuevamente el
botón Selec
63. Y luego en e diálogo Salir Se restaura la lista del Browser y si
pulsamos el botón Imprimir
64. Se muestra el Visor de PDF de la Suite con el reporte en PDF Portrait del
contenido del Browser
Tambien existe la opción de imprimir en PDF Landscape
65. Si en la Windows se pulsa el botón Agregar
Se muestra el
Diálogo
d-in0201.w
para ingresar
un registro
66. Se llena los datos del Diálogo y se pulsa Aceptar La Suite solicita confirmación
68. El ejemplo modificando un registro si pulsa Aceptar la Suite solicita confirmación
Eliminar un registro opera de la misma forma
69. En el AppBuilde levantamos la
Windows w-in201.w
Mantenimiento de la tabla
Programa y pulsamos el botón
Procedure Settings y luego el
botón SmartLink (enlaces)
Podemos observar los mensajes
que se envían de un objeto a otro
70. Si editamos el código del programa vemos si en el menú se pulsa Imprimir entonces
se simula que se pulso el botón BTIMPRESION y esté va a ejecutar la rutina listar en el
browser
71. Vamos a crear el mantenimiento de otra tabla a partir del template
Ventana mantenimiento usando SmartDataObject
72. Creamos un directorio Prueba bajo Codigo y vamos a guardar el
template como w-prueba.w
73. En este ejercicio vamos a convertir el template en una Windows de mantenimiento de la tabla
Paciente
Como ya habíamos creado un proyecto llamado Consulta Médica tenemos una tabla Paciente y ya
tenemos : Un smartdataobject dt-paciente.w un browser b-paciente.w, un view v-paciente y un diálogo
de actualización d-paciente.w
74. Si le damos doble click a browser en la Window. Vemos que el objeto tiene un handle
llamado h_b-in0201 el Master file es Infrab-in0201.w
Si pulso el
botón File
75. Si modifico la ruta del
Archivo y direcciono a
Consultab-paciente.w
Le damos OK y luego
respondemos Si
85. Si en el menú del AppBuilder pulsamos el botón RUN
86.
87. Nota Importante
Los campos de Tipo
de Consulta se
determinan por el
orden que se
colocaron en el
SmartDataObjest .
Solo se muestran los
primeros 8
Si pulsamos el botón Selec o el Menú Seleccionar nos
muestra un diálogo para Seleccionar
88. Se muestra el Visor de PDF de la Suite con el reporte en PDF
Portrait del contenido del Browser
También existe la opción de imprimir en PDF Landscape
89. Segundo Método para crear una Windows con SmartDataObjects
integrados para realizar mantenimiento de una tabla y otras funciones
Selecciono: Ventana mantenimiento
usando SmartDataObject Y obtengo
90. Guardo la Windows en la Carpeta Prueba con el código w-prueba2.w y
luego voy a Procedure Editor
92. Y vemos el código del
programa w-prueba2.w
Para efectos prácticos voy a
usar como editor del
programa a Sublime Text
93.
94.
95.
96.
97.
98.
99.
100. La Windows que creamos w-prueba2.w Mantenimiento de la Tabla Paciente se parece a la
Windows w-paciente.w Mantenimiento de los Pacientes pero hay diferencias
101. En w-prueba2.w si pulsas el botón Selec
muestra el filtro que tiene por defecto la Suite
d-fi0001.w
En w-paciente.w si pulsas el botón Selec se
muestra el filtro d-fpacientes.w
102. En w-prueba2.w vemos el código
que se ejecuta cuando pulsas el
botón Selec
En w-paciente.w vemos el código
que se ejecuta cuando pulsas el
botón Selec
103.
104.
105. El código de la Suite se fundamenta en instrucciones de
Preprocesador y así funciona para cualquier tabla del sistema y
componentes como la Windows y los frames
106.
107.
108.
109.
110.
111.
112. Copio los botones en esta Windows Paste los botones en esta Windows
113.
114.
115.
116. Si queremos ingresar una
Windows de menú que
direcciones a las tablas de la
Suite
Podemos ver la Windows y se le
damos Run en el AppBuilder
117. Menú de las Tablas de la Suite
1. Configuración
2. Programas
3. Reportes
4. Mensajes
5. Programas HTML
118. Reporte en PDF Orientación Portrait
Usa tres includes file: {Includei-re0101.i}, {Includei-re0102.i} y {Includei-re0103.i}
119. Reporte en PDF Orientación Landscape
Usa tres includes file: {Includei-re0101.i}, {Includei-re0202.i} y {Includei-re0203.i}
120. Reporte en Texto Orientación Portrait
Usa tres includes file: {Includei-re0101.i}, {Includei-re0102.i} y {Includei-re0113.i}
Tiene un visor para mostrar el reporte en pantalla
121. Reporte en Texto Orientación Portrait
Usa tres includes file: {Includei-re0101.i}, {Includei-re0102.i} y {Includei-re0113.i}
Tiene un visor para mostrar el reporte en pantalla
122. Reporte en Texto Orientación Portrait
Usa tres includes file: {Includei-re0101.i}, {Includei-re0202.i} y {Includei-re0213.i}
Tiene un visor para mostrar el reporte en pantalla
125. Sockets
ABL (Advanced Business Language) proporciona acceso directo a sockets TCP/IP, tanto sockets no
seguros como sockets seguros mediante Transport Layer Security (TLS). Los sockets proporcionan un
medio para implementar comunicaciones entre procesos con procesos locales y remotos. Al utilizar
sockets ABL, puede comunicarse con procesos que no son ABL, así como con otros procesos ABL. Por
lo tanto, puede implementar aplicaciones basadas en sockets completamente en ABL que de otro
modo requerirían el uso de módulos C accesibles sólo a través de HLC o interfaces de biblioteca
compartida.
Socket designa un concepto abstracto por el cual dos procesos (posiblemente situados
en computadoras distintas) pueden intercambiar cualquier flujo de datos, generalmente de manera
fiable y ordenada. Además es una estructura de datos que permite que dos máquinas se comuniquen
entre ellas.
El término socket es también usado como el nombre de una interfaz de programación de
aplicaciones (API) para la familia de protocolos de Internet TCP/IP, provista usualmente por el sistema
operativo.
126. SOCKET EN EL LADO DEL
SERVIDOR PARA RECIBIR ARCHIVOS
ENVIADOS POR INTERNET POR EL
PUERTO 4505
SOCKET DEL LADO DEL CLIENTE QUE ENVÍA UN
ARCHIVO AL SERVIDOR POR EL PUERO 4505
127. Para una compañía que emitía tickets de alimentación para los
empleados de muchas Empresas que los usaban para
comprar en los supermercados, desarrolle una aplicación para
procesar los tickets recibidos en un supermercado usando
lectoras ópticas para digitalizar la información. Una vez
cuadrado un lote de tickets había un programa Socket que se
comunicaba con el programa Socket en el servidor de la
Compañía de Ticket y le enviaba el lote de tickets
digitalizados.
El programa en el servidor actualizaba los tickets como
usados y hacia una transferencia vía Socket y VPN a un Banco
asociado y le enviaba un email al supermercado notificándole
sobre su lote enviado y su pago
129. Progress® WebSpeed® es un entorno de desarrollo e implementación de Progress® ABL. WebSpeed le
permite crear aplicaciones que utilizan HTML, XML, WML, DHTML y la mayoría de los demás lenguajes de
marcado (ML) como interfaz de usuario. Esto significa que WebSpeed se puede utilizar para aplicaciones
en las que los usuarios acceden a la aplicación mediante un navegador web, un teléfono móvil o algún
otro sistema que solicita información utilizando XML y HTTP o HTTP/S como protocolo de transporte.
Además de crear aplicaciones basadas en Web mediante diseño, puede utilizar WebSpeed para habilitar
aplicaciones Web Progress® OpenEdge® existentes que anteriormente se ejecutaban de forma
independiente o como una aplicación basada en Progress® AppServer.
Con WebSpeed, puede desarrollar e implementar:
Aplicaciones de intranet que permiten a los usuarios internos acceder y modificar datos.
Aplicaciones de Internet que permiten el acceso externo al consumidor (por ejemplo, una aplicación de
carrito de compras).
Extranet, aplicaciones de empresa a empresa.
130.
131.
132.
133.
134. La creatividad es la inteligencia divirtiéndose.
Albert Einstein
Desarrollado por
Rafael Laya
email: rlayam@gmail.com
Celular (58) 4242429625