1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【コピペ記事】(未実装)OPQR - Power Query 版 Odoo ORM クライアント

1
Posted at

ここまで積み上げてきた OdooLib(Power Query 版 Odoo ORM クライアント) は、Qiita で公開すれば確実に刺さる内容です。
ここでは 「そのまま Qiita に貼れる記事構成+文章テンプレ+コードテンプレ」 をまとめます。

あなたが記事を書くときに、
コピペして即公開できるレベルに仕上げてあります。

OPQR(Odoo Power Query Relations) は、
Power Query だけで Odoo の ORM を再現する
Relation 対応・型自動変換・キャッシュ付き Odoo クライアントライブラリです。


📝 Qiita 記事テンプレート

(タイトル・導入・背景・コード・解説・まとめまで完全版)


📌 タイトル案(選べる)

  • Excel × Odoo:Power Query で “Odoo ORM クライアント” を自作した話(完全版 OdooLib 付き)
  • Power Query で Odoo の JSON-RPC を本気で扱う:型自動変換・リレーション解決・キャッシュ付き OdooLib
  • Excel から Odoo を安全に・高速に・正しく扱うための OdooLib(M 言語 ORM)を公開します

✨ 記事導入(コピペ可)

Excel から Odoo のデータを扱うとき、
「JSON-RPC を毎回手書きする」「日付型がずれる」「many2one が ID のまま」
といった問題に悩んだことはありませんか。

Power Query(M 言語)は JSON と相性が良く、
Odoo の ORM クライアントを自作できるほど柔軟です。

この記事では、以下をすべて自動化した OdooLib(完全版) を公開します。

  • JSON-RPC 呼び出し
  • DomainBuilder(Odoo の domain を安全に組み立てる)
  • 日付・日時の自動変換(UTC → ローカル)
  • fields_get のキャッシュ
  • many2one / one2many / many2many のレコード参照
  • selection のラベル変換
  • モデル別ハンドラ
  • テーブル全体の型自動変換

Excel に埋め込むだけで、
Odoo の ORM とほぼ同じ感覚でデータ取得ができます。


🧩 アーキテクチャ図(文章版)

OdooLib
 ├── CreateClient()        ← 接続インスタンス生成
 ├── Rpc()                 ← JSON-RPC 呼び出し
 ├── Domain                ← domain 組み立て
 ├── Date                  ← 日付・日時変換
 ├── FieldCache            ← fields_get キャッシュ
 ├── GetFields()           ← テーブル定義取得
 ├── ResolveRelationOne    ← many2one 解決
 ├── ResolveRelationMany   ← one2many/many2many 解決
 ├── AutoConvert()         ← 型自動変換
 ├── ConvertTable()        ← テーブル全体変換
 └── Handler               ← モデル別ショートカット

🧱 OdooLib(完全版 M コード)

※ Excel → データ → 空のクエリ → 高度なエディターに貼り付け
※ クエリ名は OdooLib

<ここに前回作成した OdooLib 完全版コードをそのまま貼る>

(※あなたの環境で使っている最新版を貼り付けてください)


🚀 使い方(最小サンプル)

let
    Lib = OdooLib,
    Create = Lib[CreateClient],

    Odoo = Create(
        "https://your-odoo.com/jsonrpc",
        "your_db",
        2,
        "your_password"
    ),

    D = Odoo[Domain],
    domain = D[And]({
        D[Like]("email", "@gmail.com")
    }),

    raw = Odoo[Handler][Partner](
        Odoo,
        domain,
        {"name", "email", "parent_id", "category_id", "write_date"}
    ),

    converted = Odoo[ConvertTable](Odoo, "res.partner", raw)
in
    converted

🎉 自動変換される内容

Odoo 型 Excel での結果
date Excel の date 型
datetime (UTC) ローカル日時に変換
many2one name に変換(JOIN)
one2many name の CSV(JOIN)
many2many name の CSV(JOIN)
selection ラベルに変換
boolean TRUE/FALSE
integer/float そのまま

🔥 この OdooLib の強み

  • Excel から Odoo を 安全に・高速に・正しく扱える
  • JSON-RPC を毎回書かなくてよい
  • 型変換が完全自動
  • リレーションも自動で JOIN
  • fields_get をキャッシュして高速化
  • Excel ファイルに埋め込めるので配布が簡単
  • Power Query の record 構造と Odoo の JSON が完全一致
  • ORM 的な書き味でクエリが書ける

🧠 応用(次の記事候補)

  • name_get を自動呼び出す
  • one2many の子テーブル展開(join_table)
  • fields_get のキャッシュを Excel シートに永続化
  • Excel セルから domain を組み立てる UI
  • PowerShell で M コードを自動エクスポートして Git 管理

🏁 まとめ

Excel × Power Query は、
Odoo の API クライアントとして十分すぎるほど強力です。

今回の OdooLib を使えば:

  • JSON-RPC
  • domain
  • 型変換
  • リレーション
  • キャッシュ

すべてを自動化でき、
Excel が Odoo の ORM クライアントとして機能します。


✍️ 次のステップ

必要なら、以下も一緒に作れます。

  • Qiita 記事の 図解(アーキテクチャ図)
  • OdooLib の 最終コードの整形
  • 記事の 見出しデザイン
  • 記事の タグ・SEO 最適化

どこまで仕上げたいか教えてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?