Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Sicherheit und Arbeitsabläufe Arbeitsabläufe

Arbeitsabläufe

erstellt von Veit Schiele zuletzt verändert: 03.08.2010 17:30 © Veit Schiele 2007–2010

Arbeitsabläufe (Workflows) erlauben, lokal die Rechte für Inhaltsobjekte zu verändern, ohne die Rechte für jedes dieser Objekte einzeln ändern zu müssen. Damit bleibt die Rechteverwaltung übersichtlich.

Die Arbeitsabläufe selbst werden für eine Site zentral im Workflow Tool (portal_workflow) verwaltet. Zunächst werden Sie den Workflows-Reiter sehen, in dem den verschiedenen Artikeltypen Arbeitsabläufe zugeordnet werden. Die Definitionen der Arbeitsabläufe lassen sich im Contents-Reiter anschauen. Jeder der Arbeitsabläufe besteht aus verschiedenen Stadien (states), wie z.B. private oder published, und Übergängen (transitions) zwischen ihnen.

Visualisierung von Workflows

Mit Products.DCWorkflowGraph steht Ihnen ein Werkzeug zur Verfügung, das mithilfe von Graphviz die Plone-Workflows darstellt:

Intranet-Workflow-Graph

Zum Installieren von Products.DCWorkflowGraph tragen Sie bitte folgendes in Ihre Buildout-Konfigurationsdatei ein:

[buildout]
parts =
    …
    graphviz
…
eggs =
    …
    Products.DCWorkflowGraph

[instance]
…
eggs =
    Plone
    ${buildout:eggs}
…
zope-conf-additional =
    <environment>
        PATH ${buildout:directory}/parts/graphviz/bin
    </environment>

[graphviz]
recipe = zc.recipe.cmmi
url = http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-working.tar.gz

Nun können Sie das Buildout-Skript erneut durchlaufen und die Instanz starten. Wählen Sie nun im ZMI Ihrer Plone-Site das Plone Workflow Tool und dort im Contents-Reiter den zu analysierenden Workflow aus. Wenn Sie nun in den graph-Reiter klicken, erhalten Sie eine Seite mit dem Workflow-Graphen und folgenden Optionen:

Only Show Ids
zeigt nicht die Titel der Stadien und Übergänge an
Translate Graph
übersetzt die Titel der Stadien und Übergänge
update
aktualisert den Graphen
download dot file
gibt eine dot-Datei aus.

Workflows und Berechtigungen

Solche Übergänge können durch bestimmte Rechte, Rollen und Gruppen geschützt werden.

Anmerkung 1: Wie schon an früherer Stelle bemerkt, sollten die Sicherheitseinstellungen durch die Zuweisung entsprechender Rechte (Permissions) erfolgen, nicht durch die Zuweisung von Rollen oder Gruppen.

Für jedes Stadium können eine Reihe von Rechten angegeben werden, die für ein entsprechendes Inhaltsobjekt gelten. Die in einem Arbeitsablauf zu vergebenden Rechte werden im Permissions-Reiter für jeden Workflow angegeben:

Workflow-Permissions

Beachten Sie bitte, dass Änderungen an den Rechten keinen unmittelbaren Einfluss auf die Rechte bestehender Objekte haben. Hierzu muss im Workflows-Reiter des Workflow Tool zunächst auf Update security settings geklickt werden.

Ändern von Artikeln bestimmter Stadien mit Python

