You are on page 1of 17

Instituto Superior Politécnico “José Antonio Echeverría”

Facultad de Ingeniería Informática








Mejoras a la capa SOA de BizAgi









Informe de Práctica Profesional de 3er Año, Ingeniería Informática








Autor(es): Víctor Martínez Fundora

Alejandro Martínez O’Farril





Tutor(es): Juan Carlos Grass
CITI Grupo BPM
jgrass@ceis.cujae.edu.cu





Ciudad de La Habana, Cuba
Julio, 2011




Resumen

El tema de nuestro trabajo es mejoras que se le realizaron a la capa de SOA de BizAgi
suite. Estas mejoras consistieron en la confección de funcionalidades adicionales en la capa
SOA de BizAgi específicas para distintos procesos de negocio.

La necesidad de nuestro trabajo está basada en que ciertos procesos de negocio
modelados en BizAgi junto con otras aplicaciones creadas en nuestro grupo de trabajo
necesitan usar ciertas funcionalidades que la capa SOA de BizAgi no ofrecía por sí sola, de
ahí la necesidad de implementar mediante nuevos servicios las nuevas funcionalidades
usando las viejas que ya ofrecía la capa.

En concreto los objetivos nuestro objetivo es usar las mejoras implementadas sobre esta
capa para dar solución a requerimientos de procesos de negocio implementados en BizAgi
mediante los servicios web.

Los resultados más relevantes fueron:

Obtención de documentación de la capa SOA que brinda la Suite BPM BizAgi.
Ampliación de la SOA que brinda la Suite BPM BizAgi, permitiendo su integración con otros
sistemas como el portal de la organización y otros procesos de negocio modelados en
nuestro grupo de trabajo.










Introducción

Este trabajo se realiza en una institución llamada Centro de Investigación de
Tecnologías Integradas ( CITI ), en el grupo de investigación de BPM (Business
Process Management), se necesitaba mejorar la Capa SOA de BizAgi para una
mejor integración de los servicios que esta ofrece con las necesidades de nuestro
grupo de trabajo.

El problema a resolver estaba dado puesto que BizAgi no presenta una solución para
darle respuesta a la solicitud de un usuario de conocer distintos datos almacenados
en una Entidad de BizAgi, además poderle mostrar a un usuario desde otra
aplicación los procesos de BizAgi que este puede iniciar.

Nuestro trabajo será utilizado inmediatamente se terminen las aplicaciones, y los
procesos de BizAgi que van a consumir nuestro servicios. Con la elaboración de
nuestros servicios se le da cumplimiento a la necesidad de tener implementado los
métodos y funciones que la dan soporte a las aplicaciones, y procesos de BizAgi en
los que se trabaja actualmente en nuestro grupo.
Los antecedentes de nuestro trabajo son el trabajo con la tecnología de .NET
Framework, el uso de la Capa SOA de BizAgi antes de las mejoras. La tecnología de
los servicios web mediante WCF(Windows Comunication Fundation).

Se revisaron varias bibliografías a las cuales se les hace referencia a continuación:

 Professional LINQ - Scott Klein

 [KATRIB, 2008] Katrib, Miguel; del Valle, Mario; Paneque, Leonardo;
Fresneda, Román; Fuentes, Thaizel; Sierra, Iskander; Hernández, Yamil;


Som, Guillermo. Visual Studio 2008. Desafía todos los retos. Capitán San
Luis, Ciudad de La Habana, 2008.

 www.wiki.BizAgi.com

Los aportes prácticos de este trabajo consisten en que gracias al trabajo realizado se
ha logrado obtener un conocimiento considerable sobre las tecnologías con las que
se realizó nuestro trabajo como son el lenguaje C# y el trabajo con este en el .NET
Framework 4.0 nos posibilito el aprendizaje del lenguaje de consultas LINQ muy
práctico para consultas de todo tipo, se obtuvo también un conocimiento de la
tecnología de ficheros XML se afianzo el conocimiento sobre la Suite de BizAgi y
sobre todo de obtuvieron nuevos conocimientos sobre el trabajo con SOA

Nuestro objeto de estudio principal es la Capa de SOA de BizAgi. Afianzado con el
objetivo general de analizar y mejorar la capa SOA de BizAgi, complementado con
los objetivos específicos Crear un servicio web que integrado con el servicio
EntityManagerSoa y con el servicio WorkflowEngineSoa que posee la capa SOA de
BizAgi le brinde soporte a un determinado proceso de BizAgi modelado en nuestro
grupo de trabajo y al portal del CITI.

Las tareas principales desarrolladas para cumplir los objetivos fue analizar los
métodos que poseen los servicios EntityManagerSoa y WorkFlowEngineSoa para
determinar su factibilidad para darle solución a la problemática planteada.

