Lotus Domino WebServices y Adobe Flex 2.0

Sin traducciones disponibles


4 votos Vota!!

Los Web Services son el eje central de las arquitecturas orientadas a servicios (SOA), y Adobe Flex® es una herramienta que nos permite desarrollar aplicaciones RIA (Rich Internet Applications) con suma facilidad. En este artículo, mediante Adobe Flex®, consumiremos un Web Services desarrollado en Lotus Domino.

Nivel: Lotus Domino - Principiante / Flex - Principiante

Julio 2007

Introducción

Este artículo está dirigido a desarrolladores IBM Lotus Notes/Domino®, que se encuentren interesados en implementar Adobe Flex®, para construir las interfaces de usuario de sus aplicaciones web. Durante el desarrollo del artículo detallaremos paso a paso, cómo se puede crear una base de datos Notes, y cómo consumir con Adobe Flex® un Web Service.


Creación de la aplicación Lotus Domino

A continuación se explicaran los pasos a seguir para desarrollar un Servicio Web ("Web Service") con Lotus Notes, también crearemos un formulario y una vista, para ingresar algunos valores de prueba; que luego consumiremos a través de un formulario creado mediante Adobe Flex®, donde podremos ver los datos ingresados desde Notes, y también modificarlos.

Creación del formulario

En primer lugar crearemos una base de datos en el servidor Lotus Domino, partiendo de un diseño en blanco, el nombre del archivo será "domflex.nsf" y el título "Base de contactos".
Luego agregaremos un nuevo formulario denominado "user_web_ContactInfo | ContactInfo" con los siguientes campos:

  • nombre: Texto
  • apellido: Texto
  • domicilio: Texto
  • localidad: Texto
  • provincia: Texto

Formulario Edición
Figura 1 - Visualización del formulario "ContactInfo" en modo diseño

Para facilitar el ingreso de datos de prueba, agregaremos al formulario un botón denominado "Guardar y Salir" con la siguiente fórmula en el evento "Click":

CODE:
  1. @Command([FileSave]);
  2. @Command([FileCloseWindow])

Código 1 - Código del botón Guardar y Salir.

La siguiente imagen representa el formulario visualizado en el cliente Lotus Notes:

Formulario Carga
Figura 2 - Formulario "ContactInfo" en modo de edición.

    Nota: El tilde verde que se visualiza junto a la palabra "Guardar" se puede agregar desde la sección Icon de las propiedades del botón.
Creación de la vista

Para permitir la visualización de los documentos creados a partir del formulario "ContactInfo", agregaremos una vista denominada "AllContacts" la cual constará de 5 columnas, una por cada campo del formulario. Luego permitiremos el ingreso de nuevos documentos desde la misma agregándole un botón, denominado "Nuevo Contacto", con la siguiente fórmula:

CODE:
  1. @Command([Compose]; "ContactInfo")

Código 2 - Código del botón Nuevo Contacto.

La siguiente imagen corresponde a la visualización de la vista desde el cliente Lotus Notes:

Vista sin datos
Figura 3 - Vista "AllContacts" visualizada desde el cliente Lotus Notes.

Carga de contactos

Para verificar el funcionamiento de los nuevos elementos de diseño, crearemos un contacto en la base de datos accediendo a ella a través del cliente Lotus Notes; posicionados en la vista "AllContacts", presionamos el botón "Nuevo Contacto". Como resultado se debe abrir un formulario similar a de la Figura 2, el cual deberemos completar para almacenarlo luego a través del botón "Guardar y Salir". Será conveniente repetir el procedimiento reiteradas veces para contar con un conjunto de datos de prueba.

Desarrollo del Web Service

El último paso correspondiente al ambiente Lotus Domino, será la creación del Servicio Web que permita exponer la funcionalidad de la base de datos al exterior. Para crear el servicio, será necesario abrir la base de datos con el Lotus Domino Designer, dirigirse a la sección Shared Code --> Web Services y luego presionar el botón New Web Service.

Creación del Web Service
Figura 4 - Creación del Servicio Web

Utilizaremos el valor "ContactsWS" tanto para el nombre como para el alias del servicio:

