If you can't read please download the document
Upload
rolf-kremer
View
2.032
Download
5
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