Concepts du connecteur

Le framework pour développer des connecteur est découplé en composants interagissant ensemble. Chacun d’eux peut être utilisé ou non dans une implémentation.

Un exemple d’implémentation est le Connecteur Odoo Magento.

Ce document les décrit d’un point de vue haut-niveau et donne des pointeurs vers des « how-to » plus concrets ou de petits tutoriels.

Événements

Les événements sont des points d’accroche dans Odoo sur lesquels on peut brancher des actions. Ils sont basés sur le motif de conception « Observateur ».

L’idée de base est de déclarer un Event, par exemple on_record_create. Grâce à ceci, chaque connecteur a la possibilité d’abonner une ou plusieurs fonctions sur l’événement. La création de l’enregistrement doit alors exécuter on_record_create, qui va déclencher toutes les fonctions abonnées.

Le même événement peut être partagé entre plusieurs connecteurs, facilitant ainsi leur implémentation. Par exemple, le module connector_ecommerce qui est une extension du framework avec des capacités courantes pour le e-commerce, ajoute ses propres événements dédiés au e-commerce.

Un développeur de connecteur est principalement intéressé par :

  • abonner une nouvelle fonction à un événement (voir connector.event.Event)
  • désabonner une fonction d’un événement (voir connector.event.Event.unsubscribe())
  • remplacer une fonction consommatrice par une autre (voir connector.event.Event)
  • filtrer les événements par modèle, de sorte qu’une fonction abonnée ne soit déclenchée que pour l’événement d’un modèle particulier

Queue de jobs

Un développeur de connecteur est principalement intéressé par :

  • Déporter un job (voir le décorateur job())

Session

Une ConnectorSession est un conteneur pour les classiques cr, uid, context utilisés dans Odoo. Maintenant il contient l”Environment Odoo dans self.env. Nous les utilisons au sein des connecteurs.

Backend

Un Backend est une référence à un système ou service externe à OpenERP.

Un backend est défini par un nom et une version. Par exemple Magento 1.7.

Une référence peut avoir un parent. L’instance Magento 1.7 est fille de Magento.

Les classes ConnectorUnit sont inscrites dans les backends. Ceci permet de récupérer une classe inscrite dans le backend. Si aucune classe n’est trouvée, elle est cherchée dans le backend parent.

Il est toujours accompagné d’une sous-classe concrète du modèle connector_backend.

Un développeur de connecteur est principalement intéressé par :

Environnement

Un Environment est le périmètre à partir duquel nous allons faire des synchronisations.

Il contient un Backend, un enregistrement d’une sous-classe concrète du modèle connector_backend, une Session et le nom du modèle avec lequel travailler.

Un développeur de connecteur est principalement intéressé par :

ConnectorUnit

Les ConnectorUnit sont des classes modulables utilisées pour la synchronisation avec des systèmes externes.

Le connecteur définit des classes de bases que vous pouvez trouver ci-dessous. Notez que vous pouvez aussi définir vos propres ConnectorUnits.

Mappings

La classe de base est connector.unit.mapper.Mapper.

Un mapping convertit un enregistrement externe en un enregistrement Odoo et inversement.

Il prend en charge :

les mapping directs
Le champ a est écrit dans le champ b.
Les mapping par méthode
Une méthode est utilisée pour convertir un ou plusieurs champs en un ou plusieurs autres champs, avec transformation éventuelle. Il peut être filtré, par exemple appliqué uniquement lorsque l’enregistrement est créé ou quand les champs source sont modifiés.
Sous-mapping
Un sous-enregistrement (ligne d’un bon de commande) est converti grâce à un autre Mapper

Synchroniseurs

La classe de base est connector.unit.synchronizer.Synchronizer.

Un synchroniseur définit le flux de la synchronisation avec un backend. Il peut correspondre à un import ou un export, une suppression de quelque chose, ou n’importe quoi d’autre. Par exemple, il peut utiliser les mappeurs pour convertir des données entre les deux systèmes, les adaptateurs de backend pour lire ou écrire les données sur le backend et les binders pour créer le lien entre eux.

Adaptateurs de backend

La classe de base est connector.unit.backend_adapter.BackendAdapter.

Un adaptateur externe possède une interface commune pour parler avec le backend. Il traduit les commandes basiques (recherche, lecture, écriture) vers le protocole utilisé par le backend.

Binders (Liants)

La classe de base est connector.connector.Binder.

Binders are classes which know how to find the external ID for an Odoo ID, how to find the Odoo ID for an external ID and how to create the binding between them. A default implementation is available and can be inherited if needed.

Bindings (Liaisons)

Ici, un « binding » signifie le lien d’un enregistrement entre Odoo et un backend.

L’implémentation proposée pour les connecteurs utilise largement les capacités de l”_inherits.

Disons que nous importons un client depuis Magento.

Nous créons un modèle magento.res.partner, qui _inherits res.partner.

Ce modèle, appelé modèle de binding (liaison), connaît les ID du partner dans Odoo, l’ID dans Magento et la relation avec le modèle backend.

Il stocke également toutes les métadonnées nécessaires à ce client venant de Magento

Point de contrôle

A checkpoint is a record of the model connector.checkpoint. It can be linked to a model and a record or simply display a message. Custom connectors can create a new one when the user needs to review imported documents.