Propiedades del WS
Figura 5 - Propiedades del Servicio Web

El lenguaje elegido para codificar el servicio es Java, por ello cambiaremos el lenguaje por omisión de LotusScript a Java.

Cambio de lenguaje
Figura 6 - Cambio de lenguaje

Luego de completar los pasos anteriores, estaremos en condiciones de comenzar el desarrollo del Servicio Web, el cual contempla la codificación de dos métodos, uno encargado de exponer la lista de contactos y otro responsable de la actualización de los mismos, estas funciones son utilizadas por los botones "Traer datos" y "Actualizar" respectivamente, ambos dispuestos en la aplicación Adobe Flex®.

A continuación se puede ver el fragmento de código correspondiente al Servicio Web, el mismo consta de una clase "ContactWS" la cual posee dos métodos, "getList" y "setList":

JAVA:
  1. import java.util.*;
  2. import lotus.domino.*;
  3. public class ContactWS {
  4.     public List getList(){
  5.         ArrayList contacts = new ArrayList();      
  6.         try { 
  7.             HashMap contact;           
  8.             Session session = NotesFactory.createSession();
  9.             Database db = session.getDatabase(null, "DomFlex");
  10.             View view = db.getView("AllContacts");     
  11.             lotus.domino.Document doc = view.getFirstDocument();
  12.             if (doc != null) {
  13.                 int i=0;
  14.                 while (doc != null) {
  15.                     i++;
  16.                     contact = new HashMap();   
  17.                     contact.put("unid", doc.getUniversalID());
  18.                     contact.put("nombre", doc.getItemValueString("nombre"));
  19.                     contact.put("apellido", doc.getItemValueString("apellido"));
  20.                     contact.put("domicilio", doc.getItemValueString("domicilio"));
  21.                     contact.put("localidad", doc.getItemValueString("localidad"));
  22.                     contact.put("provincia", doc.getItemValueString("provincia"));
  23.                     contacts.add(contact);
  24.                     doc = view.getNextDocument(doc);
  25.                 }
  26.             }      
  27.         } catch(Exception e) {
  28.             e.printStackTrace();
  29.         }      
  30.         return contacts;
  31.     }
  32.    
  33.     public boolean setList(ArrayList datos) {
  34.         try { 
  35.             Session session = NotesFactory.createSession();
  36.             Database db = session.getDatabase(null, "DomFlex");   
  37.             lotus.domino.Document doc = db.getDocumentByUNID(datos.get(0).toString());
  38.             doc.replaceItemValue("nombre", datos.get(1));
  39.             doc.replaceItemValue("apellido", datos.get(2));
  40.             doc.replaceItemValue("domicilio", datos.get(3));
  41.             doc.replaceItemValue("localidad", datos.get(4));
  42.             doc.replaceItemValue("provincia", datos.get(5));
  43.             doc.save(true,false);
  44.             return true;
  45.         } catch(Exception e) {
  46.             e.printStackTrace();
  47.             return false;
  48.         }
  49.     }
  50. }

Código 3 - Código Java correspondiente al Servicio Web

La codificación de los métodos de la clase "ContactWS", correspondiente al Servicio Web, debería ser familiar para cualquier desarrollador que haya trabajado con Lotus Domino. En el primer caso se retorna un arreglo ("ArrayList") con la lista de contactos que se obtuvieron al iterar la vista "AllContacts", la información de cada contacto es cargada como un par etiqueta-valor dentro de un "HashMap". En el segundo caso se reciben los datos de un contacto dispuestos en un arreglo ("ArrayList"), el primer valor representa el "UniversalID" asociado al documento de contacto, con él se obtiene el documento, se actualizan sus campos y luego se retorna "true" o "false" de acuerdo al éxito de la actualización. Por último se debe establecer cual es la clase que implementa las operaciones del Servicio Web, para ello ingresaremos ContactsWs en la opción PortType class de la solapa Basics correspondiente a las propiedades del servicio:

PortType class
Figura 7 - Selección de PortType class

Adicionalmente debemos verificar que los valores de la solapa Advanced sean similares a los siguientes:

