例えば、マッチングを保持するオブジェクト「提案」が「求職者」と「求人」を関連付けるような構成の場合に、「求人」が「求人施設」の子オブジェクト (関連オブジェクト) で、住所は「求人」ではなく「求人施設」の項目に保持にされているケースにMatchingMapの地理位置情報取得バッチを適用する方法について考えてみます。

この場合、「求職者」を中心とした地図では「求人」をマーカーとしてプロットしますが、住所は親オブジェクトである「求人施設」にあるため、地理位置情報バッチには「求人施設」の住所から地理位置情報を取得するように設定したいところです。

しかし、Salseforceの制限により地理位置情報へのクエリーには、参照項目(参照・主従関係型の項目を使用した親オブエジェクトの項目)は使用できません。

そこで、実際に地図にプロットする「求人」オブジェクトにも地位位置情報型の項目を用意し親オブジェクトの地理位置情報をコピーするようにします。

地位位置情報のコピーは、フローやApexトリガーなどを使用します。ここではフローを使用して実装する例を解説します。

以下の説明では、「求職者」、「求人施設」についてはパッケージに含まれるサンプルオブジェクト「MM求職者」と「MM求人施設」を使用しますが、「提案」と「求人」オブジェクトについては、新規に追加する必要があるオブジェクトです。

上の図の構成で定義済みであるとして解説しますので、事前に定義してから以下の解説に進んでください。

また、すでに各オブジェクトが存在する場合はそれぞれの役割のオブジェクトに置き換えて読み進めてください。

1. マッチング オブジェクト設定で「求人」を設定する

まずオブジェクト設定を確認します。

マッチングオブジェクト「提案」を設定し、求人オブジェクト設定には、「求人」オブジェクトへの参照項目が選択されています。

「住所(テキスト) 項目」で選択している「求人施設住所」は親オブジェクト「求人施設 (WorkPlace__c)」の「住所 (Address__c)」を参照する数式項目(数式「WorkPlace__r.Address__c」)を用意し選択します。

2. 地理位置情報バッチ設定で「求人施設」を設定する

地理位置情報バッチ設定では、「求人」の親オブジェクトの「求人施設」を設定します。

「住所(テキスト)項目」は、「求人」オブジェクトの数式項目「求人施設住所」から参照されている項目です。

3. 「求人施設」の地理位置情報を「求人」にコピーするフローを実装する

ここからが本題です。地理位置情報バッチが「求人施設」の「地理位置情報」項目を更新したときに「求人」の「地理位置情報」に値をコピーするフローを実装してみます。

①「設定」> 「フロー」を開き、「新規フロー」をクリックします。

②「レコードトリガーフロー」を選択して「作成」をクリックします。

「開始を設定」ダイアログが開くので以下を入力します。

③ 「オブジェクトを選択」では「MM求人施設」を選択します。

④「トリガを設定」では、「レコードが作成または更新された」を選択します。

⑤ 「エントリ条件」を設定します。

「条件の要件」は設定なしでも良いですが、ここでは、地理位置情報の緯度経度が両方の値が変更された場合に実行するように指定しています。

⑥ 「フローを最適化」では「アクションと関連レコード」を選択します。

⑦「完了」をクリックして閉じます。

⑧ 「+」をクリックして「要素の追加」から「レコードを取得」を選択します。

⑨「MM求人施設」レコードに関連する「求人」レコードを「JobOffers」という変数に格納するように設定します。

  1. 「表示ラベル」は適当なものを入力します。ここでは「求人リスト」と入力しています。

  2. 「API参照名」は適当なものを入力します。この値は、取得したレコードのリストを保存する変数名でもあるので、ここでは「JobOffers」と入力しています。

  3. 「オブジェクト」は「求人 (JobOffer__c)」を選択します。

  4. 「条件の要件」は「すべての条件に一致(AND)」が選択されたまま、求人施設への参照項目「WorkPlace__c」が、トリガーフローのの実行対象となったレコードを保持する変数「$Record」の「カスタムオブジェクトID (Id)」と一致する条件を追加します。

  5. 「保持するレコード数」は「すべてのレコード」を選択します。

  6. 「レコードデータの保存方法」は「すべての項目を自動的に保存」のままで問題ありません。

  7. 一通り入力したら「完了」をクリックして閉じます。

求人リストフローが追加されます。

⑩ 追加した「求人リスト」の下の「+」をクリックして「要素の追加」から「ループ」を選択します。

