Nouvelle API : Opération API

01/04/2017

Introduction

Une API événementielle a pour but d’exécuter du code lorsqu’une opération a lieu dans un contexte précis. Il est possible d’effectuer des actions avant et après l’exécution de l’opération provenant de FlowerDocs.

Les avantages de l’utilisation de cette nouvelle API sont :

  • Stabilité : elle est pérenne, les développements spécifiques ne sont pas impactés à chaque sortie de version
  • Générique et cohérente : elle s’applique sur tous les objets du domaine, sans dénaturer le produit
  • Extensible : de nouvelles fonctionnalités peuvent être ajoutées sans impacter l’existant
  • Scalable : il n’y a aucun préjugés de l’architecture d’exécution (embarquant le spécifique sur une même instance, multi-agents)

Un peu de vocabulaire

  • Operation : Action sur un objet du domaine

  • OperationHandler : Fragment de code exécuté de façon synchrone avant ou après l’opération

  • OperationHook : Service REST à notifier de manière asynchrone après l’exécution d’une opération

Fonctionnement

Une opération va être découpée en 4 phases :

  1. Les OperationHandler enregistrés dans la phase de pré-traitement sont appelés
  2. L’Operation est executée
  3. Les OperationHandler enregistrés dans la phase de post-traitement sont appelés
  4. Les OperationHook asynchrones sont exécutés

S’il y a un problème lors du pré-traitement comme la levée d’une exception, le déroulement des étapes est bloqué.

Configuration

Un OperationHandler est défini par le nom complet de sa classe, Exemple : com.flower.docs.core.tsp.OperationHandlerSample

Ils peuvent être exécutées en fonction de différents contextes d’opération :

  • La phase d’exécution : BEFORE ou AFTER
  • Le type d’action : CREATE, READ, UPDATE, SEARCH, ADD_CONTENT, DELETE_CONTENT, ANSWER ou ASSIGN
  • Le type d’objet : DOCUMENT, FOLDER, TASK ou VIRTUAL_FOLDER

Les paramètres suivants peuvent aussi être définis :

  • L’activation de l’OperationHandler
  • Son exécution de façon asynchrone ou non
  • La levée d’une exception doit-elle ou non bloquer le déroulement de l’opération
  • Son ordre d’exécution en fonction des autres OperationHandler

Contexte d’opération

Les classes de contextes d’opérations existant sont les suivantes :

  • DefaultComponentOperationContext, concernant les opérations CRUD de tous les composants
  • TaskOperationContext, concernant les opérations CRUD des tâches
  • SearchOperationContext, concernant les opérations de recherches
  • UpdateContentOperationContext, concernant la mise à jour de contenu