私はCiviCRMで3ウェイ関係のDrupal Viewを設定しようとしています。
私が欲しかったビューは、以下のように現在のユーザーの雇用者からサービスを提供されている連絡先のリストを表示することでした
(現在のユーザー)連絡先a =>(によって採用されている)=>組織=>(提供者である)=>連絡先c
私はCiviCRM連絡先のビューを作成しましたが、以下で説明するカスタムモジュールを作成せずに、この関係を取得して必要なものを表示する方法を見つけることができませんでした。
これを行うには、カスタムモジュールを使用し、プリプロセスビューフックを使用してコンテキストフィルターを渡します。フィルターは$ args []変数に渡されます。
連絡先Aから連絡先Bへの関係が複数ある場合、コンテキストフィルターで複数の値を有効にする必要がある場合もあります。この場合、これは複数の雇用者です。これは、コンテキストフィルター>詳細設定>複数の値を許可の下にあります。
プログラムで挿入するため、コンテキストフィルターで通常行うように、パスに%を追加しません。
次のコードでカスタムDrupalモジュールを作成します
/**
* @implements hook_views_pre_view().
*/
function HOOK_views_pre_view(&$view, &$display_id, &$args){
if($view->name == "my_view") {
// Check that we are altering the correct view based on and $view->name
civicrm_initialize();
require_once 'api/api.php';
//get the matching civi id for the current user
//This is using Civicrm version 4.4.6
global $user;
//first get the current user's Civicrm record
$params = array(
'version' => 3,
'sequential' => 1,
'uf_id' => $user->uid,
);
/*The contact ID is in $result['values'][0]['contact_id']*/
$result = civicrm_api('UFMatch', 'get', $params);
$params = array(
'version' => 3,
'sequential' => 1,
'relationship_type_id' => 5, /*get your relationship ID from /civicrm/admin*/
'contact_id_a' => $result['values'][0]['contact_id'],
);
$result = civicrm_api('Relationship', 'get', $params);
//temp stores the string which will be passed to the $args[] array
$temp = "";
//loop through the a => b relationships, and append all the ids of contact b
foreach ($result[values] as $key => $value ) {
if ($key > 0)
$temp .= "+";
$temp .= $value['contact_id_b'];
}
// populate the $args contextual filters array with the ids.
$args[] = $temp;
}
}
カスタムモジュールなしでこれを行うことができます。ビューの関係では、最初にCiviCRM関係のビューの関係を追加し、次に関係の「もう一方の端」に連絡先を追加します。したがって、Civi関係ごとに2つのビュー関係を作成します。したがって、AからBからCへのデイジーチェーンには、4つのビューの関係があります。
特にビューとCiviCRMの両方で「関係」という用語が使用されている場合は、簡単に説明できません。
タイプが「連絡先を連絡先Aとして関係に接続する」タイプのビュー関係1(VR1)を追加します。 (例:雇用主)タイプ「連絡先B」のビューの関係2(VR2)を追加し、「関係」としてVR1を選択します。
これで、人物Xを組織Yに接続しました
タイプが「連絡先を連絡先Bとして関係に接続する」タイプのビュー関係3(VR3)を追加します。 (例:プロバイダ)-「関係」としてVR2を選択します。タイプ「連絡先A」のビュー関係4(RV4)を追加します。「関係」としてVR3を選択します。
これで、人Xを組織Yに接続し、次に組織Yを人Zに接続する必要があります。
RV3を作成する場合は、「Aから始まる」またはBのどちらを使用するかを決定する必要があります。これは、「is a provider of」関係の作成方法に依存するためです。晴れ?説明するのは簡単ではありません;-)