You are on page 1of 112

Open Source workflow

automation with BPMN


2.0, Java and camunda
Manuel Vega
manuel.vega@manexware.com
Skype: manuel.vega.ulloa

2015 Manexware S.A.

Camunda BPM
7.2

Camunda BPM
components
Business
Analyst

Business
Modeler

Business User

Tasklis
t

Custom
Application

Cockpit

REST / Java

REST

REST

Cycle
REST / Java API

Developer

File Repository

Engine

Eclipse
Modeler

Database

Design Time

Operations
(technical/business)

Runtime

BPMN with camunda BPM


Analyst / Developer

Modeler

User

Tasklist / Your
UI

Engine
Camunda BPM platform

Operator

Cockpit

Why is this cool?

Passion
Productivity
No Vendor-LockIn

Black Box
BPM-Suite

Real-Life @docs.camunda.org

Example
s

Check out github

And Tutorials and How-Tos

Camunda BPM 7.2

Tasklist
Connectors / Data /
Scripts / Templates
Cockpit

Camunda BPM 7.2

Tasklist
Connectors / Data /
Scripts / Templates
Cockpit

What is Tasklist?

Tasklist 7.2
The tasklist is the central point of
contact for business users with the BPM
platform and is therefore an essential
component. The innovative
implementation of the Camunda tasklist
matches the DAB bank's web technology
stack perfectly and saves extensive inhouse development. The functionality is
optimally aligned to the Camunda BPM
platform and due to its fexible
adaptability also fulflls the needs of a
bank.
Karl Brandner, Chief Architect

Live Demo

Technical Architecture

Camunda
JavaScript Forms
SDK

AngularJS
Twitter Bootstrap

RES
T

Camun
da
Backe
nd

Angular JS
AngularJS es un framework de JavaScript de cdigo abierto,
mantenido por Google, que ayuda con la gestin de lo que se
conoce como aplicaciones de una sola pgina. Su objetivo es
aumentar las aplicaciones basadas en navegador con
capacidad de Modelo Vista Controlador (MVC), en un esfuerzo
para hacer que el desarrollo y las pruebas sean ms fciles.
La biblioteca lee el HTML que contiene atributos de las
etiquetas personalizadas adicionales, entonces obedece a las
directivas de los atributos personalizados, y une las piezas de
entrada o salida de la pgina a un modelo representado por las
variables estndar de JavaScript. Los valores de las variables
de JavaScript se pueden configurar manualmente, o
recuperados de los recursos JSON estticas o dinmicas.
16

Angular JS

17

Twitter Bootstrap
Twitter Bootstrap es un conjunto de clases CSS que podemos
usar para darle estilo a nuestro sitio Web. Bootstrap es una
herramienta muy completa y personalizable, la cual hace que
cientos o miles de pginas web la utilicen.

18

Your own Setup?

Camunda
JavaScript Forms
SDK

Your very own HTML 5


User Interface

RES
T

Camund
a
Backen
d

Camunda JavaScript Forms SDK


Greatly simplifies the implementation of task
forms.
You can directly bind Html form controls to
process variables.
form >
The<Forms
SDK
the fetching of the
< input
type=handles
"text"
cam -variablevariable values nam
from
process
engine, type
e= "CU the
STO M ER_I
D " cam variable-type= "String">
conversions and so on.
< input type= "text"
cam -variablenam e= "CU STO M ER_REVEN U E" cam variable-type= "Float">

The< /for
Forms
SDK optionally integrates with
m>
AngularJS to take advantage of
AngularJS form validation and other AngularJS
goodies.
More: https://github.com/camunda/camunda-bpm-sdk-js

Camunda BPM 7.2

Tasklist
Connectors / Data /
Scripts / Templates
Cockpit

The paradigm

DeveloperFriendly
System
Camunda
Integration

vs.

Death by
Property
Panel

Zero-Code BPM
Suites

Java Object in XML or JSON serialize


Camund
a BPM

Custom
er,
Address

XML
or
JSON

Databas
e

Advantages:
Anyone can directly inspect Java objects in the
database and Cockpit
It is easier to set up polyglot architectures (e.g.
Java + Javascript)

Live Demo

Improved Handling of Data Formats


XML
or
JSON

Advantages:
Directly access XML or JSON within the
process via APIs
No need to convert XML or JSON into Java
Objects

Advanced Support for Scripting

Connectors