Se estudió la factibilidad de los servicios web a la hora de integrase con los procesos
de negocio modelados en BizAgi así como de su posibilidad de integración con el
portal del CITI.



Estudio de la tecnología de consultas LINQ para ser usada con el fin de acceder a la
información almacenada en distintas tecnologías (Bases de Datos y Archivos XML)

Para la implementación de la nueva funcionalidad del método asociado al servicio
WorkflowEngineSoa se tuvo que hacer un estudio profundo de la base de datos en la
que se apoya la suite de BizAgi para reconocer las relaciones existentes en esta y
poder usarlas para nuestra solución.

La tarea final para cumplir los objetivos fue la de implementar la solución propuesta.

En cuanto al estudio de herramientas, lenguajes y tecnologías a utilizar en la
actualidad existen numerosas opciones para desarrollar servicios web, y para la
integración con bases de datos así como para realizar la ingeniería de software.

Nosotros nos decantamos por el uso del .NET Framework y su IDE Microsoft Visual
Estudio 2010 para el desarrollo y montaje de los servicios web porque son los
utilizados en nuestro grupo de trabajo, además para explorar distintas tecnologías
de trabajo.

Para el manejo de las bases de datos se usó SQL Server 2005 porque es el gestor
de base de datos que trae BizAgi y ya viene integrado a esta suite de trabajo.
Para la integración con las bases de datos y recopilación de datos mediante las
consultas se usó la tecnología de consultas LINQ debido a su facilidad de uso e
integración con cualquier tipo de dato. Esta tecnología se usó también para el
manejo de los ficheros XML con los que se trabaja.






Capítulo 1
Capa SOA de BizAgi

Servicio EntityManagerSoa:


Función Descripción
getEntitySchema Este método del servicio solicita por
parámetro el nombre de la entidad para
obtener el esquema de esta en XML junto
con las entidades relacionadas y las tuplas
que posea esta entidad
getEntitySchemaStr Este método retorna los mismos datos que
el anterior pero en este caso como una
cadena(string)
getEntities Este método es de los más importantes del
servicio pues retorna un documento XML
con todas las tuplas que cumplan lo
especificado en un documento XML que
este método debe recibir por parámetro
este documento debe poseer una
estructura determinada.
getEntityUsingShema Este método debe recibir como parámetro
un documento XML con la información
solicitada a la entidad además de un
esquema para obtener el XML de salida en
el formato proporcionado por el esquema.
saveEntity Este método se puede usar de dos formas
para insertar datos en una entidad o para
actualizar datos presentes los parámetros
son un XML de entrada con formato
predeterminado para la inserción solo irán
en este XML los datos de un nuevo registro
que se deseen insertar, para actualizar un
registro el XML debe contener el id del
registro a actualizar así como los nuevos
datos este método retorna un XML simple
con el id de la entidad modificada.
GetListOfParameterFromDate

Este es uno de los métodos implementados
por nosotros este método usa la función de
getEntities para obtener los registros de la
entidad especificada en los parámetros de
entrada y de esta seleccionar una lista de
ocurrencias en la entidad de un parámetro


especificado por el usuario estos datos
serán obtenidos en un rango de fecha
especificado también por el usuario. En
este método se hace la recopilación de
datos mediante consultas LINQ.
EspecifiedParameterDataList

Este método implementado por nosotros
también proporciona una lista de objetos
(Dynamic Data) construidos a partir de
datos solicitados por el usuario que son la
entidad de la que necesita obtener los
datos una lista de parámetros(deben ser
nombres exactos de las propiedades de la
entidad en la base de datos) de la cual
posee una estructura predeterminada que
es la siguiente dos parámetros que son
datos de la entidad que usted desea un
tercero que es el nombre del campo que se
asocie con la fecha en la BD así como un
rango de fecha si se desea obtener
registros de un solo día poner la misma
fecha. Se usa también el método getEntities
para obtener los datos sin procesar de la
entidad. En este método se hace la
recopilación de datos mediante consultas
LINQ.


Servicio WorkflowEngineSoa:

Función Descripción
getProcesByUser Esta es la función implementada por
nosotros para adaptar lo que ofrece este
servicio a nuestras necesidades puesto que
este servicio no ofrecía ninguna solución a
la problemática planteada con las funciones
que este trae por defecto. Esta
funcionalidad se diseñó para que un
usuario del portal del CITI solo pueda ver al
entrar los procesos de BizAgi que él pueda
usar y no información innecesaria, de
procesos a los que él no puede acceder.
Solo se debe pasar por parámetro el
nombre del usuario y se recibe la lista de
procesos a los que él tiene acceso
createCase Este método permite la creación de casos