Erhalten des aktuellen Stadiums
from Products.CMFCore.utils import getToolByName
wftool = getToolByName(context, 'portal_workflow'
review_state = wftool.getInfoFor(context, 'review_state')

Anmerkung 2: wird das Stadium im Catalog Tool (portal_catalog) abgefragt, so wird das Stadium als Metaangabe des Objekts ausgegeben:

from Products.CMFCore.utils import getToolByName
catalog = getToolByName(context, 'portal_catalog')
for result in catalog(portal_type = ('Document', 'News Item'),
                      review_state =('published', 'public', 'visible',)):
    review_state = result.review_state
    # do something with the review state
Ändern des Stadiums
wftool.doActionFor(context, action='publish')

Anmerkung 3: Eine effektivere Art, die Stadien von Artikeln zu ändern, ist in einem Blog-Eintrag von Gilles Lenfant beschrieben: Changing workflow state – quickly – on CMF/Plone content.

Neuen Arbeitsablauf erstellen

Wir wollen nun für unsere beiden Artikeltypen spezifische Arbeitsabläufe erstellen. Hierzu fügen wir in src/vs.registration/vs/registration/profiles/default/ die Datei workflows.xml mit folgendem Inhalt hinzu:

<?xml version="1.0"?>
<object name="portal_workflow"
        meta_type="Plone Workflow Tool">
    <object name="registrant_workflow" meta_type="Workflow"/>
    <object name="registration_workflow" meta_type="Workflow"/>
    <bindings>
        <type type_id="Registrant">
            <bound-workflow workflow_id="registrant_workflow"/>
        </type>
        <type type_id="Registration">
            <bound-workflow workflow_id="registration_workflow"/>
        </type>
    </bindings>
</object>

Anschließend werden die verschiedenen Stadien und Übergänge der neuen Arbeitsabläufe definiert. Dazu werden die Ordner src/vs.registration/vs/registration/profiles/default/workflows/registrant_workflow/ und src/vs.registration/vs/registration/profiles/default/workflows/registration_workflow/ erstellt. Der Name der Ordner muss dabei exakt der in workflows.xml angegebenen ID entsprechen. In jedem dieser Ordner wird dann die Datei definition.xml angelegt. Für den Artikeltyp registrant sieht sie z.B. so aus:

<?xml version="1.0"?>
<dc-workflow workflow_id="registrant_workflow"
             title="registrant_workflow"
             state_variable="review_state"
             initial_state="unconfirmed">

Zunächst werden allgemeine Angaben zum Arbeitsablauf wie ID, Titel, Variablenname und initialer Status gemacht. Der Variablenname state_variable sollte dabei immer review_state sein.

Anschließend werden die Rechte (Permissions) angegeben, die durch den Arbeitsablauf geändert werden sollen:

<permission>Delete objects</permission>
<permission>Modify portal content</permission>
<permission>View</permission>

Nun werden die verschiedenen Stadien definiert. Dabei wird für jedes Stadium in exit-transition angegeben, welche Übergänge möglich sind und eine Zuweisung der Rollen und Rechte vorgenommen:

<state state_id="confirmed"
       title="Confirmed">
    <exit-transition transition_id="reject-open"/>
    <permission-map name="Delete objects"
                    acquired="False">
        <permission-role>Manager</permission-role>
    </permission-map>
    <permission-map name="Modify portal content"
                    acquired="False">
        <permission-role>Owner</permission-role>
        <permission-role>Manager</permission-role>
    </permission-map>
    <permission-map name="View"
                    acquired="False">
        <permission-role>Manager</permission-role>
    </permission-map>
</state>
...

Den Übergängen werden ID, Titel und Auslöser (trigger) zugewiesen. trigger kann dabei die Werte USER oder AUTOMATIC annehmen. Der <action />-Tag enthält den Namen, der in Plone’s Status-Menü angezeigt wird und die URL, auf die diese Aktion verlinkt. Üblicherweise wird hier das content_status_modify-Skript verwendet. Schließlich wird der Übergang noch geschützt durch die Angabe im <guard />-Tag:

    <transition transition_id="confirm"
                title="Confirm"
                new_state="confirmed"
                trigger="USER"
                before_script=""
                after_script="">
        <action url="%(content_url)s/content_status_modify?workflow_action=confirm"
                category="workflow">
            Confirm
        </action>
        <guard>
        </guard>
    </transition>
    ...
</dc-workflow>

Der Arbeitsablauf kann mittels i18n:-Attributen internationalisiert werden. Dabei besteht prinzipiell Zugriff auf alle verwendeten Zeichenketten. Siehe auch Überschreiben von Plone-Übersetzungen.

Anmerkung 4: Mit collective.workflowed gibt es einen Javascript-basierten graphischen Editor für Arbeitsabläufe, der in Plones Website-Konfiguration aufgerufen werden kann. Die dort editierten Workflows können anschließend im Generic Setup Tool exportiert und in das eigene Produkt integriert werden.

Artikelaktionen