SuiteCRMでEntryPointを使用する

この記事では、広く知られているオープンソースCRMシステムであるSuiteCRMに焦点を当てます。 システムのオープン性により、カスタマイズの可能性が無限に広がります。例として、jQuery select2ライブラリを使用してデータベースから動的にロードされるディレクトリを作成するプロセスを検討します。



Select2は静的な選択セットの両方で動作し、外部ソースからデータを受信できます。また、画像などを使用して広くカスタマイズ可能な表示形式を備えています。 データ形式はJSONの形式で提示されるため、このようなEntryPointを開発して、目的のJSON構造が出力で取得されるようにします。



SuiteCRMはMVCモデルに基づいており、すべてのアクションにはアクションコントローラーへのアピールが伴います。 通常のMVCアプローチを使用するのは難しいか、単に必要ではないため、標準のMVCアプローチから逸脱する必要がある場合があります。



独自のEntryPointの作成は2段階で行われます。 1つ目は、組み込みのMVCフレームワークを介してこのようなEntryPointを登録することです。 リスト1は、システムにEntryPointを登録する例を示しています。



リスト1。



./custom/Extension/application/Ext/EntryPointRegistry/custom_entry_point_registry.php



<?php $entry_point_registry['CustomEntryPoint'] = array( 'file' => 'custom/modules/<Module>/customEntryPoint.php', 'auth' => true );
      
      





2番目のステップは、このEntryPointのロジックを直接記述するファイルを作成することです(リスト2)。



リスト2。



./custom//customEntryPoint.php



 <?php if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); echo 'Hello World!';
      
      





これらのファイルを作成したら、「クイック修復と再構築」を実行して、次の場所に移動する必要があります: ... index.php?EntryPoint = CustomEntryPoint。



json_encode()など、別のアプローチを使用してJSONオブジェクトを形成できますが、この例では、JSONオブジェクトの一部のみを形成する必要があるため、単純な文字列連結を検討します。



リスト3。



./custom//customEntryPoint.php



 <?php if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); $response = '{"more": "false", "results":['; $sql = "SELECT stage, name FROM opportunity_stages order by name"; $res = $GLOBALS['db']->query($sql); if (!$res) { die('Bad query'); } while($row = $GLOBALS['db']->fetchByAssoc($res)){ $response .= '{"text":"' . $row["stage"] . '", ' . $row["name"] . '],'; } $response = rtrim($response, ","); $response .= ']}'; header('Content-Type: application/json'); echo $response;
      
      





結果をリスト4に示します。



リスト4。



index.php?entryPoint = CustomEntryPoint



 { "more": "false", "results": [ {"text":"", "id":"1"}, {"text":" ", "id":"2"}, {"text":" ", "id":"3"}, {"text":" ", "id":"4"}, {"text":" ", "id":"5"} ] }
      
      





次に、このデータをselect2で取得する必要があります。 初期化の例をリスト5に示します。



リスト5。



 $('#select').select2({ placeholder: "  ", minimumInputLength: 3, ajax: { url: "index.php?entryPoint=CustomEntryPoint", dataType: 'json', quietMillis: 250, data: function (term, page) { return { q: term, }; }, results: function (data, page) { return { results: data.results }; }, cache: true }, initSelection: function (element, callback){ var elementValue = $(element).val(); callback({"text":elementValue,"id":$('#select').val()}); }, id: function(object){ return object.text; }, formatSelection: customFormatSelection, }); function customFormatSelection(state){ return state.text; };
      
      





以上です。 これで、便利なドロップダウンリストがページに表示されます。 この例では、販売段階で5つのドロップダウンオプションを使用した実装を検討していますが、このアプローチは、KLADRなどの大量のデータを含むディレクトリを実装する場合に非常に便利です。



»select2ライブラリへのリンク: https ://select2.github.io/examples.html



この記事は、Jet InfosystemsのSiebelコンサルタントであるSergey Shirninによって作成されました。



All Articles