Develop a connector on any apps using Odoo-connector
description
Transcript of Develop a connector on any apps using Odoo-connector
![Page 1: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/1.jpg)
OpenERP / odoo Connector
OpenDays 2014Guewen Baconnier / Alexandre Fayolle
![Page 2: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/2.jpg)
2/42www.camptocamp.com /
30 seconds to say...
■ Documentation: http://www.openerp-connector.com
■ Mailing list: https://launchpad.net/~openerp-connector-community
![Page 3: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/3.jpg)
3/42www.camptocamp.com /
What is a connector?
■ Connect odoo with external systems
■ Exchange any data between them
![Page 4: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/4.jpg)
4/42www.camptocamp.com /
What is not the connector?
■ A middleware, it is a module inside odoo
■ It does not listen external systems, it speaks to them
![Page 5: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/5.jpg)
5/42www.camptocamp.com /
A framework
Does not do anything “out of the box”, rather:
■ Suggests an implementation style
■ Proposes bare “interface” classes
■ Defines bricks○ Jobs
○ Events
○ Backend / version mechanisms
![Page 6: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/6.jpg)
6/42www.camptocamp.com /
Glossary
■ Backend
■ Event
■ Job / jobs queue
■ Worker
■ Binding
![Page 7: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/7.jpg)
7/42www.camptocamp.com /
Existing implementations
■ Magento
■ Prestashop
■ Multicompany (odoo to odoo)
■ Solr
■ CMIS
■ Connector E-Commerce (not a full implementation)
See http://openerp-connector.com/ for links!
![Page 8: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/8.jpg)
8/42www.camptocamp.com /
Find the doc
■ http://www.openerp-connector.com
■ Have a look at http://www.openerp-magento-connector.com(reference implementation, lots of great examples)
■ Source code itself.
![Page 9: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/9.jpg)
9/42www.camptocamp.com /
Mailing List
■ Join the team on https://launchpad.net/~openerp-connector-community
■ Shared for discussions about the connector and all the different implementations
![Page 10: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/10.jpg)
10/42www.camptocamp.com /
How to install
■ Just like any other add-on!
■ Grab the source code
bzr branch lp:openerp-connector/7.0
■ Add to --addons-path
■ Install in odoo like any other add-on
![Page 11: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/11.jpg)
11/42www.camptocamp.com /
Multiprocessing and Workers
■ One odoo process: all is fine
■ Several processes: at least one independent process must be launched for the processing of the jobs queue○ Tip: use the provided openerp-connector-worker
script
http://openerp-connector.com/guides/multiprocessing.html
![Page 12: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/12.jpg)
12/42www.camptocamp.com /
Multiple databases and Workers
■ Supported!
Gotcha:
■ Only runs on databases that are ○ in the option database in the command line
○ or db_name in the configuration file
○ if nothing is provided, will run on all databases
![Page 13: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/13.jpg)
13/42www.camptocamp.com /
Design goals – Overview
■ Do not impose a way of using the framework to the developer, only strong advices
■ Propose bits of implementation, which can be used or not, and the developer can cherry pick
■ The developer is in charge of choosing her path through the code, the code does not choose it for her
■ Do not mix everything in Model objects
![Page 14: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/14.jpg)
14/42www.camptocamp.com /
Design goals - Events
■ Declare an event only once
■ Consume it several times○ → several actions can be triggered
■ Different connectors can share events
![Page 15: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/15.jpg)
15/42www.camptocamp.com /
Code example: Events
![Page 16: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/16.jpg)
16/42www.camptocamp.com /
Design goals - Jobs
■ Reliable
■ No batches!
■ Run in the background in a separate process
■ Overview of what is running, failing, waiting.
![Page 17: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/17.jpg)
17/42www.camptocamp.com /
Overview - Jobs
![Page 18: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/18.jpg)
18/42www.camptocamp.com /
Code example: Jobs
![Page 19: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/19.jpg)
19/42www.camptocamp.com /
Design goals - Backends
■ Different behaviors across versions of a backend (Magento 1.7 or 2.0, or a customized Magento version...)
■ Extensible
![Page 20: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/20.jpg)
20/42www.camptocamp.com /
Overview - Backends
![Page 21: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/21.jpg)
21/42www.camptocamp.com /
Code example: Backends
![Page 22: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/22.jpg)
22/42www.camptocamp.com /
Code example: Backends
![Page 23: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/23.jpg)
23/42www.camptocamp.com /
The glue: Environment and ConnectorSession■ Environment is the current working context:
○ Model
○ Backend (with version)
○ ConnectorSession
■ ConnectorSession is a container for:○ Cursor
○ User
○ Context
![Page 24: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/24.jpg)
24/42www.camptocamp.com /
Design goals – Binding records
■ Store the external / odoo couples of IDs○ Plus synchronization date
○ And possibly extra data related only to this record and this backend
■ If several backends are possible (e.g. Magento):
→ _inherits on the model
■ If only one backend possible (e.g. Trello):
→ data may be added directly in the model
![Page 25: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/25.jpg)
25/42www.camptocamp.com /
Example of binding record
![Page 26: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/26.jpg)
26/42www.camptocamp.com /
Design goals - ConnectorUnit
■ Bare, decoupled, classes
■ Registered with a backend
■ 1 class: 1 responsibility
■ Combined to do the synchronizations
![Page 27: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/27.jpg)
27/42www.camptocamp.com /
ConnectorUnit – Synchronizer
■ 2 kinds of synchronizers: ○ Importer
○ Exporter
■ Manage the flow of the synchronization○ Use all or part of the other ConnectorUnit classes to
perform each synchronization step
![Page 28: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/28.jpg)
28/42www.camptocamp.com /
Overview – ConnectorUnit (importer)
![Page 29: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/29.jpg)
29/42www.camptocamp.com /
ConnectorUnit - Mapper
■ Transform data
■ Take data in, give data out
![Page 30: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/30.jpg)
30/42www.camptocamp.com /
Code example: Mapper
![Page 31: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/31.jpg)
31/42www.camptocamp.com /
Code example: using a Mapperin a Synchronizer
![Page 32: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/32.jpg)
32/42www.camptocamp.com /
ConnectorUnit - Binder
■ Know the external ID for an odoo ID (and conversely)
■ Store the couple “external / odoo” IDs in binding records
![Page 33: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/33.jpg)
33/42www.camptocamp.com /
Code example: Binder
![Page 34: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/34.jpg)
34/42www.camptocamp.com /
Code example: Binder bind method
![Page 35: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/35.jpg)
35/42www.camptocamp.com /
Code example: using a Binder in a Synchonizer
![Page 36: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/36.jpg)
36/42www.camptocamp.com /
ConnectorUnit - BackendAdapter
■ Communicate with the external system
■ Speak the external language (REST, XML/RPC, …)
■ But 1 interface within odoo○ Typically CRUD
○ Often uses helper library (trollop, requests, magento, gdata...)
![Page 37: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/37.jpg)
37/42www.camptocamp.com /
Code example: BackendAdapter
![Page 38: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/38.jpg)
38/42www.camptocamp.com /
Code example: using a BackendAdapter in a Synchronizer
![Page 39: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/39.jpg)
39/42www.camptocamp.com /
Tests
■ Tests!
■ External system should not be required to run the tests
→ Mock the external API
○ Examples in the Magento connector
![Page 40: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/40.jpg)
40/42www.camptocamp.com /
Tips
■ When developing, deactivate the cron tasks / worker process in charge of assigning and queueing the jobs
■ Use erppeek to run jobs one by one:
model('queue.worker').assign_then_enqueue(1)
■ Set a high priority on the job(s) you want to process first○ high priority == low value
![Page 41: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/41.jpg)
41/42www.camptocamp.com /
Demo: Trello connector
https://launchpad.net/openerp-trello-connector
![Page 42: Develop a connector on any apps using Odoo-connector](https://reader034.fdocuments.net/reader034/viewer/2022052315/554f5f90b4c9058a148b468f/html5/thumbnails/42.jpg)