Portal_View画面項目表

変更すること:
View typeが今はひとつしか登録できないようになっているのでそれぞれ複数でもできるように、する必要がある。

複数のViewに対してXMLコードが紐づくようにする。カードにして選択できるようして、タブでxmlをすれば、XMLが表示できるように。

1) portal_view:共通(全Viewタイプ共通)

画面側(共通項目)画面UIDB列(portal_view)備考
Viewタイプ(左メニューで選択)例:Form View / List View…view_typetext'form','list','kanban','calendar','search','graph','pivot','dashboard','tree','map' のいずれか(CHECK制約)
ビュー名テキスト入力view_nametext例:partner.form / partner.tree
モデルテキスト入力modeltext例:res.partner
(現画面では未表示)(現画面では未表示)idbigserial PRIMARY KEY自動採番
(現画面では未表示)(現画面では未表示)enabledboolean既定 true。Portal側でスイッチを置くならここ
Primary(現画面では未表示)is_primaryboolean既定 falsetg_enforce_single_primary_per_common() により 同じcommon_id内で単一化
common連携(内部)common_idbigintportal_view_common.id FK(画面に出さない想定)
監査(内部)created_at,updated_attimestamptz更新は trg_touch_portal_view

2) Form View(フォームビュー)

画像の項目:ビュー名 / モデル / ヘッダーを表示 / フッターを表示 / 優先度

画面側(Form)画面UIDB列(portal_view)
ビュー名テキスト入力view_name
モデルテキスト入力model
ヘッダーを表示トグルform_show_header
フッターを表示トグルform_show_footer
優先度セレクトpriority_num

3) List View(リスト/ツリービュー)

画像の項目:ビュー名 / モデル / インライン編集 / エクスポートボタン / ページあたりの行数

画面側(List)画面UIDB列(portal_view)備考
ビュー名テキスト入力view_name例:partner.tree
モデルテキスト入力model
インライン編集トグルlist_inline_edit
エクスポートボタントグルlist_export_button
ページあたりの行数数値入力list_page_size例:80

※この画面には「優先度」が出ていませんでした → Portal側で統一して出すなら priority_num を共通ブロックに置くのが一番ラクです。


4) Kanban View(かんばんビュー)

画像の項目:ビュー名 / モデル / デフォルトグループ化 / クイック作成 / ドラッグ可能フィールド

画面側(Kanban)画面UIDB列(portal_view)
ビュー名テキスト入力view_name
モデルテキスト入力model
デフォルトグループ化テキスト入力kanban_default_group_by
クイック作成トグルkanban_quick_create
ドラッグ可能フィールドテキスト入力kanban_draggable_field

5) Calendar View(カレンダービュー)

画像の項目:ビュー名 / モデル / 開始日フィールド / 終了日フィールド / 色分けフィールド / デフォルト表示

画面側(Calendar)画面UIDB列(portal_view)備考
ビュー名テキスト入力view_name
モデルテキスト入力model
開始日フィールドテキスト入力calendar_start_field例:start_date
終了日フィールドテキスト入力calendar_end_field例:end_date
色分けフィールドテキスト入力calendar_color_field例:user_id
デフォルト表示セレクトcalendar_default_viewmonth/week/day(CHECK制約)

6) Search View(検索ビュー)

画像の項目:ビュー名 / モデル / 優先度
(※ search_fields / filters / group_by_filters はこの画面には出ていない)

画面側(Search)画面UIDB列(portal_view)備考
ビュー名テキスト入力view_name
モデルテキスト入力model
優先度セレクトpriority_num
検索フィールド定義(別UI想定)search_fieldsjsonb/複雑なので今は使わない
フィルタ定義(別UI想定)search_filtersjsonb/複雑なので今は使わない
group by定義(別UI想定)search_group_by_filtersjsonb/複雑なので今は使わない

7) Graph / Pivot / Dashboard / Tree / Map

指定が複雑であるためXMLで書くが前提、存在確認ための用途

入力項目はSearch Viewと同様とする

下記のフィールドは形だけなので、画面と紐づかなくてOK。共通項目の

priority_num integer, enabled boolean NOT NULL DEFAULT true, is_primary boolean NOT NULL DEFAULT falseを表示でOK。

Graph

  • graph_type / graph_measure_fields / graph_row_group_by / graph_col_group_by / graph_stacked

Pivot

  • pivot_measures / pivot_rows / pivot_cols / pivot_show_totals

Dashboard

  • dashboard_layout / dashboard_widgets / dashboard_refresh_secs

Tree

  • tree_parent_field / tree_expand_all

Map

  • map_lat_field / map_lng_field / map_address_field / map_color_field / map_cluster / map_default_zoom

portal_view_common:画面項目マッピング(共通設定)

0) キー/基本情報(※この共通設定画面には通常“表示しない”想定)

区分画面側DB列(portal_view_common)備考
Actionキー(内部/一覧で表示しても良い)action_xmlidtext業務キー(UNIQUE)。view_common の主キー的扱い

