Salesforce Flowで商談商品から注文請書本文を自動生成し、そのまま送信する方法（Apexなし）

## 🎯 目的

Salesforceで「商談」と「商談商品」の内容を元に、注文確認用の本文を自動生成し、  
画面フロー上で確認・修正した上で、そのままメール送信を行う**最小構成の実装手順**を解説します。  
Flow（フロー）だけで完結するシンプルな構成です。

画面フローで表示し、送信前に編集が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017914/3b1b7022-e8cd-407f-a03b-b4bc869eb604.png)

インストール URL：https://login.salesforce.com/packaging/installPackage.apexp?p0=04tIS000000U1R8

---

## 🧩 フロー構成概要

- **フロー種別**：画面フロー（Screen Flow）
- **起動方法**：レコードページボタンなど（商談画面から起動）
- **対象データ**：商談 + 商談商品（Opportunity + OpportunityLineItem）
- **主な構成**：
  - 商談商品の取得（Get Records）
  - 商品一覧テキスト生成（ループ＋数式）
  - 本文テンプレート作成（テキストテンプレート）
  - ユーザーによる修正画面（ロングテキストエリア）
  - メール送信

---
### フロー全体
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017914/64ee0943-644b-4478-aa2f-aab108cea6b3.png)

## 🔧 準備するリソース

### 変数

| API名    | 種別                    | 内容                     |入力で使用可能|
|-----------|-------------------------|--------------------------|-----|
| `recordId` | レコード（Opportunity型） | 起動元の商談ID            |TRUE|
| `var_ProductListText` |テキスト | 商品リスト保管用         |FALSE|

### 商談商品を取得

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017914/8928baa8-e1ba-480c-90f3-58403c957ec1.png)

### 商談商品でループ
※後の数式をコピペしたい方はAPI名を`LoopedItem`にしておいてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017914/99ce2dfc-0b37-4cd9-8a37-c5a4c02ca171.png)


### 数式リソースを作成する
`fx_ItemLine`
```plaintext
{!var_ProductListText} & BR() &
"- " & {!LoopedItem.Product2.Name} & " × " & TEXT({!LoopedItem.Quantity}) & "個　提供予定日：" &
IF(
  ISBLANK({!LoopedItem.ServiceDate}),
  "調整中です。最新状況はお問い合わせ番号XXXXからご確認ください",
  TEXT({!LoopedItem.ServiceDate})
)
```

### 割り当てする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017914/e1b4183b-422e-4ca4-8788-840c38a7e80e.png)

ここでの仕組みは、
1. １つめの商談商品レコードの内容を文字列で繋げる
1. 変数に格納する
1. ２を先頭にして改行し、２つ目の商談商品レコードの内容をーーー

とループさせています。

### テキストテンプレート（FAX本文雛形）
`tt_FaxBody`

```plaintext
【注文内容 確認のご連絡】

{!Opportunity.Account.Name} 御中

以下の内容にて注文を承りました。
ご確認のほど、よろしくお願いいたします。

【商談名】
{!Opportunity.Name}

【ご注文内容】
{!var_ProductListText}

────────────────────
株式会社△△
営業担当：{!$User.FullName}
TEL：{!$User.Phone}
```




## 🖥️ 画面コンポーネント構成
ここは特に工夫していません。
ユーザーがメールを送信するのにあたって必要な情報を並べているだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017914/8e22e726-eef0-455f-9e34-b5d44b70734d.png)

### テキストエリア（ユーザー確認用）

| 設定項目       | 内容                                                  |
|----------------|-------------------------------------------------------|
| ラベル         | FAX送信用本文（修正可能）                               |
| デフォルト値   | `tt_FaxBody`（テキストテンプレート）                   |
| 保存先         | `var_UserEditedBody`（テキスト変数）                   |
| フッターボタン | `Next` を「このまま送信」に変更（ボタンラベルのカスタマイズ） |

---


## 📤 メール送信アクション設定

| 項目     | 内容                                                                 |
|----------|----------------------------------------------------------------------|
| アクション | `Send Email`（標準のメール送信アクション）                           |
| 宛先     | FAXサービスのメールアドレス（例：`03xxxxxxx@fax.example.com`）       |
| 件名     | `注文内容の確認`（任意、定型文でOK）                                   |
| 本文     | `var_UserEditedBody`（ユーザーが修正済みのFAX本文）                   |

---

## 📝 次フェーズへの拡張余地（今回は未対応）

- **下書き保存**  
  商談レコードにロングテキストフィールド（例：`InitialFaxBody__c`）を追加し、  
  ユーザーが修正した本文を保存できるようにする。  
  次回Flow起動時にその内容を初期表示することで再利用可能に。

- **QRコード対応**  
  文中に表示したいURLなどをQRコード化し、  
  PDFに埋め込んで送信する。QR生成には外部サービス or Apexが必要。

- **PDF生成対応**  
  Flowから直接PDFを生成して送信する構成。  
  Apexまたは外部連携サービス（DocuSign, Conga, PDFMonkey など）との連携が必要。

---

## ✅ まとめ

- ✅ Apexなし、FlowだけでFAX送信用本文を構成・送信可能  
- ✅ 商談商品が複数あってもループ＋数式＋テンプレートで対応可能  
- ✅ 画面でのユーザー修正も可能なため、柔軟な運用に対応  
- ✅ 最小構成で構築し、将来的な拡張（QR、PDF、下書き保存）も容易！