Connectors
Simple API for implementing Connectors as reusable
Components
Included with Camunda 7.2: SOAP and REST (both based
on Apache
HTTP Client)
Fundamentally different approach than Zero-Code
Suites:
Developer become more productive its not about
empowering Business
Analysts
However not every developer speaks Java
Primary Target Group: IT divisions that want to provide a
workflow
infrastructure for their organization (other IT teams)
Focus on API instead of Properties

A powerful combination

Data

Connect
ors

Scripti
ng

Example: Do I have to work today?

JSON

RES
T

Javascri
pt

Camunda BPM 7.2

Tasklist
Connectors / Data /
Scripts / Templates
Cockpit

Cockpit Plugins

https://github.com/camunda/camunda-bpm-examples/

Showing:
Running
Incidents
Started in last 2 hours
Running longer than
24 hours

39

Wildfly
WildFly representa una actualizacin del proyecto y a la vez
una renovacin de su visin de impulsar la prxima generacin
de tecnologas de servidor de aplicaciones.
Esta tecnologa continuar sirviendo como proyecto de
desarrollo preliminar de JBoss Enterprise Application Platform
de Red Hat y se centra en algunas de las principales fuerzas
que plasman el middleware hoy en da, incluso el cambio hacia
enfoques ms flexibles y modernos para el desarrollo de
aplicaciones, la habilitacin de nubes hbridas abiertas y Java
Enterprise Edition 7 (Java EE 7).

40

Wildfly 8
concentra la atencin en la rpida obtencin de la
especificacin Java EE 7 que aporta simplicidad,
estandarizacin e integracin tanto para los escenarios de
desarrollo de nubes como de dispositivos mviles.
La especificacin Java EE7 incluye WebSockets y mejoras en
Contextos e Inyeccin de Dependencia (CDI).

41

DISTRIBUCIN DE CARPETAS DE NUESTRO SERVIDOR DE


APLICACIONES

42

Detalles sobre las carpetas :


appclient:
contains configuration files, deployment content, and writable
areas used by the application client container run from this

bin:
contiene SCRIPTS, configuracion inicial de archivos y varios
comandos de linea utiles el : vault.sh, add-user.sh.Las otras
carpetas(service, init.d) son usadas respectivamente para
instalar Wildfly tanto como un servicio de Windows y Linux.

docs/schema:
contiene el SCHEMA XML de definiciones.

docs/examples/config:
contiene algunas configuraciones en solitario (tal como
standalone-minimalistic.xml).
43

Detalles sobre las carpetas :


domain:
contiene los archivos de configuracion del dominio, del servidor
y area escribible usada por el dominio.

modules:
contiene todos los modulos ....

standalone:
Contiene el archivo de configuracion , contenido del
despliegue,y areas escribibles usadas por el servidor en
solitario corriendo para nuestra aplicacion..

welcome-content:
contains content related to the default (ROOT) web application.

44

REGLAS
DE NEGOCIO

45

Parametrizacin?

Quizs. Todo el mundo quiere un sistema parametrizable.

Pero toda parametrizacin tiene un costo y parametrizar todo el


sistema no es viable y mucho menos efectivo, porque tienen cosas
que cambian tan poco que el retorno no pagara el esfuerzo, todava
ms porque las cosas cambian.
Una vez que hayas encontrado "lo que" parametrizar te tienes que
preocupar por el "cmo". Esta tampoco es una tarea fcil.
Muchas empresas han adoptado la solucin de la parametrizacin
mas simple que es el de "Cada caso es un caso". En este modelo
normalmente, algunas tablas se exponen por lo general a travs de
pantallas de parametrizaciones. A veces se mezcla con CRUDs.

46

Por qu no parametrizar con pantallas?


Puedes optar por este enfoque. En algunos casos ser
suficiente, en otros no.
Porque este tipo de enfoque tiene problemas con la
flexibilidad. Y cualquier cambio por mas simple que sea
puede generar una nueva demanda de desarrollo.

47

Cul es el problema del desarrollo?


En principio ninguno.
Sin embargo, los desarrolladores son ms caros que un
profesional que est en la lnea de produccin y que conoce
mejor el negocio.
Ciertas cosas que el usuario no tiene aunque el quisiese no
podra resolver. Otras el podra resolver sin pasar por el equipo
de desarrollo y, por tanto, ahorrar dinero para la organizacin y
dejar que el equipo de desarrollo se enfoque en lo que
realmente vale la pena!

48