para un caso determinado. Además,
estableciendo los valores para los atributos
de la entidad también es posible con este
método para el que los valores requeridos
deben ser puestos en el documento XML
que recibe el método. El nodo <Case> es
repetido en el documento XML tantas veces
como sea requerido cuando hay muchos
casos para crear. El método recibe y
retorna un documento XML.
createCaseAsString Este método funciona de modo similar al
método CreateCases; sin embargo, este
método recibe el documento XML como
una cadena en vez de recibir el formato de
documento XML. De manera similar, el
método retorna una cadena que contiene el
documento XML con la información del
nuevo caso referido.
performActivity Este método recibe como parámetro un
documento XML con la información
requerida por el servicio Web para avanzar
en la actividad especificada; la actividad es
avanzada de acuerdo al valor especificado
para las entidades involucradas. Este
método retorna un documento XML con la
información de las actividades donde el
caso se encuentre luego de avanzar en la
actividad.













Capítulo 2.
Extensión de la capa SOA de BizAgi

Actores del sistema
Nombre del actor Descripción
Sistema
Consumidor del
Servicio
Este será el sistema que consuma el servicio
Capa SOA de
BizAgi(Sistema
Externo)
Este sistema brinda soporte al caso de uso Recoger
Información de la Entidad

Diagrama de Casos de Uso del Sistema.




Descripción resumida de los casos de uso.


Nombre del caso
de uso
Obtener Lista de Parámetro dado Fecha
Actores Sistema Consumidor del Servicio.
Resumen Este caso de uso se inicia cuando el consumidor de


servicio incluye en su programa una referencia a la
función del servicio
EspecifiedParameterDataList internamente este gestiona
los datos y termina cuando el programa consumidor
recibe la respuesta deseada, donde él se le introduce una
serie de datos separados por coma donde van a
corresponder con los datos que se desean obtener
dándolos a conocer al recibir la respuesta del servicio.
Las excepciones que pueden ocurrir son que alguno de
los datos solicitados no exista o que se halla especificado
mal alguno de los parámetros de entrada de la función.
Posee una relación con el caso de uso Recoger
Información de la Entidad este mediante el uso de
funciones de la capa SOA de BizAgi le proporciona los
datos de la entidad a este caso de uso.
Precondiciones Se debe contar con una conexión estable al servidor de
bases de datos además de asegurarse que la información
solicitada esté disponible. El programa consumidor debe
haber incluido una referencia al servicio en su código de
ejecución.
Pos condiciones El programa consumidor debe haber recibido una
correcta respuesta dada la información solicitada al
servicio, pudiéndola analizar y procesar para su uso.
Requisitos
especiales
Para este proceso hay que tener en cuenta la seguridad
puesto que el uso de este servicio está restringido al
personal con las credenciales de seguridad apropiadas
para el uso del servidor central del grupo de trabajo.


Nombre del caso
de uso
Obtener Registro Especifico dado Fecha
Actores Sistema Consumidor del Servicio.
Resumen
Este caso de uso se inicia cuando el consumidor de
servicio incluye en su programa una referencia a la
función del servicio GetListOfParameterFromDate
internamente este gestiona los datos y termina cuando el
programa consumidor recibe la respuesta deseada. Las
excepciones que pueden ocurrir son que alguno de los
datos solicitados no exista o que se halla especificado
mal alguno de los parámetros de entrada de la función.
Posee una relación con el caso de uso Recoger
Información de la Entidad este mediante el uso de
funciones de la capa SOA de BizAgi le proporciona los


datos de la entidad a este caso de uso.
Precondiciones Se debe contar con una conexión estable al servidor de
bases de datos además de asegurarse que la información
solicitada esté disponible. El programa consumidor debe
haber incluido una referencia al servicio en su código de
ejecución.
Pos condiciones El programa consumidor debe haber recibido una
correcta respuesta dada la información solicitada al
servicio, pudiéndola analizar y procesar para su uso.
Requisitos
especiales
Para este proceso hay que tener en cuenta la seguridad
puesto que el uso de este servicio está restringido al
personal con las credenciales de seguridad apropiadas
para el uso del servidor central del grupo de trabajo.


Nombre del caso
de uso
Recoger Información de la Entidad
Actores Sistema Consumidor del Servicio.
Resumen Este caso de uso se inicia cuando el consumidor de
servicio incluye en su programa una referencia a las
funciones del servicio GetListOfParameterFromDate y
EspecifiedParameterDataList, y a la vez haciendo uso de
la función getEntities, devolviendo las entidades de
acuerdo a las condiciones dispuestas a través de las
consultas realizadas. Internamente este gestiona los
datos y termina cuando el programa consumidor recibe la
respuesta deseada. Las excepciones que pueden ocurrir
son que alguno de los datos solicitados no exista o que
se halla especificado mal alguno de los parámetros de
entrada de la función. Posee una relación con el caso de
uso Recoger Información de la Entidad este mediante el
uso de funciones de la capa SOA de BizAgi le
proporciona los datos de la entidad a este caso de uso.
Precondiciones Se debe contar con una conexión estable al servidor de
bases de datos además de asegurarse que la información
solicitada esté disponible. El programa consumidor debe
haber incluido una referencia al servicio en su código de
ejecución.
Pos condiciones El programa consumidor debe haber recibido una
correcta respuesta dada la información solicitada al
servicio, pudiéndola analizar y procesar para su uso.
Requisitos Para este proceso hay que tener en cuenta la seguridad