⑨で取得した「求人」レコードごとにループを実行するように設定します。

  1. 「表示ラベル」は適当なものを入力します。ここでは「求人ごと」と入力しています。

  2. 「API参照名」は適当なものを入力します。この値は、ループ内でレコードを参照する変数としても利用します。ここでは「JobOffer_Loop」と入力しています。

  3. 「コレクション変数」は「JobOffers 」を選択します。

  4. 一通り入力したら「完了」をクリックして閉じます。

「ループ」要素が追加されます。

⑪ 「項目ごと」のパスの「+」をクリックして「要素の追加」から「割り当て」を選択します。

  1. 「表示ラベル」は適当なものを入力します。ここでは「地理位置情報をコピー」と入力しています。

  2. 「API参照名」は適当なものを入力します。ここでは「CopyLatLng」と入力しています。

  3. 「変数値を設定」で、レコードを保持する変数「$Record」から地理位置情報をループ変数「JobOffer_Loop」にコピーするように設定します。

    {!JobOffer_Loop.Geolocation__Latitude__s} 次の文字列と一致する $Record > 地理位置情報 (Latitude)
    {!JobOffer_Loop.Geolocation__Longitude__s} 次の文字列と一致する $Record > 地理位置情報 (Longitude)

  4. 一通り入力したら「完了」をクリックして閉じます。

以下のように割当「地理位置情報をコピー」が追加されます。

⑫ 更新用の求人を保持する変数を追加します。

左の「ツールボックス」の「マネージャ」の下の「新規リソース」をクリックします。

  1. 「リソース種別」は「変数」を選択します。

  2. 「API参照名」は適当なものを入力します。ここでは「JobOffers_updating」と入力しています。

  3. 「データ型」は「レコード」を選択します。

  4. 「複数の値を許可 (コレクション)」にチェックを入れます

  5. 「オブジェクト」は「求人 JobOffer__c」を選択します。

  6. 一通り入力したら「完了」をクリックして閉じます。

⑬「地理位置情報をコピー」の下の「+」をクリックして「要素の追加」から再度「割り当て」を選択します。

  1. 「表示ラベル」は適当なものを入力します。ここでは「更新用求人リストに追加」と入力しています。

  2. 「API参照名」は適当なものを入力します。ここでは「AddToJobOffers_updating」と入力しています。

  3. 「変数値を設定」で、更新用の求人リストを保持する変数「JobOffers_updating」にループで処理している求人レコード「JobOffer_Loop」を追加するように設定します。

  4. 一通り入力したら「完了」をクリックして閉じます。

以下のようにループに割り当て「更新用求人リストに追加」要素が追加されます。

⑭ 「最後の項目の後」のパスの「+」から「レコードの更新」を選択します。

  1. 「表示ラベル」は適当なものを入力します。ここでは「求人を保存」と入力しています。

  2. 「API参照名」は適当なものを入力します。ここでは「SaveJobOffers」と入力しています。

  3. 「更新するレコードを検索してその値を設定する方法」では「レコードまたはレコードコレクションからの ID およびすべての項目値を使用」を選択します。

  4. 「更新するレコードを選択」で、更新用の求人リストを保持している変数「JobOffers_updating」を選択します。

  5. 入力したら「完了」をクリックして閉じます。

レコードを更新「求人を保存」が追加されます。

⑮ 右上の「保存」をクリックしてフローを保存します。

  1. 「フローの表示ラベル」は適当なものを入力します。ここでは「求人施設の地理位置情報を求人にコピー」と入力しています。

  2. 「API参照名」は適当なものを入力します。ここでは「CopyLatLngFromWorkSpaceToJobOffers」と入力しています。

  3. 入力したら「完了」をクリックして閉じます。

⑯ 右上の「有効化」をクリックしてフローを有効化します。


4. 動作確認

設定の確認をしてみます。
地理位置情報バッチ実行前に以下の対象レコードを準備しました。

求人施設は以下の2レコード

求人は、以下の3レコード

「MatchingMap管理」の「位置情報取得バッチ設定 」タブに戻り「求人施設」タブを開きます。

「地理位置情報バッチ設定 」セクションの「即時実行」をクリックして地理位置情報バッチを即時実行します。

実行後、求人施設を開くと地位位置情報と地理位置情報結果がセットされています。

同時にフローが実行され求人の地理位置情報にも値がコピーされました。

以上で、地図に表示対象が求人の場合に、その親の求人施設の住所を利用して地理位置情報を取得できるようになりました。

求人は求人施設よりもレコード数が多くなるため直接求人オブジェクトを地理位置情報バッチを実行するとGoogle Geocoding APIのコールが多くなりコストも掛かってしまいます。

このような設定をすることによりコスト削減効果もありますので、ぜひ検討してみてください。

回答が見つかりましたか?