Apidoo
Odoo API async requests
Installing
Using npm:
$npm i apidoo --save
Important
If you are working with js framworks (react, vue, angular, svelte, etc) you need to integrate proxys
Vue JS
- Add the following 3 routes to the file vite.config.js
export default defineConfig({
...
server: {
...
proxy: {
...
'/web/session/authenticate': {
target: 'http://localhost:8069/web/session/authenticate',
rewrite: (path) => path.replace('/web/session/authenticate', ''),
},
'/web/session/get_session_info': {
target: 'http://localhost:8069/web/session/get_session_info',
rewrite: (path) => path.replace('/web/session/get_session_info', ''),
},
'/web/dataset/call_kw': {
target: 'http://localhost:8069/web/dataset/call_kw',
rewrite: (path) => path.replace('/web/dataset/call_kw', ''),
},
...
}
}
})
React
- Install the package http-proxy-middleware (
$npm i http-proxy-middleware
) - Create the file setupProxy.js inside src/ folder
- Restart the server
const { createProxyMiddleware } = require('http-proxy-middleware');
const session_info = {
target: 'http://localhost:8069',
changeOrigin: true
}
const authenticate = {
target: 'http://localhost:8069',
changeOrigin: true
}
const call_kw = {
target: 'http://localhost:8069',
changeOrigin: true
}
module.exports = function(app) {
app.use(
'/web/session/get_session_info',
createProxyMiddleware(session_info)
);
app.use(
'/web/session/authenticate',
createProxyMiddleware(session_info)
);
app.use(
'/web/dataset/call_kw',
createProxyMiddleware(call_kw)
);
};
Angular
- WIP
Usage
// You should pass an empty string as url because you already define the url in the proxy configuration
import Apidoo from 'apidoo'
let odoo = new Apidoo('', 'db', 'user', 'password')
await odoo.connect()
// Search all partners
let partner = odoo.env('res.partner')
let response = await parter.search()
Methods
Env and Context
// New res partner model env
let partner = odoo.env('res.partner')
// Search partners with a context
let partner_ids = await partner.with_context({lang : 'es_ES'}).search()
Search
let partner = odoo.env('res.partner')
// Search partner with a domain and attributes
let partner_ids = await partner.search(
[['active', '=', false]],
{ limit: 2, offset: 1, order: 'name,email desc'}
)
Search Count
let partner = odoo.env('res.partner')
// Count partners with a domain
let partners_count = await partner.search_count([
['active', '=', false]]
)
Read
let partner = odoo.env('res.partner')
// Search ative partners ids
let partner_ids = await partner.search(
[['active', '=', false]]
)
// Read fields name and title from partner_ids
let partners = await partner.read(
[partner_ids],
{ fields: ['name', 'title']}
)
Search Read
let partner = odoo.env('res.partner')
// Search partner with a domain and get custom fields. This is a mix from Search and Read
let partners = await partner.search_read(
[['active', '=', false]],
{ fields: ['name'] }
)
Get Fields
let partner = odoo.env('res.partner')
// Get all fields from res.partner model
let partner_fields_all = await partner.get_fields()
// Get the the type ad string attributes from title field from res.partner model
let partner_fields = await partner.get_fields(
['title'],
{ attributes: ['type', 'string'] }
)
Session
import Apidoo from 'apidoo'
// Get the session info
let odoo = new Apidoo('', 'db', 'user', 'password')
await odoo.connect()
odoo.auth.session_info