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 :
- Déclarer les backends (voir
connector.backend.Backend
) - Inscrire un ConnectorUnit dans un backend (voir
connector.backend.Backend
) - Remplacer un ConnectorUnit dans un backend (voir
connector.backend.Backend
) - Utiliser un ConnectorUnit différent pour une version différente d’un backend (voir
connector.backend.Backend
)
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 :
- Récupère un ConnectorUnit depuis un environnement (
connector.connector.ConnectorUnit.unit_for()
,connector.connector.ConnectorUnit.binder_for()
)
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.