Niveles de Decisin?
Esa es una buena. Necesita proporcionar ciertos niveles de
decisin al usuario. Un sistema mas parametrizable significa
mas decisiones para el usuario. Esto no necesariamente
significa ms complejidad. Porque la complejidad depender
bsicamente de la complejidad inherente del problema y la
complejidad que le das en la solucin.
Debe dar al usuario ciertos niveles de decisin, es decir, no
todo tiene que venir como una peticin de desarrollo. Bueno yo
hago eso, tengo pantallas que el usuario escoge como van a
ser ciertas cosas en el sistema. El problema es que este
enfoque puede ser costoso y no siempre claro para el usuario

49

Por qu no exponer las reglas de negocio?


Esto puede ser la solucin a sus problemas.
Cul es el problema de eso?
Los analistas sern despedidos?
Los usuarios obtienen el control de IT?
"No" para las dos preguntas!

Para resolver este problema se utiliza otro modelo, el


paradigma del que estoy hablando es BRMS.

50

Business Rules Management System?


Consiste en desarrollar, mantener, versionar, probar, organizar y
hacer el despliegue de reglas de negocio.
As vamos a dar poder al usuario. Ese poder se puede obtener
a travs de reglas escritas con los objetos de dominio por
medio de DSLs escritos en un buen castellano con el lenguaje
del usuario. O incluso con una buena hoja de clculo.

51

Generalidades
Drools es un sistema de administracin de reglas de negocio
(BRMS) con un motor de reglas basado en una adaptacin
orientada a objetos del algoritmo Rete. Permite expresar de una
forma ms natural las reglas de negocio interactuando con los
objetos de negocio. Provee separacin de lgica (reglas) y
datos (hechos).
Tambin provee soporte para la programacin declarativa, y es
lo suficientemente flexible para expresar la semntica del
problema con un lenguaje especfico de dominio (DSL).
Drools cuenta con la implementacin completa de la JSR-94
Rule Engine API.
52

Generalidades
Tambin existe un plug-in de Eclipse para facilitar el desarrollo
con esta herramienta.
Para especificar las reglas Drools utiliza el lenguaje de reglas
de drools (DRL), para especificar las condiciones, acciones y
funciones de las mismas, las cuales se puede expresar con
distintos lenguajes, como Java. Entonces las reglas son
guardadas en archivos de texto con la extensin drl.
Entre las opciones para definir las reglas aparte del DRL se
pueden especificar lenguajes especficos de dominio (dsl), los
cuales se asocian a un drl, y tambin existe la opcin de
especificar las reglas en una planilla de clculo, como Excel.
53

DROOLS ~ CONCEPTOS BSICOS


La versin 6 de Drools/jBPM introduce el nombre KIE
(Knowledge is Everything / El conocimiento es todo), el cual es
el nombre que agrupa los siguientes sub-proyectos
de Drools/jBPM:

54

Reglas de negocio
Bsicamente una regla tiene dos secciones:
Condicin: Cuando la miema se cumple, la regla queda
disponible para ser ejecutada,
Consecuencia: Acciones que se deben tomar cuando se
ejecute la regla.

Las condiciones pueden validar informacin de los objetos


almacenados en la Working Memory del Motor de Reglas.
Estos objetos en memoria tambin son llamados facts (hechos)
y los mismos representan el estado de nuestro Motor de
Reglas.

55

56

Restricciones de condiciones
Cuando se actualizan los datos de la Working Memory
(inserciones, modificaciones, eliminaciones), los mismos son
evaluados contra las condiciones definidas en las reglas, lo que
conlleva a que las mismas puedan activarse o desactivarse.

57

Restricciones de condiciones
Hay dos tipos de restricciones que se pueden aplicar a las
reglas:
Tipo de Objeto: Para que un objeto de la Working Memory
coincida con esta restriccin, el mismo debe ser una instancia
del Tipo de Objeto definido (Clase Java). Por ejemplo, la
siguiente restriccin:
Orden() ser vlida para todos los objetos de la Working Memory que
sean instancias de la Clase Orden.

Campo: Aplicar para todos los objetos que presenten sus


campos (atributos) con ciertos valores. Por ejemplo,
Orden(estado ==Nueva) aplicar para todos los objetos de
la Working Memory que sean una instancia de la clase Orden y tengan
el atributo estado con el valor del String Nueva.

58

Pattern Matching
Se conoce como pattern (patrn) a la restriccin por Tipo de
Objeto junto a cero o ms restricciones de Campo.
Cuando algn objeto de la memoria satisface ambas
restricciones, se dice que el objeto coincide (est matched).
Cuando hay una coincidencia (match) para todas las
condiciones de una regla se crea una Rule Match. Las reglas y
los hechos (facts) sern referenciados y aadidos a la Agenda
de Drools.
El proceso de buscar coincidencias de objetos en memoria con
los patrones de las condiciones se conoce como Pattern
Matching.

