この記事では、見積りPDF作成+添付メール送信のレコードトリガーフローの作成手順をご紹介いたします。
※レコードトリガーフローで呼び出し可能なPDF作成機能はOffice File Creator Proで使用可能です。
処理概要
処理
- 見積り依頼のケースが新規作成されたら、レコードトリガーフローで商品コードに対応する価格を価格表から取得し、見積り金額などの見積り情報を更新します。
- OFCのアクションより見積りPDFを作成し、添付メールを取引先責任者に送信します。
前提条件
- ケース作成時、Salesforce内の取引先責任者のメールアドレスに一致する取引先責任者が自動で設定されます。
- フローからメール送信時、メールテンプレートを使用し、見積送信用のメールテンプレートを作成済みです。
- 見積りPDF用のテンプレートファイルおよびOFC_Templateレコードは作成済みです。
- ケースには、商品名(ProductName__c)、商品コード(ProductCode__c)、数量(Quantity__c)、単価(UnitPrice__c)、小計(SubTotal__c)、消費税(SalesTax__c)、合計金額(Amount__c)、見積発行日(QuoteDate__c)、メール送信日時(SendEmailDateTime__c)、エラー詳細(ErrorDetails__c)のカスタム項目を作成しています。
フロー全体像
作成するフローの全体像です。
1. 価格表取得
価格表レコードを取得します。
2. 価格表エントリ取得
価格表エントリレコードを取得します。
3. ケース更新(見積り情報)
価格表の金額より、ケースレコードの見積金額など見積り情報を更新します。
4. 金額が0円判定
金額が0円か判定します。0円の場合、4eへ進みます。0円でない場合、5へ進みます。
4e. ケース更新(金額エラー)
ケースステータスを"金額エラー"に更新し、フローを終了します。
5. OFC – Save as PDF
「OFC - Save as PDF」アクションを呼び出し、見積りPDFをケースレコードに添付して保存します。
6. OFCエラー判定
OFCアクションの結果より、エラーを判定します。エラーの場合、6eへ進みます。成功の場合、7へ進みます。
6e. ケース更新(PDF作成エラー)
ケースステータスを"PDF作成エラー"に更新し、フローを終了します。
7. メールテンプレート取得
見積りメール送信用のメールテンプレートレコードを取得します。
8. 見積り添付メール送信
「メールを送信」アクションを呼び出し、ケースの取引先責任者へ見積りPDFを添付してメールを送信します。フローの障害が発生した場合、8eへ進みます。障害が無い場合、9へ進みます。
8e. ケース更新(メール送信エラー)
ケースステータスを"メール送信エラー"に更新し、フローを終了します。
9. ケース更新(完了)
ケースステータスを"完了"に更新し、フローを終了します。
フロー作成のポイント
- PDFの差し込み項目に使用する項目は「即時実行」で更新し、PDF作成とメール送信は「非同期に実行」で実行します。
- 見積りPDFの作成は、OFCの「OFC – Save as PDF」アクションを呼び出します。アクション実行後、結果(成功・失敗)を取得し、失敗の場合はエラーメッセージを返却します。
- 添付メール送信は、フローのメール送信アクションより送信します。添付ファイルIdはOFCのアクションの結果で取得したcontentVersionIdを設定します。
フロー作成
設定よりフローを開き、「新規フロー」ボタンをクリックします。
「最初から開始」を選択し、「次へ」ボタンをクリックします。
「レコードトリガーフロー」を選択し、「作成」ボタンをクリックします。
開始を設定します。
オブジェクト: ケース
フローをトリガーする条件: レコードが作成された
条件の要件: すべての条件に一致 (AND)
項目: Origin 演算子: 次の文字列と一致する 値: Web (見積り依頼)
項目: SendEmailDateTime__c 演算子: null 値: {!$GlobalConstant.True}
「アクションと関連レコード」を選択し、「トリガーレコードの元のトランザクションが正常にコミットされた後に外部システムにアクセスするには、非同期に実行パスを含めます。」をチェックオンにします。
フローを保存しておきます。「保存」ボタンをクリックします。
プロパティを設定し、「保存」ボタンをクリックします。
フローの表示ラベル: 見積りメール自動送信
フローのAPI参照名: AutoSendQuoteEmail
リソース作成
変数と数式を作成します。
リソース種別: 変数
API参照名 |
データ型 |
小数点の位置 |
varProductName |
テキスト |
|
varUnitPrice |
通貨 |
0 |
リソース種別: 数式
API参照名 |
データ型 |
小数点の位置 |
数式 |
fmlSubtotal |
通貨 |
0 |
{!varUnitPrice} * {!$Record.Quantity__c} |
fmlSalesTax |
通貨 |
0 |
ROUND({!varUnitPrice} * 0.1, 0) |
fmlAmount |
通貨 |
0 |
{!fmlSubtotal} + {!fmlSalesTax} |
1. 価格表取得
「即時実行」の下の「+」マークをクリックし、「レコードを取得」を選択します。
プロパティを設定します。
表示ラベル: 価格表取得
API参照名: GetPriceBook
オブジェクト: 価格表
条件の要件: すべての条件に一致 (AND)
項目: Name 演算子: 次の文字列と一致する 値: 価格表(顧客)
並び替え順: 並び替えなし
保存するレコード数: 最初のレコードのみ
レコードデータの保存方法: すべての項目を自動的に保存
2. 価格表エントリ取得
「価格表取得」の下の「+」マークをクリックし、「レコードを取得」を選択します。
プロパティを設定します。
表示ラベル: 価格表エントリ取得
API参照名: GetPriceBookEntry
オブジェクト: 価格表エントリ
条件の要件: すべての条件に一致 (AND)
項目: ProductCode 演算子: 次の文字列と一致する 値: {!$Record.ProductCode__c}
項目: Pricebook2Id 演算子: 次の文字列と一致する 値: {!GetPriceBook.Id}
並び替え順: 並び替えなし
保存するレコード数: 最初のレコードのみ
レコードデータの保存方法: 項目を選択して変数を割り当てる (高度)
項目値の保存場所: 個別の変数に保存
項目: Name 変数: {!varProductName}
項目: UnitPrice 変数: {!varUnitPrice}
3. ケース更新(見積り情報)
「価格表エントリ取得」の下の「+」マークをクリックし、「トリガーレコードを更新」を選択します。
プロパティを設定します。
表示ラベル: ケース更新(見積り情報)
API参照名: UpdateCase_Quote
更新するレコードを検索してその値を設定する方法: フローをトリガーしたケースレコードを使用
レコードを更新する条件の要件: なし – 常にレコードを更新
項目: Amount__c 値: {!fmlAmount}
項目: ProductName__c 値: {!varProductName}
項目: QuoteDate__c 値: {!$Flow.CurrentDate}
項目: SalesTax__c 値: {!fmlSalesTax}
項目: Subtotal__c 値: {!fmlSubtotal}
項目: UnitPrice__c 値: {!varUnitPrice}
4. 金額が0円判定
「非同期に実行」の下の「+」マークをクリックし、「決定」を選択します。
プロパティを設定します。
表示ラベル: 金額が0円判定
API参照名: DecAmountIs0
表示ラベル: 0円
結果のAPI参照名: DecAmountIs0_Yes
結果を実行する条件の要件: いずれかの条件に一致 (OR)
リソース: {!$Record.Amount__c} 演算子: 以下 値: 0
リソース: {!$Record.Amount__c} 演算子: null 値: {!$GlobalConstant.True}
左サイドバーの「デフォルトの結果」をクリックします。
プロパティを設定します。
表示ラベル: 0円でない
4e. ケース更新(金額エラー)
「0円」の下の「+」マークをクリックし、「トリガーレコードを更新」を選択します。
プロパティを設定します。
表示ラベル: ケース更新(金額エラー)
API参照名: UpdateCase_AmountError
更新するレコードを検索してその値を設定する方法: フローをトリガーしたケースレコードを使用
レコード を更新する条件の要件: なし – 常にレコードを更新
項目: ErrorDetails__c 値: 金額が0円です。
項目: Status 値: 見積り金額エラー
「ケース更新(金額エラー)」の下の「+」マークをクリックし、「終了」を選択します。
5. OFC – Save as PDF
「0円でない」の下の「+」マークをクリックし、「アクション」を選択します。
検索ボックスに"OFC"を入力し、「OFC – Save as PDF」を選択します。
プロパティを設定します。
表示ラベル: OFC - Save as PDF
API参照名: OFC_Save_as_PDF
execution name: 見積りメール自動送信フロー
recordId: {!$Record.Id}
template: CaseQuote ※見積りテンプレートのOFC_Templateレコード
6. OFCエラー判定
「OFC – Save as PDF」の下の「+」マークをクリックし、「決定」を選択します。
プロパティを設定します。
表示ラベル: OFCエラー判定
API参照名: DecOFCIsError
表示ラベル: エラー
結果のAPI参照名: DecOFCIsError_Yes
結果を実行する条件の要件: すべての条件に一致 (AND)
リソース: {!OFC_Save_as_PDF.isSuccess} 演算子: 次の文字列と一致する 値: {!$GlobalConstant.False}
左サイドバーの「デフォルトの結果」をクリックします。
プロパティを設定します。
表示ラベル: 成功
6e. ケース更新(PDF作成エラー)
「エラー」の下の「+」マークをクリックし、「トリガーレコードを更新」を選択します。
プロパティを設定します。
表示ラベル: ケース更新(PDF作成エラー)
API参照名: UpdateCase_PDFError
更新するレコードを検索してその値を設定する方法: フローをトリガーしたケースレコードを使用
レコード を更新する条件の要件: なし – 常にレコードを更新
項目: ErrorDetails__c 値: {!OFC_Save_as_PDF.errorMessage}
項目: Status 値: PDF作成エラー
「ケース更新(PDF作成エラー)」の下の「+」マークをクリックし、「終了」を選択します。
7. メールテンプレート取得
「成功」の下の「+」マークをクリックし、「レコードを取得」を選択します。
プロパティを設定します。
表示ラベル: メールテンプレート取得
API参照名: GetEmailTemplate
オブジェクト: メールテンプレート
条件の要件: すべての条件に一致 (AND)
項目: DeveloperName 演算子: 次の文字列と一致する 値: SendQuoteEmail
並び順: 並び替えなし
保存するレコード数: 最初のレコードのみ
レコードデータの保存方法: すべての項目を自動的に保存
8. 見積り添付メール送信
「メールテンプレート取得」の下の「+」マークをクリックし、「アクション」を選択します。
検索ボックスに"メール"を入力し、「メールを送信」を選択します。
プロパティを設定します。
表示ラベル: 見積り添付メール送信
API参照名: SendEmailWithQuote
メールテンプレート ID: {!GetEmailTemplate.Id}
関連レコード ID: {!$Record.Id}
受信者 ID: {!$Record.ContactId}
送信時にメールを記録: {!$GlobalConstant.True}
送信者タイプ: OrgWideEmailAddress
送信者メールアドレス: 組織のメールアドレスを入力
添付ファイル ID: {!OFC_Save_as_PDF.contentVersionId}
8e. ケース更新(メール送信エラー)
「見積り添付メール送信」をクリックし、「障害パスを追加」を選択します。
「障害」の下の「+」マークをクリックし、「トリガーレコードを更新」を選択します。
プロパティを設定します。
表示ラベル: ケース更新(メール送信エラー)
API参照名: UpdateCase_SendEmailError
更新するレコードを検索してその値を設定する方法: フローをトリガーしたケースレコードを使用
レコードを更新する条件の要件: なし – 常にレコードを更新
項目: ErrorDetails__c 値: {!$Flow.FaultMessage}
項目: Status 値: メール送信エラー
9. ケース更新(完了)
「見積り添付メール送信」の下の「+」マークをクリックし、「トリガーレコードを更新」を選択します。
プロパティを設定します。
表示ラベル: ケース更新(完了)
API参照名: UpdateCase_Complete
更新するレコードを検索してその値を設定する方法: フローをトリガーしたケースレコードを使用
レコード を更新する条件の要件: なし – 常にレコードを更新
項目: Status 値: 完了
項目: SendEmailDateTime__c 値: {!$Flow.CurrentDateTime}
これでフローは完成です。「保存」ボタンをクリックします。
デバッグ
ここでは、正常ケースのみ記します。その他、必要に応じてエラーケースを確認します。
ケースレコードをレコード画面より作成します。商品コードや取引先責任者などフローに必要な情報を入力します。
デバッグボタンをクリックします。
条件を設定し、「実行」ボタンをクリックします。
デバッグの実行パス: 即時実行
デバッグオプション: 開始条件の要件をスキップ
ケース: 作成したケース
「即時実行」の結果が、正常に最後まで到達することを確認します。
デバッグの詳細より、各結果が正しいことを確認します。
「再デバッグ」ボタンをクリックします。
条件を設定し、「実行」ボタンをクリックします。
デバッグの実行パス: 非同期に実行
デバッグオプション: 開始条件の要件をスキップ
ケース: 作成したケース
「非同期に実行」の結果が、正常に最後まで到達することを確認します。
デバッグの詳細より、各結果が正しいことを確認します。
デバッグ完了後、「有効化」ボタンをクリックします。
参考