求職者・求人施設の親オブジェクトの住所と地理位置情報を利用してMatchingMapを利用する方法
最終更新
最終更新
マッチングを保持するオブジェクト「提案」が「求職者」と「求人」を関連付けるような構成の場合に、「求人」が「求人施設」の子オブジェクト (関連オブジェクト) で、住所は「求人」ではなく「求人施設」の項目に保持にされているケースにMatchingMapの地理位置情報取得バッチを適用する方法について考えてみます。
この場合、「求職者」を中心とした地図では「求人」をマーカーとしてプロットしますが、住所は親オブジェクトである「求人施設」にあるため、地理位置情報バッチには「求人施設」の住所から地理位置情報を取得するように設定したいところです。
しかし、Salesforceの制限により地理位置情報へのクエリーには、参照項目(参照・主従関係型の項目を使用した親オブエジェクトの項目)は使用できません。
そこで、実際に地図にプロットする「求人」オブジェクトにも地理位置情報型の項目を用意し親オブジェクトの地理位置情報をコピーするようにします。
また、「求人」を新規に作成する際の考慮も必要です。「求人」を新規に作成する場合には、「求人施設」の地理位置情報を新規に作成した「求人」の地理位置情報型項目にコピーされるようにする必要があります。
地理位置情報のコピーは、フローやApexトリガーなどを使用します。ここでは、フローを使用し、「求人施設」の地理位置情報が変更された場合に、関連するすべての「求人」の地理位置情報型項目に「求人施設」の地理位置情報をコピーするフローと、新規に「求人」を作成した際に、親オブジェクトである「求人施設」の地理位置情報を、新規に作成した「求人」の地理位置情報型項目にコピーするフローの2点を作成する例を解説します。
以下の説明では、「求職者」、「求人施設」についてはパッケージに含まれるサンプルオブジェクト「MM求職者」と「MM求人施設」を使用しますが、「提案」と「求人」オブジェクトについては、新規に追加する必要があるオブジェクトです。
上の図の構成で定義済みであるとして解説しますので、事前に定義してから以下の解説に進んでください。すでに各オブジェクトが存在する場合はそれぞれの役割のオブジェクトに置き換えて読み進めてください。
「MatchingMap管理」 → 「地図表示設定」より設定可能な「マッチングオブジェクト設定」において、「求人オブジェクト設定」にカスタムオブジェクトを指定する場合は「住所(テキスト)項目」の選択が必要です。
今回の例では、この住所情報も親オブジェクトである「求人施設」の住所情報を利用しますので、「求人施設 (WorkPlace__c)」の「住所 (Address__c)」を参照する数式項目(数式 「WorkPlace__r.Address__c」 )を作成します。
続いて、オブジェクト設定を確認します。
「マッチングオブジェクト」には「提案」を設定し、「求人オブジェクト設定」には、「求人」オブジェクトへの参照項目を設定、「1.」で作成したカスタム数式項目も「求人オブジェクト設定」の「住所(テキスト)項目」に指定します。
地理位置情報バッチ設定では、「求人」の親オブジェクトの「求人施設」を設定します。
「住所(テキスト)項目」は、「求人」オブジェクトの数式項目「求人施設住所」から参照されている項目です。
ここからが本題です。まず、地理位置情報バッチが「求人施設」の「地理位置情報」項目を更新したときに「求人」の「地理位置情報」に値をコピーするフローを実装してみます。
❶「設定」> 「フロー」を開き、「新規フロー」をクリックします。
❷「レコードトリガーフロー」を選択して「作成」をクリックします。
「開始を設定」ダイアログが開くので以下を入力します。
❸ 「オブジェクトを選択」では「MM求人施設」を選択します。
❹「トリガーを設定」では、「レコードが作成または更新された」を選択します。
❺「エントリ条件」を設定します。
「条件の要件」は設定なしでも良いですが、ここでは、地理位置情報の緯度経度が両方の値が変更された場合に実行するように指定しています。
❻「フローを最適化」では「アクションと関連レコード」を選択します。
❼「完了」をクリックして閉じます。
❽ 「+」をクリックして「要素の追加」から「レコードを取得」を選択します。
❾「MM求人施設」レコードに関連する「求人」レコードを「JobOffers」という変数に格納するように設定します。
「表示ラベル」は適当なものを入力します。ここでは「求人リスト」と入力しています。
「API参照名」は適当なものを入力します。この値は、取得したレコードのリストを保存する変数名でもあるので、ここでは「JobOffers」と入力しています。
「オブジェクト」は「求人 (JobOffer__c)」を選択します。
「条件の要件」は「すべての条件に一致(AND)」が選択されたまま、求人施設への参照項目「WorkPlace__c」が、トリガーフローのの実行対象となったレコードを保持する変数「$Record」の「カスタムオブジェクトID (Id)」と一致する条件を追加します。
「保持するレコード数」は「すべてのレコード」を選択します。
「レコードデータの保存方法」は「すべての項目を自動的に保存」のままで問題ありません。
一通り入力したら「完了」をクリックして閉じます。
求人リストフローが追加されます。
❿ 追加した「求人リスト」の下の「+」をクリックして「要素の追加」から「ループ」を選択します。
❾で取得した「求人」レコードごとにループを実行するように設定します。
「表示ラベル」は適当なものを入力します。ここでは「求人ごと」と入力しています。
「API参照名」は適当なものを入力します。この値は、ループ内でレコードを参照する変数としても利用します。ここでは「JobOffer_Loop」と入力しています。
「コレクション変数」は「JobOffers 」を選択します。
一通り入力したら「完了」をクリックして閉じます。
「ループ」要素が追加されます。
⓫ 「項目ごと」のパスの「+」をクリックして「要素の追加」から「割り当て」を選択します。
「表示ラベル」は適当なものを入力します。ここでは「地理位置情報をコピー」と入力しています。
「API参照名」は適当なものを入力します。ここでは「CopyLatLng」と入力しています。
「変数値を設定」で、レコードを保持する変数「$Record」から地理位置情報をループ変数「JobOffer_Loop」にコピーするように設定します。
{!JobOffer_Loop.Geolocation__Latitude__s}
次の文字列と一致する
$Record > 地理位置情報 (Latitude)
{!JobOffer_Loop.Geolocation__Longitude__s} 次の文字列と一致する $Record > 地理位置情報 (Longitude)
一通り入力したら「完了」をクリックして閉じます。
以下のように割当「地理位置情報をコピー」が追加されます。
⓬ 更新用の求人を保持する変数を追加します。
左の「ツールボックス」の「マネージャー」の下の「新規リソース」をクリックします。
「リソース種別」は「変数」を選択します。
「API参照名」は適当なものを入力します。ここでは「JobOffers_updating」と入力しています。
「データ型」は「レコード」を選択します。
「複数の値を許可 (コレクション)」にチェックを入れます。
「オブジェクト」は「求人 JobOffer__c」を選択します。
一通り入力したら「完了」をクリックして閉じます。
⓭「地理位置情報をコピー」の下の「+」をクリックして「要素の追加」から再度「割り当て」を選択します。
「表示ラベル」は適当なものを入力します。ここでは「更新用求人リストに追加」と入力しています。
「API参照名」は適当なものを入力します。ここでは「AddToJobOffers_updating」と入力しています。
「変数値を設定」で、更新用の求人リストを保持する変数「JobOffers_updating」にループで処理している求人レコード「JobOffer_Loop」を追加するように設定します。
一通り入力したら「完了」をクリックして閉じます。
以下のようにループに割り当て「更新用求人リストに追加」要素が追加されます。
⓮ 「最後の項目の後」のパスの「+」から「レコードの更新」を選択します。
「表示ラベル」は適当なものを入力します。ここでは「求人を保存」と入力しています。
「API参照名」は適当なものを入力します。ここでは「SaveJobOffers」と入力しています。
「更新するレコードを検索してその値を設定する方法」では「レコードまたはレコードコレクションからの ID およびすべての項目値を使用」を選択します。
「更新するレコードを選択」で、更新用の求人リストを保持している変数「JobOffers_updating」を選択します。
入力したら「完了」をクリックして閉じます。
レコードを更新「求人を保存」が追加されます。
⓯ 右上の「保存」をクリックしてフローを保存します。
「フローの表示ラベル」は適当なものを入力します。ここでは「求人施設の地理位置情報を求人にコピー」と入力しています。
「API参照名」は適当なものを入力します。ここでは「CopyLatLngFromWorkSpaceToJobOffers」と入力しています。
入力したら「完了」をクリックして閉じます。
⓰ 右上の「有効化」をクリックしてフローを有効化します。
続いて、「求人」を新規作成したときに、「求人」の「地理位置情報」に「求人施設」の「地理位置情報」の値をコピーするフローを実装してみます。
❶「設定」> 「フロー」を開き、「新規フロー」をクリックします。
❷「レコードトリガーフロー」を選択して「作成」をクリックします。
「開始を設定」ダイアログが開くので以下を入力します。
❸ 「オブジェクトを選択」では「MM求人」を選択します。
❹「トリガーを設定」では、「レコードが作成または更新された」を選択します。
❺「エントリ条件」を設定します。
「条件の要件」は設定なしでも良いですが、ここでは、地理位置情報の緯度経度が両方の値が空の場合、かつ「求人」の親オブジェクト「求人施設」が設定されている場合に実行するように指定しています。
❻「フローを最適化」では「高速項目更新」を選択します。
❼ レコードトリガーフローの下の「〇」をクリックして「要素の追加」から「レコードを取得」を選択します。
❽カスタムオブジェクトIDが「MM求人施設」のカスタムオブジェクトIDと一致するレコードを取得するように設定します。
「表示ラベル」は適当なものを入力します。ここでは「求人施設」と入力しています。
「API参照名」は適当なものを入力します。この値は、取得したレコードのリストを保存する変数名でもあるので、ここでは「JobOffers」と入力しています。
「オブジェクト」は「求人施設 (WorkPlace__c)」を選択します。
「条件の要件」は「すべての条件に一致(AND)」が選択されたまま、求人のカスタムオブジェクトID「Id」が、トリガーフローのの実行対象となったレコードを保持する変数「$Record」の「カスタムオブジェクトID (Id)」と一致する条件を追加します。
「保持するレコード数」は「最初のレコードのみ」を選択します。
「レコードデータの保存方法」は「すべての項目を自動的に保存」のままで問題ありません。
一通り入力したら入力内容を確認します。
求人施設フローが追加されます。
❾ 追加した「求人施設」の下の「〇」をクリックして「要素の追加」から「割り当て」を選択します。
「表示ラベル」は適当なものを入力します。ここでは「地理位置情報をコピー」と入力しています。
「API参照名」は適当なものを入力します。ここでは「CopyLatLng」と入力しています。
「変数値を設定」で、レコードを保持する「WorkPlaceMM求人施設」から地理位置情報を「$Record」にコピーするように設定します。
$Record > 地理位置情報取得情報(緯度)
次の文字列と一致する
WorkPlace MM求人施設 > 地理位置情報 (緯度)
$Record > 地理位置情報取得情報(経度) 次の文字列と一致する WorkPlace MM求人施設 > 地理位置情報 (経度)
一通り入力したら入力内容を確認します。
以下のように割り当て「地理位置情報をコピー」が追加されます。
❿ 右上の「保存」をクリックしてフローを保存します。
「フローの表示ラベル」は適当なものを入力します。ここでは「求人を追加したときに求人施設の地理位置情報を求人にコピー」と入力しています。
「API参照名」は適当なものを入力します。ここでは「CopyLatLngFromWorkSpaceToJobOffersWhenAddJob」と入力しています。
入力したら「完了」をクリックして閉じます。
⓫ 右上の「有効化」をクリックしてフローを有効化します。
設定の確認をしてみます。 地理位置情報バッチ実行前に以下の対象レコードを準備しました。
求人施設は以下の2レコード
求人は、以下の3レコード
「MatchingMap管理」の「位置情報取得バッチ設定 」タブに戻り「求人施設」タブを開きます。
「地理位置情報バッチ設定 」セクションの「即時実行」をクリックして地理位置情報バッチを即時実行します。
実行後、求人施設を開くと地理位置情報と地理位置情報結果がセットされています。
同時にフローが実行され求人の地理位置情報にも値がコピーされました。
地図に表示対象が求人の場合に、その親の求人施設の住所を利用して地理位置情報を取得できるようになりました。
求人の新規作成時・更新時でそれぞれ動作確認をしてみます。
以下の対象レコードを準備しました。
求人施設は以下のレコード
「求人AA」を新規作成します。MM求人施設には上記の「求人施設A」を紐づけて、「保存」ボタンをクリックします。
保存後、求人AAの地理位置取得情報がセットされています。
以下の対象レコードを準備しました。
求人施設は以下のレコード
求人は、以下のレコード
「求人A」の「編集 」ボタンをクリックします。
求人Aを編集し、編集画面の「保存」ボタンをクリックします。
保存後、求人Aの地理位置取得情報がセットされています。
以上で動作確認は完了です。
求人は求人施設よりもレコード数が多くなるため直接求人オブジェクトを地理位置情報バッチを実行するとGoogle Geocoding APIのコールが多くなりコストも掛かってしまいます。
このような設定をすることによりコスト削減効果もありますので、ぜひ検討してみてください。