WORKFLOW is set in the topic. WORKFLOW must be set to the wiki
name of a topic that describes your specific workflow (the _workflow
description topic_).
The workflow description topic must contain one state table and one transition table. The state table describes the possible states a document may be in (nodes in the flow diagram above), and the transition table describes how documents move between states (arcs in the flow diagram).
This is easiest illustrated using an example (available as DocumentApprovalWorkflow / ControlledDocument if the plugin is installed).Each row of the state table defines a state that a topic can be in:
| *State* | *Message* | | UNDERREVISION | This document is being revised. | | WAITINGFORQM | This document is waiting for approval by the Quality Manager. | | WAITINGFORCTO | This document is waiting for approval by the CTO.| | APPROVED | This document has been approved for release. |Each row in the table defines a state where:
| *State* | *Action* | *Next State* | *Form* | *Allowed* |
| UNDERREVISION | complete | WAITINGFORQM | | QualityGroup |
| WAITINGFORQM | approve | WAITINGFORCTO | QaForm | QualityManager |
| WAITINGFORQM | reject | UNDERREVISION | QaForm | QualityManager,QualityGroup |
| WAITINGFORCTO | approve | APPROVED | QaForm | TechnicalDirector |
| WAITINGFORCTO | reject | UNDERREVISION | QaForm | TechnicalDirector,QualityManager |
| APPROVED | revise | UNDERREVISION | PuForm | QualityGroup
|
Each row in this table defines a transition from one state to another state: UNDERREVISION state. After finishing the revision, the document can
be transitioned to the WAITINGFORQM state by any member of the
QualityGroup. It must then be approved by the QualityManager, and
after that by the TechnicalDirector. Even though they can't edit the
document themselves (see state table above), they can reject the
revision and put the document back into the UNDERREVISION state. The
TechnicalDirector can transition the document to APPROVED state
where it rests until a member of the QualityGroup puts it under
revision again.
If a form name is given in the Form column, this form will be
attached to the topic, and the topic will put in edit mode to allow
information to be provided in the form when that state transition happens.
In the example above, a form of type ApprovedForm will
be attached to the topic when the CTO transitions the topic into
APPROVED state. label field) once a given state is reached.
Any preference settings in the workflow
description topic that start with WORKFLOW are automatically available
when topics that use that workflow are viewed.
| Format | Example |
|---|---|
| Email addresses | webmaster@example.com |
| User wiki names | Main.WikiGuest |
| Wiki group names | Main.AdminGroup |
| Last user-in-state | LASTUSER_APPROVED |
Last user-in-state expands to the name of the user who last transitioned to the given state.
mailworkflowtransition skin template. You can override
this by providing a template topic called WorkflowTransitionMailTemplate
in the web where the transitioning topic resides.
In addition you can define custom email templates in the Notify
column, using the syntax template(Web.MyTopic). This allows you to
do more sophisticated email notification, for example you could write
a different custom email template for each transition.
For example, the Notify column in the transition table below will email jim@example.com using the default template, and expand both the EmailOne and EmailTwo templates, sending the results to whatever email addresses are defined on their respective To, Cc, or Bcc lines:
| *State* | .... | *Notify* | | PENDING | .... | jim@example.com, template(EmailOne), template(EmailTwo) |Custom templates have the additional macro:
TEMPLATE |
web.topic name of the template |
tools/workflowremind script. This script is normally run from a cron job, and can be run without parameters to see how it works.
WORKFLOWDEFAULTEMAILTEMPLATE preference is no longer supported. Please use local template topics and/or skin templates instead.
WORKFLOW for it to be controlled under the approval workflow. This is best set as a document-specific preference setting in the More topic actions screen.
| Parameter | Meaning | Default |
|---|---|---|
web |
(Optional) name of the web containing the topic |
current web |
topic |
(Optional) name of the topic (may use web.topic syntax) | current topic |
rev parameter.
If the topic is not controlled, then any references to WORKFLOW
macros are simply removed. You can use this behaviour to place these
tags in the header or footer in your skin templates. They appear only
if the currently displayed topic is controlled.
%WORKATTACHTOPIC% %WORKFLOWEDITTOPIC% %WORKFLOWFORK{...}% | Parameter | Meaning | Default |
|---|---|---|
newnames="NameOne,NameTwo,..." |
Comma-separated list of name(s) of the new topic(s) to create. AUTOINC is supported, and you can use a web specifier on the topic names. | required, no default. |
label="Fork" |
Label to use in the button | "Fork" |
lockdown="on" |
Set this if you want the forked topic to be set as uneditable by all except admins after the fork. This will also prevent the topic from being forked again. | off |
%WORKFLOWFORK{topic="OriginalTopic" label="Divide and conquer" newnames="ForkPathOne,ForkPathTwo" lockdown="on"}%
will create two copies of OriginalTopic, named ForkPathOne and
ForkPathTwo and set the OriginalTopic as uneditable (using
ALLOWTOPICCHANGE).
The fork copies do not inherit the history of the forked topic - their history starts afresh with the fork.
newnames parameter.
%WORKFLOWTRANSITION% workflowstrings.tmpl
%WORKFLOWHISTORY{...}% | Parameter | Meaning | Default |
|---|---|---|
format |
Format of each transition | $state -- $date |
header |
Header before results | |
footer |
Footer after results | |
separator |
Separator between results | <br /> |
include |
Perl regular expression matching states to include | |
exclude |
Perl regular expression matching states to exclude |
format, header, footer and separator
parameters provide the control necessary to make the history look nice
when it is viewed.
In this example the history is formatted as a simple table:
%WORKFLOWHISTORY{format="| $state | $author | $date |" separator="$n"}%
The standard FormatTokens are supported, as well as the following
special tokens:
| Token | Expands to |
|---|---|
$author |
Who triggered the transition to this state (also $user and $wikiusername) |
$comment |
Comment accompanying the record |
$date |
Date/time of the transition in the default format (you can format your own date using the same formatting tokens as used by %GMTIME%) |
$index |
1-based number of this result |
$name |
Version at the transition (also $rev) |
$state |
The state of the topic after the recorded event occurred |
%WORKFLOWLAST{...}% | Parameter | Meaning | Default |
|---|---|---|
"State" |
Name of the state | |
format |
Format | $rev: $state $author $date |
format is the same as that used for %WORKFLOWHISTORY%.
%WORKFLOWSTATE% %WORKFLOWSTATEMESSAGE% %EDITTOPIC% with %WORKFLOWEDITTOPIC% in your skin templates, then the Edit link is crossed out when the user is not allowed to edit the page in a state.
Similarly, you can use %WORKFLOWATTACHTOPIC% in your skin templates to cross out the Attach link.
META macro to pick up values for these fields from the form
attached to the viewed topic:
State table
| *State* | *Allow CHANGE* | *Message* |
| WAITINGFORAPPROVAL | %META{"formfield" name="MayModify"}% | This document is waiting for approval |
Transition Table
| *State* | *Action* | *Next State* | *Allowed* |
| WAITINGFORAPPROVAL | approve | %META{"formfield" name="ApprovedState"}% | %META{"formfield" name="MayApprove"}% |
See #AccessControl for more information.
You can also define other macros starting withWORKFLOW in the workflow
description topic. These will be expanded to their defined values in any
topic that uses the workflow. For example: WORKFLOWNOTICE in any topic that uses the workflow.
%SEARCH{"META:WORKFLOW.name='APPROVED'" type="query"}%
| *State* | *Allow CHANGE* | *Allow VIEW* | | UNDERREVISION | EngineeringGroup | |When a topic is transitioned to this state, all other topic-level permissions will automatically be removed, and the permissions:
nobody can be used to restrict access for everyone (except admins).
not(WikiGuest).
not(LASTUSER_{State}).
DENYTOPIC preferences in metadata. Access
controls set in these ways may prevent the plugin from working
correctly.
tools/workflowremind perl script, which is run on the server - either manually, or using a cron job. To find out how this is used, change to the tools directory on the server and perl workflowremind with no parameters.
The mail sent by this script is formatted using skin template called mailworkflowremind. You can override this by providing a template topic called WorkflowRemindMailTemplate in the web where the transitioned topic resides.
The following identifiers are expanded in the template:
EMAILTO |
Comma-separated list of email addressess |
TRANSITION |
Name of the transition |
TARGET_STATE |
State being transitioned to |
STUCK |
How long the topic has been stuck in that state |
If there is no WORKFLOW preference setting, then the form field "Workflow" is used for the workflow name. Note that because the form can change when a transition happens, the so can the workflow. Using this technique, it is possible for a topic to switch between workflows as the result of a transition.
workflowstrings.tmpl - contains translateable definitions for all error messages and inline controls,
mailworkflowtransition.tmpl is the template for the email sent for a transition * mailworkflowmither.tmpl is the template used when re-mailing a transition notification, * workflowedit.tmpl is the template used for editing during a transition (i.e. when a new form is attached)
WORKFLOWTRANSITIONCSSCLASS can be set to the names of one or more CSS
classes that are used to style buttons, such as the transition and fork buttons.
More complex customisations can be achieved through use of skins - see
SkinTemplates for more information.
META:WORKFLOW - unique name - current state of this topic
LAST(TIME|USER|VERSION|COMMENT) - deprecated, replaced with WORKFLOWHISTORY
META:WORKFLOWHISTORY - may be many name - revision identifier
author - who did the transition/fork
date - time the transition/fork happened (epoch secs)
state - state transitioned into
comment - comment accompanying the transition
Forks are recorded in both the forked topic, and the topic created by the fork.
In the topic that was forked from,forkto - comma-separated list of web.topic generted by the fork
forkfrom - web.topic that the topic is forked from
rev - the revision of the forkfrom topic after the fork was done
WORKFLOWDEBUG preference, either in the workflow description topic or in
an individual controlled topic, to get extra information about the macros
being expanded when a controlled topic is viewed. Information is embedded
into the topic in HTML comments (use 'view source' in the browser to see them)
and, if {Plugins}{WorkflowPlugin}{Debug} is enabled in configure, additional
messages (mostly related to access control) are written to the debug log (requires administrator access).
This version of the plugin is intended for use with Foswiki 2.0 and later. If you are running an older Foswiki, do not install it!
You do not need to install anything in the browser to use this extension. The following instructions are for the administrator who installs the extension on the server.
Open configure, and open the "Extensions" section. "Extensions Operation and Maintenance" Tab → "Install, Update or Remove extensions" Tab. Click the "Search for Extensions" button. Enter part of the extension name or description and press search. Select the desired extension(s) and click install. If an extension is already installed, it will not show up in the search results. You can also install from the shell by running the extension installer as the web server user: (Be sure to run as the webserver user, not as root!)cd /path/to/foswiki perl tools/extension_installer <NameOfExtension> installIf you have any problems, or if the extension isn't available in
configure, then you can still install manually from the command-line. See https://foswiki.org/Support/ManuallyInstallingExtensions for more help.
Note: The script convert.pl.txt will convert topics written for the ApprovalPlugin to the WorkflowPlugin. The script takes a topic at the standard input and outputs the converted topic on standard output. Rename the file from convert.pl.txt to convert.pl.
Look at the examples in the Sandbox web.
Note: For strict access control, the plugin should know who is looking at the controlled document/topic at all times. To enable this, you may want to set up the wiki in such way that users have to log-in even if they just display a topic.$n is interpreted as \n, not <br>, in line with the standard format tokens. If you want a <br> in the format string, then enter it as <br> or $percntBR$percnt.
| Author | Thomas Hartkens, Foswiki:Main.ThomasWeigert, Foswiki:Main.CrawfordCurrie |
| Version | 1.17 |
| Release | 1 Aug 2017 |
| Repository | https://github.com/foswiki/WorkFlowPlugin |
| Home | http://foswiki.org/Extensions/WorkflowPlugin |
| Support | http://foswiki.org/Support/WorkflowPlugin |