Solapa Advanced
Figura 8 - Configuración de la solapa Advanced

Prueba del Web Service

Para verificar que el Servicio Web se encuentre accesible, ingresaremos la URL del componente en un navegador de internet, la misma posee la siguiente forma:

    http://(Nombre del servidor)/DomFlex.nsf/ContactsWS?WSDL

El navegador deberá mostrarnos un documento XML similar al siguiente:

XML:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. - <wsdl:definitions targetNamespace="urn:DefaultNamespace" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="urn:DefaultNamespace" xmlns:intf="urn:DefaultNamespace" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  3.     - <wsdl:message name="getListResponse">
  4.         <wsdl:part name="getListReturn" type="soapenc:Array" />
  5.       </wsdl:message>
  6.     - <wsdl:message name="setListRequest">
  7.         <wsdl:part name="datos" type="soapenc:Array" />
  8.       </wsdl:message>
  9.     <wsdl:message name="getListRequest" />
  10.     - <wsdl:message name="setListResponse">
  11.         <wsdl:part name="setListReturn" type="xsd:boolean" />
  12.       </wsdl:message>
  13.     - <wsdl:portType name="ContactWS">
  14.         - <wsdl:operation name="getList">
  15.             <wsdl:input message="impl:getListRequest" name="getListRequest" />
  16.             <wsdl:output message="impl:getListResponse" name="getListResponse" />
  17.           </wsdl:operation>
  18.         - <wsdl:operation name="setList" parameterOrder="datos">
  19.             <wsdl:input message="impl:setListRequest" name="setListRequest" />
  20.             <wsdl:output message="impl:setListResponse" name="setListResponse" />
  21.           </wsdl:operation>
  22.       </wsdl:portType>
  23.     - <wsdl:binding name="DominoSoapBinding" type="impl:ContactWS">
  24.         <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
  25.         - <wsdl:operation name="getList">
  26.             <wsdlsoap:operation soapAction="getList" />
  27.             - <wsdl:input name="getListRequest">
  28.                 <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:DefaultNamespace" use="encoded" />
  29.               </wsdl:input>
  30.             - <wsdl:output name="getListResponse">
  31.                 <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:DefaultNamespace" use="encoded" />
  32.               </wsdl:output>
  33.           </wsdl:operation>
  34.         - <wsdl:operation name="setList">
  35.             <wsdlsoap:operation soapAction="setList" />
  36.             - <wsdl:input name="setListRequest">
  37.                 <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:DefaultNamespace" use="encoded" />
  38.               </wsdl:input>
  39.             - <wsdl:output name="setListResponse">
  40.                 <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:DefaultNamespace" use="encoded" />
  41.               </wsdl:output>
  42.           </wsdl:operation>
  43.       </wsdl:binding>
  44.     - <wsdl:service name="ContactWSService">
  45.         - <wsdl:port binding="impl:DominoSoapBinding" name="Domino">
  46.             <wsdlsoap:address location="http://(Nombre del servidor):80/domflex.nsf/ContactsWS?OpenWebService" />
  47.           </wsdl:port>
  48.       </wsdl:service>
  49. </wsdl:definitions>

Código 4 - XML devuelto por el Web Services

    Nota: el XML retornado corresponde a la definición de servicio en formato WSDL, para mayor información conviene revisar la sección referencias del presente artículo.


Creación de la aplicación Adobe Flex®

Como se comentó al inicio del artículo, "Adobe Flex®" es un marco de trabajo orientado al desarrollo de aplicaciones de Internet basadas en los conceptos de RIA; una aplicación Flex típica, consiste de un archivo de aplicación MXML (un archivo XML cuyo elemento raíz es mx:Application), y uno o mas componentes definidos en archivos MXML separados, librerías ActionScript, archivos de componentes Flash, etc. "Adobe Flex® Builder 2.0" es un entorno de trabajo basado en Eclipse especializado para asistir el desarrollo de aplicaciones Adobe Flex® 2 y ActionScript 3.0 entre otras, este entorno será el utilizado en el presente artículo para desarrollar la aplicación ejemplo.

