BPM-Engine

 view release on metacpan or  search on metacpan

lib/BPM/Engine/Role/HandlesTaskdata.pm  view on Meta::CPAN

package BPM::Engine::Role::HandlesTaskdata;
BEGIN {
    $BPM::Engine::Role::HandlesTaskdata::VERSION   = '0.01';
    $BPM::Engine::Role::HandlesTaskdata::AUTHORITY = 'cpan:SITETECH';
    }

use namespace::autoclean;
use Moose::Role;
use Data::GUID;
use Try::Tiny;

requires qw/
    process_instance
    process
    /;

before 'execute_task' => sub {
    my ($self, $task, $activity_instance) = @_;

    my $pi       = $self->process_instance or die("Process instance not found");
    my $process  = $self->process          or die("Process not found");
    my $activity = $activity_instance->activity or die("Activity not found");
    my $tdata    = $task->task_data;
    my $mtype    = $task->task_type eq 'Send' ? 'Message' : 'MessageIn';

    my $args = {
        meta => {
            # XXX Do GUID somewhere else (exec_impl) or not at all (same as activity_instance->id)?
            id   => Data::GUID->new()->as_string,
            name => $task->task_name
                || $activity->activity_name
                || $activity->activity_uid,
            type                => $task->task_type,
            process_id          => $pi->process_id,
            process_instance_id => $pi->id,
            activity_id         => $activity->id,
            token_id            => $activity_instance->id,
            task_id             => $task->id,            
            },
        parameters => $task->actual_params, # XXX expression ApplicationFormalParams
        message    => _message($self, $tdata->{$mtype}, $process, $pi),
        service    => _service($tdata->{'WebServiceOperation'}),        
        performers => _performers($activity->participants_rs),
        users      => _performers($task->participants_rs),
#            $process->participants_rs(
#                { participant_uid => $tdata->{Performers}->{Performer} }
#                )
#            ),
        };

    $activity_instance->update({ taskdata => $args });
    
    return;
    };

sub _performers {
    my $p_rs = shift;
    return [ map { _performer($_) } $p_rs->all ];
    
    #my @p = ();
    #while (my $rec = $p_rs->next) {
    #    push(@p, _performer($rec));
    #    }
    #
    #confess("Performers not found") unless scalar @p;
    #
    #return \@p;



( run in 1.349 second using v1.01-cache-2.11-cpan-39bf76dae61 )