srcから取り込み。モデルがカスタマイズの場合、つまり新規の場合は下記の方式で自動生成:action_xmlid は何のため?
Actionメタ(内部)action_id, action_namebigint/text取り込み元(ir_view_src)由来
Model(内部/フィルタ用に表示しても良い)modeltextNOT NULL(= ir_view_src.model_tech)
Model補助(内部)model_tech,model_table,model_labeltext正規化/検索用
Viewタイプ群(内部)view_typestext[]portal_view 子から派生させる運用が自然
Primary Viewタイプ(内部)primary_view_typetextprimary_view_type = ANY(view_types) 制約あり

1. 表示制御(画像:表示フィールド/フィルタ条件/Sort by/Default group by)

1-1) 表示フィールドの選択(基本フィールド/関連モデルフィールド)

画面項目画面UIDB列備考(あなたの仕様に合わせる)
表示フィールドの選択(チェック/並び替え)チェック + ドラッグで順序display_fieldsjsonb選択した「モデル + フィールド」が入る。順序も保持する(配列順)
関連モデルフィールド(他モデルを追加)「+ 他モデルを追加」→モデル→フィールドdisplay_fieldsjsonb関連モデルも同じ display_fields に格納

display_fields の推奨フォーマット例(実装案)

[
  {"model":"res.partner","field":"name"},
  {"model":"res.partner","field":"email"},
  {"model":"res.country","field":"name","via":"country_id"} 
]
  • via は「res.partner.country_id → res.country.name」みたいな 関連経路を残したい場合の補助(必須ではない)

1-2) フィルタ条件(ドメイン形式)

画面項目画面UIDB列備考
フィルタ条件(条件式)テキスト入力(ドメイン形式)default_filtersjsonbDBは jsonb なので 内部はJSON配列で保持するのが安全

domain 推奨フォーマット例

[["active","=",true],["country_id","=","Japan"]]

※UIがPython風の文字列を受ける場合は、保存時にJSONへ正規化(もしくはエラーにする)がおすすめ。

1-3) Sort by(デフォルトソート)

画面項目画面UIDB列備考
ソートフィールドドロップダウンsort_fieldtextフィールド技術名(例:name
ソート順ドロップダウンsort_dirtext'asc'/'desc'(CHECK制約)

1-4) Default group by(デフォルトグループ化)

画面項目画面UIDB列備考
グループ化フィールドドロップダウンdefault_group_bytextフィールド技術名(例:stage_id

まず整理:action_xmlid は何のため?

あなたの portal_view_commonaction-centric で、action_xmlidUNIQUE business key
ここが揺れると、

  • portal_view_common が別物扱いになって履歴/翻訳/Chroma doc が増殖
  • portal_view(子)との紐付けが壊れる
  • フロントのURLや参照も揺れる

なので Portalで一度発行した action_xmlid は不変にするのが正解です。


推奨運用(手動置き換え不要)

A) Portalが action_xmlid を発行する(Odooとは独立)

例(命名ルール案):

  • portal.<model>.<slug>
    • portal.res_partner.customer_list
  • あるいは衝突しないようにUUIDを混ぜる:
    • portal.<model>.<slug>.<shortid>(shortid=8桁)

slug はUIで入力できる(なければ自動生成)にしておくと運用しやすいです。

B) Odoo側の “本物の xmlid / action_id” は「対応付け」として持つ

あなたのDDLにはすでに受け皿がある:

  • action_id
  • action_name
  • view_mode / context / domain
  • (必要なら拡張)odoo_action_xmlid を追加

つまり、

  • portal_view_common.action_xmlid = Portalが発行した固定ID(不変)
  • portal_view_common.action_id や(追加するなら)odoo_action_xmlid = Odoo実体(変わり得る)

これなら「Odooで実装されたら置き換え」ではなく “リンクを張り替えるだけ” で済みます。


2. 操作権限制御(画像:Can create/edit/delete など)

このブロックは 現行の portal_view_common DDLに対応カラムがありません(=マッピング先が無い)。

画面項目画面UI現行DBでの置き場所コメント
Can create / Can edit / Can deleteトグル(未対応)共通設定なので portal_view_common に boolean を足すのが素直
Enable mass editingトグル(未対応)同上
Show invisible elementsトグル(未対応)同上

推奨(次のDDL拡張案)

  • portal_view_common に以下を追加(共通設定なのでここが自然)
    • can_create boolean, can_edit boolean, can_delete boolean
    • enable_mass_editing boolean, show_invisible_elements boolean

※「DDLは今は変えない」なら暫定として context(jsonb)に {"can_create":true,...} を埋め込む手もありますが、後で確実に負債になります(検索/比較/表示の全部がつらい)。


3. レコード作成時の動作(画像:When creating record)

画面項目画面UIDB列備考
作成時の動作ドロップダウンcreation_modetext'open_new_page','inline_create','modal_create','quick_create'(CHECK制約)
デフォルト値テキスト入力(JSON形式)default_valuestext現DDLは text。将来 jsonb にしたいなら移行余地あり
Allow duplicateトグルallow_duplicateboolean
Enable archiveトグルenable_archiveboolean

4. AI学習用途(画像:Domain Guide テキスト)

画面項目画面UIDB列備考
ドメインガイド(Domain Guide)テキストエリアai_purposetextここにそのまま保存でOK(YAML/プレーンテキスト)
(多言語化する場合)(未表示)ai_purpose_i18njsonb例:{"ja_JP":"...","en_US":"..."}

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です