59

Pattern Matching

60

Pattern Matching
La siguiente ilustracin muestra el proceso de Pattern Matching
para una regla que ser ejecutada por cada Orden que se
encuentre en el estado Nueva.

61

Agenda
La Agenda de Drools es una coleccin de las reglas activas (se
cumplen todas sus condiciones, por lo que su consecuencia est
disponible para ser ejecutada) y es la responsable de gestionar
el orden de ejecucin de las reglas.
Cuando se disparan las reglas, Drools selecciona una de la
Agenda y ejecuta su consequencia, lo que puede derivar en ms
activaciones (o desactivaciones) de reglas. Esto sucede ya que
la consecuencia de una regla puede modificar datos de la
memoria y sto puede generar diferencias en el matcheo de
patrones. Este ciclo continuar hasta que se hayan disparado
todas las reglas activas y la Agenda se encuentre vaca. El orden
de ejecucin de las reglas puede ser modificado mediante una
configuracin de atributos de reglas, los cuales se vern ms en
la seccin Resolucin de Conflictos y posteriores publicaciones.
62

Agenda
El motor de reglas bsicamente itera sobre estas dos fases:
Acciones en tiempo de ejecucin: Ejecuta consecuencias de
reglas o el procesos main de Java.
Evaluacin de Agenda: Selecciona la regla a ejecutar.

63

Agenda

64

Resolucin de conflictos
Cuando hay Rule Matches en la Agenda se dice que hay un
conflict set y su ejecucin ser determinada por una
Estrategia de Resolucin de Conflictos (Conflict Resolution
Strategy). Hasta este momento se considera que el orden de
ejecucin es arbitrario.
El orden de ejecucin se determinar en base a la prioridad de
cada regla a ser disparada. La prioridad se puede dar mediante
el atributo salience, el cual es un valor entero (mayor valor,
mayor prioridad). El valor predeterminado para este atributo es
0, por lo tanto si no se define un valor en particular, todas las
reglas tendrn la misma prioridad (cero).

65

Resolucin de conflictos
Las reglas deben pensarse de forma independiente y su lgica
nunca debera conocer que existen otras reglas o posibles
flujos de ejecucin. Por lo tanto, no se recomienda escribir las
reglas pensando en una secuencia de ejecucin ordenada por
prioridad. Obviamente que hay excepciones, por ejemplo
cuando se desea que las reglas de inicializacin se ejecuten
antes que el resto.
Existen otras formas de alterar la secuencia de ejecucin de
reglas, como pueden ser Agenda Groups, Ruleflow Groups
y Activation Groups.

66

Inferencia
Segn la Real Academia Espaola, la accin de inferir es sacar
una consecuencia o deducir algo de otra cosa..
En otras palabras, podemos decir que inferencia es la manera de
generar nuevo conocimiento an base a conocimiento actual.
Desde el punto de vista de un Motor de Reglas, el razonamiento
o inferencia se realiza a travs de las reglas de negocio. Las
consecuencias de las reglas pueden llevar a modificacin de
hechos actuales. Esta modificacin de hechos puede llevarnos a
una nueva inferencia que incluya nuevas consecuencias. En el
mbito de Motor de Reglas tambin se conoce a inferencia a
este ciclo de modificacin de hechos que dispara nuevas
inferencias y consecuencias.
67

Knowledge Base
Se conoce como Knowledge Base al repositorio de definiciones
de conocimiento de la aplicacin (reglas, procesos, funciones,
etc). No contiene informacin de tiempo de ejecucin.

68

Session
Los datos de tiempo de ejecucun se almacenan en la sesin
(Session), la cual puede crearse desde una Knowledge Base
que contiene las definiciones de conocimiento.
Stateful Session
Una sesin con estado (Stateful Session) es la manera ms
comn de interactuar con el motor. Permite a la aplicacin
establecer una conversacin iterativa con el motor, donde el
estado de la sesin es conservado entre los distintos llamados.
Cuando una conecuencia de una regla cambia el estado de la
sesin puede provocar que se activen o desactiven distintas
reglas.

69

