Voici une version mise à jour de ton problème en anglais, incluant toutes les informations et les fichiers pertinents :
Subject: Error Creating Users in Odoo via XML-RPC from Express.js Backend
Hi,
I’m experiencing an issue when trying to create users in Odoo using the xml-rpc library in my Express.js backend. Here’s a detailed overview of my setup:
Setup
1. Environment
• Dockerized Application
• Odoo: version 18.0
• PostgreSQL: version 15
• Backend: Express.js (with xml-rpc library) with node:16
• Frontend: Next.js (not directly relevant to the issue)
• The Odoo database is correctly initialized using Docker, and there are no issues with the database setup.
2. Endpoints
• A GET route verifies the connection to Odoo via XML-RPC, and it works perfectly.
• A POST route attempts to create a user in Odoo by calling the create method of the res.users model.
3. The Problem
• When I send a POST request to create a user, I receive an error indicating that I am providing too many “positional arguments”.
• The error persists despite passing what I believe to be the correct payload.
Key Files
Below are the files relevant to my setup:
docker-compose.yml
services: postgres_db: image: postgres:15 container_name: postgres_db environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: xiptelecom volumes: - postgres_data:/var/lib/postgresql/data - ./init_postgres_odoo.sql:/docker-entrypoint-initdb.d/init_postgres_odoo.sql ports: - "5432:5432" restart: always odoo: image: odoo:18.0 container_name: odoo depends_on: - postgres_db ports: - "8069:8069" volumes: - odoo-web-data:/var/lib/odoo - ./config:/etc/odoo - ./addons:/mnt/extra-addons - ./logs:/var/log/odoo environment: - HOST=postgres_db - USER=odoo_user - PASSWORD=odoo_password command: odoo -d odoo --db_user=odoo_user --db_password=odoo_password -i base restart: always pgadmin: image: dpage/pgadmin4 container_name: pgadmin4_container restart: always ports: - "5050:80" environment: PGADMIN_DEFAULT_EMAIL: admin@admin.com PGADMIN_DEFAULT_PASSWORD: admin volumes: - pgadmin_data:/var/lib/pgadmin backend: build: context: ./Backend dockerfile: Dockerfile container_name: backend command: "npm run dev" volumes: - ./Backend:/usr/src/app ports: - "1337:1337" depends_on: - postgres_db frontend: build: context: ./Frontend container_name: frontend command: "npm run dev" volumes: - ./Frontend:/app ports: - "3000:3000" depends_on: - backend volumes: postgres_data: pgadmin_data: odoo-web-data: odoo-db-data:
server.js
const express = require('express'); const port = 1337; const app = express(); app.use(express.json()); const { connectToOdoo, createUserInOdoo } = require('./odoo.js'); app.get('/api/test-odoo', async (req, res) => { try { await connectToOdoo(); res.status(200).json({ message: 'Connexion à Odoo réussie !' }); } catch (err) { res.status(500).json({ error: 'Connexion à Odoo échouée.', details: err.message }); } }); app.post('/create-user', async (req, res) => { const { name, email, login } = req.body; if (!name || !email || !login) { return res.status(400).json({ error: 'Tous les champs sont requis (name, email, login)' }); } try { await connectToOdoo(); const userId = await createUserInOdoo({ name, login, email }); res.status(201).json({ message: 'Utilisateur créé avec succès dans Odoo', userId }); } catch (err) { res.status(500).json({ error: 'Erreur lors de la création de l\'utilisateur dans Odoo', details: err.message }); } }); app.listen(port, () => console.log(`Le backend à démarré sur le port : ${port}`));
odoo.js
const Odoo = require('odoo-xmlrpc'); const odoo = new Odoo({ url: 'http://odoo:8069', db: 'odoo', username: 'admin', password: 'admin', }); const connectToOdoo = async () => { return new Promise((resolve, reject) => { odoo.connect((err) => { if (err) { reject(err); } else { resolve(); } }); }); }; const createUserInOdoo = async (userData) => { try { await connectToOdoo(); const response = await new Promise((resolve, reject) => { odoo.execute_kw('res.users', 'create', [userData], (err, value) => { if (err) reject(err); else resolve(value); }); }); return response; } catch (err) { throw new Error(err); } }; module.exports = { connectToOdoo, createUserInOdoo };
Request Sent from REST Client
POST http://localhost:1337/create-user Content-Type: application/json { "name": "Test User", "email": "testuser@example.com", "login": "testuser" }
The error I receive :
HTTP/1.1 500 Internal Server Error X-Powered-By: Express Content-Type: application/json; charset=utf-8 Content-Length: 1973 ETag: W/"7b5-HnkxxuFqhmAddquOjPBhWEHKDTE" Date: Mon, 27 Jan 2025 15:22:10 GMT Connection: close { "error": "Erreur lors de la création de l'utilisateur dans Odoo", "details": "Erreur lors de la création de l'utilisateur : Erreur lors de la création de l'utilisateur : XML-RPC fault: Traceback (most recent call last):\n File \"/usr/lib/python3/dist-packages/odoo/addons/base/controllers/rpc.py\", line 161, in xmlrpc_2\n response = self._xmlrpc(service)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/lib/python3/dist-packages/odoo/addons/base/controllers/rpc.py\", line 139, in _xmlrpc\n result = dispatch_rpc(service, method, params)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/lib/python3/dist-packages/odoo/http.py\", line 398, in dispatch_rpc\n return dispatch(method, params)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/lib/python3/dist-packages/odoo/service/model.py\", line 39, in dispatch\n res = execute_kw(db, uid, *params[3:])\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/lib/python3/dist-packages/odoo/service/model.py\", line 61, in execute_kw\n return execute(db, uid, obj, method, *args, **kw or {})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/lib/python3/dist-packages/odoo/service/model.py\", line 68, in execute\n res = execute_cr(cr, uid, obj, method, *args, **kw)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/lib/python3/dist-packages/odoo/service/model.py\", line 52, in execute_cr\n result = retrying(partial(odoo.api.call_kw, recs, method, args, kw), env)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/lib/python3/dist-packages/odoo/service/model.py\", line 137, in retrying\n result = func()\n ^^^^^^\n File \"/usr/lib/python3/dist-packages/odoo/api.py\", line 517, in call_kw\n result = getattr(recs, name)(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nTypeError: create() takes 2 positional arguments but 4 were given\n" }
Question
• Why does the create() method fail with a “positional arguments” error in this context?
• Could you provide guidance on the correct format for the create method in Odoo when using XML-RPC?
• Do I need to adjust the userData object structure to align with Odoo’s expectations?
Thank you in advance for any assistance!