T16 — Odoo 19 E-Learning API Gotchas
Tom tat
4 gotchas khi lam viec voi Odoo 19 E-Learning module qua API: slide.channel.partner create dung vals_list, hr.version.date_end khong ghi duoc qua API, enrollment model khac nhau, va JSON-2 API khong tuong thich voi call_kw.
Chi tiet
Issue 1: slide.channel.partner.create dung vals_list (list of dicts)
Odoo 19 slide.channel.partner.create() yeu cau vals_list (list of dicts), KHONG phai single vals dict. Day la thay doi so voi cac phien ban cu.
SAI — single dict → TypeError hoac tao 1 record sai
models.execute_kw(db, uid, key, 'slide.channel.partner', 'create', [
{'channel_id': 14, 'partner_id': 42}
])
DUNG — list of dicts (vals_list)
models.execute_kw(db, uid, key, 'slide.channel.partner', 'create', [
[{'channel_id': 14, 'partner_id': 42}]
])
DUNG — batch enrollment nhieu user cung luc
models.execute_kw(db, uid, key, 'slide.channel.partner', 'create', [
[
{'channel_id': 14, 'partner_id': 42},
{'channel_id': 14, 'partner_id': 43},
{'channel_id': 14, 'partner_id': 44},
]
])
Luu y: Phuong phap an toan hon la dung slide.channel.action_add_member thay vi truc tiep create slide.channel.partner:
Cach an toan — dung action method
models.execute_kw(db, uid, key, 'slide.channel', 'action_add_member',
[[channel_id]], # args: channel ids
{'partner_ids': [partner_id_1, partner_id_2]} # kwargs
)
Issue 2: hr.version.date_end khong ghi duoc qua API
Khi archive nhan vien (nghi viec), can set date_end tren hr.version tuong ung. Tuy nhien, field date_end khong ghi duoc qua XML-RPC/JSON-2 API — Odoo tra ve success nhung gia tri khong thay doi.
KHONG HOAT DONG — ghi thanh cong nhung gia tri khong luu
models.execute_kw(db, uid, key, 'hr.version', 'write', [
[176], {'date_end': '2026-03-13'}
])
→ True (nhung date_end van = False khi doc lai)
Xu ly: Phai vao Odoo backend thu cong (Employee → Contract/Version → set End Date).
Issue 3: Channel enrollment — enroll field va visibility
Khi tao slide.channel, 2 fields quan trong anh huong enrollment:
| Field | Gia tri | Hieu ung |
|-------|---------|----------|
| enroll | public | Ai cung enroll duoc |
| enroll | invite | Chi admin moi enroll duoc (khyen dung cho internal training) |
| visibility | public | Ai cung xem duoc |
| visibility | connected | Chi logged-in users (portal + internal) |
| visibility | invited | Chi nguoi duoc moi |
Khyen dung cho internal training:
vals = {
'name': 'T01: Soft Skills',
'enroll': 'invite', # Chi admin enroll
'visibility': 'connected', # Portal users xem duoc
'website_published': False, # Khong hien tren website cong khai
}
Issue 4: JSON-2 API /web/dataset/call_kw khong hoat dong voi Bearer API key
Odoo 19 JSON-2 API endpoint /web/dataset/call_kw khong chap nhan Bearer API key authentication. Phai dung endpoint /json/2/ thay the.
SAI — /web/dataset/call_kw voi Bearer → 403 hoac 401
requests.post(f'{url}/web/dataset/call_kw', json=payload,
headers={'Authorization': f'Bearer {api_key}'})
DUNG — /json/2/ endpoint
requests.post(f'{url}/json/2/slide.channel/search_read',
json={'domain': [], 'fields': ['name']},
headers={'Authorization': f'Bearer {api_key}'})
Xem them: T08 (multi-company JSON-2 fail pattern tuong tu).
Anh huong
Cach xu ly / Phong tranh
1. Enrollment: Dung action_add_member thay vi truc tiep create slide.channel.partner
2. hr.version date_end: Lam thu cong trong Odoo backend — khong co workaround API
3. Channel setup: Luon set enroll='invite' + visibility='connected' cho internal training
4. API endpoint: Dung /json/2/ thay vi /web/dataset/call_kw khi authenticate bang API key
5. Batch enrollment: Khi can enroll nhieu user, goi action_add_member voi list partner_ids (khong can loop)
Bang chung / Tham khao
vals_list batchhr.version 176 date_end khong ghi duoc → can lam thu congstaff_development/scripts/odoo_client.py — enroll_partner() dung action_add_memberstaff_development/scripts/odoo_setup.py — enrollment workflow hoan chinhstaff_development/.claude/memory/MEMORY.md — JSON-2 API notesLien quan
state, dung active thay the)
📚 Published from Company Knowledge Base — T16
Last updated: 2026-03-14
Review by: 2026-06-12