10 nov. 2021 15:05:09 Thomas Dumont avatar

Intégration avec le guichet du Plugin CRM

Introduction

Le plugin-crmclient permet de faire des appels Web Service REST vers une/plusieurs webapps contenant CRM.

Description technique du plugin-crmclient

L'interface ICRMClientService

Le plugin-crmclient propose une interface ICRMClientService permettant de faire des appels WS pour :

  • notifier un compte utilisateur CRM
  • mettre à jour une demande CRM

Actuellement (version 1.0.2), le plugin-crmclient ne propose qu'une seule implémentation de cette interface : CRMClientWebService permettant de faire des appels WS vers une webapp CRM.

Cette solution permet à l'avenir d'ajouter de nouvelles implémentations, comme par exemple un CRMClientLocalService qui pourrait réalisé la notification et la mise à jour d'une demande sans passer par des appels WS.

Traitement asynchrone du service

Afin de pallier des éventuels problèmes réseaux ou autres problèmes techniques, les appels WS sont traités de façon asynchrone. En d'autres termes, le service ne va pas immédiatement réaliser les appels WS pour notifier/mettre à jour une ressource. Il va enregistrer les actions à exécuter dans la base de données (tables crm_client_crm_item et crm_client_crm_queue). Ensuite, un daemon Lutèce (crmClientSender) réalisera ces tâches.

Si la tâche de notification ou de mise à jour échoue, le daemon remet la tâche en queue de fil.

Intégration dans un plugin

Dépendance vers le plugin-crmclient

Afin d'utiliser le service permettant de faire des appels Web Service dans votre plugin, il est nécessaire d'ajouter le plugin-crmclient comme dépendance dans le fichier pom.xml de votre plugin :

<dependency>
    <groupId>fr.paris.lutece.plugins</groupId>
    <artifactId>plugin-crmclient</artifactId>
    <version>[0.0.9,)</version>
    <type>lutece-plugin</type>
</dependency>

Intégration du service ICRMClientService

L'intégration du service doit se faire au niveau d'un service du plugin. Il y a deux cas de figures pour l'intégration du service :

  • Le service est déclaré par Spring

Dans ce cas, il suffit d'ajouter une injection :

public class MyService implements IMyService
{
   @Inject
   private ICRMClientService _crmClientService;
   ...
}
  • Le service n'est pas déclaré par Spring

Dans ce cas, faire appel à SpringContextService pour récupérer le service :

public class MyService
{
   private ICRMClientService _crmClientService = SpringContextService.getBean( ICRMClientService.BEAN_SERVICE );
   ...
}

Notifier un compte CRM

Pour notifier un compte CRM, l'interface ICRMClientService propose 2 méthodes notify :

void notify( String strIdDemand, String strObject, String strMessage, String strSender );

Cette méthode permet de notifier en utilisant comme base URL de la webapp CRM la valeur par défaut définie dans le fichier crmclient.properties.

void notify( String strIdDemand, String strObject, String strMessage, String strSender, String strCRMWebAppBaseURL );

Cette méthode permet de spécifier la base URL d'une autre webapp CRM que celle définie dans le fichier crmclient.properties.

Attention La valeur de la base URL doit respecter la syntaxe http://<nomdomaine>/<nomcontext> (Exemple : http://localhost:8080/lutece).

Mettre à jour une demande CRM

Pour mettre à jour une demande CRM, l'interface ICRMClientService propose également 2 méthodes sendUpdateDemand :

void sendUpdateDemand( String strIdDemand, String strStatusText );

Cette méthode permet de mettre à jour en utilisant comme base URL de la webapp CRM la valeur par défaut définie dans le fichier crmclient.properties.

void sendUpdateDemand( String strIdDemand, String strStatusText, String strCRMWebAppBaseURL );

Cette méthode permet de spécifier la base URL d'une autre webapp CRM que celle définie dans le fichier crmclient.properties.

Attention La valeur doit de la base URL doit respecter la syntaxe http://<nomdomaine>/<nomcontext> (Exemple : http://localhost:8080/lutece**).