Salesforce では多くの場合、フロー内の [レコードを取得] 要素を利用してレコードを取得します。
ただし、場合によっては複雑な方法が必要となります。たとえば、特定の条件に基づいてレコードを取得したり、特定のスケジュール日でのみタスクを実行したりする要件がある可能性があります。
Salesforce のソリューションでは、当月のレコード取得を調整し、指定された日にのみアクションを実行して、これらの要件に対応します。
これにより、取得されたデータのタイムラインの他、定義済みの業務スケジュールのコンプライアンスが保証されます。
Salesforce でのスケジュールトリガーフローの実行プロセスについて詳しく説明します。このフローは、毎月7日に実行されるように設計されています。フローの目的は、開始日が現在の月と年に該当するレコードを取得し、その開始日に12ヶ月を追加してレコードを更新することです。
当フローは、現在の実行日がスケジュールされた実行日と一致していることを細心の注意を払って確認します。確認後、自動的に「顧客種別」に分類され、現在の月に開始されたすべての取引先レコードを更新します。
正常に取得されると、フローは取得した各取引先レコードの開始日を更新し、12ヶ月延長します。この調整により、レコードが将来の参照や計画に適した期間を正確に反映するようになります。
作成したフローの詳細は次のとおりです。
[設定] > [オブジェクトマネージャー] > [取引先] に移動します。
[項目とリレーション] をクリックし、[新規] をクリックして新しい項目を作成します。
[データ型] で [日付] を選択し、[次へ] をクリックします。
[項目表示ラベル] に「開始日」と入力します。
項目作成の残りの手順を完了します。
[設定] をクリックします。
[クイック検索] ボックスで「フロー」と入力し、[フロー] をクリックします。
[フロー] 画面で [新規フロー] をクリックします。
[フロー種別を選択] で [スケジュールトリガーフロー] を選択し、[作成] をクリックします。
フローの開始日時を設定します。
[開始日]: フローを最初に実行する日付を設定します。
[開始時刻]: 任意の時刻(例: 午前2時00分)を設定します。
[頻度]: [毎月] を選択します。
この数式は、フローが毎月7日にのみ特定の処理を実行するようにするためのものです。
キャンバスの左側にある [マネージャー] タブをクリックします。
[新規リソース] をクリックします。
[リソース種別] で [数式] を選択します。
[API 参照名] に「IsScheduledDay」など、分かりやすい名前を入力します。
[データ型] の戻り値を [Boolean] に設定します。
[数式] に以下の式を入力します。
DAY(TODAY()) = 7
この数式は、今日の日付が月の7日目であれば True を、そうでなければ False を返します。
このステップでは、フローが「現在の日付が指定した実行日(この場合は毎月7日)と一致するかどうか」を判断するためのロジックを追加します。
キャンバスで、接続された要素から [+] アイコンをクリックします。
[要素] メニューから [決定] を選択します。
[新規決定] パネルで、以下の項目を設定します。
表示ラベル: 「指定日かどうかを確認」
API 参照名: (自動入力されますが、必要に応じて調整)
[結果の要件] セクションで、新しい結果を作成します。
表示ラベル: 「指定日です」
API 参照名: (自動入力されますが、必要に応じて調整)
条件の要件を設定: [すべての条件に一致 (AND)] を選択します。
リソース: 先ほど作成した数式リソース(例: {!IsScheduledDay})を選択します。
演算子: 「次の文字列と一致する」を選択します。
値: 「{!$GlobalConstant.True}」を選択します。
[完了] をクリックします。
このステップでは、フローが目的の[取引先] の種別が [顧客] の取引先レコードを特定して取得するためのロジックを追加します。
キャンバスで、[決定] 要素(前のステップで作成した「指定日かどうかを確認」)の「指定日です」パスの下にある [+] アイコンをクリックします。
[要素] メニューから [レコードを取得] を選択します。
[新規レコードを取得] パネルで、以下の項目を設定します。
表示ラベル: 「顧客アカウントを取得」
API 参照名: (自動入力されますが、必要に応じて調整)
[オブジェクト] で「取引先」を選択します。
[レコードを絞り込み] セクションで、以下の条件を設定します。
項目: 「種別」(API 参照名: Type)を選択します。
演算子: 「次の文字列と一致する」を選択します。
値: 「顧客」と入力します。
[取得するレコード数] は [すべてのレコード] を選択します。
[レコードデータを保存する方法] は [すべてのレコードの項目を自動的に保存] を選択します。
[完了] をクリックします。
このステップでは、前のステップで取得した複数の取引先レコード(コレクション)を一つずつ処理するために、ループ要素を追加します。
キャンバスで、[レコードを取得] 要素(前のステップで作成した「顧客アカウントを取得」)の下にある [+] アイコンをクリックします。
[要素] メニューから [ループ] を選択します。
[新規ループ] パネルで、以下の項目を設定します。
表示ラベル: 「各アカウントを処理」
API 参照名: (自動入力されますが、必要に応じて調整)
[コレクション変数]: [レコードを取得] 要素で取得した取引先レコードのコレクション(例: {!Get_Customer_Accounts} のように、通常は「レコードを取得」要素のAPI参照名が自動的にコレクション変数として利用可能になります)を選択します。
ヒント: 通常、[レコードを取得] 要素のAPI参照名の後に (レコードコレクション) と表示されているものが該当します。
[反復の方向]:
[最初の項目から最後の項目へ] を選択します。
[完了] をクリックします。
この数式は、ループで現在処理している取引先レコードの「開始日」が、現在の月と年と同じであるかを判断するために使用します。
キャンバスの左側にある [マネージャー] タブをクリックします。
[新規リソース] をクリックします。
[リソース種別] で [数式] を選択します。
[API 参照名] に「IsStartDateInCurrentMonthAndYear」など、分かりやすい名前を入力します。
[データ型] の戻り値を [Boolean] に設定します。
[数式] に以下の式を入力します。
MONTH({!Loop_through_Account_Records.Start_Date__c}) = MONTH(TODAY()) && YEAR({!Loop_through_Account_Records.Start_Date__c}) = YEAR(TODAY())
このステップでは、ループで現在処理している取引先レコードの「開始日」が、現在の月と年と同じである場合にのみ次の処理に進むように、決定要素を追加します。
キャンバスで、[ループ] 要素(前のステップで作成した「各アカウントを処理」)の直後にある [+] アイコンをクリックします。
[要素] メニューから [決定] を選択します。
[新規決定] パネルで、以下の項目を設定します。
表示ラベル: 「開始日が今月かどうか」
API 参照名: (自動入力されますが、必要に応じて調整)
[結果の要件] セクションで、新しい結果を作成します。
表示ラベル: 「開始日は今月」
API 参照名: (自動入力されますが、必要に応じて調整)
条件の要件を設定: [すべての条件に一致 (AND)] を選択します。
リソース: 先ほど作成した数式リソース(例: {!IsStartDateInCurrentMonthAndYear})を選択します。
演算子: 「次の文字列と一致する」を選択します。
値: 「{!$GlobalConstant.True}」を選択します。
[完了] をクリックします。
このステップでは、条件に合致した取引先レコードを一時的に格納するためのコレクション変数を作成します。後でこれらのレコードを一括で更新するために使用します。
キャンバスの左側にある [マネージャー] タブをクリックします。
[新規リソース] をクリックします。
[リソース種別] で [変数] を選択します。
[API 参照名] に「AccountsToUpdate」など、分かりやすい名前を入力します。
[データ型] を [レコード] として選択します。
[複数の値を許可 (コレクション)] のチェックボックスを [True] に設定します。
[変数] のオブジェクトとして [取引先] を選択します。(これは、このコレクションに格納されるレコードのタイプを示します)
[入力/出力に使用可能] のチェックボックスは、このフローの目的には通常必要ありませんが、もしこの変数をサブフローや他のプロセスから参照・更新したい場合は [True] に設定します。今回はこのフロー内で完結するため、設定しなくても問題ありません。
[完了] をクリックします。
このステップでは、前の決定要素で「開始日が今月」と判断された取引先レコードを、ステップ9で作成したコレクション変数に追加します。これにより、後でこれらのレコードを一括で更新できるようになります。
キャンバスで、[決定] 要素(前のステップで作成した「開始日が今月かどうか」)の「開始日は今月」パスの隣にある [+] アイコンをクリックします。
[要素] メニューから [割り当て] を選択します。
[新規割り当て] パネルで、以下の項目を設定します。
表示ラベル: 「コレクションにアカウントを追加」
API 参照名: (自動入力されますが、必要に応じて調整)
[変数の値を設定] セクションで、以下の項目を設定します。
変数: ステップ9で作成したコレクション変数(例: {!AccountsToUpdate})を選択します。
演算子: 「追加」を選択します。
値: ループで現在処理しているレコード変数(例: {!Loop_through_Account_Records} のように、通常は[ループ]要素のAPI参照名が自動的にループ変数として利用可能になります)を選択します。
ヒント: 通常、[ループ] 要素のAPI参照名の後に (現在の項目) と表示されているものが該当します。
[完了] をクリックします。
このステップでは、ステップ9で作成した AccountsToUpdate コレクション変数に格納されたレコードを、さらに処理するために新しいループを追加します。
重要: この「ステップ11」は、通常、すべての対象レコードをコレクションに集めた後、そのコレクションに対して一括で更新処理を行う場合に必要となります。もし、前のループ(ステップ6)の中で個々のレコードを直接更新するロジックを組むのであれば、この追加のループは不要になる可能性があります。
しかし、指示に従い、コレクションを反復処理する新しいループを追加する手順を説明します。
キャンバスで、最初のループ(ステップ6で作成した「各アカウントを処理」)の終了後(通常は、そのループの要素から外れた、キャンバス上の別の場所)にある [+] アイコンをクリックします。
または、フローのメインパスの、最初のループの後に続く場所にこの新しいループを配置します。
[要素] メニューから [ループ] を選択します。
[新規ループ] パネルで、以下の項目を設定します。
表示ラベル: 「更新対象アカウントを処理」
API 参照名: (自動入力されますが、必要に応じて調整)
[コレクション変数]: ステップ9で作成したコレクション変数(例: {!AccountsToUpdate})を選択します。
[反復の方向]:
[最初の項目から最後の項目へ] を選択します。
[完了] をクリックします。
このステップでは、ループで現在処理している個々の取引先レコードの情報を一時的に保持するための単一レコード変数を作成します。これは、そのレコードの項目を更新するために使用します。
重要: この指示は、通常、ループ内でレコードの項目値を変更し、後でその変更をデータベースに保存する準備をする際に必要になります。
キャンバスの左側にある [マネージャー] タブをクリックします。
[新規リソース] をクリックします。
[リソース種別] で [変数] を選択します。
[API 参照名] に「CurrentAccountInLoop」など、分かりやすい名前を入力します。
[データ型] を [レコード] として選択します。
[オブジェクト] で [取引先] を選択します。(これは、この変数に格納されるレコードのタイプを示します)
[複数の値を許可 (コレクション)] のチェックボックスはオフのままにします。これは単一のレコードを保持するための変数だからです。
[入力/出力に使用可能] のチェックボックスは、このフローの目的には通常必要ありませんが、もしこの変数をサブフローや他のプロセスから参照・更新したい場合は [True] に設定します。今回はこのフロー内で完結するため、設定しなくても問題ありません。
[完了] をクリックします。
この数式は、取得した取引先レコードの「開始日」に12ヶ月を加算し、更新後の日付を算出するために使用します。
キャンバスの左側にある [マネージャー] タブをクリックします。
[新規リソース] をクリックします。
[リソース種別] で [数式] を選択します。
[API 参照名] に「StartDatePlus12Months」など、分かりやすい名前を入力します。
[データ型] の戻り値を [日付] に設定します。(「開始日」項目が日付型のため)
[数式] に以下の式を入力します。
ADDMONTHS({!CurrentAccountInLoop.StartDate__c}, 12)
このステップでは、ループで現在処理している取引先レコードの「開始日」を、ステップ13で作成した数式を使って更新します。この変更は、レコードをデータベースに保存する前の準備作業となります。
キャンバスで、2つ目のループ(ステップ11で作成した「更新対象アカウントを処理」)の直後にある [+] アイコンをクリックします。
[要素] メニューから [割り当て] を選択します。
[新規割り当て] パネルで、以下の項目を設定します。
表示ラベル: 「開始日を更新」
API 参照名: (自動入力されますが、必要に応じて調整)
[変数の値を設定] セクションで、以下の項目を設定します。
変数: ステップ12で作成した単一レコード変数(例: {!CurrentAccountInLoop})を選択します。
演算子: 「次の値と一致する」を選択します。
値: ループで現在処理しているレコード(例: {!Loop_through_AccountsToUpdate} のように、ステップ11のループのAPI参照名がここで利用可能になります)を選択します。
ヒント: 2つ目のループのAPI参照名の後に (現在の項目) と表示されているものが該当します。
続けて、新しい行を追加して、更新された「開始日」をレコード変数に割り当てます。
変数: ステップ12で作成した単一レコード変数(例: {!CurrentAccountInLoop})の「開始日」項目(例: {!CurrentAccountInLoop.StartDate__c})を選択します。
演算子: 「次の値と一致する」を選択します。
値: ステップ13で作成した数式リソース(例: {!StartDatePlus12Months})を選択します。
[完了] をクリックします。
このステップでは、開始日が更新された個々の取引先レコードを一時的に格納するための新しいコレクション変数を作成します。このコレクションは、最終的にすべての変更を一括でデータベースに保存するために使用されます。
キャンバスの左側にある [マネージャー] タブをクリックします。
[新規リソース] をクリックします。
[リソース種別] で [変数] を選択します。
[API 参照名] に「AccountsToFinalUpdate」など、分かりやすい名前を入力します。
[データ型] を [レコード] として選択します。
[複数の値を許可 (コレクション)] のチェックボックスを [True] に設定します。
[変数] のオブジェクトとして [取引先] を選択します。(これは、このコレクションに格納されるレコードのタイプを示します)
[入力/出力に使用可能] のチェックボックスは、このフローの目的には通常必要ありませんが、もしこの変数をサブフローや他のプロセスから参照・更新したい場合は [True] に設定します。今回はこのフロー内で完結するため、設定しなくても問題ありません。
[完了] をクリックします。
このステップでは、ステップ14で「開始日」が更新された個々の取引先レコードを、ステップ15で作成した最終更新用のコレクション変数に追加します。これにより、ループの最後にすべての変更を一括でデータベースに保存する準備が整います。
キャンバスで、[割り当て] 要素(前のステップ14で作成した「開始日を更新」)の直後にある [+] アイコンをクリックします。
[要素] メニューから [割り当て] を選択します。
[新規割り当て] パネルで、以下の項目を設定します。
表示ラベル: 「更新対象コレクションに追加」
API 参照名: (自動入力されますが、必要に応じて調整)
[変数の値を設定] セクションで、以下の項目を設定します。
変数: ステップ15で作成した最終更新用のコレクション変数(例: {!AccountsToFinalUpdate})を選択します。
演算子: 「追加」を選択します。
値: ステップ12で作成した単一レコード変数(例: {!CurrentAccountInLoop})を選択します。
ヒント: この変数には、ステップ14で開始日が更新されたレコードが格納されています。
[完了] をクリックします。
この最終ステップでは、これまでに変更を加えてきたすべての取引先レコードの情報を、Salesforceデータベースに一括で保存します。これにより、フローが毎月7日に実行されると、対象のアカウントの開始日が自動的に12ヶ月更新されます。
キャンバスで、2つ目のループ(ステップ11で作成した「更新対象アカウントを処理」)の直後にある [+] アイコンをクリックします。
[要素] メニューから [レコードを更新] を選択します。
[新規レコードを更新] パネルで、以下の項目を設定します。
表示ラベル: 「更新されたアカウントを保存」
API 参照名: (自動入力されますが、必要に応じて調整)
[レコードを検索およびレコードを更新する方法] で、[レコードまたはレコードコレクションからの ID およびすべての項目値を使用] オプションを選択します。
このオプションは、コレクション変数に含まれる各レコードのIDに基づいてレコードを識別し、コレクション内のレコードのすべての更新済み項目値をデータベースに適用するようフローに指示します。
[更新するレコードを保存するレコード変数またはレコードコレクション] で、ステップ15で作成した最終更新用のコレクション変数(例: {!AccountsToFinalUpdate})を選択します。
[完了] をクリックします。
テスト:
結果:
_________________________________________________________________
作成者:Maham Hassan | フォーラムアンバサダー
Maham Hassan は、2 児の母であり、Salesforce MVP、Cloud-1 および Check Automate のディレクター兼テクニカルアーキテクト、Dubai Dreamin の創設者でもあります。加えて、16 の認定資格を持つ、Trailblazer メンター、コミュニティグループリーダー、オールスターレンジャーです。
これらの回答は回答を提供したユーザーの意見のみを反映したものであり、ユーザーが Salesforce と提携しているか否かにかかわらず Salesforce の意見ではありません。第三者によって、または第三者に代わって提供された製品、サービス、情報、データ、コンテンツ、その他の資料 (以下「第三者資料」) が含まれる場合があります。 Salesforce は第三者資料の正確性、有効性、適時性、網羅性、信頼性、完全性、品質、適法性、有用性、安全性、該当する知的財産権について、管理も支持もしておらず、それに関する責任を負いません。投稿された質問に対してメッセージボードやフォーラムで提供された回答、Salesforce やプログラムに関する質問などに答えることを意図した回答は、一般的な知識としてのみ利用でき、特定の質問に対する回答として捉えないでください (「最良」な回答または同様の評価がされた回答としてマークされている場合でも同様です)。特定の質問に対する回答は、必ず Salesforce サポートにお問い合わせください。Salesforce は回答を管理しておらず、回答の第三者による使用または誤用 (共有を含む) について一切責任を負いません。
ご質問がある場合は、こちら (https://trailhead.salesforce.com/trailblazer-community/feed) から Trailblazer Community 全体の英知を活用してください。
001979869

We use three kinds of cookies on our websites: required, functional, and advertising. You can choose whether functional and advertising cookies apply. Click on the different cookie categories to find out more about each category and to change the default settings.
Privacy Statement
Required cookies are necessary for basic website functionality. Some examples include: session cookies needed to transmit the website, authentication cookies, and security cookies.
Functional cookies enhance functions, performance, and services on the website. Some examples include: cookies used to analyze site traffic, cookies used for market research, and cookies used to display advertising that is not directed to a particular individual.
Advertising cookies track activity across websites in order to understand a viewer’s interests, and direct them specific marketing. Some examples include: cookies used for remarketing, or interest-based advertising.