Workflow Management with Espresso Workflow

Embed Size (px)

Citation preview

Startfolie mit Titel der Prsentation

Startfolie mit Titel der Prsentation

Vorname Nachname
-Business Titel-
Workflow Management with
PAVONE Espresso Workflow for Java EE

Dr. Rolf Kremer
- Director Product Development -

Agenda

Introduction

Components

Modeling and Form Design

Capabilities

Runtime Engine API

Questions

PAVONE Espresso Workflow

Part of the PAVONE Process Control Suite

Available on two platforms: IBM Lotus Notes/Domino, Java EE

History

1995: First release for IBM Lotus Notes/Domino (as PAVONE GroupFlow)

2006: First release for Java EE

Many users

Installed basis: > 85.000 users

Customer projects: > 880

See http://www.pavone.com/pages.nsf/goto/processmanagement_en

Focus: Team-oriented Processes

Transaction-oriented processes

Business integration and process automation

Examples: Invoice processing, Accounting, Logistics, Financial services

Strong structured and high number execution

Team-oriented processes ('Human Workflow Management')

Human interaction

Difficult to automate and weak structured

Forwarding of documengs and forms between different editors

Content could be changed in each task

Examples: Employee selection, Document release, Travelling expenses

accounting, Investment proposal, Claims settlement, Process changes

Components

From Model to Analysis

PAVONE ProcessModeler

PAVONE ProcessModeler

(PAVONE ProcessModeler),Application

PAVONE ProcessModeler

Modeling:
Modeling of Workflow controlled business processes, specification of control conditions

Animation:
Step by step execution of modeled processes

Simulation:
Comparison of alternative solutions under different conditions

Analysis:
Analyze existing process instances, graphical visualization, option to export data

First: Defining the Process Definition

PAVONE ProcessModeler

Second: Defining the Data Model

PAVONE ProcessModeler

Types of fields

Standard

Text

Date/Time

Number

Rich Text

Names, (Autors), (Readers)

Extended

Action: Call of an uri with parameters

Separator: Line break between fields

Section: Grouping of fields to a section

Tab: Grouping of fields/section in a tab

Widget: Thematically section or tab

Widget: Progress Display

Position of the current task in the process

Definition in the process definition

Definition per task

Take-over from other tasks possible

Widget: Project Start

Start of a project directly from a process form

Statement of

Project id

Manager

Start date of the project

Selection of a project template (if available)

Widget: File Attachment

Management of files of a process task

Actions

Add, Delete, Open

Download

Preview area

Several widgets available

System widgets

Progress display

Project start

File attachments

Bookmarks

Comment

Log

Acquisition of efforts

User defined widgets

Creation of own widget

Adding of JavaScript code

Example: Google Gadgets

Third: Designing the Forms

Options

Modifying of order of fields

Add separator

Grouping of fields (sections)

Grouping of fields/section in tabs

Read-only fields

Must fields

Hidden fields

Form Design: Read-only and Must fields

Read-only field: Modification of content is not possible

Must field: A value has to be entered

Hidden field: Field exists in html code, but is not visible

Form Design: Separator

Without separator ('Line break'):

With separator:

Form Design: Section

Grouping of fields to an unit

Form Design: Tab

Grouping of fields/widgets in a tab

Fourth: Initiate and Execute a Process

Administration area

Tasks area and Welcome Page

View for Business Data

For each process definition a view

Show field values in columns

View for Business Data (2)

Definition of names & columns

Capabilities

Process Hosting

SaaS-Lsung: PAVONElive

Install PAVONE ProcessModeler local

Suitable for small, simple processes

Suitable for prototypical implementation

See http://www.pavonelive.com

In-house solution

Easy installation of the PAVONE Pross Control Suite

Suitable for processes any complexity

Suitable for connections to third-party systems (Data exchange)

See http://www.pavone.com/pages.nsf/goto/pcs_en

In-house Solution: Installation

Installed software

Apache Derby Server 10.4.2

JBoss Application Server 4.2.3

Apache Jackrabbit 1.5.3 (Content Repository)

PAVONE PCS Java EE 2.2

Setup:

PCS databases with examples

Path to the JCR repository

Used Open Source Modules

Server: JBoss Application Server, (Apache Tomcat)

DBMS: Apache Derby, (MySQL Community Edition)

Frontend: Apache Struts, Dojo Toolkit, jQuery

Persistence: Hibernate

File management: Apache Jackrabbit

Operating system: Debian, Ubuntu

Other: Rhino, Apache Commons, Log4J, JibX, JavaDoc, InstallJammer, MPXJ, XPP3

Extensibility

