SlideShare una empresa de Scribd logo
1 de 134
Descargar para leer sin conexión
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
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.
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.
.
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.
AppBuilder
Si pulsas con el
botón izquierdo
del mouse
Se muestra la lista de
Template de Smart Object del
Appbuilder y los Templates
de la Suite
Creamos un proyecto titulado Consulta Médica
usando los componentes de la Suite y el
directorio se llama Medicos
Vamos a comenzar creado
una Windows de Menú
Y pulsamos el botón OK
Tenemos una
Windows con 5
botones con una
imagen genérica
Vista Parcial del código de preprocesador
Código en el
botón
Código en el
Menú
El programa
w-paciente.w
Vamos a usar un SmartDataObjects de Mantenimiento
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
Se muestra el Query
Builder para que
podamos construir
nuestro Query
Seleccionamos la Tabla
Paciente
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
Vamos al menú del Query Builder y marcamos Sort
Y seleccionamos Cedula y
pulsamos el botón Add
Indicamos Ascending
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
Seleccionamos todos los campos
disponibles
Una vez ordenados los campos le
damos OK
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
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
Vamos a seleccionar
un Browser con rutinas
de impresión
Pulsamos el botón OK
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
Buscamos en SDOdt-paciente.w
Si le das Next y luegoAdd Field Puedes seleccionar los campos que se mostraran
en el Browser
Una vez seleccionados los campos Terminamos con el Mago pulsando
el botón Finish y el Mago te felicita
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
Si pulsamos el botón Color
Podemos seleccionar como Foreground color el 1 azul
Y como Background color el 15 blanco
Y tenemos el Browser y lo salvamos en el directorio Consulta
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
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
El Mago te muestra un diálogo para que
selecciones el origen de los datos
Buscamos en SDOdt-paciente.w
Si pulsa el botón Next
Vamos a seleccionar los campos a mostrar en el
View y debemos pulsar Add Fields
Se muestran los campos disponibles Seleccionamos y pulsamos Add
Ya tenemos los campos y pulsamos el botón Next
El Mago te felicita por haber hecho un SmartView y
cuando pulsas el botón Finish
Se muestra el SmartView
Ordenamos los campos y lo guardamos en Consultav-paciente.w
Vamos a seleccionar un
Diálogo de
Mantenimiento de
media pantalla
Pulsamos el botón OK
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
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
Se muestran los campos de la Tabla Paciente Los seleccionamos todos y pulsamos el botón Add y OK
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
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
Solamente vamos a exigir que ingrese información obligatoria a Cédula, Nombre y Dirección
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
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
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
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
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
&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
Seleccionamos una Windows que
tenga SmartObject para hacer
mantenimiento de la tabla Paciente
Pulsa OK
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
Si en el menú del AppBuilder pulsamos el botón RUN
Los menú de la
Windows están
alineados con
los botones
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
Buscamos el
Programa
W-LOGIN.W
Se muestra el resultado de la selección
Y si pulsamos
nuevamente el
botón Selec
Y luego en e diálogo Salir Se restaura la lista del Browser y si
pulsamos el botón Imprimir
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
Si en la Windows se pulsa el botón Agregar
Se muestra el
Diálogo
d-in0201.w
para ingresar
un registro
Se llena los datos del Diálogo y se pulsa Aceptar La Suite solicita confirmación
Los datos pasaron los criterios de validación y crearon el registro
El ejemplo modificando un registro si pulsa Aceptar la Suite solicita confirmación
Eliminar un registro opera de la misma forma
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
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
Vamos a crear el mantenimiento de otra tabla a partir del template
Ventana mantenimiento usando SmartDataObject
Creamos un directorio Prueba bajo Codigo y vamos a guardar el
template como w-prueba.w
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
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
Si modifico la ruta del
Archivo y direcciono a
Consultab-paciente.w
Le damos OK y luego
respondemos Si
Le damos OK
para realizar el
cambio
Si observas ya el browser muestra a b-paciente.w
Seleccionamos
el objeto View
Y le damos
doble click
Vemos que el objeto tiene un handle llamado h_v-in0201 el Master file es Infrav-in0201.w
Si pulso el
botón File
Si modifico la ruta del
Archivo y direcciono a
Consultav-paciente.w
Le damos OK y
luego respondemos
Si
Si observas ya el view muestra a v-paciente.w
Seleccionamos el objeto
SmartDataObject
Y le damos doble click
Vemos que el objeto tiene un handle llamado h_dt-programa el Master file
es sdodt-programas.w
Si pulsas el
botón File
Cambiamos por
sdodt-pacientes
Si en el menú del AppBuilder pulsamos el botón RUN
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
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
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
Guardo la Windows en la Carpeta Prueba con el código w-prueba2.w y
luego voy a Procedure Editor
En Procedure Editor -> File y busco en Pruebas a w-prueba2.w
Y vemos el código del
programa w-prueba2.w
Para efectos prácticos voy a
usar como editor del
programa a Sublime Text
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
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
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
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
Copio los botones en esta Windows Paste los botones en esta Windows
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
Menú de las Tablas de la Suite
1. Configuración
2. Programas
3. Reportes
4. Mensajes
5. Programas HTML
Reporte en PDF Orientación Portrait
Usa tres includes file: {Includei-re0101.i}, {Includei-re0102.i} y {Includei-re0103.i}
Reporte en PDF Orientación Landscape
Usa tres includes file: {Includei-re0101.i}, {Includei-re0202.i} y {Includei-re0203.i}
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
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
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
Crear un Archivo de Excel
Crear un archivo en WORD
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.
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
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
Internet
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.
La creatividad es la inteligencia divirtiéndose.
Albert Einstein
Desarrollado por
Rafael Laya
email: rlayam@gmail.com
Celular (58) 4242429625

