検索フォームをカスタマイズする
出典: SugarForum.jp
リストビューで上部に表示される検索フォームのレイアウトは、$searchdefs で指定できます。また、データベースに対して、どのような検索クエリを発行するかは $searchFields で指定します。
目次 |
定義の場所
SugarRoot/modules/@モジュール名/metadata/searchdefs.php SugarRoot/modules/@モジュール名/metadata/SearchFields.php
searchdefsの書式
$searchdefs['<モジュール名>'] = array(
'templateMeta' => array('maxColumns' => '3',
'widths' => array('label' => '10', 'field' => '30')),
'layout' => array(
'basic_search' => array(
array('name'=>'<フィールド名>', 'label'=>'<ラベル名>'),
//続く
),
'advanced_search' => array(
array('name'=>'<フィールド名>', 'label'=>'<ラベル名>'),
//続く
),
),
);
フィールド指定のオプション
- name : フィールド名
- label : ラベル名
- type : フィールドタイプ
- 'name' : テキストボックス
- 'bool' : チェックボックス
- displayParams : 表示方法の指定
カスタマイズの例
リストボックスを小さくする(5.1~)
列挙フィールド(enum)は、デフォルトでは複数選択可能なリストボックス(MultiEnum)として表示されます。これの欠点は、大きく場所をとってしまうことです。複数選択の必要がないならば、displayParamsを指定して、通常のセレクトボックスに変更すると画面がすっきりして使いやすくなります。(なお、この方法はSugarのバージョン5.1から可能になりました)
例として、Contactsモジュールの「リードソース」をセレクトボックスに変更するには、
SugarRoot/modules/Contacts/metadata/searchdefs.php
にて、
'lead_source',
と書かれた行を、
array('name' => 'lead_source', 'label' =>'LBL_LEAD_SOURCE', 'displayParams' => array('size'=>1)),
と書き換えます。ここで重要なのは、displayParamsの「'size'=>1」の箇所です。(デフォルトでは「6」ですが、多数の選択肢を一度に表示したい場合は、逆に大きな数字を指定することも可能です)
上図 : リードソースとアサイン先が大きく場所をとっている(デフォルトの表示)
下図 : 上記の修正をすると、かなりコンパクトに
重複のあるレコードだけ表示する
個別のレコードについて、重複があるかどうかは詳細ビューで「重複を検出」ボタンを使えばOKですが、全リストから重複のあるレコードを抜き出すことはデフォルトではできません。ここでは、取引先(Accounts)モジュールを例にカスタマイズしてみます。
SugarRoot/modules/Accounts/SearchFields.php に以下を追加。サブクエリの最後の「and '1%' =」は一種のトリックです。実行時には「and '1%' = '1%'」となり常に真(true)となるため無視できます。
'duplication_only'=>array(
'query_type'=>'default',
'operator'=>'subquery',
'db_field'=>array('id'),
'subquery'=>"SELECT t1.id FROM accounts t1 JOIN accounts t2 ON t1.name = t2.name
group by t1.id having count(*) > 1 and '1%' =",
),
SugarRoot/modules/Accounts/searchdefs.php の途中(「array('name'=>'current_user_only',...」の行の後)に以下の行を追加。
array('name'=>'duplication_only', 'label'=>'LBL_DUPLICATION_FILTER', 'type'=>'bool'),
SugarRoot/modules/Accounts/language/ja.lang.php に以下を追加。
'LBL_DUPLICATION_FILTER' => '重複項目のみ:',
上記の編集後、Sugarに管理者アカウントでログイン、「管理メニュー」→「リペア(再構築)」→「クイックリペア&再構築」にて、「Accounts」を選択し実行。
注意事項
- 説明がややこしくなるのでモジュールディレクトリ内を編集していますが、アップグレードセーフにするためにはcustomディレクトリ内に変更を書くべきです。
- サブクエリを使っているので、レコード件数が多いと非常に遅くなる場合があります。

