Principe
Ce gestionnaire d’opérations permet de réagir à l’exécution d’une opération en exécutant un script JavaScript. Le script JavaScript est exécuté à l’aide du moteur Graal embarqué dans la JVM de FlowerDocs Core.
Le script est stocké comme contenu (fichier .js attaché) du document OperationHandlerRegistration utilisé pour configurer l’abonnement.
Variables
Liées au contexte
Les variables suivantes sont injectées dans le script en fonction du type d’opération :
| Variable | Type | Disponibilité | Description |
|---|---|---|---|
context |
OperationContext | Toujours | Contexte d’exécution de l’opération (scope, utilisateur, phase, etc.) |
| component |
Component | Opérations sur composants (CREATE, UPDATE, DELETE, READ, ANSWER, ASSIGN) | Le composant concerné par l’opération |
| request |
SearchRequest | Opérations de recherche | La requête de recherche exécutée |
| response |
SearchResponse | Opérations de recherche (phase AFTER uniquement) | La réponse de recherche |
| logger | SLF4J Logger | Toujours | Logger pour écrire dans le journal de FlowerDocs Core |
| util | ContextUtil | Toujours | Objet utilitaire pour l’accès aux services et la persistance des composants |
En phase BEFORE, les modifications apportées à l’objet component sont appliquées à l’opération avant son exécution. En phase AFTER, le composant reflète son état après l’exécution de l’opération.
Utilitaires
Deux objets utilitaires sont disponibles — ils ont des rôles distincts :
utilest une instance deRuleContextUtil. Utilisez-le pour toute opération qui appelle les services de FlowerDocs Core : accès aux services (util.getDocumentService(),util.getFolderService(), …), persistance de composants (util.create(),util.update()), changement de classe (util.changeClass()), et création de faits (util.createFact()).RuleUtilest une référence de classe statique. Utilisez-le pour les opérations en mémoire sur l’objetcomponentsans appel de service : lecture et écriture de tags (RuleUtil.getTagValue(),RuleUtil.setTagValue()), identifiants de classe (RuleUtil.getClassId(),RuleUtil.setClassId()), et statuts (RuleUtil.getStatus(),RuleUtil.setStatus()).
La référence complète des méthodes des deux objets est documentée ici.
util est une instance d’une classe qui hérite de RuleUtil, appeler les méthodes statiques via util (ex : util.setTagValue(...)) fonctionne également. Toutefois, la convention recommandée est RuleUtil.method() pour les helpers statiques et util.method() pour les appels de services.
Classes pré-importées
Pour simplifier le développement des scripts, les classes suivantes sont disponibles par leur nom court sans nécessiter de référence complète au package :
| Classe | Description |
|---|---|
ComponentBuilder |
Construction d’instances Document, Folder, Task ou VirtualFolder |
TagBuilder |
Construction d’instances Tag |
CriterionBuilder |
Construction de critères de recherche |
FilterClauseBuilder |
Construction de clauses de filtre AND/OR |
SearchRequestBuilder |
Construction de requêtes de recherche |
SearchBuilder |
Construction de recherches pour dossiers virtuels |
FactBuilder |
Construction de faits d’audit |
ReferenceBuilder |
Construction de références de composants |
ExceptionBuilder |
Construction d’exceptions fonctionnelles ou techniques |
| Classe | Description |
|---|---|
Document, Folder, Task, VirtualFolder |
Types de composants |
DocumentFile |
Fichier attaché |
Id, Ids |
Types d’identifiants |
Tag, Tags |
Tag et collection de tags |
Status |
Statut du composant |
Category |
Enum de catégorie du composant |
ComponentData |
Métadonnées du composant |
ComponentReference |
Référence vers un composant |
Attachment |
Pièce jointe d’une tâche |
Answer, ReasonedAnswer |
Types de réponse de tâche |
User, Group |
Principaux de sécurité |
Fact, Action, ObjectType |
Types de faits d’audit |
| Classe | Description |
|---|---|
SearchRequest |
Objet de requête de recherche |
Criterion, Criteria |
Critère de recherche |
AndClause, OrClause |
Combinateurs de clauses logiques |
Operators |
Opérateurs de recherche (EQUALS_TO, CONTAINS, etc.) |
Types |
Types de données des critères (STRING, DATE, etc.) |
OrderClause |
Ordre de tri |
FlowerFields |
Noms de champs standards |
SearchContexts |
Types de contexte de recherche |
FieldAggregation |
Configuration d’agrégation |
ResultField |
Sélection de champs de résultat |
| Classe | Description |
|---|---|
RuleUtil |
Méthodes statiques pour les tags, classes et statuts |
ComponentHelper |
Méthodes utilitaires pour les composants |
TagHelper |
Méthodes utilitaires pour les tags |
Lists, Sets, Maps |
Fabriques de collections Guava |
String, Boolean, Float, Integer, Date |
Types standards Java |
IdentifiableString |
Wrapper de chaîne identifiable |
InternalFeatures |
Fonctionnalités internes |
| Classe | Description |
|---|---|
ExceptionBuilder |
Création d’exceptions fonctionnelles ou techniques |
FunctionalErrorCode |
Enum de codes d’erreur fonctionnels |
TechnicalErrorCode |
Enum de codes d’erreur techniques |
Exemples
Création d’un dossier lors de la création d’un document
Création d’un fait d’audit
Machine à états de workflow (transitions de classe de tâche)
Recherche et création conditionnelle d’un dossier virtuel
Modification de tags et d’ACLs
Lever des exceptions
Un script en phase BEFORE peut empêcher l’exécution de l’opération en levant une exception. Cela ne fonctionne que lorsque StopOnException est défini à true dans l’abonnement.
com.flower.docs.core.tsp.operation.script.ScriptOperationHandler peut être utilisé comme valeur du tag OperationHandler.
com.flower.docs.bpm.core.operation.ScriptOperationHandler est déprécié depuis la version 2025.0. Utilisez l’identifiant ci-dessus à la place. Lors de la migration des scripts depuis l’ancien gestionnaire, remplacez equals() par == pour les comparaisons de chaînes et Date.now() par String.valueOf(new Date().getTime()).