Más contenido relacionado

Similar a Suite de Desarrollo con SmartObjects.pdf

fundamentos basicos de Visual Basic 6.0
fundamentos basicos de Visual Basic 6.0fundamentos basicos de Visual Basic 6.0
fundamentos basicos de Visual Basic 6.0eduardsoler1
 
Como construir un DSS
Como construir un DSSComo construir un DSS
Como construir un DSSluzenith_g
 
Bases de datos_angelina_monetti
Bases de datos_angelina_monettiBases de datos_angelina_monetti
Bases de datos_angelina_monettiangelinamonetti1
 
fundamentos basicos de VISUAL BASIC
fundamentos basicos de VISUAL BASICfundamentos basicos de VISUAL BASIC
fundamentos basicos de VISUAL BASIC25309816
 
Visual basic
Visual basicVisual basic
Visual basicjosser96
 
Manual de uso de Profit Plus
Manual de uso de Profit PlusManual de uso de Profit Plus
Manual de uso de Profit PlusAngely Parra
 
PLC y Electroneumática: Codesys Grafcet
PLC y Electroneumática: Codesys GrafcetPLC y Electroneumática: Codesys Grafcet
PLC y Electroneumática: Codesys GrafcetSANTIAGO PABLO ALBERTO
 
Trabajo programacion Raineth Crespo
Trabajo programacion Raineth CrespoTrabajo programacion Raineth Crespo
Trabajo programacion Raineth CrespoRaineth Crespo Peña
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programarEduardo Méndez
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programarJuan Hoyos
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programarblasty2
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programarblasty2
 
Laboratorio SD
Laboratorio SDLaboratorio SD
Laboratorio SDGeneXus
 
Laboratorio SD
Laboratorio SDLaboratorio SD
Laboratorio SDGeneXus
 
Laboratorio SD
Laboratorio SDLaboratorio SD
Laboratorio SDGeneXus
 
Laboratorio SD
Laboratorio SDLaboratorio SD
Laboratorio SDGeneXus
 

Similar a Suite de Desarrollo con SmartObjects.pdf (20)

