Page History

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0
Note
titleNavigation dans les fichiers de configuration

Avant de procéder à la configuration avancée, il est conseillé de consulter le document "Navigation dans les fichiers" pour mieux comprendre la structure des différents fichiers.

Vous trouverez dans cette partie toutes les possibilités de configuration suivantes:

Table of Contents
minLevel1
maxLevel1
indent20px
styledisc

Si vous utilisez le module quick-install (fortement conseillé) , il ne vous sera pas nécessaire de modifer ces fichiers . Il  sera cependant utile de connaitre leur utilité si vous voulez adapter ou ajouter un workflow.

Configuration générale du module

La configuration générale du module se trouve sous conf/properties. Cette configuration s'applique à tous les workflows.

...

default-permissions-roles.xml

...

  • Ce fichier  permet de configurer les permissions et rôles pouvant être utilisés par l'application (IHM)  ou par tous les workflows. Les "recipients" utilisés doivent être déclarés dans groups.xml
  • par défaut, assigne le rôle d'administrateur de chaque workflow aux administrateurs de l'application

groups.xml

  • Permet de configurer le nom et la définition des groupes disponibles dans l'application.
  • par défaut,  définit le groupe des administrateurs de l'application ("admins")

namespaces.xml

  • Définit les espaces de noms utilisés par plusieurs type de métadonnées
  • Par défaut, contient le namespace "dc" utilisé par les formats Dublin Core et TEF (thèses)

metadataslist.xml

  • Ce fichier permet de paramétrer les catégories de fiches qui seront affichées aux utilisateurs applicatifs déclarés dans groups.xml. Cela permet de mettre dans un même ensemble des fiches provenant de différents workflows ayant des états différents, sur lesquelles l'utilisateur a des rôles différents.
  • Par défaut, ce fichier est vide

Authentification / Autorisation avec Shibboleth


Depuis la version 1.4.0 ori-oai-workflow peut utiliser Shibboleth à la fois pour l'authentification et l'autorisation. LDAP et CAS ne sont alors plus nécessaires et il est possible de partager une même instance d'ori-oai-workflow

...

entre

...

plusieurs

...

établissements.

...

Pour

...

que

...

les

...

mécanismes

...

shibboleth

...

soient

...

pris

...

en

...

compte

...

au

...

niveau

...

de

...

ori-oai-workflow,

...

ce

...

dernier

...

attend

...

de

...

pouvoir

...

interpréter

...

directement

...

les

...

attributs

...

Shibboleth

...

positionnés

...

dans

...

les

...

paramètres

...

HTTP

...

de

...

la

...

requête

...

cliente.

...

On

...

peut

...

pour

...

ce

...

faire

...

utiliser

...

directement

...

le

...

mod_shib

...

d'apache,

...

dans

...

lequel

...

on

...

requerra

...

une

...

authentification

...

Shibboleth

...

sur

...

l'ensemble

...

de

...

l'applicatif.

...

Voici

...

un

...

exemple

...

d'une

...

telle

...

configuration

...