En primer lugar, abriremos el entorno de desarrollo "Adobe Flex Builder 2.0", luego, crearemos un nuevo proyecto Adobe Flex® a través de la opción de menú File --> New --> Flex Project.

New Flex Project
Figura 9 - Creación de un nuevo proyecto Adobe Flex®

Luego, nos debe aparecer una pantalla similar a la Figura 10, debido a que nuestra aplicación Adobe Flex® se comunicará con el servidor Lotus Domino a través de un Servicio Web, dejaremos seleccionada la opción por omisión Basic (e.g. XML or web service from PHP/JSP/ASP.NET y presionaremos el botón Next.

New Flex Project Config
Figura 10 - Configuración del proyecto Adobe Flex®

A continuación, ingresaremos el nombre del proyecto, en nuestro caso DominoFlex, seleccionaremos el directorio donde almacenar el mismo y presionamos el botón Finish.

New Flex Project Name
Figura 11 - Ventana final de configuración del proyecto Adobe Flex®

Al finalizar la creación del proyecto visualizaremos el entorno de trabajo como se muestra en la siguiente figura:

Flex Project Creado
Figura 12 - Visualización del entorno luego de crear el proyecto Adobe Flex®

Desarrollo de la vista de contactos (DataGrid)

La creación del proyecto nos dejo disponible el archivo DominoFlex.mxml, en él, codificaremos la aplicación Adobe Flex® y será el único utilizado en el presente artículo. Este archivo XML tiene definido un espacio de nombres correspondiente al vocabulario MXML, el mismo se encuentra definido por la expresión xmlns:mx="http://www.adobe.com/2006/mxml" y permite que todo elemento que comience con el sufijo mx: sea considerado un componente o elemento relacionado a Adobe Flex®.

En primer lugar cambiaremos la distribución general de la aplicación modificando el valor del parámetro layout correspondiente al elemento mx:Application, de absolute a horizontal, agregaremos código para el tratamiento de los errores y referenciaremos el Servicio Web desarrollado en el ambiente Lotus Domino:

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
  3.     <mx:Script>
  4.         <![CDATA[
  5.             import mx.controls.Alert;
  6.         ]]>     
  7.     </mx:Script>
  8.     <mx:WebService id="srv" wsdl="http://(Nombre del servidor)/domflex.nsf/ContactsWS?wsdl" showBusyCursor="true" fault="Alert.show(event.toString()), 'Error'"/>
  9. </mx:Application>

Código 5 - Visualización del archivo DominoFlex.mxml modificado

El valor del parámetro wsdl del elemento mx:WebService debe coincidir con la URL del Servicio Web desarrollado en la primera parte del artículo:

    http://(Nombre del servidor)/DomFlex.nsf/ContactsWS?WSDL

Posteriormente agregaremos en la aplicación un botón que obtenga los contactos almacenados en la base de datos Lotus Notes y una tabla que permita visualizarlos, el botón definido a través del elemento mx:Button invocará el Servicio Web establecido por el elemento mx:WebService y la tabla, definida por el elemento mx:Datagrid, obtendrá los valores a través del parámetro dataProvider, a continuación se muestra el código del archivo DominoFlex.mxml modificado:

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
  3.     <mx:Script>
  4.         <![CDATA[
  5.             import mx.controls.Alert;
  6.         ]]>     
  7.     </mx:Script>
  8.     <mx:WebService id="srv" wsdl="http://(Nombre del servidor)/domflex.nsf/ContactsWS?wsdl" showBusyCursor="true" fault="Alert.show(event.toString()), 'Error'"/>
  9.  
  10.     <mx:Panel title="Contactos" width="100%" height="100%">
  11.         <mx:DataGrid id="list" dataProvider="{srv.getList.lastResult}" width="100%" height="100%">
  12.             <mx:columns>
  13.                 <mx:DataGridColumn dataField="nombre" headerText="Nombre"/>
  14.                 <mx:DataGridColumn dataField="apellido" headerText="Apellido"/>
  15.                 <mx:DataGridColumn dataField="domicilio" headerText="Domicilio"/>
  16.                 <mx:DataGridColumn dataField="localidad" headerText="Localidad"/>
  17.                 <mx:DataGridColumn dataField="provincia" headerText="Provincia"/>
  18.             </mx:columns>
  19.         </mx:DataGrid>
  20.        
  21.         <mx:ControlBar>
  22.             <mx:Button label="Obtener Datos" click="srv.getList()"/>
  23.         </mx:ControlBar>
  24.     </mx:Panel>
  25. </mx:Application>

Código 6 - Archivo DominoFlex.mxml con los nuevos elementos: mx:DataGrid y mx:Button

Para probar que lo que estamos haciendo, funciona correctamente, lo primero que debemos hacer, es ejecutar la aplicación para que nos genere el archivo DominoFlex.swf en la carpeta bin, en donde creamos el proyecto.

Run Project
Figura 13 - Ejecución de la aplicación

Este archivo, lo agregamos como un Shared Resource en Notes y lo abriremos en un browser ingresando la siguiente URL:

    http://(Nombre del servidor)/DomFlex.nsf/DominoFlex.swf

Si todo funciona correctamente deberemos visualizar la aplicación como se muestra en la siguiente figura:

DataGrid
Figura 14 - Vista de la aplicación Adobe Flex® desde un navegador de Internet

Desarrollo del formulario de modificación de datos

El siguiente paso será crear el formulario donde se actualizarán los datos del contacto seleccionado en la vista, para ello agregaremos un panel (mx:Panel) con un componente mx:Form como muestra el siguiente fragmento de código:

XML:
  1. <mx:Panel width="50%" height="100%" title="Modificar" paddingLeft="12" paddingRight="12" paddingTop="12" paddingBottom="12">
  2.         <mx:Form width="100%">
  3.             <mx:FormItem label="Nombre">
  4.                 <mx:TextInput id="detallesNombre" text="{list.selectedItem.nombre}"/>
  5.             </mx:FormItem>
  6.             <mx:FormItem label="Apellido">
  7.                 <mx:TextInput id="detallesApellido" text="{list.selectedItem.apellido}"/>
  8.             </mx:FormItem>
  9.             <mx:FormItem label="Domicilio">
  10.                 <mx:TextInput id="detallesDomicilio" text="{list.selectedItem.domicilio}"/>
  11.             </mx:FormItem>
  12.             <mx:FormItem label="Localidad">
  13.                 <mx:TextInput id="detallesLocalidad" text="{list.selectedItem.localidad}"/>
  14.             </mx:FormItem>
  15.             <mx:FormItem label="Provincia">
  16.                 <mx:TextInput id="detallesProvincia" text="{list.selectedItem.provincia}"/>
  17.             </mx:FormItem>
  18.         </mx:Form>
  19.     </mx:Panel>

Código 7 - Fragmento donde se puede visualizar el componente de formulario

El panel debe colocarse luego del que contiene la vista, si accedemos posteriormente a la aplicación a través de un navegador de internet visualizaremos la siguiente imagen:

DataGrid y Form
Figura 15 - Vista de la aplicación con la tabla y el formulario de modificación de datos

Hasta el momento la aplicación permite visualizar los contactos ubicados en el ambiente Lotus Domino a través del botón "Obtener Datos", adicionalmente al seleccionar un item de la lista los datos del contacto se visualizan en el formulario de modificación como muestra la siguiente imagen:

DataGrid y Form con Datos
Figura 16 - Vista de la aplicación luego de obtener datos y seleccionar un item de la lista

Implementación de la actualización de datos

Para finalizar con el desarrollo, agregaremos un botón para actualizar los datos que modifiquemos. Para esto agregaremos un botón, al que llamaremos Actualizar, y las funciones correspondientes.
El botón llamará a la función que actualiza los datos, y el código del mismo, es el siguiente:

XML:
  1. <mx:ControlBar>
  2.     <mx:Button label="Actualizar" click="UpdateValues()"/>
  3. </mx:ControlBar>

La pantalla finalizada se verá de la siguiente manera:

Pantalla completa
Figura 17 - Vista de la pantalla finalizada

La función que agregaremos, creará el vector que enviaremos al Web Service, y actualizará la vista con los contactos. Además llamaremos a otra función, que hará que se demore un segundo el refresh de la vista.

XML:
  1. import mx.managers.ToolTipManager;
  2.            
  3.     private function delayUpdate():void {
  4.         ToolTipManager.enabled = true;
  5.         ToolTipManager.showDelay = 0;
  6.         ToolTipManager.hideDelay = 1000;
  7.     }
  8.            
  9.     private function UpdateValues():void {
  10.     var detalles:Array = new Array();
  11.                
  12.     detalles.push(list.selectedItem.unid);
  13.     detalles.push(detallesNombre.text);
  14.     detalles.push(detallesApellido.text);
  15.     detalles.push(detallesDomicilio.text);
  16.     detalles.push(detallesLocalidad.text);
  17.     detalles.push(detallesProvincia.text);
  18.  
  19.     //Grabo los datos modificados
  20.     if (srv.setList(detalles.valueOf())) {
  21.         //Demoro un segundo la nueva carga de la lista
  22.         delayUpdate();
  23.  
  24.         //Vuelvo a cargar la lista, con los datos actualizados
  25.         srv.getList();
  26.     }
  27. }

Código 8 - Función de actualización de los datos

El código completo, deberá quedar de la siguiente manera:

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
  3.     <mx:Script>
  4.         <![CDATA[
  5.             import mx.controls.Alert;
  6.              import mx.managers.ToolTipManager;
  7.            
  8.             private function delayUpdate():void {
  9.                 ToolTipManager.enabled = true;
  10.                 ToolTipManager.showDelay = 0;
  11.                 ToolTipManager.hideDelay = 1000;
  12.             }
  13.            
  14.             private function UpdateValues():void {
  15.                 var detalles:Array = new Array();
  16.                
  17.                 detalles.push(list.selectedItem.apellido);
  18.                 detalles.push(detallesNombre.text);
  19.                 detalles.push(detallesApellido.text);
  20.                 detalles.push(detallesDomicilio.text);
  21.                 detalles.push(detallesLocalidad.text);
  22.                 detalles.push(detallesProvincia.text);
  23.  
  24.                 //Alert.show(detalles.valueOf());
  25.  
  26.                 //Grabo los datos modificados
  27.                  if (srv.setList(detalles.valueOf())) {
  28.                     //Demoro un segundo la nueva carga de la lista
  29.                     delayUpdate();
  30.  
  31.                     //Vuelvo a cargar la lista, con los datos actualizados
  32.                      srv.getList();
  33.                  }
  34.             }
  35.         ]]>     
  36.     </mx:Script>
  37.  
  38.     <mx:WebService id="srv" wsdl="http://(Nombre del servidor)/domflex.nsf/ContactsWS?wsdl" showBusyCursor="true" fault="Alert.show(event.toString()), 'Error'"/>
  39.    
  40.     <mx:Panel title="Contactos" width="100%" height="100%">
  41.         <mx:DataGrid id="list" dataProvider="{srv.getList.lastResult}" width="100%" height="100%">
  42.             <mx:columns>
  43.                 <mx:DataGridColumn dataField="nombre" headerText="Nombre"/>
  44.                 <mx:DataGridColumn dataField="apellido" headerText="Apellido"/>
  45.                 <mx:DataGridColumn dataField="domicilio" headerText="Domicilio"/>
  46.                 <mx:DataGridColumn dataField="localidad" headerText="Localidad"/>
  47.                 <mx:DataGridColumn dataField="provincia" headerText="Provincia"/>
  48.             </mx:columns>
  49.         </mx:DataGrid>
  50.        
  51.         <mx:ControlBar>
  52.             <mx:Button label="Traer datos" click="srv.getList()"/>
  53.         </mx:ControlBar>
  54.     </mx:Panel>
  55.    
  56.     <mx:Panel width="50%" height="100%" title="Modificar" paddingLeft="12" paddingRight="12" paddingTop="12" paddingBottom="12">
  57.         <mx:Form width="100%">
  58.             <mx:FormItem label="Nombre">
  59.                 <mx:TextInput id="detallesNombre" text="{list.selectedItem.nombre}"/>
  60.             </mx:FormItem>
  61.             <mx:FormItem label="Apellido">
  62.                 <mx:TextInput id="detallesApellido" text="{list.selectedItem.apellido}"/>
  63.             </mx:FormItem>
  64.             <mx:FormItem label="Domicilio">
  65.                 <mx:TextInput id="detallesDomicilio" text="{list.selectedItem.domicilio}"/>
  66.             </mx:FormItem>
  67.             <mx:FormItem label="Localidad">
  68.                 <mx:TextInput id="detallesLocalidad" text="{list.selectedItem.localidad}"/>
  69.             </mx:FormItem>
  70.             <mx:FormItem label="Provincia">
  71.                 <mx:TextInput id="detallesProvincia" text="{list.selectedItem.provincia}"/>
  72.             </mx:FormItem>
  73.         </mx:Form>
  74.        
  75.         <mx:ControlBar>
  76.             <mx:Button label="Actualizar" click="UpdateValues()"/>
  77.         </mx:ControlBar>
  78.     </mx:Panel>
  79. </mx:Application>

Código 9 - Código completo de la aplicación


Conclusión

En este artículo pudimos aprender que tan rápido y tan fácil puede construirse una aplicación RIA con Adobe Flex 2.0 que se integre con IBM Lotus Domino mediante Web Services, mientras presenta una interfase de usuario sobre Flash (SWF), haciéndola más liviana para el trabajo en la web.
Adobe Flex® demuestra que brinda un importante soporte al desarrollo de aplicaciones RIA, permitiéndole al desarrollador, contar con una alternativa a AJAX; manteniendo el aislamiento de los datos Domino -como servicios- por medio de Web Services.


Versiones de evaluación de los productos


Opciones del documento

Código de ejemplo


Referencias


Acerca del Autor

Fabián
Fabián M. Rivarola, MicroGestion

Fabián Rivarola es miembro del staff de desarrolladores del área de consultoría de MicroGestion, enfocado en el desarrollo de aplicaciones bajo plataformas IBM Lotus Domino, ha participado en numerosos proyectos para empresas de primer nivel.


13 Comments to “Lotus Domino WebServices y Adobe Flex 2.0”  

  1. 1 Pablo Weremczuk

    Muy buen artículo y muy completo. Espero que esto pueda difundir la potencia de flex para el desarrollo de aplicaciones enterprise.

    Como dato de color, ya esta el Flex Builder 3 beta, que soporta refactoring, de momento, solo para renombrar variables y presenta un compilador mas eficiente(genera swf’s mas pequeños).

    Saludos y felicitaciones!

  2. 2 Javier Cisneros

    Gracias, excelente desarrollo.

  3. 3 Rodrigo Soto

    Esta muy bueno, apenas me ando dando un entre con el Lotus y este es uno de los unicos tutos que me han ayudado en algo.

  4. 4 Javier Loucim

    Gracias!!!, excelente articulo!… no hay mucho de esto en la web!….

  5. 5 Marcel

    Excelente articulo, me funciono 100% (bueno 99%, ya que no entiendo porque me pedía un plugin de notes 5 para flash =/) pero igual me funciono activando el .swf ya que el rundominoflex (flechita verde) me ocasionaba ese problema…

    Se agradece por el articulo :)

    Saludos.

  6. 6 Lejuste Dimitri

    bonjour,

    Je trouve très excellent ce que vous avez fait en flex et lotus domino.
    Je suis étudiant en stage et j’aimerai créer des web service pour les bases de données domino.
    Mon problème est que je n’arrive pas à exécuter votre exemple convenablement j’ai une erreur du genre:

    [FaultEvent fault=[RPC Fault faultString=”HTTP request error” faultCode=”Server.Error.Request” faultDetail=”Unable to load WSDL. If currently online, please verify the URI and/or format of the WSDL (http://localhost/contactWS.nsf/contactsWSDL?wsdl)”] messageId=”8C16D030-839B-F2F3-4A47-29329BA132C1″ type=”fault” bubbles=false cancelable=true eventPhase=2]

    Si vous pouvez m’aider ou me donner une idée ça sera une bonne chose.

    Server: localhost c:/wamp/www/
    les données sont dans : C:/Program Files/IBM/Lotus/Notes/Data

    Help please.

    Merci.

    Hi !

    I have found very interesting what you do about Web Service and Flex, all my congratulation.
    I’m trainee and I have somes problem when I try to use your exemple, but when I run in flex, the following message:

    [FaultEvent fault=[RPC Fault faultString=”HTTP request error” faultCode=”Server.Error.Request” faultDetail=”Unable to load WSDL. If currently online, please verify the URI and/or format of the WSDL (http://localhost/contactWS.nsf/contactsWSDL?wsdl)”] messageId=”8C16D030-839B-F2F3-4A47-29329BA132C1″ type=”fault” bubbles=false cancelable=true eventPhase=2]

    If you could give me or give me an idea about the way the resolve it.
    I never used Lotus Notes/Domino before.

    Thanks !

    Lejuste.

  7. 7 Marcel

    Lejuste Dimitri

    En ves del nombre del host o serv ingresa la IP, puede ser que tbn. tenga error la configuración del webserv en lotus…

    Saludos

  8. 8 Abel

    Hoy vi tu articulo y lo encontre interesante ya que quiero aprender flex y como domino mas menos lotus intente la prueba,

    Topo a la perfeccion per al momento de editar los datos no los edita, viendo en el pc donde tengo montado el servidor lotus, en la consola aparecia Notes Exception: Invalid Universal ID

    Saludos

  9. 9 Abel

    Bueno, gracias por responderme la pregunta, acá esta la información que me sale del error (mediante el flex), este error sale cuando acciono actualizar los datos, ya que los datos si los puedo traer pero no modificar.

    este es el error
    [FaultEvent fault=[RPC Fault faultString=”Error #1009″ faultCode=”EncodingError” faultDetail=”null”] messageId=null type=”fault” bubbles=false cancelable=true eventPhase=2]

  10. 10 Abel

    Sorry que sea pesao ajajaja, pero soy nuevo en esto…. se podran crear graficos en flex mediante informcion de las vistas en Lotus Notes D:

  11. 11 Abel

    Hola D:, soy yo de nuevo, al parecer ya encontré el problema, la mayoría acá bajo la BD, pero no siguió tu tutorial (típico de humanos) D:, bueno yo seguí tu tutorial y encontré el pequeño problema del error, la función UpdateValues no refrescara ni traerá el dato, ya que en detalles.push(list.selectedItem.apellido); tendra que ser cambiado por detalles.push(list.selectedItem.unid);

    Pd: Esto me esta gustando D: podrías hacer algo como este tutorial pero esos datos de nombres o direcciones cambiarlos por números y crear un grafico, yo aun no le puedo atinar :/ AYUDA!!!

    Saludos desde Stgo.Chile,

    Atte. Abel

  12. 12 Alejandro M

    Hola,

    Ante todo, gracias por la claridad de los ejemplos que publican.

    Segui las instrucciones al pie de la letra (Notes 8 y Flex Builder 3) pero no puedo actualizar los datos.

    El error es el mismo que otros post:

    [FaultEvent fault=[RPC Fault faultString=â€HTTP request error†faultCode=â€Server.Error.Request†faultDetail=â€Unable to load WSDL. If currently online, please verify the URI and/or format of the WSDL (http://localhost/contactWS.nsf/contactsWSDL?wsdl)â€] messageId=â€8C16D030-839B-F2F3-4A47-29329BA132C1″ type=â€fault†bubbles=false cancelable=true eventPhase=2]

    El swf incluido en la base del ejemplo (DominoFlex.swf) funciona bien por lo que creo que el tema esta en alguna instrucción del archivo “DominoFlex.mxml”, puede ser ? me podran ayudar ?

    Muchas gracias !

  13. 13 Xavier Foguet

    Muy buen a

Leave a Reply


llamenos 54-(0)11-4382-0878 o envienos un e-mail Home |  Compañía  |  Servicios |  Productos |  MG Developers  |  Noticias |  Contactos
MicroGestion ® 2006