fundamentos basicos de Visual Basic 6.0
fundamentos basicos de Visual Basic 6.0fundamentos basicos de Visual Basic 6.0
fundamentos basicos de Visual Basic 6.0
 
Como construir un DSS
Como construir un DSSComo construir un DSS
Como construir un DSS
 
Bases de datos_angelina_monetti
Bases de datos_angelina_monettiBases de datos_angelina_monetti
Bases de datos_angelina_monetti
 
fundamentos basicos de VISUAL BASIC
fundamentos basicos de VISUAL BASICfundamentos basicos de VISUAL BASIC
fundamentos basicos de VISUAL BASIC
 
Visual basic
Visual basicVisual basic
Visual basic
 
Manual de uso de Profit Plus
Manual de uso de Profit PlusManual de uso de Profit Plus
Manual de uso de Profit Plus
 
PLC y Electroneumática: Codesys Grafcet
PLC y Electroneumática: Codesys GrafcetPLC y Electroneumática: Codesys Grafcet
PLC y Electroneumática: Codesys Grafcet
 
Trabajo programacion Raineth Crespo
Trabajo programacion Raineth CrespoTrabajo programacion Raineth Crespo
Trabajo programacion Raineth Crespo
 
Unidad III
Unidad IIIUnidad III
Unidad III
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Presentacion2 publica
Presentacion2 publicaPresentacion2 publica
Presentacion2 publica
 
Laboratorio SD
Laboratorio SDLaboratorio SD
Laboratorio SD
 
Laboratorio SD
Laboratorio SDLaboratorio SD
Laboratorio SD
 
Laboratorio SD
Laboratorio SDLaboratorio SD
Laboratorio SD
 
Laboratorio SD
Laboratorio SDLaboratorio SD
Laboratorio SD
 
Visual Basic
Visual BasicVisual Basic
Visual Basic
 
Visual
VisualVisual
Visual
 

Suite de Desarrollo con SmartObjects.pdf

  • 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.
  • 6.
  • 7.
  • 8.
  • 9. Si pulsas con el botón izquierdo del mouse Se muestra la lista de Template de Smart Object del Appbuilder y los Templates de la Suite
  • 10. Creamos un proyecto titulado Consulta Médica usando los componentes de la Suite y el directorio se llama Medicos
  • 11. Vamos a comenzar creado una Windows de Menú Y pulsamos el botón OK
  • 12. Tenemos una Windows con 5 botones con una imagen genérica
  • 13. Vista Parcial del código de preprocesador
  • 14.
  • 15.
  • 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
  • 24. Seleccionamos todos los campos disponibles Una vez ordenados los campos le damos OK
  • 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
  • 27. Vamos a seleccionar un Browser con rutinas de impresión Pulsamos el botón OK
  • 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
  • 40. Ya tenemos los campos y pulsamos el botón Next
  • 41. El Mago te felicita por haber hecho un SmartView y cuando pulsas el botón Finish Se muestra el SmartView
  • 42. Ordenamos los campos y lo guardamos en Consultav-paciente.w
  • 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
  • 67. Los datos pasaron los criterios de validación y crearon el registro
  • 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
  • 76. Le damos OK para realizar el cambio
  • 77. Si observas ya el browser muestra a b-paciente.w
  • 78. Seleccionamos el objeto View Y le damos doble click
  • 79. Vemos que el objeto tiene un handle llamado h_v-in0201 el Master file es Infrav-in0201.w Si pulso el botón File
  • 80. Si modifico la ruta del Archivo y direcciono a Consultav-paciente.w Le damos OK y luego respondemos Si
  • 81. Si observas ya el view muestra a v-paciente.w
  • 83. Vemos que el objeto tiene un handle llamado h_dt-programa el Master file es sdodt-programas.w Si pulsas el botón File
  • 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
  • 91. En Procedure Editor -> File y busco en Pruebas a w-prueba2.w
  • 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
  • 123. Crear un Archivo de Excel
  • 124. Crear un archivo en WORD
  • 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