メモメモ(確かめていない)
SugarCRMにおいて、モジュール同士の関係っていうのは、テーブル同様、1対多と多対多がある。
どちらのケースでも、まず、vardef.phpに項目は書かれる。
こんなかんじ
'modified_user_link' => array ( 'name' => 'modified_user_link', 'type' => 'link', 'relationship' => 'cases_modified_user', 'vname' => 'LBL_MODIFIED_BY_USER', 'link_type' => 'one', 'module'=>'Users', 'bean_name'=>'User', 'source'=>'non-db', ), |
(上記 >は、本当は半角)
しかし、このあと、1対多と多対多で違う。
■1対多の場合
そのvardefの中(下のほう)に'relationships'の指定があり、そので、上記の'relationship'で指定された関係が記述されている。上記の場合は、'cases_modified_user'ということになるが、それは、vardefの下のほうの'relationships'の中に以下のように指定されている。
,'cases_modified_user' => array('lhs_module'=> 'Users', 'lhs_table'=> 'users', 'lhs_key' => 'id', 'rhs_module'=> 'Cases', 'rhs_table'=> 'cases', 'rhs_key' => 'modified_user_id', 'relationship_type'=>'one-to-many') |
(上記 >は、本当は半角)
ちなみに、vardefは、項目の内容、indicesで示されるインデックス、'relationships'で示される1対多の関係が記述されている。
■多対多の場合
一方、多対多の場合は、metadataに作られる。たとえば、cases_bugsにおいて、vardef.phpでは、
'bugs' => array ( 'name' => 'bugs', 'type' => 'link', 'relationship' => 'cases_bugs', 'source'=>'non-db', 'vname'=>'LBL_BUGS', ), |
(上記 >は、本当は半角)
と記述されている。このcases_bugsは、下にあるのではなく、Sugarのホームのしたのmetadata(=modulesと同じレベル)のところに、cases_bugsMetaData.phpというファイルを作成し、そこにテーブル名とテーブル内容、インデックス、'relationships'を記述する。
これを作成した場合、関係のテーブルを作り直すため、管理者機能でリペアを行うか、インストーラーから行う場合、実践!オープンソースCRMアプリケーション入門の131ページ下側のmanifestファイルの例にあるようなrelationshipsを記述して、インストールする。