web-dev-qa-db-ja.com

CiviCRM連絡先のプライマリアドレスの定義

CiviCRMフィールドを含むWebフォームがあります(webform 7.x.4.1、civicrm_webform 7.x-4.9)。

2つの住所フィールドセットを構成しました。1つは勤務先住所用、もう1つは自宅住所用です。ユーザーが各アドレスの場所を選択し、最初のアドレスをプライマリとして設定できるようにするのは直感的ではないと思います。そのため、代わりに1つのフィールドを定義して、ユーザーがどちらをプライマリアドレスにするかを選択できるようにしました([自宅]または[職場]の値を持つ単純な選択フィールド)。

フォームが送信された後、これをCiviCRMと同期する必要があります。私はhook_webform_submission_insertとhook_webform_submission_updateを使用しています。

私の質問は、連絡先のプライマリであるアドレスを定義するための最良の方法は何ですか(アドレスはすでにデータベースに保存されています)。 Api?その他?

別の質問:同じことを行う別の(より簡単な)方法があるかもしれませんか?

1
samuelsov

Webform-CiviCRMは、常に最初のアドレスを「プライマリ」として設定します。

必要がない場合は、location-typeフィールドを公開する必要はありません。バックエンドフォームで設定できます。これには、プライマリアドレスのロケーションタイプを、最初のアドレスに設定したものに強制的に変更するという欠点があります。

連絡先の作成と更新の両方の問題を解決するソリューションは次のとおりです。カスタムコードやフックに頼る必要はありません。

  • 公開する両方のアドレスのlocation-typeフィールドを設定します(ユーザー選択)
  • 両方の場所タイプのWebフォームフィールドを「hidden」タイプに変更します
  • 最初の値を「自宅」、もう一方のデフォルト値を「職場」に設定します

これで、ユーザーが住所を更新しても、場所の種類は変更されません(デフォルト値は既存のデータで上書きされます)。ただし、新しいアドレスを作成するときは、適切なデフォルトを設定することになります。

5
Coleman