Workflow ApplicationStandard ApplicationOther Application StandardFormsAddWidgetsOwn Forms &StandardBusinessObjectsOwn Forms &OwnBusinessObjectsExistingApplicationNewApplicationFrontendBackend WidgetDocumentationJava APIDocumentationJSON APIDocumentationWhite PaperDesigningWorkflowsProcessEngineInstallationProcessEngineInstallationStandard?Development Effort Java APIDocumentationJSON APIDocumentationYesNo

PAVONE Process Engine

PAVONE Process Engine

Part of PAVONE Espresso Workflow

Runtime Engine, responsible for the routing

Support activities, workflow tasks, project tasks

Extensive and easy-usable API (Application Programming Interface)

Multi-client capability

Integrated Event handling

Integrated Business data handling

Open for serveral Application Types

Databases

agappmanagerapppmodprocessenginesecurityOrganizationDirectoryProcessEngineApplicationAgentManagerSecurity

Deployment Options

Minimal installation

Direct jar import

UI independence

Service installation

Core object access via JNDI lookups

UI independence

Web application

Struts-based UI, JSPs, Javascript, etc.

Predefined, extensible UI

Reuseable elements

Multi-client Capability

Object types

Types

Project

Workflow

Simple (Activity)

All types share a largely common interface

Runtime & Definition Objects

Basic Types: Status & AccessLevel

Standard types:

enforce type safety

ease localization

make values independent of persistent representation

NameAssignment Class

Resolution types:

Fixed

Computed by property

Computed by script

Computed by field in business object

Automated (not yet available)

Computed by custom property (not yet available)

Type dynamic-by-field refers to default bizobject

Used by:

Process

Task

ProcessDefinition

TaskDefinition

Persistence API

Repository

Encapsulates persistent data store

Connection

Connection to data store

PCSEntity

Base class for all persistent objects

UuidGenerator

Interface allows for flexible creation of unique keys

Persistence API: Repository & Connection

Repository

Manage connections to a particular datastore

Connection

Manage objects in a data store

Purpose: Create a layer of abstraction around Hibernate

API Example: Creation of Session Object

import javax.naming.InitialContext;import com.pavone.base.util.config.PCS_config;import com.pavone.pcs.Session;

InitialContext ic = new InitialContext();SessionFactory pcsFactory = (SessionFactory) ic.lookup(PCS_config.get(PCS_config.PCSENGINE_JNDINAME));

Session pcsSession = pcsFactory.createSession(userName);

API Example: Repository and Connection

import com.pavone.pcs.Repository;import com.pavone.pcs.Connection;

Repository repository = pcsSession.getRepository();Connection connection = repository.createConnection();

API Example: Frame for Transaction Handling

try {connection.beginTransaction();

... Place your operations here ...connection.commitTransaction();}catch (PCSBusinessException pcse) {connection.rollbackTransaction();}catch (RuntimeException e) {connection.rollbackTransaction();e.printStackTrace();}finally {connection.close();}

API Example: Get Simple Task Objects

import com.pavone.pcs.TaskType,import com.pavone.pcs.ObjectType;

Set tasks = pcsSession.getTasksByUser ( "", ObjectType.SIMPLE, pcsSession.getUserName(),TaskStatus.IN_PROGRESS );

API Example: Loop to Access Simple Tasks

import com.pavone.pcs.SimpleTask;

Iterator iterator = tasks.iterator();while (iterator.hasNext()) {SimpleTask task = (SimpleTask)iterator.next();

... Place your operations here ...

}

API Example: Creation of Simple Task Object

import com.pavone.pcs.SimpleTask;

SimpleTask task = pcsSession.createSimpleTask( "" );

API Example: Simple Task Completion

import com.pavone.pcs.SimpleTask;

boolean bo = task.complete();

// or

boolean bo = task.complete( );

API Example: Deletion of Simple Task Object

pcsSession.deleteSimpleTask( task );

API Example: Retrieving Workflow Tasks

import com.pavone.pcs.TaskType,import com.pavone.pcs.ObjectType;

Set tasks = pcsSession.getTasksByUser ( "", ObjectType.WORKFLOW, "*", TaskStatus.IN_PROGRESS );

API Example: Workflow Task Completion

boolean success = task.complete();

API Example: Casting Task into Workflow Task

import com.pavone.pcs.WfTask;

WfTask wfTask = (WfTask) task;

API Example: Retrieving Process

import com.pavone.pcs.Process;

Process process = task.getProcess();

OR

import com.pavone.pcs.ProcessStatus;

Set processes = pcsSession.getProcesses( "", ObjectType.WORKFLOW, ProcessStatus.IN_PROGRESS);

API Example: Retrieving Processes (1)

Set processes = pcsSession.getProcesses( );

Set processes = pcsSession.getProcesses( , );

Set processes = pcsSession.getProcesses( , , );

Set processes = pcsSession.getProcesses( , , );

