Workflow::Action - Base class for Workflow actions


NAME

Workflow::Action - Base class for Workflow actions


SYNOPSIS

 # Configure the Action...
 <action name="CreateUser"
         class="MyApp::Action::CreateUser">
   <field name="username" is_required="yes"/>
   <field name="email" is_required="yes"/>
   <validator name="IsUniqueUser">
       <arg>$username</arg>
   </validator>
   <validator name="IsValidEmail">
       <arg>$email</arg>
   </validator>
 </action>
 # Define the action

 package MyApp::Action::CreateUser;

 use base qw( Workflow::Action );
 use Workflow::Exception qw( workflow_error );

 sub execute {
     my ( $self, $wf ) = @_;
     my $context = $wf->context;

     # Since 'username' and 'email' have already been validated we
     # don't need to check them for uniqueness, well-formedness, etc.

     my $user = eval {
         User->create({ username => $context->param( 'username' ),
                        email    => $context->param( 'email' ) })
     };

     # Wrap all errors returned...

     if ( $@ ) {
         workflow_error
             "Cannot create new user with name '", $context->param( 'username' ), "': $@";
     }

     # Set the created user in the context for the application and/or
     # other actions (observers) to use

     $context->param( user => $user );

     # return the username since it might be used elsewhere...
     return $user->username;
 }


DESCRIPTION

This is the base class for all Workflow Actions. You do not have to use it as such but it is strongly recommended.


OBJECT METHODS

Public Methods

add_field( @fields )

Add one or more the Workflow::Action::InputField manpages to the action.

required_fields()

Return a list of the Workflow::Action::InputField manpage objects that are required.

optional_fields()

Return a list of the Workflow::Action::InputField manpage objects that are optional.

fields()

Return a list of all the Workflow::Action::InputField manpage objects associated with this action.

add_validators( @validator_config )

Given the 'validator' configuration declarations in the action configuration, ask the the Workflow::Factory manpage for the the Workflow::Validator manpage object associated with each name and store that along with the arguments to be used, runtime and otherwise.

get_validators()

Get a list of all the validator hashrefs, each with two keys: 'validator' and 'args'. The 'validator' key contains the appropriate the Workflow::Validator manpage object, while 'args' contains an arrayref of arguments to pass to the validator, some of which may need to be evaluated at runtime.

validate( $workflow )

Run through all validators for this action. If any fail they will throw a the Workflow::Exception manpage, the validation subclass.

execute( $workflow )

Subclasses must implement -- this will perform the actual work. It's not required that you return anything, but if the action may be used in a the Workflow::State manpage object that has multiple resulting states you should return a simple scalar for a return value.

Private Methods

init( $workflow, \%params )


SEE ALSO

Workflow

the Workflow::Factory manpage


COPYRIGHT

Copyright (c) 2003-2004 Chris Winters. All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


AUTHORS

Chris Winters <chris@cwinters.com>

 Workflow::Action - Base class for Workflow actions