Dynamics CRM 4.0 では エンティティのフォームに配置した、LOOKUPフィールドの右側の画像ボタンをクリックすることでレコードの簡易検索ダイアログを表示し、LOOKUPエンティティデータを検索できるようになります。

検索ダイアログボックスが表示されると、検索条件なしのつまり全件検索を行った結果が表示されます。この振る舞いを変更し、検索ダイアログボックス表示時に全件ではなく、検索条件をつけて検索ダイアログボックスを表示する方法を掲載します。

本サンプルの動作確認は Dynamics CRM 4.0 Roolup 8 の環境で実施しています。

初期検索条件を指定するには、 lookup フィールドの additionalparams に検索条件を設定すればOKなのです。検索条件にadditionalparamsを設定するなどの情報は以下のサイトを参考にさせてもらいました。

Pseudo-Filtered Lookup Dialog in Microsoft Dynamics CRM 4.0
http://advantageworks.blogspot.com/2008/02/pseudo-filtered-lookup-dialog-in.html

今回は単純にadditonalparams に検索条件を設定するのではなく、検索条件がユーザにより指定されていない場合に検索条件を設定するようにスクリプトを作成しています。つまり、lookupフィールドが編集状態で検索ボタンが押された場合などはadditionalparams に検索条件を設定されないようにしています。その場合はDynamicsにより検索条件が設定されて検索ダイアログボックスが表示されるためです。

1. サンプルスクリプト

今回は取引先企業のフォームの取引先企業の親会社 LOOKUP フィールドがセットされたときに検索条件を設定して検索ダイアログボックスを表示させてみます。

まず、取引先企業のエンティティフォームのカスタマイズ画面を表示します。フォームのプロパティで、OnLoad イベントを次のように編集します。

// デバッガを起動したい場合は以下のコメントを解除
// debugger;

crmForm.all.parentaccountid.attachEvent('onfocus', function(){
     crmForm.all.parentaccountid.additionalparams = null;  
});
crmForm.all.parentaccountid.attachEvent('onclick', function(){
  // 有効な企業名を検索条件とする
  var filter = IsNull(crmForm.all.parentaccountid.DataValue) ? '' : crmForm.all.parentaccountid.DataValue[0].name;
  var link = crmForm.all.parentaccountid_d.getElementsByTagName("DIV")[0].innerText
  //var ledit = crmForm.all.parentaccountid_ledit.value;
   //if(ledit.length > 0) filter = ledit;
  // 検索条件がない場合のカスタム検索条件
  if(filter == '' && link == ''){
     filter = 'カスタム検索条件'
  }
  if ( filter.length > 0 ) { 
     crmForm.all.parentaccountid.additionalparams = 'search=' + encodeURIComponent(filter);
   }else{
     crmForm.all.parentaccountid.additionalparams = null;
   }
}
);

サンプルでは、LOOKUPフィールドに値が未設定の場合は "カスタム検索条件" という文字列を設定するようにしています。また、正しいLOOKUP先が設定されている場合はその種属性を検索条件にセットするようにしています。

カスタマイズを公開した後、動作確認を行います。

2. 動作確認

いくつかのパターンに分けて、動作確認をして見ます。

取引先企業の親会社が設定済みのフィールドのLOOKUP検索ダイアログボックス表示ボタンをクリックします。

検索条件にLOOKUPに設定された取引先企業の主属性が設定されて検索ダイアログが表示されます。

 

取引先企業の親会社が未設定の場合に検索ダイアログを表示します。

スクリプトで設定されるカスタム検索条件が設定されて検索ダイアログが表示されます。

LOOKUPフィールド入力中にEnterをクリックして検索ダイアログボックスを表示します。

編集中の文字列が設定されて検索ダイアログボックスが表示されます。

LOOKUPフィールドに入力した取引先企業の主属性が間違っている状態で検索ダイアログを表示します。

間違った主属性名が検索条件に設定された状態で検索ダイアログが表示されます。

3. まとめ

今回の説明は以上です。 間違い指摘点などありましたらご連絡ください。

フィルタ条件付きで検索ダイアログボックスを初期表示したい場合 additionalparams を使用することで実現することができます。特定の組み合わせにあわせて検索条件を変更したい場合やあらかじめ件数を絞りたい場合に便利です。

余談ですが、検索ダイアログボックスの検索条件入力のテキストボックスに アスタリスク * を含めることで前方一致や後方一致検索を行えます。