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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

形式は「自由形式」を選択します。

③ 編集をクリックしてトリガ設定を開きます。

トリガを以下のように設定します。

  1. 「フローをトリガする条件:」は、「レコードが更新された」を選択します。

  2. 「フローを実行:」は、「レコードが保存された後」を選択します。

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

④ 「+オブジェクトを選択」をクリックします。

「オブジェクト」で「求人施設 WorkPlace__c」を選択して「完了」をクリックします。

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

⑤ 左の「ツールボックス」の「要素」から「レコードを取得」を右側にドロップします。

「求人施設」レコードのIdを参照する「求人」レコードを「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. 「更新するレコードを選択」で、更新用の求人リストを保持している変数「JobOffers_updating」を選択します。

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

「レコードを更新」から「ループ」要素へ接続します。

最終的に以下のようなフローになります。

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

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

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

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

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


4. 動作確認

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

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

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

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

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

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

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

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

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

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

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