Session
Stateless Session
Una sesin sin estado (Stateless sessions) no permite
llamados interactivos, por lo que el motor no proporciona
inferencia (relacionada a modificacin de datos). Cada
invocacin al motor tiene su propio estado (datos), el cual ser
descartado al finalizar el llamado en curso. En realidad, una
sesin sin estado es una encapsulamiento de una sesin con
estado, el cual es descartado al finalizar la ejecucin. La sesin
tiene el siguiente ciclo de vida:

Se crea una Stateful session


Se insertan datos en la Stateful session
Se disparan las reglas
Se generan los resultados
Se descarta la Stateful Session

70

DROOLS ~ EJEMPLO DE REGLAS SIMPLES


Configuracin
El proyecto se llama drools-examples y es un proyecto de
Maven con las siguientes dependencias:
org.kie:kie-api:6.1.0.Final
org.drools:drools-compiler:6.1.0.Final

Ambas dependencias estn definidas utilizando Drools BOM.


Adems se incluyen dependencias de SLF4J y JUnit, las
cuales se utilizan en los distintos Test Cases del proyecto.

71

DROOLS ~ EJEMPLO DE REGLAS SIMPLES


Caso de uso / Modelo de Datos
Los ejemplos de este post se basan en diferentes reglas que se podran
aplicar cuando se realiza una Compra.
El modelo de datos a utilizar es bien simple, ya que el propsito es hacer
foco en la definicin y ejecucin de reglas.
Purchase

Customer name
Subtotal
Payment Method
Discount

Payment methods
Cash
Credit Card
Debit Card

Potential Customer
Customer name
Credit Limit

72

DROOLS ~ EJEMPLO DE REGLAS SIMPLES

73

DROOLS ~ EJEMPLO DE REGLAS SIMPLES


Reglas de negocio
Trabajaremos en dos grupos de reglas, el primero para definir
el descuento de una compra y el segundo para identificar
potenciales clientes a los que se le ofrecern lneas de crditos
de compra.

74

DROOLS ~ EJEMPLO DE REGLAS SIMPLES


Reglas de descuento
Efectivo: sin descuento
Cuando el mtodo de pago es Efectivo, no hay descuento
Total = Subtotal

Tarjeta de dbito: descuento del 5%


Cuando la forma de pago es Tarjeta de Dbito, se aplica un 5% de
descuento.
Total = Subtotal (5% del Subtotal)

Tarjeta de crdito: descuento del 10%


Cuando la forma de pago es Tarjeta de Crdito, se aplica un 10% de
descuento.
Total = Subtotal (10% del Subtotal)

75

DROOLS ~ EJEMPLO DE REGLAS SIMPLES


Cliente Potencial
Identificar clientes potenciales
Un Cliente Potencial es quien realiza una compra en Efectivo por un
monto mayor a $300.
Se le ofrece al cliente potencial una lnea de crdito equivalente al 80%
del subtotal de la compra realizada.

Se le desea enviar un email a los clientes potenciales cuya lnea de


crdito sea menor o igual a $500.
Para el ejemplo se utilizar un Servicio de Email ficticio, el cual ser
invocado desde las reglas.

Se desea llamar por telfono a los potenciales clientes cuya lnea


de crdito sea superior a los $500.
Para el ejemplo simplemente se loguear un mensaje cuando se
ejecuta la regla. En un caso real se podra notificar al Servicio de
Atencin al Cliente para que realice el llamado, o bien se podra crear
una instancia de un Proceso de Negocio relacionado.
76

DROOLS ~ EJEMPLO DE REGLAS SIMPLES

77

API de Drools
Para empezar, vamos a revisar algunos conceptos de Drools
mediante la lectura de su Javadoc:
KieBase: repositorio de todas las definiciones de conocimiento de la
aplicacin. Contiene reglas, procesos, funciones y tipos de dato. No
contiene datos asociados al tiempo de ejecucin, para eso se utilizan
las sesiones, las cuales son creadas en base a una KieBase. A las
sesiones se les puede insertar objetos y crear instancias de procesos.
KieModule: contenedor de todos los recursos necesarios para definir
una KieBase. Por ejemplo, un pom.xml para definir el ReleaseId, un
kmodule.xml para declarar los nombre de las KieBases y
configuraciones junto a la KieSession.
KieContainer: un contenedor para todas las KieBases de un
determinado KieModule.
KieFileSystem: sistema de archivos en memoria, utilizado para
definir programticamente los recursos que componen un KieModule.
KieBuilder: un constructor de recursos contenidos en un KieModule.

78

