Bỏ qua để đến Nội dung
Soul of NOTE
  • Khóa học
  • Check-in
    • NOTE
    • Headspace Vietnam
    • Fosllea
  • Diễn đàn
  • Company
    • Blog
    • Success Stories
  • 0
  • 0
  • Đăng nhập
Soul of NOTE
  • 0
  • 0
    • Khóa học
    • Check-in
      • NOTE
      • Headspace Vietnam
      • Fosllea
    • Diễn đàn
    • Company
      • Blog
      • Success Stories
  • Đăng nhập

[T16] T16 — Odoo 19 E-Learning API Gotchas

  • Tất cả blog
  • Knowledge Base
  • [T16] T16 — Odoo 19 E-Learning API Gotchas
  • 15 tháng 3, 2026 bởi
    [T16] T16 — Odoo 19 E-Learning API Gotchas
    Viet Nguyen
    📌 MEDIUM  |  Category: Odoo Tips  |  ID: T16  |  Owner: CEO

    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

  • Ai bi anh huong: Scripts e-learning (odoo_setup.py, content_publisher.py, sync_portal_users.py), bat ky script nao enroll users hoac quan ly channels
  • Muc do: medium — khong mat data nhung gay loi runtime khi code sai pattern
  • Tan suat gap: Moi khi viet script moi tuong tac voi slide.channel, slide.channel.partner, hoac hr.version
  • 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

  • Session 9 (2026-03-13): Enroll 24 NV vao Onboarding channel ID=14, dung vals_list batch
  • Session 9: Archive Phuong Linh — hr.version 176 date_end khong ghi duoc → can lam thu cong
  • staff_development/scripts/odoo_client.py — enroll_partner() dung action_add_member
  • staff_development/scripts/odoo_setup.py — enrollment workflow hoan chinh
  • staff_development/.claude/memory/MEMORY.md — JSON-2 API notes
  • Lien quan

  • [T11](T11-hr-model-field-gotchas.md) — hr.version field gotchas (khong co state, dung active thay the)
  • [T08](T08-odoo19-multicompany-fields.md) — JSON-2 fail pattern tuong tu, XML-RPC fallback
  • [T01](T01-search-read-limit.md) — API gotcha khac: limit=100 mac dinh

  • 📚 Published from Company Knowledge Base — T16
    Last updated: 2026-03-14
    Review by: 2026-06-12

    trong Knowledge Base
    # Odoo Tips
    [T15] T15 — KB Engine Architecture Gotchas



    Bản quyền thuộc CÔNG TY TNHH NOTE
    Cung cấp bởi Odoo - Một nền tảng thương mại điện tử mã nguồn mở hàng đầu