Overview

DCWorkflows provide workflow objects that are fully customizable via the Zope Management Interface. You can specify the states, and the permissions they set on content that is in that state, the transitions between those states, and other things like variables for things that aren’t well represented by states, work lists for reviewers, and scripts to embody complex guards and to extend pre and post transition behaviour.

The process for creating a workflow runs something like this:

  • Draw a state diagram with the nodes (bubbles) as states and the arcs (arrows) as transitions. Remember to consider all the states your content can be in, and for each state, consider who should have permission to access and change the content. Consider what actions the users will perform to make the transitions between states, and not only who will be allowed to perform them, but who will be required to perform them.

    It’s often a good idea to start on paper, then transfer the diagram to a digital copy using a diagram/flowchart tool, such as ‘dia’, so that you have an image to go with later documentation. This process tends to make it easier to spot corner cases before you actually create the workflow object.

  • Start by creating an example DCworkflow, rather than a new one, as it’s faster to delete all the states and transitions than it is to create all the standard variables that tend to be used by the CMF. [Note: Perhaps we should have a bare dcworkflow, a workflow with standard variables, and the couple of standard examples.]

  • In the permissions tab, select all the permissions that you want the workflow to govern. These will be dependent on the types of content you’ll be using with the workflow; ‘Access contents information’, ‘Modify portal content’, and ‘View’ are the standard permissions for the default portal content types.

  • Define any extra variables that you need for information that isn’t well represented by states. [Note: generic examples? I can think of a few that could appear in some use cases, but they’re all idiosyncratic of particular publishing needs]

  • Set up the states for your workflow, one for each node in your state diagram. Try to stick to the standard names for a publication workflow, as some badly behaved products have states like ‘published’ hardcoded into their searches (ie CalendarTool, last I looked) [Note: Maybe I should just file some bug reports rather than casting aspersions :-)]. Set up the permissions on the states now, as well, though see the “State Tab” section for advice.

  • Set up any scripts that you will be using in your transitions, such as pre and post transition scripts and to handle complex guard conditions. Just set up skeletons for now, if you haven’t though through all the details.

  • Create your transitions from all the arcs on your state diagram. You should be able to pick the right destination state as all your states are already defined, and set up the right scripts to run, as you’ve defined those as well. It’s worth noting that the guard behaviour is such that if any guard matches, the transition can occur. You can specify more than one permission, role or expression by separating them with a semicolon.

  • Go back to the states tab and, for each state, set the possible transitions from the list of all available transitions in each state.

  • Finally, in the work lists tab, create any work lists for any states that need them. Work lists are actions that indicate how many objects of a given state are present, and usually link to some search page that lists the actual object instances. You typically use them to list all the pending content waiting for review. Work lists have several unusual behaviours, however, so check the specific notes in the “Worklists” section.

By working in this order, you will tend to step through the creation process one tab at a time, rather than switching back and forth between them, which tends to be slower and somewhat confusing.