(le

...

mod_shib

...

et

...

proxy_ajp

...

(ProxyPass)

...

sont

...

ici

...

utilisés

...

et

...

donc

...

chargés

...

par

...

ailleurs

...

:

{
Code Block
}ProxyPass /ori-oai-workflow-spring ajp://localhost:8009/ori-oai-workflow-spring

<Location /ori-oai-workflow-spring>
  AuthType shibboleth
  ShibRequireSession On
  ShibUseHeaders On
  require valid-user
</Location>
{code}

Reste

...

ensuite

...

à

...

configurer

...

l'interprétation

...

des

...

attributs

...

Shibboleth

...

au

...

niveau

...

ori-oai-workflow

...

:

...

on

...

va

...

pouvoir

...

définir

...

d'une

...

part

...

l'attribut

...

Shibboleth

...

qui

...

va

...

correspondre

...

à

...

l'identifiant

...

d'un

...

individu

...

dans

...

ori-oai-workflow

...

(dans

...

conf/properties/spring/acegi/acegi-authentication-shib.xml

...

)

...

,

...

puis

...

d'autres

...

part

...

les

...

règles

...

qui

...

vont

...

permettre

...

de

...

définir

...

à

...

quel(s)

...

groupe(s)

...

appartient

...

l'individu

...

connecté;

...

ces

...

règles,

...

à

...

paramétrer

...

par

...

l'exploitant,

...

devront

...

s'appuyer

...

sur

...

les

...

attributs

...

shibboleth

...

disponibles

...

(dans

...

groups.xml

...

,

...

cf

...

plus

...

haut).

...

conf/properties/spring/acegi/acegi-authentication-shib.xml

* {
Code Block
}<beans>

	<bean name="shibAuthenticator" class="org.orioai.workflow.services.application.shib.ShibAuthenticator">
		<property name="remoteUserShibAttr" value="Shib-InetOrgPerson-mail"/>
		<property name="oriGroupConfigs" ref="oriGroupConfigs"/>
	</bean>

</beans>
{code}

h3. *

groups.xml

...

Les

...

règles

...

de

...

constitution

...

("values")

...

doivent

...

correspondent

...

à

...

des

...

expressions

...

Java

...

renvoyant

...

un

...

boolean

...

(true,

...

false).

...

Si

...

l'expression

...

interprétée

...

renvoie

...

true,

...

alors

...

on

...

affecte

...

à

...

l'individu

...

connecté

...

le

...

groupe

...

donné

...

en

...

clé.

...

groupsMap

...

est

...

le

...

nom

...

de

...

la

...

variable

...

définissant

...

une

...

table

...

de

...

hashage

...

regroupant

...

l'ensemble

...

des

...

attributs

...

Shbboleth

...

disponibles

...

:

...

nom/valeur.

...

Voici

...

un

...

exemple

...

d'école

...

avec

...

le

...

workflow

...

DC

...

"easy"

...

:

{
Code Block
}
<bean name="oriGroupConfigGeneral_DCE" class="org.orioai.workflow.services.acls.OriGroupConfig">

	<property name="groupsMap">
		<description>
			groupsMap defines a Map where
				* keys are groups names
				* values are ldap, virtual or shibboleth groups used
		</description>
		<map>
		  <entry key="DCE_all">
			<value>shib:shibAttrsMap.get("Shib-EP-PrimaryAffiliation").equals("professor")</value>
		  </entry>
		  <entry key="DCE_moderators">
			<value>shib:shibAttrsMap.get("Shib-EP-UnscopedAffiliation").equals("faculty;member") &amp;&amp; shibAttrsMap.get("Shib-EP-PrimaryAffiliation").equals("professor")</value>
		  </entry>
		  <entry key="DCE_admins">
			 <value>shib:shibAttrsMap.get("Shib-InetOrgPerson-mail").equals("Vincent.Bonamy@univ-rennes1.fr")</value>
		  </entry>
		</map>
	</property>

</bean>

{code}

Limitations:

...

de

...

par

...

le

...

mode

...

de

...

fonctionnement

...

de

...

shibboleth,

...

il

...

n'est

...

pas

...

possible

...

de

...

retrouver

...

dynamiquement

...

tous

...

les

...

individus

...

d'un

...

groupe

...

donné.

...

On

...

ne

...

pourra

...

donc

...

pas

...

utiliser

...

dans

...

un

...

workflow

...

l'envoi

...

de

...

mails

...

à

...

l'ensemble

...

des

...

individus

...

d'un

...

groupe.

...

On

...

contournera

...

ce

...

problème

...

en

...

définissant

...

directement

...

les

...

individus

...

un

...

à

...

un

...

comme

...

destinataires

...

des

...

mails,

...

ou

...

mieux

...

encore

...

en

...

définissant

...

en

...

amont

...

une

...

mailing-list

...

permettant

...

cet

...

envoi

...

de

...

mails

...

à

...

un

...

ensemble

...

prédéfini

...

d'individus.

...

Conditions

...

et

...

fonctions

...

OsWorkflow

OsWorkflow


La configuration de workflow(s)

...

OsWorkflow

...

est

...

un

...

élément

...

capital

...

dans

...

le

...

déploiement

...

d'un

...

Ori-Oai-Workflow.

...

C'est

...

le

...

workflow

...

qui

...

dirige

...

le

...

module.

...

Dans

...

Ori-Oai-Workflow,

...

OsWorkflow

...

n'a

...

pas

...

été

...

modifié

...

ou

...

personnalisé,

...

les

...

fichiers

...

de

...

configuration

...

des

...

workflows

...

sont

...

donc

...

des

...

fichiers

...

spécifiques

...

OsWorkflow.

...

Ainsi

...

vous

...

pouvez

...

tout

...

à

...

fait

...

vous

...

référer

...

à

...

la

...

documentation

...

d'OsWorkflow

...

si

...

vous

...

en

...

sentez

...

le

...

besoin

...

de

...

même

...

que

...

pour

...

tous

...

les

...

fichiers

...

de

...

configuration

...

de

...

type

...

Spring,

...

vous

...

pouvez

...

vous

...

référer

...

à

...

la

...

documentation

...

de

...

Spring

...

pour

...

connaitre

...

la

...

syntaxe

...

utilisée

...

.

...

Dans

...

un

...

premier

...

temps,

...

il

...

est

...

important

...

de

...

comprendre

...

ce

...

qu'est

...

un

...

workflow,

...

revoyez

...

dans

...

la

...

section

...

"Specifications"

...

la

...

partie

...

sur

...

le

...

Workflow

...

si

...

ce

...

n'est

...

pas

...

clair.

...

Dans

...

un

...

second

...

temps,

...

il

...

vous

...

faut

...

connaître

...

les

...

possibilités

...

en

...

matière

...

de

...

condition

...

et

...

fonctions

...

et

...

arriver

...

à

...

penser

...

vos

...

cas

...

d'utilisations

...

du

...

module

...

en

...

terme

...

de

...

Workflow.

...

Pour

...

ce

...

faire,

...

rien

...

ne

...

vaut

...

la

...

présentation

...

d'un

...

exemple

...

exhaustif

...

que

...

vous

...

devrez

...

mettre

...

en

...

relation

...

avec

...

le

...

document

...

fonctionnel

...

sur

...

les

...

cas

...

d'utilisations

...

(document

...

rédigé

...

par

...

Rosa

...

María

...

Gómez

...

de

...

Regil

...

et

...

Romuald

...

Lorthioir).

...

Image Added

On notera que ce graphe représentant le workflow des documents que l'on veut indexer n'a pas grand chose de spécifique à OsWorkflow ou à ORI-OAI. Il faut également se rappeler que les rôles, les permissions (dont les permissions d'utiliser tel ou tel formulaire) sont des éléments configurables comme  on le verre ci-dessous.

Une fois ce graphe conçu, la plus grosse partie du travail est faite : il reste à concevoir le XML implémentant ce diagramme en "langage" OsWorkflow, même si il en résulte un XML qui peut être conséquent, le langage XML d'OsWorkflow n'est pas complexe.

Notes sur les conditions et fonctions disponibles actuellement et en natif dans Ori-Oai-Workflow :

spring/spring-osworkflow-helpers.xml

...

  • C'est

...

  • ici

...

  • que

...

  • sont

...

  • déclarés

...

  • les

...

  • beans

...

  • spring

...

  • utilisés

...

  • dans

...

  • les

...

  • workflows

...

  • OsWorkflow

...

  • pour

...

  • implémenter

...

  • des

...

  • conditions

...

  • et

...

  • des

...

  • fonctions

...

  • OsWorkflow.

...

  • L'administrateur/développeur

...

  • voulant

...

  • rajouter

...

  • des

...

  • fonctionnalités

...

  • dans

...

  • son

...

  • Workflkow

...

  • liées

...

  • à

...

  • son

...

  • contexte

...

  • de

...

  • déploiement

...

  • d'Ori

...

  • pourra

...

  • de

...

  • la

...

  • même

...

  • façon

...

  • qu'ici

...

  • ajouter

...

  • ses

...

  • propres

...

  • beans

...

  • spring

...

  • qu'il

...

  • utilisera

...

  • dans

...

  • la

...

  • configuration

...

  • des

...

  • workflows

...

  • d'OsWorkflow.

...

  • Le

...

  • mieux

...

  • sera

...

  • de

...

  • déclarer

...

  • ses

...

  • beans

...

  • dans

...

  • un

...

  • fichier

...

  • dédié

...

  • à

...

  • cela

...

  • (vide

...

  • par

...

  • défaut)

...

  • :

...

  • conf/properties/spring/spring-custom.xml

...


Conditions:

...


Span

...

class

...

term

...

HasPermission

Condition sur le fait que l'utilisateur

...

courant

...

a

...

une

...

permission

...

donnée.

...

Span
classterm
HasRole

Condition sur le fait que l'utilisateur courant a un rôle donné.

Span
classterm
VerifyXPathes

Vérifie que la résolution de chaque XPath donné en paramètre correspond à au moins un noeud à chaque fois. Place un message dans le listing d'informations de l'instance/fiche considéré si ce n'est pas le cas.

Span
classterm

Exécute le schématron (transformation XSL/XSLT via la XSL résultant de la "compilation XSL" d'un schématron) sur la fiche XML pour vérifier qu'il n'y a pas d'erreurs (règles schématron). Place des messages d'erreurs en conséquence dans le listing d'informations de l'instance/fiche considéré.

Fonctions:

Span
classterm
AddPermission

Ajoute une permission à un rôle sur l'instance courante.

Span
classterm
AddRole

Ajoute un rôle à un utilisateur ou groupe ou utilisateur courant sur l'instance courante.
Un XPath et une valeur attendue sur le xpath donnée sont des paramètres optionnelles à cette fonction. Ils permettent de conditionner ce positionnement de rôle selon la présence ou non d'une valeur à un xpath donné. Par exemple cela permet de donner le rôle de modérateur au groupe de professeurs de mathématiques si la discipline dans la fiche LOM a été positionnée à Mathématiques.

Span
classterm
DeleteIndex

Demande à un ORI-OAI-Indexing de supprimer l'index courant de l'instance courante (si elle a été indexée préalablement).

Span
classterm
DeletePermission

Supprime une permission à un rôle sur l'instance courante.

Span
classterm
DeleteRole

Supprime un rôle à un utilisateur ou groupe ou utilisateur courant sur l'instance courante.

Span
classterm
RevertXml

Restore une version de la fiche d'un ancien état (il faut pour cela que dans cet ancien état, un SaveXmlHistory ait été fait).

Span
classterm
SaveOrUpdateIndex

Demande à un ORI-OAI-Indexing d'indexer ou de réindexer la fiche de l'instance courante.

Info

Depuis la 1.1.* cette fonction n'appelle pas/plus la fonction SaveXmlHistory : les 2 fonctions sont dissociées et indépendantes.
Cette fonction DOIT obligatoirement être configurée comme étant une post-function dans OsWorkflow.

Span
classterm
SaveXmlHistory

Sauve le XML actuel comme un historique (archive) de l'état initial à la transition.

Info

Cette fonction DOIT obligatoirement être configurée comme étant une post-function dans OsWorkflow.

Span
classterm
SendEmail

Envoie des emails aux utilisateurs d'un rôle donné sur l'instance et/ou à un mail donné "en dur" dans le workflow.
Cette fonction est donc capable de récupérer tous les emails des utilisateurs qui ont un rôle via un positionnement direct sur l'instance, via un positionnement au travers d'un groupe, etc. ... cela signifie que le nombre d'emails peut suivant les configurations être conséquent. La récolte des emails peut actuellement prendre un certain temps si la liste est longue (multiples requêtes ldap). [l'envoi des emails se fait toutefois dans des threads séparés). Nous recommandans la mesure du possible d'utiliser une liste de diffusion (mail "en dur") pour l'envoi de mails à tout un groupe donné et bien défini ...

Span
classterm
SetInstanceIdentity et SetEntryIdentity

Place des identifiants (propre à l'instance/fiche ou à l'entrée/entité considéré) au niveau d'un xpath donné.

Span
classterm
xslTransform

Appelle une transformations XSL sur la fiche XML de l'instance. Notez que dans le workflow_easy.xml donné par défaut, xslTransform est utilisé en utilisant par exemple properties/xsl/osfunctions/lomSetLifecycleAuthor.xsl

...

:

...

cette

...

transformation

...

fait

...

appel

...

directement

...

à

...

de

...

la

...

logique

...

métier

...

via

...

une

...

expression

...

du

...

type

...

select="document('#

...

{domainService.getCurrentUserName()

...

}')"

...

Notez que l'ordre

...

des

...

fonctions

...

dans

...

le

...

fichier

...

de

...

config

...

n'est

...

pas

...

annodin.

...


Un

...

certain

...

nombre

...

des

...

fonctions

...

présentées

...

ci-dessus

...

vont

...

fonctionner

...

dans

...

un

...

contexte

...

transactionnel

...

....

...

mais

...

pas

...

toutes

...

....

...


Les

...

fonctions

...

qui

...

tournent

...

dans

...

un

...

contexte

...

transactionnel

...

annuleront

...

leurs

...

effets

...

automatiquement

...

si

...

une

...

des

...

fonctions

...

provoquait

...

une

...

erreur

...

innatendue.

...


Dans

...

ce

...

contexte,

...

et

...

par

...

rapport

...

au

...

listing

...

ci-dessus,

...

il

...

est

...

recommandé

...

de

...

lancer

...

  • en

...

  • tout

...

  • dernier

...

  • l'envoi

...

  • d'emails

...

  • (notez

...

  • que

...

  • contrairement

...

  • aux

...

  • autres

...

  • fonctions,

...

  • si

...

  • l'envoi

...

  • d'email

...

  • échoue,

...

  • rien

...

  • n'est

...

  • annulé

...

  • pour

...

  • autant),

...

  • en

...

  • avant

...

  • dernier

...

  • l'appel

...

  • à

...

  • des

...

  • WebServices

...

  • et

...

  • donc

...

  • à

...

  • ori-oai-indexing

...

  • par

...

  • exemple,

...

Notez

...

enfin

...

que

...

vous

...

pouvez

...

vous

...

appuyer

...

au

...

mieux

...

sur

...

les

...

workflows

...

livrés

...

(des

...

plus

...

simples

...

default_dc_very_easy

...

aux

...

plus

...

complets

...

default_lom_complex

...

)  qui vous fournissent ainsi des exemples significatifs.

Info

Comment mettre en place un workflow personnalisé ?

Configuration des workflows

Cette configuration est propre à chaque workflow; elle se trouve sous  conf/properties/workflows

...

/

...

[nom_workflow

...

]

Catégories et types de métadonnées

addonContext.xml

  • Il permet de paramétrer les types de fiches que peut ajouter un utilisateur. Notez toute fois qu'un utilisateur pourra effectivement ajouter une fiche d'un type donné si les conditions d'ajout déclarées dans le workflow correspondant sont vérifiées (conditions sur initial-action).

...

  • Un

...

  • type

...

  • de

...

  • fiche

...

  • Ori-Oai-Workflow

...

  • est

...

  • ainsi

...

  • déterminé

...

  • par

...

  • un

...

  • workflow

...

  • OsWorkflow

...

  • (identifié

...

  • par

...

  • workflowName),

...

  • un

...

  • nom

...

  • de

...

  • schéma,

...

  • un

...

  • xsl

...

  • (permettant

...

  • à

...

  • partir

...

  • d'un

...

  • xml

...

  • de

...

  • produire

...

  • un

...

  • html),

...

  • un

...

  • fichier

...

  • xml

...

  • de

...

  • défaut

...

  • qui

...

  • sera

...

  • donné

...

  • comme

...

  • fiche

...

  • vide

...

  • à

...

  • la

...

  • création

...

  • d'une

...

  • nouvelle

...

  • fiche

...

  • (sauf

...

  • dans

...

  • le

...

  • cas

...

...

  • l'utilisateur

...

  • utilise

...

  • des

...

  • patrons

...

  • de

...

  • fiches).

...

  • C'est

...

  • ici

...

  • également

...

  • que

...

  • l'on

...

  • configure

...

  • les

...

  • XForms

...

  • à

...

  • mettre

...

  • en

...

  • relation

...

  • avec

...

  • les

...

  • fiches.

...

  • On

...

  • a

...

  • une

...

  • liste

...

  • de

...

  • XForms

...

  • par

...

  • type

...

  • de

...

  • contenu.

...

  • Pour

...

  • chaque

...

  • XForms

...

  • est

...

  • donné

...

  • un

...

  • identifiant

...

  • (réutilisé

...

  • dans

...

  • le

...

  • positionnement

...

  • des

...

  • permissions)

...

  • et

...

  • une

...

  • url

...

  • correspondant

...

  • à

...

  • l'adresse

...

  • du

...

  • Serveur

...

  • Orbeon

...

  • présentant

...

  • le

...

  • XForms

...

  • voulu

...

  • (et

...

  • c'est

...

  • ici

...

  • par

...

  • exemple

...

  • que

...

  • vous

...

  • pourrez

...

  • ajouer

...

  • un

...

  • pointeur

...

  • sur

...

  • vos

...

  • formulaires

...

  • personnalisés

...

  • ou

...

  • vous

...

  • permettant

...

  • de

...

  • supporter

...

  • d'autres

...

  • formats

...

  • de

...

  • MétaDonnées).

...

  • Ce

...

  • fichier

...

  • permet

...

  • aussi

...

  • de

...

  • paramétrer

...

  • les

...

  • catégories

...

  • de

...

  • fiches

...

  • qui

...

  • seront

...

  • affichées

...

  • à

...

  • l'utilisateur.

...

  • Cela

...

  • permet

...

  • de

...

  • mettre

...

  • dans

...

  • un

...

  • même

...

  • ensemble

...

  • des

...

  • fiches

...

  • ayant

...

  • des

...

  • états

...

  • différents,

...

  • sur

...

  • lesquelles

...

  • l'utilisateurs

...

  • a

...

  • des

...

  • rôles

...

  • différents.

...

  • Ce

...

  • fichier

...

  • est

...

  • donc

...

  • à

...

  • modifier

...

  • en

...

  • fonction

...

  • du

...

  • workflow

...

  • (états,

...

  • permissions

...

  • et

...

  • rôles)

...

  •   et

...

  • en

...

  • fonction

...

  • de

...

  • ses

...

  • besoins

...

  • propres.

...

Acegi

...

Security

...

:

...

roles

...

et

...

permissions


Pour infos,

...

les

...

configurations

...

possibles

...

ici

...

proviennent

...

de

...

l'implémentation

...

spécifique

...

de

...

la

...

politique

...

de

...

sécurité

...

de

...

Ori-Oai-Workflow.

...

default-permissions-roles.xml

...

  • Ce fichier  permet de configurer les permissions et rôles par défaut dans le workflow. Les masks utilisés doivent être déclarés dans groups.xml

groups.xml

  • Permet de configurer le nom ("key")

...

  • et

...

  • la

...

  • définition

...

  • ("value")

...

  • des

...

  • groupes

...

  • disponibles

...

  • dans

...

  • le

...

  • workflow.

...

  • Les

...

  • noms

...

  • des

...

  • groupes

...

  • sont

...

  • utilisés

...

  • dans

...

  • les

...

  • autres

...

  • fichiers

...

  • de

...

  • configuration

...

  • du

...

  • workflow

...

  • Un

...

  • groupe

...

  • peut-être

...

  • défini

...

  • de

...

  • trois

...

  • façons,

...

  • selon

...

  • la

...

  • syntaxe

...

  • utilisée:
{
Code Block
}
"ldap:<groupeLdap>" pour des groupes déclarés dans l'annuaire ldap
"virtual:<filtreLdap>" pour définir des groupes "virtuels" (ou "dynamiques")
shib:shibAttrsMap.get("Shib-InetOrgPerson-mail").equals("administrateur@mon-etabl.fr")&nbsp;
{code}




{info} lire 
Info

lire ci-dessous

le

cas

particulier

"Authentification

/

Autorisation

avec

Shibboleth"

{info} h2. Le workflow h3.

Le workflow

workflows.xml

...

  • C'est

...

  • le

...

  • point

...

  • d'entrée

...

  • du

...

  • workflow

...

workflow_

...

[type

...

].xml

...

  • C'est

...

  • le

...

  • workflow

...

  • en

...

  • lui_même,

...

  • c'est

...

  • à

...

  • dire

...

  • la

...

  • liste

...

  • des

...

  • états

...

  • ("step"),

...

  •   des

...

  • actions

...

  • utilisateur

...

  • ("action")

...

  • pouvant

...

  • être

...

  • faites

...

  • sous

...

  • certaines

...

  • conditions

...

  • ("condition"

...

  • )

...

  • :

...

  • les

...

  • fonctions

...

  • OsWorkflow

...

  • ("function")

...

  • exécutées

...

  • alors

...

  • et

...

  • l'état

...

  • résultant  ("result")

...

  • .

Exemple du workflow simple DC

Vous noterez que les fichiers workflows sont à mettre en relation avec la configuration des rôles et permissions ( default-permissions-roles.xml,

...

groups.xml)

...

Les paramètres entre crochets ( [WORKFLOW_DC-E_TITLE

...

]

...

,

...

...)

...

seront

...

renseignés

...

(via

...

le

...

quick-install

...

ou

...

...

la

...

main")

...

avant

...

le

...

déploiement.

...

Ce workflow permet à toute personne autorisée (droit "DCE_CREATE

...

")

...

d'initier

...

une

...

fiche

...

de

...

référencement

...

("

...

properties/workflows/default_dc_easy/xml/dc-blank.xml"

...

)

...

qui

...

sera

...

ensuite

...

complétée

...

et

...

publiée

...

par

...

un

...

modérateur

...

("

...

DCE_MODERATOR

...

").

...

Le

...

workflow

...

"

...

default_dc-easy

...

"

...

est

...

utilisé

...

pour

...

le

...

Dublin

...

Core.Un

...

unique

...

formulaire

...

est

...

configuré

...

pour

...

être

...

utilsiable

...

si

...

l'utilisateur

...

a

...

la

...

permission

...

DCE_CREATE

...

sur

...

la

...

fiche

...

considéree

...

(conf/properties/workflows/default_dc_easy/addonContext.xml)

Code Block

*

{code}
<?xml version="1.0" encoding="UTF-8" ?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
    >

    <import resource="default-permissions-roles.xml"/>
    <import resource="groups.xml"/>

    <bean class="org.orioai.workflow.beans.MetadataType">
                    <property name="metadataTypeId" value="dc_easy"/>
                    <property name="title" value="[WORKFLOW_DC-E_TITLE]"/>
                    <property name="workflowName" value="dc_easy"/>
                    <property name="workflowInitialAction" value="100"/>
                    <property name="schemaNamespace" value="http://www.openarchives.org/OAI/2.0/oai_dc/"/>
                    <property name="xslFile" value="properties/workflows/default_dc_easy/xsl/displayDCResults.xsl"/>    <!-- pour affichage de la fiche dans l'IHM -->
                    <property name="defaultXmlFile" value="properties/workflows/default_dc_easy/xml/dc-blank.xml"/>    <!-- le formulaire DC "vide" -->
                    <property name="xpathTitle" value="//dc:title"/>
                    <property name="description" value="Un document"/>
                    <property name="forms">
                        <list>
                            <ref bean="dcform-e"/>
                        </list>
                    </property>
                    <property name="initialForm" ref="dcform-e"/>
                    <property name="templateForm" ref="dcform-e"/>
                    <property name="deletePermissionMask" value="DCE_DELETE"/>
    </bean>


    <bean class="org.orioai.workflow.beans.Form" id="dcform-e">
        <property name="title" value="Fiche OAI DC"/>
        <property name="permissionMask" value="DCE_CREATE"/>                                         <!-- droit de création référencement DC -->
        <property name="url" value="${mdeditor.url}/fr/ori-md-editor/[DC_FORMAT]-[WORKFLOW_DC_FORM]/edit"/>      <!-- appel à l'éditeur pour création de la fiche -->
    </bean>

    <bean id="oaidc" class="org.orioai.workflow.utils.XmlNamespace">
        <property name="namespace" value="http://www.openarchives.org/OAI/2.0/oai_dc/"/>
    </bean>

.....
</beans>

{code}

Voici

...

ce

...

que

...

donne

...

la

...

version XML  proposée par défaut (conf/properties/workflows/default_dc-easy/workflow_easy.xml)

* {
Code Block
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.6//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
<workflow>
	<initial-actions>
		<action id="100" name="Start Workflow">
			<restrict-to>
				<conditions type="AND">
					<condition type="spring">
						<arg name="bean.name">hasRole</arg>
						<arg name="mask">DCE_AUTHENTICATED</arg>
					</condition>
				</conditions>
			</restrict-to>
			<results>
				<unconditional-result old-status="Finished"
					status="Underway" step="1" />
			</results>
			<post-functions>
				<function type="spring">
					<arg name="bean.name">addRole</arg>
					<arg name="mask">DCE_OWNER</arg>
					<!-- no recipient -> current user -->
				</function>
				<function type="spring">
					<arg name="bean.name">addPermission</arg>
					<arg name="mask">DCE_CREATE DCE_DELETE</arg>
					<arg name="recipient">DCE_OWNER</arg>
				</function>
				<function type="spring">
					<arg name="bean.name">xslTransform</arg>
					<arg name="xslPath">properties/workflows/default_dc_easy/xsl/dcSetCreator.xsl</arg>
				</function>
			</post-functions>
		</action>
	</initial-actions>
	<steps>
		<step id="1" name="dc_easy.Private">
			<actions>
				<action id="1" name="dc_easy.Ask to Publish">
					<restrict-to>
						<conditions type="AND">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">DCE_OWNER</arg>
							</condition>
						</conditions>
					</restrict-to>
					<results>
						<unconditional-result status="Underway"
							old-status="Finished" step="2" />
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">deletePermission</arg>
							<arg name="mask">DCE_CREATE DCE_DELETE</arg>
							<arg name="recipient">DCE_OWNER</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">addPermission</arg>
							<arg name="mask">DCE_CREATE DCE_DELETE</arg>
							<arg name="recipient">DCE_MODERATOR</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">saveXmlHistory</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">sendEmail</arg>
							<arg name="message">
								<![CDATA[
{0} vient de placer sa fiche en attente de publication
---------------------------------------------
Voici ses observations.
{2}
-----------------------------------------------------------
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
							</arg>
							<arg name="smtpToMaskRole">DCE_MODERATOR</arg>
						</function>
					</post-functions>
				</action>
			</actions>
		</step>
		<step id="2" name="dc_easy.Pending">
			<actions>
				<action id="2" name="dc_easy.Publish">
					<restrict-to>
						<conditions type="AND">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">DCE_MODERATOR</arg>
							</condition>
						</conditions>
					</restrict-to>
					<results>
						<unconditional-result status="Underway"
							old-status="Finished" step="3" />
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">deletePermission</arg>
							<arg name="mask">DCE_CREATE DCE_DELETE</arg>
							<arg name="recipient">DCE_MODERATOR</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">saveOrUpdateIndex</arg>
							<arg name="idOriIndexing">indexingServicePublic</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">sendEmail</arg>
							<arg name="message">
								<![CDATA[
{0} vient de publier votre fiche.
---------------------------------------------
Voici ses observations.
{2}
-----------------------------------------------------------
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
							</arg>
							<arg name="smtpToMaskRole">DCE_OWNER</arg>
						</function>
					</post-functions>
				</action>
				<action id="3" name="dc_easy.Reject">
					<restrict-to>
						<conditions type="AND">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">DCE_MODERATOR</arg>
							</condition>
						</conditions>
					</restrict-to>
					<results>
						<unconditional-result status="Underway"
							old-status="Finished" step="1" />
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">deletePermission</arg>
							<arg name="mask">DCE_CREATE DCE_DELETE</arg>
							<arg name="recipient">DCE_MODERATOR</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">addPermission</arg>
							<arg name="mask">DCE_CREATE DCE_DELETE</arg>
							<arg name="recipient">DCE_OWNER</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">sendEmail</arg>
							<arg name="message">
								<![CDATA[
{0} vient de refuser une fiche.
---------------------------------------------
Voici ses observations.
{2}
-----------------------------------------------------------
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
							</arg>
							<arg name="smtpToMaskRole">DCE_MODERATOR DCE_OWNER</arg>
						</function>
					</post-functions>
				</action>
			</actions>
		</step>
		<step id="3" name="dc_easy.Public">
			<actions>
				<action id="4" name="dc_easy.Make Private">
					<restrict-to>
						<conditions type="AND">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">DCE_OWNER DCE_MODERATOR</arg>
							</condition>
						</conditions>
					</restrict-to>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="1" />
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">addPermission</arg>
							<arg name="mask">DCE_CREATE DCE_DELETE</arg>
							<arg name="recipient">DCE_OWNER</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">deleteIndex</arg>
							<arg name="idOriIndexing">indexingServicePublic</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">sendEmail</arg>
							<arg name="message">
								<![CDATA[
{0} vient de dépublier votre fiche.
---------------------------------------------
Voici ses observations.
{2}
-----------------------------------------------------------
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
							</arg>
							<arg name="smtpToMaskRole">DCE_OWNER</arg>
						</function>
					</post-functions>
				</action>
				<action id="5" name="dc_easy.review">
					<restrict-to>
						<conditions type="AND">
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">DCE_MODERATOR</arg>
                            </condition>
						</conditions>
					</restrict-to>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="9" />
					</results>
                    <post-functions>
                         <function type="spring">
                             <arg name="bean.name">saveXmlHistory</arg>
                          </function>
						<function type="spring">
							<arg name="bean.name">addPermission</arg>
							<arg name="mask">DCE_CREATE DCE_DELETE</arg>
							<arg name="recipient">DCE_MODERATOR</arg>
						</function>
                     </post-functions>
				</action>
			</actions>
		</step>
		<step id="9" name="dc_easy.reviewPending">
			<actions>
				<action id="16" name="dc_easy.validateReview">
					<restrict-to>
						<conditions type="AND">
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">DCE_MODERATOR</arg>
                            </condition>
						</conditions>
					</restrict-to>
					<pre-functions>
						<function type="spring">
							<arg name="bean.name">deletePermission</arg>
							<arg name="mask">DCE_CREATE DCE_DELETE</arg>
							<arg name="recipient">DCE_MODERATOR</arg>
						</function>
                    </pre-functions>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="3" />
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">saveOrUpdateIndex</arg>
							<arg name="idOriIndexing">indexingServicePublic</arg>
						</function>
               		 	<function type="spring">
                      		<arg name="bean.name">saveXmlHistory</arg>
               			</function>
                        <function type="spring">
                            <arg name="bean.name">sendEmail</arg>
				            <arg name="smtpToMaskRole">DCE_OWNER</arg>
                            <arg name="message">
                                <![CDATA[
 {0} a corrigé votre fiche {1}.
--------------------------------
Voici ses observations.
{2}

-----------------------------------------------------------
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
                            </arg>
                        </function>
					</post-functions>
				</action>
				<action id="17" name="dc_easy.cancelReview">
					<restrict-to>
						<conditions type="AND">
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">DCE_MODERATOR</arg>
                            </condition>
						</conditions>
					</restrict-to>
					<pre-functions>
						<function type="spring">
							<arg name="bean.name">deletePermission</arg>
							<arg name="mask">DCE_CREATE DCE_DELETE</arg>
							<arg name="recipient">DCE_MODERATOR</arg>
						</function>
					</pre-functions>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="3" />
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">revertXml</arg>
							<arg name="xmlStepIdToRevert">3</arg>
						</function>
					</post-functions>
				</action>
			</actions>
		</step>
	</steps>

</workflow>


{code}


h2. Exemple du [workflow complet LOM|ORI-OAI-workflow (Circuits de référencement)^Schemas_WF_RPN_complex.pdf]

Ce workflow permet aux validateurs (pédagogique, technique, juridique) de compléter la fiche auteur avant sa publication par le documentaliste. Les validateurs technique et juridique peuvent compléter la fiche de façon simultanée. Un modérateur peut suppléer les validateurs et le documentaliste tout au long du flux de production de la fiche.

Chaque contributeur utilise un formulaire différent :
* {color:#000000}l'auteur{color} {color:#000000}[ORI-OAI-workflow (Circuits de référencement)^Schemas

Exemple du workflow complet LOM

Ce workflow permet aux validateurs (pédagogique, technique, juridique) de compléter la fiche auteur avant sa publication par le documentaliste. Les validateurs technique et juridique peuvent compléter la fiche de façon simultanée. Un modérateur peut suppléer les validateurs et le documentaliste tout au long du flux de production de la fiche.

Chaque contributeur utilise un formulaire différent :

...

  • (droit "LOMC_USE_CREATE_FORM")

...

  • utilise

...

  • un

...

  • formulaire

...

  • allégé

...

  • (

...

  • [WORKFLOW_PEDAGO_FORM_AUTHOR

...

  • ]

...

  • )
  • les validateurs utilisent un formulaire adapté 
    • [WORKFLOW_PEDAGO_FORM_ENTITY

...

    • ]

...

    • pour

...

    • le

...

    • validateur

...

    • de

...

...

    • (

...

    • droit

...

    • "LOMC_USE_ENTITY_FORM")

...

    • [WORKFLOW_PEDAGO_FORM_RIGTHS

...

    • ]

...

    • pour

...

    • le

...

    • validateur

...

...

    • (

...

    • droit

...

    • "LOMC_USE_RIGHTS_FORM")

...

    • [WORKFLOW_PEDAGO_FORM_TECHNICAL

...

    • ]

...

    • pour

...

    • le

...

    • validateur

...

...

    • (

...

    • droit

...

    • "LOMC_USE_

...

...

  • (

...

  • droit

...

  • "LOMC_USE_DOC_FORM")

...

  • utilise

...

  • le

...

  • formulaire

...

  • [WORKFLOW_PEDAGO_FORM_DOC

...

...

  • (

...

  • droit

...

  • "LOMC_USE_LOM_FORM")

...

  • utilise

...

  • le

...

  • formulaire complet [WORKFLOW_PEDAGO_FORM_FULL

...

  • ]

Le fichier conf/properties/workflows/default_dc_easy/addonContext.xml

Code Block
*

{code}
<?xml version="1.0" encoding="UTF-8" ?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
	>

	<import resource="default-permissions-roles.xml"/>
	<import resource="groups.xml"/>


		<bean class="org.orioai.workflow.beans.MetadataType">
			<description>
				A MetadataType defines a Type of Metadata.
				It will be displayed like a Type of Metadata (WorkflowInstance) that the end user can create.
			</description>
			<property name="metadataTypeId" value="ressource_pedago_complex"/>
					<property name="title" value="[WORKFLOW_LOM-C_TITLE]"/>
			<property name="workflowName" value="lom_complex"/>
			<property name="workflowInitialAction" value="100"/>
			<property name="schemaNamespace" value="http://ltsc.ieee.org/xsd/LOM"/>
			<property name="xslFile" value="properties/workflows/default_lom_complex/xsl/displayLOMResults2.xsl"/>
			<property name="defaultXmlFile" value="properties/workflows/default_lom_complex/xml/[LOM_FORMAT]-blank.xml"/>
			<property name="xpathTitle" value="//lom:title/lom:string"/>
			<property name="description" value="Une ressource pédagogique (référencée directement par un auteur)"/>
			<property name="forms">
				<list>
					<ref bean="lomform-c"/>
					<ref bean="lomauthorform-c"/>
					<ref bean="lomentityform"/>
					<ref bean="lomrightsform"/>
					<ref bean="lomtechnicalform"/>
					<ref bean="lomdocform"/>
				</list>
			</property>
			<property name="initialForm" ref="lomauthorform-c"/>
			<property name="templateForm" ref="lomauthorform-c"/>
			<property name="deletePermissionMask" value="LOMC_DELETE"/>
		</bean>

		<bean class="org.orioai.workflow.beans.Form" id="lomauthorform-c">
			<property name="title" value="Fiche simple"/>
			<property name="permissionMask" value="LOMC_USE_CREATE_FORM"/>
			<property name="url" value="${mdeditor.url}/fr/ori-md-editor/[LOM_FORMAT]-[WORKFLOW_PEDAGO_FORM_AUTHOR]/edit"/>
		</bean>

		<bean class="org.orioai.workflow.beans.Form" id="lomdocform">
			<property name="title" value="Fiche documentaliste"/>
			<property name="permissionMask" value="LOMC_USE_DOC_FORM"/>
			<property name="url" value="${mdeditor.url}/fr/ori-md-editor/[LOM_FORMAT]-[WORKFLOW_PEDAGO_FORM_DOC]/edit"/>
		</bean>

		<bean class="org.orioai.workflow.beans.Form" id="lomrightsform">
			<property name="title" value="Fiche juridique"/>
			<property name="permissionMask" value="LOMC_USE_RIGHTS_FORM"/>
			<property name="url" value="${mdeditor.url}/fr/ori-md-editor/[LOM_FORMAT]-[WORKFLOW_PEDAGO_FORM_RIGHTS]/edit"/>
		</bean>

		<bean class="org.orioai.workflow.beans.Form" id="lomtechnicalform">
			<property name="title" value="Fiche technique"/>
			<property name="permissionMask" value="LOMC_USE_TECHNICAL_FORM"/>
			<property name="url" value="${mdeditor.url}/fr/ori-md-editor/[LOM_FORMAT]-[WORKFLOW_PEDAGO_FORM_TECHNICAL]/edit"/>
		</bean>

		<bean class="org.orioai.workflow.beans.Form" id="lomentityform">
			<property name="title" value="Fiche entité"/>
			<property name="permissionMask" value="LOMC_USE_ENTITY_FORM"/>
			<property name="url" value="${mdeditor.url}/fr/ori-md-editor/[LOM_FORMAT]-[WORKFLOW_PEDAGO_FORM_ENTITY]/edit"/>
		</bean>

		<bean class="org.orioai.workflow.beans.Form" id="lomform-c">
			<property name="title" value="Fiche LOM complète"/>
			<property name="permissionMask" value="LOMC_USE_LOM_FORM"/>
			<property name="url" value="${mdeditor.url}/fr/ori-md-editor/[LOM_FORMAT]-[WORKFLOW_PEDAGO_FORM_FULL]/edit"/>
		</bean>


....

</beans>


{code}



Voici ce que donne la version XML&nbsp; proposée par défaut *

Voici ce que donne la version XML  proposée par défaut (conf/properties/workflows/default_lom_complex/workflow_complex.xml)

* {
Code Block
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.6//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
<workflow>
	<initial-actions>
		<action id="100" name="createDocument">
			<restrict-to>
				<conditions type="AND">
					<condition type="spring">
						<arg name="bean.name">hasRole</arg>
						<arg name="mask">LOMC_AUTHENTICATED</arg>
					</condition>
				</conditions>
			</restrict-to>
			<results>
				<unconditional-result old-status="Finished"
					status="Underway" step="1" />
			</results>
			<post-functions>
				<function type="spring">
					<arg name="bean.name">addRole</arg>
					<arg name="mask">LOMC_OWNER</arg>
					<!-- no recipient -> current user -->
				</function>
                <function type="spring">
                        <arg name="bean.name">addPermission</arg>
                        <arg name="mask">LOMC_DELETE</arg>
                        <arg name="recipient">LOMC_OWNER</arg>
                </function>
                <function type="spring">
                        <arg name="bean.name">addPermission</arg>
                        <arg name="mask">LOMC_USE_CREATE_FORM</arg>
                        <arg name="recipient">LOMC_OWNER</arg>
                </function>
                <function type="spring">
                         <arg name="bean.name">addPermission</arg>
                         <arg name="mask">LOMC_USE_LOM_FORM</arg>
                         <arg name="recipient">LOMC_MODERATOR</arg>
                 </function>
                <function type="spring">
                        <arg name="bean.name">setInstanceIdentity</arg>
                        <arg name="xpathMetadataIdentity">/lom:lom/lom:metaMetadata/lom:identifier[lom:catalog="URI"]/lom:entry</arg>
                </function>
                <function type="spring">
                        <arg name="bean.name">setEntryIdentity</arg>
                        <arg name="xpathMetadataIdentity">/lom:lom/lom:general/lom:identifier[lom:catalog="URI"]/lom:entry</arg>
                </function>
				<function type="spring">
					<arg name="bean.name">xslTransform</arg>
					<arg name="xslPath">properties/workflows/default_lom_complex/xsl/lomSetLifecycleAuthor.xsl</arg>
				</function>
			</post-functions>
		</action>
	</initial-actions>
	<steps>
		<step id="1" name="lom_complex.private">
			<actions>
				<action id="1" name="lom_complex.validateCreation">
					<restrict-to>
						<conditions type="AND">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_OWNER LOMC_MODERATOR</arg>
							</condition>
							<condition type="spring">
								<arg name="bean.name">verifySchematron</arg>
								<arg name="schematronFile">/properties/workflows/default_lom_complex/sch/lom-ori-i18n-author.sch</arg>
							</condition>
						</conditions>
 					</restrict-to>
			<pre-functions>
				<function type="spring">
					<arg name="bean.name">deletePermission</arg>
					<arg name="mask">LOMC_USE_CREATE_FORM</arg>
					<arg name="recipient">LOMC_OWNER</arg>
				</function>
				<function type="spring">
					<arg name="bean.name">addPermission</arg>
					<arg name="mask">LOMC_USE_ENTITY_FORM</arg>
					<arg name="recipient">LOMC_ENTITY_MODERATOR</arg>
				</function>
		   </pre-functions>
		<results>
			<unconditional-result old-status="Finished"
			status="Underway" step="3" />
		</results>
		<post-functions>
           		 <function type="spring">
                  	<arg name="bean.name">saveXmlHistory</arg>
           		 </function>

				<function type="spring">
				    <arg name="bean.name">sendEmail</arg>
	                            <arg name="smtpToMaskRole">LOMC_ENTITY_MODERATOR</arg>
				    <arg name="message">
<![CDATA[
 {0} vient de créer la fiche {1}.  Voici ses observations.
------------------------------------------------------------
{2}

-----------------------------------------------------------
Pour valider cette fiche
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>			     </arg>
				</function>
		</post-functions>
	</action>
</actions>
</step>

		<step id="3" name="lom_complex.entityVisa">
			<actions>
				<action id="3" name="lom_complex.cancelEntityValidation">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_OWNER</arg>
							</condition>
						</conditions>
					</restrict-to>
					<pre-functions>
                        <function type="spring">
                            <arg name="bean.name">addPermission</arg>
                            <arg name="mask">LOMC_USE_CREATE_FORM </arg>
                            <arg name="recipient">LOMC_OWNER</arg>
                        </function>
                         <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                             <arg name="mask">LOMC_USE_ENTITY_FORM</arg>
                            <arg name="recipient">LOMC_ENTITY_MODERATOR</arg>
                        </function>
                    </pre-functions>

			<results>
				<unconditional-result old-status="Finished"
					status="Underway" step="1" />
			</results>
                    <post-functions>

			<function type="spring">
			    <arg name="bean.name">sendEmail</arg>
                <arg name="smtpToMaskRole">LOMC_ENTITY_MODERATOR</arg>
			    <arg name="message">
<![CDATA[
 {0} a annulé   sa fiche {1}.
--------------------------------------------------------------
Voici ses observations.
{2}

-----------------------------------------------------------
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>			     </arg>
						</function>
                    </post-functions>
		</action>
				<action id="4" name="lom_complex.rejectEntityValidation">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_ENTITY_MODERATOR</arg>
							</condition>
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_MODERATOR</arg>
							</condition>
						</conditions >
					</restrict-to>
					<pre-functions>
                       <function type="spring">
                            <arg name="bean.name">addPermission</arg>
                            <arg name="mask">LOMC_USE_CREATE_FORM</arg>
                            <arg name="recipient">LOMC_OWNER</arg>
                        </function>
                         <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                             <arg name="mask">LOMC_USE_ENTITY_FORM</arg>
                            <arg name="recipient">LOMC_ENTITY_MODERATOR</arg>
                        </function>
					</pre-functions>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="1" />
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">revertXml</arg>
							<arg name="xmlStepIdToRevert">2</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">sendEmail</arg>
							<arg name="smtpToMaskRole">LOMC_OWNER</arg>
			    			<arg name="message">
<![CDATA[
 {0} a rejeté  votre fiche {1}.
--------------------------------------------------------------
Voici ses observations.
{2}

-----------------------------------------------------------
Pour consulter cette fiche
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>			    				 </arg>
						</function>
					</post-functions>
				</action>
				<action id="5" name="lom_complex.acceptEntityValidation">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_ENTITY_MODERATOR</arg>
							</condition>
	                       <condition type="spring">
	                               <arg name="bean.name">hasRole</arg>
	                               <arg name="mask">LOMC_MODERATOR</arg>
	                       </condition>
						</conditions>
					</restrict-to>
					<pre-functions>
               			<function type="spring">
               			   <arg name="bean.name">deletePermission</arg>
               				    <arg name="mask">LOMC_USE_ENTITY_FORM</arg>
               				   <arg name="recipient">LOMC_ENTITY_MODERATOR</arg>
              			</function>
					</pre-functions>
					<results>
						<unconditional-result old-status="Finished"
							split="1" />
					</results>
                   			 <post-functions>
						<function type="spring">
							<arg name="bean.name">saveXmlHistory</arg>
						</function>
               			<function type="spring">
               			    <arg name="bean.name">addPermission</arg>
               			    <arg name="mask">LOMC_USE_TECHNICAL_FORM</arg>
              				     <arg name="recipient">LOMC_TECHNICS_MODERATOR</arg>
               			</function>
               			<function type="spring">
               			    <arg name="bean.name">addPermission</arg>
               			    <arg name="mask">LOMC_USE_RIGHTS_FORM</arg>
               			    <arg name="recipient">LOMC_RIGHTS_MODERATOR</arg>
               			</function>
						<function type="spring">
							<arg name="bean.name">sendEmail</arg>
							<arg name="smtpToMaskRole">LOMC_TECHNICS_MODERATOR</arg>
			    			<arg name="message">
<![CDATA[
 {0} vous transmet la fiche {1} pour validation technique.
---------------------------------------------------------
Voici ses observations.
{2}

-----------------------------------------------------------
Pour valider cette fiche
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>			    				 </arg>
						</function>
						<function type="spring">
							<arg name="bean.name">sendEmail</arg>
							<arg name="smtpToMaskRole">LOMC_RIGHTS_MODERATOR</arg>
			    			<arg name="message">
<![CDATA[
 {0} vous transmet la fiche {1} pour validation juridique.
---------------------------------------------------------
Voici ses observations.
{2}

-----------------------------------------------------------
Pour valider cette fiche
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>			    				 </arg>
						</function>
                    </post-functions>
				</action>
			</actions>
		</step>
		<step id="5" name="lom_complex.technicalPending">
			<actions>
				<action id="8" name="lom_complex.validateTechnicalData">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_TECHNICS_MODERATOR</arg>
							</condition>
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">LOMC_MODERATOR</arg>
                            </condition>
						</conditions>
					</restrict-to>
					<pre-functions>
						<function type="spring">
							<arg name="bean.name">deletePermission</arg>
							<arg name="mask">LOMC_USE_TECHNICAL_FORM</arg>
							<arg name="recipient">LOMC_TECHNICS_MODERATOR</arg>
						</function>
					</pre-functions>
                    <results>
                        <unconditional-result old-status="Finished"
                            join="1" />
                    </results>
					<post-functions>
                    <function type="spring">
                		<arg name="bean.name">saveXmlHistory</arg>
               		</function>
					</post-functions>
 				</action>
				<action id="9" name="lom_complex.rejectTechnicalValidation">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_TECHNICS_MODERATOR</arg>
							</condition>
                            <condition type="spring">
                                 <arg name="bean.name">hasRole</arg>
                                 <arg name="mask">LOMC_MODERATOR</arg>
                            </condition>
						</conditions>
					</restrict-to>
					<results>
						<unconditional-result old-status="Finished"
							join="2" />
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">sendEmail</arg>
							<arg name="smtpToMaskRole">LOMC_OWNER</arg>
							<arg name="message">
<![CDATA[
 {0} n'a pas validé les données techniques de votre fiche {1}.
--------------------------------------------------------------
Voici ses observations.
{2}

-----------------------------------------------------------
Pour consulter cette fiche
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
							</arg>
						</function>
					</post-functions>
				</action>
			</actions>
		</step>
		<step id="6" name="lom_complex.rightsPending">
			<actions>
				<action id="10" name="lom_complex.validateRights">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_RIGHTS_MODERATOR</arg>
							</condition>
                           <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">LOMC_MODERATOR</arg>
                           </condition>
						</conditions>
					</restrict-to>
					<pre-functions>
						<function type="spring">
							<arg name="bean.name">deletePermission</arg>
							<arg name="mask">LOMC_USE_RIGHTS_FORM</arg>
							<arg name="recipient">LOMC_RIGHTS_MODERATOR</arg>
						</function>
					</pre-functions>
					<results>
						<unconditional-result old-status="Finished"
							join="1" />
					</results>
					<post-functions>
                         <function type="spring">
           			        <arg name="bean.name">saveXmlHistory</arg>
          				  </function>
					</post-functions>
				</action>
				<action id="11" name="lom_complex.rejectRightsValidation">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_RIGHTS_MODERATOR</arg>
							</condition>
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">LOMC_MODERATOR</arg>
                            </condition>
						</conditions>
					</restrict-to>

					<results>
						<unconditional-result old-status="Finished"
							join="2" />
					</results>

					<post-functions>
                       			 <function type="spring">
                        		    <arg name="bean.name">sendEmail</arg>
                        		    <arg name="smtpToMaskRole">LOMC_OWNER</arg>
                        		    <arg name="message">
<![CDATA[
 {0} n'a pas validé les droits de votre fiche {1}..
--------------------------------------------------
Voici ses observations.
{2}

-----------------------------------------------------------
Pour consulter cette fiche
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
                           		 </arg>
                       			 </function>
					</post-functions>
				</action>
			</actions>
		</step>
		<step id="7" name="lom_complex.pending">
			<actions>
				<action id="12" name="lom_complex.publish">
					<restrict-to>
						<conditions type="OR">
							<conditions type="AND">
								<condition type="spring">
									<arg name="bean.name">hasPermission</arg>
									<arg name="mask">LOM_VALIDATE</arg>
								</condition>
								<condition type="spring">
									<arg name="bean.name">verifySchematron</arg>
									<arg name="schematronFile">/properties/workflows/default_lom_complex/sch/[LOM_FORMAT]-ori-i18n.sch</arg>
								</condition>
							</conditions>
							<conditions type="AND">
								<condition type="spring">
									<arg name="bean.name">hasRole</arg>
									<arg name="mask">LOMC_MODERATOR LOMC_ARCHIVIST</arg>
								</condition>
								<condition type="spring">
									<arg name="bean.name">hasPermission</arg>
									<arg name="mask">LOM_SKIP</arg>
								</condition>
							</conditions>
						</conditions>
					</restrict-to>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="8" />
					</results>
                    <post-functions>
			<function type="spring">
				<arg name="bean.name">saveOrUpdateIndex</arg>
				<arg name="idOriIndexing">indexingServicePublic</arg>
			</function>
               		<function type="spring">
                      		<arg name="bean.name">saveXmlHistory</arg>
               		 </function>
                        <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_DOC_FORM</arg>
                            <arg name="recipient">LOMC_ARCHIVIST</arg>
                        </function>
                         <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_LOM_FORM</arg>
                            <arg name="recipient">LOMC_MODERATOR</arg>
                        </function>
                        <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_CREATE_FORM</arg>
                            <arg name="recipient">LOMC_OWNER</arg>
                        </function>
                        <function type="spring">
                            <arg name="bean.name">sendEmail</arg>
                            <arg name="smtpToMaskRole">LOMC_OWNER</arg>
                            <arg name="message">
<![CDATA[
 {0} a publié votre fiche {1}.
-------------------------------
Voici ses observations.
{2}

-----------------------------------------------------------
Pour consulter cette fiche
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
                            </arg>
                        </function>
                    </post-functions>
				</action>
				<action id="13" name="lom_complex.reject">
					<restrict-to>
                        <conditions type="OR">
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">LOMC_MODERATOR</arg>
                            </condition>
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">LOMC_ARCHIVIST</arg>
                            </condition>
                        </conditions>
					</restrict-to>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="1" />
					</results>
					<post-functions>
                        <function type="spring">
                            <arg name="bean.name">addPermission</arg>
                            <arg name="mask">LOMC_USE_CREATE_FORM</arg>
                            <arg name="recipient">LOMC_OWNER</arg>
                        </function>
                        <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_DOC_FORM</arg>
                            <arg name="recipient">LOMC_ARCHIVIST</arg>
                        </function>
                        <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_LOM_FORM</arg>
                            <arg name="recipient">LOMC_MODERATOR</arg>
                        </function>
			<function type="spring">
				<arg name="bean.name">sendEmail</arg>
				<arg name="smtpToMaskRole">LOMC_OWNER</arg>
				<arg name="message">
<![CDATA[
 {0} a refusé la publication de votre fiche {1}.
--------------------------------------------------
Voici ses observations.
{2}

-----------------------------------------------------------
Pour consulter cette fiche
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
				</arg>
			</function>
		  </post-functions>
		  </action>
		</actions>
		</step>
		<step id="8" name="lom_complex.public" >
		<actions>
				<action id="14" name="lom_complex.makePrivate">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_OWNER</arg>
							</condition>
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">LOMC_MODERATOR</arg>
                            </condition>
						</conditions>
					</restrict-to>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="1" />
					</results>
                    <post-functions>
                        <function type="spring">
                            <arg name="bean.name">addPermission</arg>
                            <arg name="mask">LOMC_USE_CREATE_FORM</arg>
                            <arg name="recipient">LOMC_OWNER</arg>
                        </function>
						<function type="spring">
							<arg name="bean.name">deleteIndex</arg>
							<arg name="idOriIndexing">indexingServicePublic</arg>
						</function>
						<function type="spring">
							<arg name="bean.name">sendEmail</arg>
							<arg name="message">
								<![CDATA[
{0} vient de dépublier votre fiche.
---------------------------------------------
Voici ses observations.
{2}
-----------------------------------------------------------
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
							</arg>
							<arg name="smtpToMaskRole">LOMC_OWNER</arg>
						</function>
					</post-functions>
				</action>
				<action id="15" name="lom_complex.review">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_ARCHIVIST</arg>
							</condition>
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">LOMC_MODERATOR</arg>
                            </condition>
						</conditions>
					</restrict-to>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="9" />
					</results>
                    <post-functions>
                         <function type="spring">
                             <arg name="bean.name">saveXmlHistory</arg>
                          </function>
                        <function type="spring">
                            <arg name="bean.name">addPermission</arg>
                            <arg name="mask">LOMC_USE_DOC_FORM</arg>
                            <arg name="recipient">LOMC_ARCHIVIST</arg>
                        </function>
                        <function type="spring">
                            <arg name="bean.name">addPermission</arg>
                            <arg name="mask">LOMC_USE_LOM_FORM</arg>
                            <arg name="recipient">LOMC_MODERATOR</arg>
                        </function>
                     </post-functions>
				</action>
				</actions>
		</step>
		<step id="9" name="lom_complex.reviewPending">
			<actions>
				<action id="16" name="lom_complex.validateReview">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_ARCHIVIST</arg>
							</condition>
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">LOMC_MODERATOR</arg>
                            </condition>
						</conditions>
					</restrict-to>
					<pre-functions>
                        <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_DOC_FORM</arg>
                            <arg name="recipient">LOMC_ARCHIVIST</arg>
                        </function>
                        <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_LOM_FORM</arg>
                            <arg name="recipient">LOMC_MODERATOR</arg>
                        </function>
                    </pre-functions>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="8" />
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">saveOrUpdateIndex</arg>
							<arg name="idOriIndexing">indexingServicePublic</arg>
						</function>
               		 	<function type="spring">
                      		<arg name="bean.name">saveXmlHistory</arg>
               			</function>
                        <function type="spring">
                            <arg name="bean.name">sendEmail</arg>
				            <arg name="smtpToMaskRole">LOMC_OWNER</arg>
                            <arg name="message">
                                <![CDATA[
 {0} a corrigé votre fiche {1}.
--------------------------------
Voici ses observations.
{2}

-----------------------------------------------------------
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
                            </arg>
                        </function>
					</post-functions>
				</action>
				<action id="17" name="lom_complex.cancelReview">
					<restrict-to>
						<conditions type="OR">
							<condition type="spring">
								<arg name="bean.name">hasRole</arg>
								<arg name="mask">LOMC_ARCHIVIST</arg>
							</condition>
                            <condition type="spring">
                                <arg name="bean.name">hasRole</arg>
                                <arg name="mask">LOMC_MODERATOR</arg>
                            </condition>
						</conditions>
					</restrict-to>
					<pre-functions>
                        <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_DOC_FORM</arg>
                            <arg name="recipient">LOMC_ARCHIVIST</arg>
                        </function>
                        <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_LOM_FORM</arg>
                            <arg name="recipient">LOMC_MODERATOR</arg>
                        </function>
					</pre-functions>
					<results>
						<unconditional-result old-status="Finished"
							status="Underway" step="8" />
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">revertXml</arg>
							<arg name="xmlStepIdToRevert">8</arg>
						</function>
					</post-functions>
				</action>
			</actions>
		</step>
	</steps>
	<splits>
		<split id="1">
			<unconditional-result old-status="Finished" step="5"
				status="Underway" />
			<unconditional-result old-status="Finished" step="6"
				status="Underway" />
		</split>
	</splits>
	<joins>
		<join id="1">
			<conditions type="AND">
				<condition type="beanshell">
					<arg name="script">
						"Finished".equals(jn.getStep(5).getStatus())
						&amp;&amp;
						"Finished".equals(jn.getStep(6).getStatus())
					</arg>
				</condition>
			</conditions>
			<unconditional-result old-status="Finished" step="7"
				status="Underway" >
				  <post-functions>
                        <function type="spring">
                            <arg name="bean.name">addPermission</arg>
                            <arg name="mask">LOMC_USE_DOC_FORM</arg>
                            <arg name="recipient">LOMC_ARCHIVIST</arg>
                        </function>
                        <function type="spring">
                            <arg name="bean.name">addPermission</arg>
                            <arg name="mask">LOMC_USE_LOM_FORM</arg>
                            <arg name="recipient">LOMC_MODERATOR</arg>
                        </function>
                       <function type="spring">
                            <arg name="bean.name">addRole</arg>
                            <arg name="mask">LOMC_ARCHIVIST</arg>
                            <arg name="recipient">LOMC_archivists</arg>
                         </function>
                        <function type="spring">
                            <arg name="bean.name">sendEmail</arg>
                            <arg name="smtpToMaskRole">LOMC_ARCHIVIST</arg>
                            <arg name="message">
                                <![CDATA[
 la fiche {1} est en attente de publication.
--------------------------------------------


-----------------------------------------------------------
Pour publier cette fiche
[PUBLIC_URL_WORKFLOW]
-----------------------------------------------------------
]]>
                            </arg>
                        </function>
                 </post-functions>
			</unconditional-result>
		</join>
		<join id="2">
			<conditions type="AND">
				<condition type="beanshell">
					<arg name="script">
						"Finished".equals(jn.getStep(5).getStatus()) ||
						"Finished".equals(jn.getStep(6).getStatus())
					</arg>
				</condition>
			</conditions>
			<unconditional-result old-status="Finished" step="3"
				status="Underway" >
				<post-functions>
						<function type="spring">
							<arg name="bean.name">addPermission</arg>
							<arg name="mask">LOMC_USE_ENTITY_FORM</arg>
							<arg name="recipient">LOMC_ENTITY_MODERATOR</arg>
						</function>
                        <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_RIGHTS_FORM</arg>
                            <arg name="recipient">LOMC_RIGHTS_MODERATOR</arg>
                        </function>
                        <function type="spring">
                            <arg name="bean.name">deletePermission</arg>
                            <arg name="mask">LOMC_USE_TECHNICAL_FORM</arg>
                            <arg name="recipient">LOMC_TECHNICS_MODERATOR</arg>
                        </function>
                        <function type="spring">
                            <arg name="bean.name">revertXml</arg>
                            <arg name="xmlStepIdToRevert">1</arg>
                        </function>
                </post-functions>

				</unconditional-result>
		</join>
	</joins>
</workflow>



{code}