某社に顧客管理システムとして SugarCRM を納入した時、自動採番(オートインクリメント) 機能が欲しいと言われていたので、その追加をした時のコードと、郵便番号から住所変換した時のコードと、住所からGoogleマップを呼び出す用に改良した時のコードをまとめて。
前提環境は SugarCRM 5.5 ja-Dev 版ですが、5.2 とか他のバージョンでも使えるかもしれません。あと、以前に書いたコードを思い出しながら書いてるので、うまく動かない可能性もあります。その場合はご連絡いただけると助かります。
自動採番と完全一致検索は、対象モジュールの vardefs.php と metadata/SearchFields.php を編集します。よってアップグレードセーフではありません。(custom でやろうとしても、うまくこちらの環境では動きませんでした)
modules/(モジュール名)/vardefs.php
'fields' => array (
の中に、以下のようなコードを追加します。( 海外フォーラム からそのまま転載)
'timeno' =>
array (
'required' =>false,
'name' => 'timeno',
'vname' => 'LBL_TIMENO',
'type' => 'int',
'massupdate' => 0,
'comments' => '',
'help' => '',
'duplicate_merge' => 'disabled',
'duplicate_merge_dom_value' => 0,
'audited' => 0,
'reportable' => 0,
'len' => '11',
'auto_increment'=>true,
),
あとはスタジオから、自由に配置等が可能です。ただし自動採番される関係上、編集画面には設定しない方がいいでしょう。
完全一致検索を追加する場合は、以下も追加で編集します。
modules/(モジュール名)/metadata/SearchFields.php
array (
内に、以下のコードを追加します。
'timeno'=> array('query_type'=>'default', 'operator' => '='),
といっても、取引先情報のデータを元に別ウインドウでGoogleマップを開くリンクを追加しているだけです。アップグレードセーフにできますが、例では(そちらの方が分かりやすいので) 直接 Accounts のデータを書き換えています。
modules/Accounts/metadata/detailviewdefs.php
'panels' => array(
'default'=> array(
内に、以下のコードを追加します。
array (
'name' => 'billing_address_city',
'comment' => 'The city used for billing address',
'label' => 'LBL_BILLING_ADDRESS_CITY',
'customCode' => '{$fields.billing_address_city.value} Google Mapsで検索',
),
今回の例では、元々 Accounts に存在する以下のフィールドを利用したコードになっています。
この3つのフィールド値をGoogleマップに渡しています。
そして、billing_address_city を スタジオから詳細画面に登録してやることで、住所データの横に Google Mapsで検索 というリンクが表示されるようになります。
sugarforum.jp の記事 そのままなのですが、作業メモという事で記録しておきます。
上記のGoogleマップ連動と同じフィールドを利用する場合のコードとなっています。
modules/Accounts/metadata/editviewdefs.php
$viewdefs['Accounts']['EditView'] = array(
'templateMeta' => array(
'form' => array('buttons'=>array('SAVE', 'CANCEL')),
'maxColumns' => '2',
'widths' => array(
array('label' => '10', 'field' => '30'),
array('label' => '10', 'field' => '30'),
),
'includes'=> array(
array('file'=>'modules/Accounts/Account.js'),
),
),
というコードを、以下のように編集します。
$viewdefs['Accounts']['EditView'] = array(
'templateMeta' => array(
'form' => array('buttons'=>array('SAVE', 'CANCEL')),
'maxColumns' => '2',
'widths' => array(
array('label' => '10', 'field' => '30'),
array('label' => '10', 'field' => '30'),
),
'includes'=> array(
0 => array('file'=>'modules/Accounts/Account.js',),
1 => array ('file' => 'http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.js',),
),
),
次に、
'panels' => array(
'lbl_account_information'=>array(
array(
内に、以下のコードを追加します。
array (
'name' => 'billing_address_postalcode',
'label' => 'LBL_BILLING_ADDRESS_POSTALCODE',
'customCode'=>'
'
),
あとはスタジオ機能で、編集画面に billing_address_postalcode、billing_address_state、billing_address_city を表示させてやれば、郵便番号を入力するだけで、県名とある程度までの住所データが自動入力されるようになります。
以上、SugarCRM の技術メモでしたー。