KieContainer
De sta forma se crea programticamente un KieContainer en Drools 6:
KieServices ks = KieServices.Factory.get();
// Create the in-memory File System and add the resources files to it
KieFileSystem kfs = ks.newKieFileSystem();
kfs.write(ResourceFactory.newClassPathResource(resourceFilePath));
// Create the builder for the resources of the File System
KieBuilder kbuilder = ks.newKieBuilder(kfs);
// Build the KieBases
kbuilder.buildAll();
// Check for errors
if (kbuilder.getResults().hasMessages(Level.ERROR)) {
throw new IllegalArgumentException(kbuilder.getResults().toString());
}
// Get the Release ID (mvn style: groupId, artifactId,version)
ReleaseId relId = kbuilder.getKieModule().getReleaseId();
// Create the Container, wrapping the KieModule with the given ReleaseId
KieContainer kcontainer = ks.newKieContainer(relId);
79

KieBase
Una vez que se construy un KieContainer, podemos crear una
KieBase:
// Configure and create the KieBase
KieBaseConfiguration kbconf = ks.newKieBaseConfiguration();
KieBase kbase = kcontainer.newKieBase(kbconf);

80

Stateless Session
Una vez creada la KieBase, creamos una StatelessKieSession:
// Configure and create the StatelessKieSession
KieSessionConfiguration ksconf = ks.newKieSessionConfiguration();
StatelessKieSession ksession = kbase.newStatelessKieSession(ksconf);

81

Stateful Session
Una vez creada la KieBase, creamos una KieSession (Stateful):
// Configure and create the KieSession
KieSessionConfiguration ksconf = ks.newKieSessionConfiguration();
KieSession ksession = kbase.newKieSession(ksconf, null);

82

Reglas de descuento
Definicin de reglas
Las siguientes reglas pertencen al archivo discount.drl. Las
mismas utilizan una variable global llamada logger, la cual
referencia a una instancia de un Logger SLFJ.

83

1.- Las compras en efectivo no tienen descuento


rule "Cash purchases have no discount"
when
$p:Purchase(paymentMethod == PaymentMethod.CASH)
then
$p.setDiscount(0);
logger.info("\t==> Executing RULE 'Cash purchases have no
discount' for Object: " + $p);
end

84

2.- Descuento del 5% para compras con Tarjeta de


Dbito
rule "Debit Card purchases have 5% of discount"
when
$p:Purchase(paymentMethod == PaymentMethod.DEBIT)
then
$p.setDiscount(0.05);
logger.info("\t==> Executing RULE 'Debit Card purchases have
5% of discount' for Object: " + $p);
end

85

3.- Descuento del 10% para compras con Tarjeta de Crdito

rule "Credit Card purchases have 10% of discount"


when
$p:Purchase(paymentMethod == PaymentMethod.CREDIT)
then
$p.setDiscount(0.1);
logger.info("\t==> Executing RULE Credit Card purchases have
10% of discount' for Object: " + $p);
end

86

Test Cases

87

Test Cases

88

Cliente Potencial
1.- Identificar Clientes Potenciales
rule "Identify potential customers"
when
$p:Purchase(paymentMethod == PaymentMethod.CASH, subtotal > 300)
then
logger.info("\t==> Potential Customer found! " + $p);
// Create a new Potential Customer object
PotentialCustomer pc = new PotentialCustomer($p.getCustomerName(),
$p.getSubtotal()*0.80);
// Insert the Potential Customer object into the Working Memory
insert(pc);
end

89

Cliente Potencial

90

Cliente Potencial

91

The BIRT Designer

High Level BIRT Architecture

BIRT
BIRT Designer
Designer
Eclipse
Eclipse
Designer
Designer

Eclipse
Eclipse
DTP,
DTP,
WTP,
WTP,

Chart
Chart
Designer
Designer

Design
Design Engine
Engine
XML
Design
Document

BIRT
BIRT Engine
Engine

Data
Data

Generation
Generation
Services
Services

Charting
Charting
Engine
Engine

Data
Data
Services
Services

Presentation
Presentation
Services
Services

HTML
PDF
Excel
Word
PowerPoint
PostScript

Elasticsearch | Search & Analyze Data in Real Time

98

Real-Time Data

99

Real-Time Analytics

100

Full-Text Search

101

Logstash | Collect, Parse, & Enrich Data

102

Using Logstash to Streamline Email Notifications

103

Kibana | Explore & Visualize Your Data

104

Seamless Integration with Elasticsearch

105

Give Shape to Your Data

106

Sophisticated Analytics

107

Mayta-eSurvey

108

Q&A

Gracias!
Alguna pregunta?

You might also like