SugarCRM

第6回 Beanを関連付ける


河村 嘉之
オープンソースCRM株式会社
2009/3/5


関連の定義(続き)

関連メタデータを作成する方法

 多対多の関連のように関連テーブルを必要とするような関連は、個々のモジュールの定義情報に定義するのではなく、metadataディレクトリ以下にその関連用の定義ファイルを作成して定義します。このファイルの名前は、<関連名>MetaData.phpになります。例えば、取引先と取引先担当者の関連(accounts_contacts)の定義ファイルは、metadata/accounts_contactsMetaData.phpになります。

 このファイルに記述される情報は各モジュールのvardefs.phpで記述される情報と似た内容になります。$dictionary変数の配列にこの関連名をキーに定義情報を登録し、そこに以下のような項目を定義します。

項目名 説明
table
格納先のデータベーステーブル名
fields
関連テーブルのフィールドの定義。通常、主キー、それぞれのモジュールのキー、変更日、削除フラグを持つ
indices
データベースに作成するインデックス
relationships
2つのテーブル間の関連の定義
表2 関連メタデータで定義できる項目

 また、relationships項目には、以下のような項目が設定できます。

項目名 説明
lhs_module
左側のモジュール名
lhs_table
左側のテーブル名
lhs_key
左側のテーブルでキーとして用いられる項目
rhs_module
右側のモジュール名
rhs_table
右側のテーブル名
rhs_key
右側のテーブルでキーとして用いられる項目
type
関連のタイプ。one-to-many(1対多)、many-to-many(多対多)などを指定
join_table
関連テーブルのテーブル名
join_key_lhs
関連テーブルで左側のテーブルのキーを保持するフィールド
join_key_rhs
関連テーブルで右側のテーブルのキーを保持するフィールド
表3 関連メタデータのrelationshipsで定義できる項目

 以下のコードは、取引先と取引先担当者の関連(accounts_contacts)の定義です。この関連の関連テーブルはaccounts_contactsで、このテーブルはテーブルの各行のID、両側のモジュールのID、最終更新日、削除フラグを持っています。また関連の定義として、左側のモジュールが取引先(Accounts)、右側のモジュールが取引先担当者(Contacts)で、それぞれのIDをaccounts_contactsテーブルのaccount_idとcontact_idで保持していることを示しています。

<?php
...
$dictionary['accounts_contacts'] = array (
  'table' => 'accounts_contacts',
  'fields' => array (
    array('name' =>'id', 'type' =>'varchar', 'len'=>'36'),
    array('name' =>'contact_id', 'type' =>'varchar', 'len'=>'36'),
    array('name' =>'account_id', 'type' =>'varchar', 'len'=>'36'),
    array('name' => 'date_modified','type' => 'datetime'),
    array('name' =>'deleted', 'type' =>'bool', 'len'=>'1',
          'required'=>true, 'default'=>'0')
  ),
  'indices' => array (
    ...
  ),
  'relationships' => array (
    'accounts_contacts' => array(
      'lhs_module'=> 'Accounts',
      'lhs_table'=> 'accounts',
      'lhs_key' => 'id',
      'rhs_module'=> 'Contacts',
      'rhs_table'=> 'contacts',
      'rhs_key' => 'id',
      'relationship_type'=>'many-to-many',
      'join_table'=> 'accounts_contacts',
      'join_key_lhs'=>'account_id',
      'join_key_rhs'=>'contact_id'
    )
  )
)
?>

 これらの関連メタデータは、modules/TableDictionary.phpを通して読み込まれます(このファイルの中で、それぞれのメタデータがincludeされています)。しかし、新しい関連を追加したときにこのファイルを編集して読み込ませると、パッチやアップグレードによって上書きされてしまう可能性があります。

 それを避けるためにSugarCRMでは、アップグレードセーフの仕組みとして、追加の関連情報はcustom/application/Ext/TableDictionary/TableDictionary.ext.phpを通して読み込むようになっています。新しく関連を追加する場合はこのファイルに記述します。

関連記事:
参考 第4回 ソースコードまで踏み込んでビューをカスタマイズ
http://www.atmarkit.co.jp/flinux/rensai/sugarcrm04/sugarcrm04a.html

 関連メタデータで定義された関連をモジュールで利用するには、vardefs.phpのfields項目に、以下のような定義を記述します。この定義は、vardefs.php内部で記述した関連を利用する場合と変わりありません。

 以下のコードは、取引先担当者(Contacts)モジュールが取引先(Accounts)モジュールへの関連(accounts_contacts)をaccountsフィールドに保持する際の定義です。

'accounts' => array (
  'name' => 'accounts',
  'type' => 'link',
  'relationship' => 'accounts_contacts',
  'link_type' => 'one',
  'source' => 'non-db',
  'vname' => 'LBL_ACCOUNT',
  'duplicate_merge'=> 'disabled',
),

2/3

Index
徹底解剖、SugarCRM(6)
 Beanを関連付ける
  Page 1
 関連の定義
 コラム スタジオやモジュールビルダーにおける関連の扱い
  Page 2
 関連の定義(続き)
  Page 3
 関連の表示
 今回のまとめ

Linux Square全記事インデックス


 Linux Squareフォーラム 仮想化技術関連記事
連載:実践! Xenで実現するサーバ統合
有力な仮想化技術として注目を集めるようになった「Xen」。このXenを活用してサーバ統合を実践していく手順を具体的に紹介します
特集:サーバの仮想化技術とビジネス展開の可能性
jailからUML/VMwareまで
1台のマシンで複数のサーバを動かす「仮想化技術」。VMwareやUMLの登場により、WebサイトだけでなくOS自体を仮想化できるようになった
特集:仮想化技術のアプローチと実装
VMwareから要注目技術Xenまで

1台のサーバで複数の仮想マシンを実行する仮想化技術は、空間コストを引き下げる可能性を持つ。最新の仮想化技術を概観してみよう
特集:仮想OS「User Mode Linux」活用法
技術解説からカーネルカスタマイズまで
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
特集:仮想化技術の大本命「Xen」を使ってみよう
インストール & Debian環境構築編

高いパフォーマンスで本命の1つとなった仮想マシンモニタ「Xen」。日本語による情報が少ないXenを、実際に動かしてみよう
特集:仮想化技術の大本命「Xen」を使ってみよう
Xen対応カスタムカーネル構築編

Xen環境およびその上で動作する仮想マシン用カーネルを自分で構築しよう。これにより、自由にカスタマイズしたカーネルを利用できる
特集:IPv6、UML、セキュリティ機能の統合
全貌を現したLinuxカーネル2.6[第4章]

今回は、これまでに紹介し切れなかった機能を一気に紹介する。これを読めば、カーネル2.6の正式リリースが楽しみになるだろう
Linux Squareプロダクトレビュー VMware Workstation 4
PC/AT互換機エミュレータとして不動の地位を築いたVMware。その新バージョンがリリースされた。新機能を早速試してみよう
古くて新しい「サーバ仮想化技術」の行方
サーバ仮想化を実現するための技術がソフトウェア、ハードウェアの両面で出そろってきた。ハイパーバイザーのさらなる高速化に向けた動きを紹介する
Linux Squareフォーラム全記事インデックス


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間