Re: [Perl-workflow-devel] How to get a workflow's possible states?
Brought to you by:
jonasbn
From: Alejandro I. <ai...@p2...> - 2010-09-08 15:03:03
|
On Wed, Sep 8, 2010 at 7:26 AM, Phil Robinson <phi...@un...> wrote: > Hi all > Does anyone know if there's a way to get a list of all the possible > states a workflow could have? > As you suspected there is no method per-se to obtain a wf's states, but you wouldn't have to craft your own parser either. Look into Config.pm and you could probably get what you need from there. > My app. creates lots of workflows for 'jobs', and can display them in > lists. I want to have a > way where the user can select which ones they see based on their state. > Ok, this requirement makes more sense, and for this you don't need to mess with the config. workflow.pm provides a way to extend the persister with ExtraData. For example in p2ee we have a workflow inbox screen where each user sees a list of workflows she has opened. Here is how it works: <persisters> <persister name="Inventory" class="Workflow::Persister::DBI::ExtraData" dsn="DBI:Pg:dbname=p2ee" user="inventory" password="inventory" date_format="%Y-%m-%d %H:%M" autocommit="1" workflow_table="wf" workflow_sequence="wf_workflow_id_seq" history_table="wf_history" history_sequence="wf_history_workflow_hist_id_seq" extra_table="wf_p2ee" extra_data_field="creator,citho,citho_since" /> </persisters> The extra table provides the tie between users and Worflows like so: CREATE TABLE wf_p2ee( -- Attributes -- workflow_id integer, creator text, citho text, citho_since timestamp, memo text, state_data text, PRIMARY KEY (workflow_id), FOREIGN KEY (workflow_id) REFERENCES wf (workflow_id)); So when users login the get presented a screen with each Workflow, the state, "Currently In The Hands Of", since, etc. I use DBIx::Class of course but I easily get this list with a View: CREATE VIEW wf_user AS SELECT wf.workflow_id AS id, wf.type AS type, wf_p2ee.memo AS memo, wf.state AS state, wf_p2ee.creator AS creator, wf_p2ee.citho AS citho, wf_p2ee.citho_since AS citho_since, wf.last_update AS last_update FROM wf_p2ee JOIN wf ON (wf_p2ee.workflow_id = wf.workflow_id); > So I need a menu where the user can select for display (eg) INITIAL, > ORDERED, PROCESSED, > FINISHED, DESPATCHED. Of course, I could hardcode it but I'd really like > to be able to > change the workflow without having to change the code too. > No need. From the example above you could do something like: sub get_open_wfs { my $self = shift; my $c = $self->{c}; my $type = $self->{type}; my $userid = $c->stash->{userid}; my @wfs = $c->model('inventory::WfUser')->search( { -and => [ type => { '!=', 'root'}, state => { '!=', 'CLOSED' }, -or => [ creator => $userid, citho => $userid ], ], } ); return \@wfs; } > The only thing I can think of is to create a test workflow, get the > initial actions and then recursively > run all the actions, gathering up all the states I pass though them, It > would be a nightmare > though as there are lots of conditions etc. > > Come to think of it I could read and parse the xml workflow definition > which would be simpler. > Yeah, for a list to filter the open workflows by state your oculd do that, or tap into the config object. But IMHO you don't really need to do any of that, because with the ideas above you could just use a select distinct of the states of the actual open workflows, I mean why show the user a filter on states the you have no workflows in those states? Best, Alejandro Imass > Any better ideas? TIA Cheers, Phil > +++++++++++++++++++++++++++++++++++++ > phi...@un... > +++++++++++++++++++++++++++++++++++++ > > > ------------------------------------------------------------------------------ > This SF.net Dev2Dev email is sponsored by: > > Show off your parallel programming skills. > Enter the Intel(R) Threading Challenge 2010. > http://p.sf.net/sfu/intel-thread-sfd > _______________________________________________ > Perl-workflow-devel mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-workflow-devel > |