especiales puesto que el uso de este servicio está restringido al
personal con las credenciales de seguridad apropiadas
para el uso del servidor central del grupo de trabajo.


Nombre del caso
de uso
Obtener los Procesos que puede iniciar un Usuario
Actores Sistema Consumidor del Servicio.
Resumen Este caso de uso se inicia cuando el consumidor de
servicio incluye en su programa una referencia a las
funciones del servicio getProcesByUser internamente
este gestiona los datos haciendo uso de las consultas
LINQ a SQL sobre la base de datos de BizAgi para
obtener los procesos de los que un usuario puede iniciar
casos en el portal y termina cuando el programa
consumidor recibe la respuesta deseada.
Precondiciones Se debe contar con una conexión estable al servidor de
bases de datos además de asegurarse que la información
solicitada esté disponible. El programa consumidor debe
haber incluido una referencia al servicio en su código de
ejecución.
Pos condiciones El programa consumidor debe haber recibido una
correcta respuesta dada la información solicitada al
servicio, pudiéndola analizar y procesar para su uso.
Requisitos
especiales
Para este proceso hay que tener en cuenta la seguridad
puesto que el uso de este servicio está restringido al
personal con las credenciales de seguridad apropiadas
para el uso del servidor central del grupo de trabajo.













Capítulo 3.
Solución Propuesta

Diagrama de Clases de la Interfaz de Servicio






















Diagrama de Clases de los Data Contract del Servicio

Diagrama de Clases de las Clases Auxiliares Utilizadas









Diseño XSLT y/o XML de envío y respuesta

En nuestro proyecto se utilizó la tecnología XML para algunos métodos a
continuación exponemos el código de los ficheros XML utilizados:

Este es un fichero XML es el parámetro que requiere la función getEntities para
recoger los datos de las entidades según la fecha para luego ser procesados y dar la
respuesta.

<BizAgiWSParam>
<EntityData>
<EntityName>Inventar</EntityName>
<Filters>
<![CDATA[

Fecha >= '6/14/2011 12:00:00 AM' and idInventar <= 201]]>
</Filters>
</EntityData>
</BizAgiWSParam>

Este fichero XML a continuación es un ejemplo de respuesta dada por el método
getEntities utilizado por las funciones de nuestro servicio.

<?xml version="1.0" encoding="utf-8"?>
<BizAgiWSResponse xmlns="">
<Entities>
<Inventar key="1">
<IDEntidad>1.0000</IDEntidad>
<Cargo entityName="CargoCiti" key="2">
<AreaCiti>2</AreaCiti>
<Descripcion>Director Adjunto</Descripcion>
</Cargo>
<Descripcion>Puedo</Descripcion>
<Fecha>2011-06-15T03:00:00</Fecha>
<Salir>False</Salir>
<ListaCompetencias>
<Competencia key="1">
<Inventar>1</Inventar>
<Descripcion>activo</Descripcion>
<Activa>True</Activa>
<Nombre>entusiasmo</Nombre>


</Competencia>
<Competencia key="2">
<Inventar>1</Inventar>
<Descripcion>activo</Descripcion>
<Activa>True</Activa>
<Nombre>entusiasmo</Nombre>
</Competencia>
<Competencia key="3">
<Inventar>1</Inventar>
<Descripcion>ser rapido</Descripcion>
<Activa>True</Activa>
<Nombre>diestro</Nombre>
</Competencia>
<Competencia key="4">
<Inventar>1</Inventar>
<Descripcion>ser honesto en el trabajo</Descripcion>
<Activa>True</Activa>
<Nombre>honesto</Nombre>
</Competencia>
<Competencia key="5">
<Inventar>1</Inventar>
<Descripcion>primordial</Descripcion>
<Activa>True</Activa>
<Nombre>amable</Nombre>
</Competencia>
<Competencia key="6">
<Inventar>1</Inventar>
<Descripcion>primordiales</Descripcion>
<Activa>True</Activa>
<Nombre>amables</Nombre>
</Competencia>
</ListaCompetencias>
</Inventar>
</Entities>
</BizAgiWSResponse>

Este es un diagrama de tablas de la base de datos de BizAgi que se utilizan en la
función getProcesByUser gracias a la relación que existe entre ellas se pudo
obtener luego de un minucioso estudio la forma de obtener los procesos que puede
iniciar cada usuario







Diagrama de despliegue