NAME
BPM::Engine::ProcessRunner - Runs workflow processes
VERSION
0.01
SYNOPSIS
use BPM::Engine::ProcessRunner;
my $callback = sub {
my($runner, $entity, $action, $node, $instance) = @_;
...
return 1;
};
my $runner = BPM::Engine::ProcessRunner->new(
process_instance => $instance,
callback => $callback,
);
$runner->start_process();
# somewhere else, after completing a task,
# from an asynchronous task handler...
$runner->complete_activity($activity, $instance, 1);
DESCRIPTION
Implements the workflow enactment logic.
CALLBACKS
The methods in this package emit callback events to a callback handler that may be passed to the constructor. If no callback handler is specified, the default return values are applied for these event calls.
The following callback actions are emitted for a process event:
- start_process
-
Arguments: $process, $process_instance
- start_activity
-
Arguments: $activity, $instance
- continue_activity
-
Arguments: $activity, $instance
- execute_activity
-
Argments: $activity, $instance
On this event, the callback should return false if the workflow process should be interrupted, true (default) if otherwise, which executes the activity and progresses the workflow.
- execute_task
-
Argments: $task, $activity_instance
Returning true (default) will assume the task completed and call
complete_activity()
within ProcessRunner. Return false to halt the process thread. - complete_activity
-
Arguments: $activity, $instance
- execute_transition
-
Arguments: $transition, $from_instance
- complete_process
-
Arguments: $process, $process_instance
Returning true (default) will set the process state to
closed.comleted
.
Callback methods are directly available under its name prefixed by cb_
, for example
$runner->cb_start_process($process, $process_instance);
The callback handler receives the following options:
$runner
This ProcessRunner instance.
$entity
Type of entity the node represents. This is either process, activity, transition or task.
$action
The event action called on the entity. This is either start, continue, complete or execute.
$node
The first argument passed to the
cb_*
callback method, the respective entity node in the process that this callback is emitted for. On activity callbacks, this is the activity object, the task object on task callbacks, the process object for process entities, and transition for transition calls.$instance
The second argument passed to the
cb_*
callback method, being the instance for the node called on. In case of a transition callback, this is the activity instance the transition originated from (the activity being executed).
The callback should return true on succesful/normal processing of events, and false if something stalled or went wrong. Example:
my $callback = sub {
my($runner, $entity, $action, $node, $instance) = @_;
## call your task execution sub when tasks need executing:
if ($entity eq 'task' && $action eq 'execute') {
return &execute_task($node, $instance);
}
return 1;
};
my $runner = BPM::Engine::ProcessRunner->new(
callback => $callback,
process_instance => $pi
);
CONSTRUCTOR
new
Returns a new BPM::Engine::ProcessRunner instance. Optional arguments are:
process_instance => $process_instance
-
The process instance to run. Required.
callback => \&cb
-
Optional callback &cb which is called on all process instance events.
dryrun => 0 | 1
-
Boolean indicating whether or not the execute_task phase should be skipped. Defaults to 0.
ATTRIBUTE METHODS
process_instance
The BPM::Engine::Store::Result::ProcessInstance to run.
process
The BPM::Engine::Store::Result::Process of the process instance.
graph
The directed graph (an instance of Graph::Directed) for the process.
stash
Returns a hash reference stored as a heap, that is local to this runner object that lets you store any information you want.
dryrun
Returns the dryrun
flag
evaluator
Returns the BPM::Engine::Util::ExpressionEvaluator object attached to this instance.
METHODS
start_process
$runner->start_process;
Call the 'start_process' callback, set the process instance to the 'started' state, and call start_activity() with an activity instance created for each of the auto_start start activities.
start_activity
$runner->start_activity($activity, $instance, $run);
start_activity()
takes an activity, an activity instance and an optional 'run' flag. It calls the 'start_activity' callback, sets the activity instance state to 'assigned', enqueues the activity instance to be executed, and optionally runs all queued activity instances
continue_activity
$runner->continue_activity($activity, $instance, $run);
Call the 'continue_activity' callback, enqueue the activity instance to be executed, and optionally run all queued activity instances.
execute_task
$runner->execute_task($task, $instance);
Call the 'execute_task' callback, and returns 1 or 0 depending on the existance of a callback return value. This method is called on activity implementation when the activity instance is executed, and is meant to be used in Traits, not to be called directly.
complete_activity
$runner->complete_activity($activity, $instance, $run);
Call the 'complete_activity' callback, sets the activity instance state to 'closed.completed', and sets the completion datetime. and either calls complete_process() Outgoing transitions, if any, are followed. If it's an end activity and there are no active activity instances left, complete_process() is called, otherwise it optionally runs all enqueued activity instances.
complete_process
$runner->complete_process;
Return unless the 'complete_process' returns true. Set the process instance state to 'closed.completed', set the completion datetime, and clear the activity instance execution queues.
LOGGING METHODS
$runner->debug('Something happened');
log, debug, info, notice, warning, error, critical, alert, emergency
AUTHOR
Peter de Vos, <sitetech@cpan.org>
COPYRIGHT AND LICENSE
Copyright (c) 2010, 2011 Peter de Vos <sitetech@cpan.org>
.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.