地理位置情報を取得するレコードトリガーフローを設定する
最終更新
最終更新
求職者や求人施設オブジェクトのレコードが新規に作成されたときやその住所が変更されたときに地理位置情報を取得してレコードにセットするレコードトリガーフローを設定します。
MatchingMapは求職者や求人施設オブジェクトのレコードの住所情報が更新されたタイミングで地理位置情報を取得したい場合に、レコードトリガーフローに設定可能なApexアクション「MatchingMap 地理位置情報セット アクション」を提供しています。
「MatchingMap 地理位置情報セット アクション」を利用するには、予めオブジェクトを地理位置情報設定に登録しておく必要があります。オブジェクト設定の手順については「オブジェクト設定」を参照して設定してください。
以下、MatchingMapに含まれるサンプルオブジェクト「MM求人施設」を例に、住所が変更されたら地理位置情報を取得するレコードトリガーフローを設定する手順について解説します。
本機能は、Salesforce標準のデータインテグレーション機能を使用する場合は設定する必要はありません。
❶「設定」の「クイック検索」で「フロー」と入力して、表示された「フロー」を選択してフローのページを表示し、「新規フロー」をクリックして新しいフローの作成を開始します。
❷ 「レコードトリガーフロー」を選択して「作成」をクリックします。
❶「オブジェクトを選択」セクションで「MM求人施設」を選択します。
❷ 「トリガーを設定」セクションでは「レコードが作成または更新された」を選択します。
❸ 「条件の要件」は「すべての条件に一致(AND)」を選択して、以下の条件を追加します。
項目:「住所(matchingmap__AddressText__c)」
演算子:「変更済み」
値:「True」
「エントリ条件を設定」セクションでは住所が変更された場合にのみ処理が実行されるように設定します。
項目や条件は、要件に応じて適切な値を設定してください。
❹ 次に「フローを最適化:」で「アクションと関連レコード」を選択し、「トリガレコードの元のトランザクションが正常にコミットされた後に外部システムにアクセスするには、非同期に実行パスを含めます。」にチェックを入れます。
❺「完了」をクリックすると以下のように「開始」と「終了」要素が配置されます。
地理位置情報はGoogle Geocoding APIにアクセス(コールアウト)して取得するため、非同期に実行する必要があります。よって「非同期に実行」の経路の方に処理を追加していきます。
❶「非同期に実行」の経路の「+」をクリックします。「要素を追加」から「アクション」を選択します。
❷ 「アクション」に「MatchingMap 地理位置情報セット アクション」を選択し、任意の「表示ラベル」と「API参照名」を入力します。
❸ オブジェクトの選択セクションでは、「「レコード」のオブジェクト(入力)」で「MM求人施設」を選択し、「入力値を設定」の「レコード」には、レコードトリガーフローを起動したレコードが入る変数「{!$Record}」をセットします。
❹「完了」をクリックすると以下のように設定した要素が追加されます。
Apexアクション「MatchingMap 地理位置情報セット アクション」は、応答として以下の値を返します。
「isOK」:Google Geocoding APIの呼び出しが正常に終了した場合はTrueを返します。
「accuracy」:Google Geocoding APIが返した地理位置情報の精度を返します。以下のいずれかの値がセットされます。
「ROOFTOP」: 正確な地理位置情報。住所の番地まで特定できた場合。
「RANGE_INTERPOLATED」: 2番目の精度、交差点など正確に特定可能な2地点から補正された近似値。
「GEOMETRIC_CENTER」: 特定可能な道路や地域の中心点。
「APPROXIMATE」: 曖昧な結果。住所の見直しが必要。
「ZERO_RESULTS」: 住所から地理位置情報が取得できなかった場合 (※)。
「status」:Google Geocoding APIの呼び出しが正常に終了した場合は「OK」がセットされ、応答にエラーを含む場合はエラーメッセージが返されます。
「errorMessage」:地理位置情報取得設定の不備などAPI呼び出し以外で発生したエラーのメッセージがセットされます。トラブルシューティング用です。
地理位置情報精度の値はGoogle Geocoding APIの応答に含まれる「geometry.location_type」の値を保存していますが、「ZERO_RESULTS」のみ異なり「status」の値をセットしています。
ここでは、「isOK」がTrueの場合にのみレコードを保存するように「決定」と「レコードを更新」要素を追加します。
❶「地理位置情報の取得」要素の下の「+」をクリックして「決定」要素を選択します。
❷ 表示ラベルとAPI参照名を適当に入力します。ここではいずれも「isOK」としています。
❸1つ目の条件を以下のように設定します。
「表示ラベル」:任意、ここでは「OK」を入力
2. 「結果の API 参照名」:任意、ここでは「OK」を入力
3. 「結果を実行する条件の要件」:「すべての条件に一致(AND)」を選択し、以下の条件を設定
「リソース」:「GetGeocode からの出力 > isOK」
「演算子」:「次の文字列と一致」
「値」:「True」
4. 「結果を実行するタイミング」:「条件の要件を満たす場合」
5. 「完了」ボタンをクリックします。
❹ 「デフォルトの結果」はそのまま、「完了」をクリックすると、以下のように条件によって経路が分岐します。
❺ 「OK」の下の「+」をクリックして、「トリガーレコードを更新」を選択します。
❻ 表示ラベルとAPI参照名を適当に入力します。
ここでは「レコードを更新」、「UpdateRecord」としています。
❼ 「更新するレコードを検索してその値を設定する方法」は「レコードまたはレコードコレクションからの ID およびすべての項目値を使用」を選択します。
❽ 「レコードまたはレコードコレクション」に「$Record」をセットし、「完了」をクリックします。
❶ 右上の「保存」をクリックします。
❷「フローの表示ラベル」、「フローの API 参照名」に適当な値を入力します。
ここでは、「MM求人施設 地理位置情報の取得」、「SetGeolocation_to_MM_WorkPlace」と入力しています。
❸「保存」をクリックします。
❹ 右上の「有効化」をクリックします。
前のセクションまでで基本的な動作の実装は完了ですが、必要に応じてユーザーにフィードバックを通知する実装例を解説します。
ここでは、取得した地理位置情報の精度が悪い場合に、住所を更新したユーザーにフィードバックをメールで通知してみます。
❶「レコードを更新」の次の「+」をクリックして要素「決定」を選択します。
❷ 表示ラベルとAPI参照名を適当に入力します。
ここではそれぞれ「あいまいな地理位置情報」、「ApproximateORZeroResults」を入力しています。
❸ 1つ目の条件を以下のように設定します。
1.「表示ラベル」:任意、ここでは「地理位置情報があいまい」を入力。
2.「結果の API 参照名」:任意、ここでは「GeolocationIsApproximate」を入力。
3.「結果を実行する条件の要件」:「いずれかの条件に一致(OR)」を選択し、以下の2つの条件を設定。
1つ目
「リソース」:「GetGeocode からの出力 > accuracy」
「演算子」:「次の文字列と一致」
「値」:「APPROXIMATE」
2つ目
「リソース」:「GetGeocode からの出力 > accuracy」
「演算子」:「次の文字列と一致」
「値」:「ZERO_RESULTS」
4.「結果を実行するタイミング」:「条件の要件を満たす場合」
5. 「完了」ボタンをクリックします。
❹「完了」をクリックすると以下のように「決定」要素が追加され経路が分岐します。
❶「地理位置情報があいまい」の経路の「+」をクリックして、要素「アクション」を選択します。
❷ アクションに「メール送信」を選択し、「表示ラベル」と「API 参照名」を適当に入力します。
ここではそれぞれ「住所の見直しを依頼」、「SendFixAddressRequest」と入力しています。
❸「入力値を設定」セクションで以下の値を入力します。
「件名」:「{!$Record.Name}の住所情報を見直してください」
「本文」:「住所「{!$Record.matchingmap__AddressText__c}」の正確な地理位置情報が取得できませんでした。住所情報に誤りがないか見直してください。」
「メールアドレス(カンマ区切り)」:「{!$User.Email}」
❹「完了」をクリックすると以下のように経路にアクションが追加されます。
フローの修正を適用するためには、フローの新しいバージョンを作成して有効化する必要があります。
❶ 右上の「別名で保存」をクリックし、「新規バージョン」を選択された状態で「保存」をクリックします。
❷ 「有効化」をクリックします。
取引先や取引先責任者などの標準オブジェクトには住所型の項目がありますが、住所型の項目をフローで扱う場合はいくつか注意点があります。
以下の考慮事項はSalesforceのバージョン「Spring `22」時点での内容になります。Summer '22 以降では修正され解消している可能性がありますのでご了承ください。
例えば、以下の用に取引先オブジェクトの「住所(請求先)」項目が変更されたという条件を設定した場合、「住所(請求先)」の値が変更されても「True」になりません。
回避策としては、以下のように住所型項目の各項目を分けて条件を指定します。
フローに渡ってくるフローをトリガーしたレコードには、住所項目の値は割り当てられません(SELECTされません)。
上記の「MM 求人施設」の例と異なり、住所項目を使用するオブジェクトの場合は、「MatchingMap 地理位置情報セット アクション」を実行する前に以下のように「レコードを取得」要素を追加し住所項目が割り当てられるように設定します。その後、要素「地理位置情報を取得」と「レコードを更新」で利用する入力値内容を取得したオブジェクトに変更することで、住所項目の地理位置情報を更新することができるようになります。
具体的な手順は以下のとおりです。
❶「地理位置情報を取得」の経路の上にて「+」をクリックして、要素「レコードを取得」を選択します。
❷「表示ラベル」と「API 参照名」を適当に入力します。
ここではそれぞれ「取引先レコードを再取得」、「GetAccount」と入力しています。
❸ 絞り込み条件を以下のように設定します。
条件の要件:すべての条件に一致 (AND)
「リソース」:「Id」
「演算子」:「次の文字列と一致」
「値」:「{!$Record.Id}」
❹ 「保存するレコード数」で「最初のレコードのみ」を選択します。
❺ 「レコードデータの保存方法」で「住所(BillingAddress)」を追加します。
❻ 「地理位置情報を取得」要素を選択し、「入力値を設定」セクションにて 先ほど設定したレコードを指定します。
「3-1. 地理位置情報を取得するApexアクションを追加」では「{!$Record}」を指定していましたが、ここでは「{!GetAccount}」を指定します。
❼ 「レコードを更新」要素を選択し、「更新するレコードを設定」セクションにて先ほど設定したレコードを指定します。
「3-2. 地理位置情報がセットされたレコードを更新」では、レコードの更新時に「{!$Record}」を指定していましたが、ここでは「{!GetAccount}」を指定します。
以上で、住所項目の地理位置情報を更新することができるようになります。