Set processes = pcsSession.getProcesses( , , , , , , );

Set processes = pcsSession.getProcesses( , , , , , , );

API Example: Retrieving Processes (2)

Set processes = pcsSession.getProcessesByInitiator( , , , );

Set processes = pcsSession.getProcessesByInitiator( , , , );

Set processes = pcsSession.getProcessesByManager( , , , );

Set processes = pcsSession.getProcessesByManager( , , , );

Set processes = pcsSession.getProcessesByName( , , , );

Set processes = pcsSession.getProcessesByPriority( , , , );

...

API Example: Import Process Definition

import com.pavone.pcs.Administration;

WfProcessDefinition wf = Administration.importXMLProcessDefinition( , );

----------------------

// lock the process definition

wf.setLocked( true );

// unlock the process definition

wf.setLocked( false );

API Example: Retrieving Process Definition Object

import com.pavone.pcs.ProcessDefinition;

// get process definition

String strDefName = "";

ProcessDefinition def = (ProcessDefinition)

pcsSession.getProcessDefinition( strDefName );

API Example: Creating Process Definition Object

import com.pavone.pcs.ProcessDefinition;

// create process definition

String strDefName = "";

ProcessDefinition def = pcsSession.createProcessDefinition

( ObjectType.WORKFLOW, strDefName );

API Example: Retrieving all Task Definition Objects

import com.pavone.pcs.WfTaskDefinition;

if ( wfDef != null ){

// get all task definitions

Set list = wfDef.getTaskDefinitions();

...

}

API Example: Initiating Process

WfProcess process = pcsSession.initiateWfProcess( , , "", "");

// get tasks

Set tasks = process.getTasks ( TaskStatus.IN_PROGRESS );

// get first task

Iterator iterator = tasks.iterator();

WfTask task = (WfTask)iterator.next();

Business Objects

BizObjectContainer

Interface for classes that contain bizobjects (Process, Task)

BizObjectInterface

Interface for accessing one or more classes of bizobjects

BizObjectLink

Base class for links to bizobjects

BizObjectDefault

Standard bizobject that is always available as a place to hold process/task-related data so that custom objects are often not necessary.

Business Objects

BizObjectContainer

Interface contains bizobjects (extensions of java.lang.Object)

Process and Task implement interface

BizObjectDefault

Default bizobject to eliminate need for custom objects

Available from Process and Task

DataItems (Predefined Fields)

Data values defined in process model

Defined for:

ProcessDefinition

TaskDefinition

Access:

processDefinition.getDataItems()

taskDefinition.getDataItems()

Values copied to default bizobject when specified

API Example: Retrieve DataItem 'comment'

import com.pavone.pcs.BizObjectDefault;

import com.pavone.pcs.DataItem;

BizObjectDefault bo = task.getDefaultBizObject();

DataItem item = bo.getItem ( "comment" );

API Example: Check whether DataItem exists

String name = "";

if ( bo.hasItem ( "name")) {

name = bo.getItemValueString ( "name" );

}

API Example: Access all DataItems

import com.pavone.pcs.WfTaskDefinition;

import com.pavone.pcs.DataItem;

List itemList = taskdef.getDataItems();

Iterator iter = itemList.iterator();

while ( iter.hasNext() ) {

DataItem item = (DataItem) iter.next();

... Place your operations here ...

}

Usage of JavaScript

Uses Rhino from Mozilla (JavaScript for Java)

Wraps Java classes for JavaScript.

Allows for selective exposure of Java objects.

http://www.mozilla.org/rhino/

Use cases:

Task validation

Routing conditions

Name assignments

Operations

API objects are available for scripting as appropriate

session

process

task

Example: Routing Condition

Condition => formula-based (JavaScript) condition

Use bizobject for values

Return true to route, otherwise false

Event Handling: Classes

WfEventListener

Interface defines event method signatures

WfEventAdapter

Empty class that implements WfEventListener for ease of creating new handlers

Example code:

com.pavone.pcs.example.MyEventHandler

Event Handling: Configuration

Configure handler via full class name

API Example: Event Handling Code

Materials

Questions & Answers

Feel free to contact us if you have other questions!

PAVONE Ltd, UK
School House, Hackforth
BEDALE, N. Yorks. DL8 1PE
United KingdomPhone: +44 (0) 1748 811527
E-Mail: [email protected] PAVONE Inc.13 NW 13th Avenue
Portland, Oregon 97209
USAPhone: +1.503.754.3144
E-Mail: [email protected]

PAVONE AGTechnologiepark 933100 PaderbornTel.: +49 52 51 / 31 02-0Fax: +49 52 51 / 31 02-99E-Mail: [email protected]

Contact

For more information please visit our homepage http://www.pavone.comand http://www.pavonelive.com