# CRM セールスパイプラインの可視化

## 1. はじめに

### 1.1 前書き

本章は [NocoBase で CRM のリード変換を実現する方法](https://www.nocobase.com/cn/tutorials/how-to-implement-lead-conversion-in-nocobase) シリーズチュートリアルの第 2 部です。前章では、リード変換の基礎知識を紹介しました。必要なデータ Collection の作成、データ管理ページの設定、リードから会社・連絡先・商談への変換機能の実装について説明しました。本章ではリードのフォローアッププロセスとステータス管理の実装に焦点を当てます。

[NocoBase CRM ソリューションが正式にリリースされました！ぜひお試しください](https://www.nocobase.com/cn/blog/crm-solution)

### 1.2 本章の目標

本章では、NocoBase で CRM のリード変換を実現する方法を一緒に学びます。リードのフォローアップとステータス管理を通じて、業務効率を向上させ、より精密な営業プロセス管理を実現できます。

### 1.3 最終イメージのプレビュー

前章では、リードと会社・連絡先・商談のデータを関連管理する方法を説明しました。ここではリードモジュールに焦点を当て、リードのフォローアップとステータス管理の方法について解説します。まずは以下の動作イメージをご覧ください：
![](https://static-docs.nocobase.com/202502250226-transfer3.gif)

## 2. リード Collection の構造説明

### 2.1 リード Collection の紹介

リードフォローアップ機能において、「ステータス」（status）フィールドは非常に重要な役割を果たします。リードの現在の進捗状況（未適格、新規リード、対応中、フォローアップ中、取引進行中、完了など）を反映するだけでなく、フォーム全体の表示と変化を制御します。以下の table block は、リード collection のフィールド構造とその詳細な説明を示しています：


| Field name     | フィールド表示名 | Field interface  | Description                                                                          |
| -------------- | ---------------- | ---------------- | ------------------------------------------------------------------------------------ |
| id             | **Id**             | Integer          | 主キー                                                                               |
| account_id     | **account_id**     | Integer          | 会社テーブル ACCOUNT の外部キー                                                      |
| contact_id     | **contact_id**     | Integer          | 連絡先テーブル CONTACT の外部キー                                                    |
| opportunity_id | **opportunity_id** | Integer          | 商談テーブル OPPORTUNITY の外部キー                                                  |
| name           | **リード名**       | Single line text | 潜在顧客の氏名                                                                       |
| company        | **会社名**         | Single line text | 潜在顧客が所属する会社名                                                             |
| email          | **メールアドレス** | Email            | 潜在顧客のメールアドレス                                                             |
| phone          | **電話番号**       | Phone            | 電話番号                                                                             |
| status         | **ステータス**     | Single select    | リードの現在のステータス。デフォルトは「未適格」（未適格, 新規リード, 対応中, フォローアップ中, 取引進行中, 完了） |
| Account        | **会社**           | Many to one      | 会社への関連                                                                         |
| Contact        | **連絡先**         | Many to one      | 連絡先への関連                                                                       |
| Opportunity    | **商談**           | Many to one      | 商談への関連                                                                         |

## 3. Leads テーブルブロック（table block）と詳細ブロックの作成

### 3.1 作成手順

まず、必要なフィールドを表示するための「Leads」table block を作成します。同時に、ページ右側に詳細ブロックを設定し、レコードをクリックすると右側に対応する詳細情報が自動的に表示されるようにします。以下の図で設定イメージを確認してください：
![](https://static-docs.nocobase.com/20250226090009.png)

## 4. 操作ボタンの設定

### 4.1 ボタンの概要説明

さまざまな操作ニーズに対応するために、合計 10 個のボタンを作成する必要があります。各ボタンはレコードのステータス（status）に応じて異なる表示方式（非表示、有効化、無効化）を採用し、ユーザーを正しい業務フローに沿って誘導します。
![20250311083825](https://static-docs.nocobase.com/20250311083825.png)

### 4.2 各機能ボタンの詳細設定


| ボタン                      | スタイル                             | 操作                                                           | 連動ルール                                                                                       |
| --------------------------- | ------------------------------------ | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| 編集ボタン                  | 編集操作                             | ---                                                            | レコードの status が「Completed」（完了）の場合、自動的に無効化し不要な編集を防止。               |
| 未適格ボタン（アクティブ）  | "Unqualified >"                      | レコードの status を「Unqualified」に更新。                     | デフォルトで表示。status が「Completed」の場合、ボタンは無効化。                                  |
| 新規リードボタン（非アクティブ） | データ更新操作、"New >"          | status を「New」に設定。更新成功後「New」のメッセージを表示。    | レコードの status が「Unqualified」でない場合は非表示。（レコードがすでに「New」以降の場合、アクティブ状態にすべき） |
| 新規リードボタン（アクティブ） | データ更新操作、"New >"            | レコードの status を「New」に更新。                             | status が「Unqualified」の場合は非表示。status が「Completed」の場合、ボタンは無効化。            |
| 対応中ボタン（非アクティブ） | データ更新操作、"Working >"         | status を「Working」に更新し、「Working」の成功メッセージを表示。| レコードの status が「Unqualified」「New」でない場合は非表示。                                    |
| 対応中ボタン（アクティブ）  | データ更新操作、"Working >"          | レコードの status を「Working」に更新。                         | status が「Unqualified」「New」の場合は非表示。status が「Completed」の場合、ボタンは無効化。     |
| フォローアップ中ボタン（非アクティブ） | データ更新操作、"Nurturing >"  | status を「Nurturing」に設定し、「Nurturing」の成功メッセージを表示。 | レコードの status が「Unqualified」「New」「Working」でない場合は非表示。                    |
| フォローアップ中ボタン（アクティブ） | データ更新操作、"Nurturing >"    | レコードの status を「Nurturing」に更新。                       | status が「Unqualified」「New」「Working」の場合は非表示。status が「Completed」の場合、ボタンは無効化。 |
| 変換ボタン                  | 編集操作、"transfer"、アイコン "√"  | 変換フォームをポップアップ表示。フォーム送信時に status を「Completed」に更新。 | レコードの status が「Completed」の場合、重複変換を防ぐため非表示。                         |
| 変換完了ボタン（アクティブ） | 閲覧操作、"transfered"、アイコン "√" | 変換完了後の情報表示のみ。編集機能なし。                       | レコードの status が「Completed」の場合のみ表示。その他のステータスでは非表示。                   |

- 連動ルールの例：
  対応中（非アクティブ）
  ![20250311084104](https://static-docs.nocobase.com/20250311084104.png)
  対応中（アクティブ）
  ![20250311083953](https://static-docs.nocobase.com/20250311083953.png)
- 変換フォーム：
  変換ボタン（非アクティブ）
  ![](https://static-docs.nocobase.com/20250226094223.png)
  変換ボタン（アクティブ）
  ![](https://static-docs.nocobase.com/20250226094203.png)
- 変換送信時のメッセージ表示：
  ![20250311084638](https://static-docs.nocobase.com/20250311084638.png)

### 4.3 ボタン設定のまとめ

- 各機能には、非アクティブとアクティブの 2 つの状態で異なるボタンスタイルが用意されています。
- 連動ルールを活用して、レコードの status に基づいてボタンの表示を動的に制御（非表示または無効化）し、営業担当者を正しいワークフローに沿って誘導します。

## 5. フォーム連動ルールの設定

### 5.1 ルール 1：名前のみ表示

- レコードが未確認の場合、名前のみを表示します。
  ![](https://static-docs.nocobase.com/20250226092629.png)
  ![](https://static-docs.nocobase.com/20250226092555.png)

### 5.2 ルール 2：「新規リード」ステータスでの表示最適化

- status が「新規リード」の場合、ページで会社名を非表示にし、連絡先情報を表示します。
  ![](https://static-docs.nocobase.com/20250226092726.png)

## 6. ページ Markdown ルールと Handlebars 構文

### 6.1 動的テキスト表示

ページでは、Handlebars 構文を使用してレコードのステータスに応じた異なるヒント情報を動的に表示します。以下は各ステータスのサンプルコードです：

ステータスが「未適格」の場合：

```markdown
{{#if (eq $nRecord.status "未達標")}}
**不適格リードの関連情報を追跡します。**  
リードが製品に興味がない、または関連会社を離れている場合は、不適格である可能性があります。  
- 今後の参考のために学んだ教訓を記録する  
- 連絡先の詳細と連絡方法を保存する  
{{/if}}
```

ステータスが「新規リード」の場合：

```markdown
{{#if (eq $nRecord.status "新線索")}}
**このリードについてより多くの情報を収集します。**  
- 潜在顧客のニーズや関心事を把握する
- 基本的な連絡先情報と会社の背景を収集する
- フォローアップの優先度と方法を決定する
{{/if}}
```

ステータスが「対応中」の場合：

```markdown
{{#if (eq $nRecord.status "処理中")}}
**リードに積極的にコンタクトし、ニーズを初期評価します。**  
- 電話/メールで潜在顧客とのつながりを確立する
- 顧客が直面している課題を把握する
- 顧客のニーズと自社製品/サービスの適合度を初期判断する
{{/if}}
```

ステータスが「フォローアップ中」の場合：

```markdown
{{#if (eq $nRecord.status "跟進中")}}
**顧客のニーズを深掘りし、リードを育成します。**  
- 関連する製品資料やソリューション提案を提供する
- 顧客の質問に回答し、懸念を解消する
- リードの変換可能性を評価する
{{/if}}
```

ステータスが「変換完了」の場合：

```markdown
{{#if (eq $nRecord.status "転化完成")}}
**リードが顧客に正常に変換されました。**  
- 関連する会社と連絡先のレコードが作成されていることを確認する
- 商談レコードを作成し、フォローアップ計画を設定する
- 関連資料とコミュニケーション記録を担当営業に引き継ぐ
{{/if}}
```

## 7. 変換完了後の関連オブジェクトとジャンプリンクの表示

### 7.1 関連オブジェクトの説明

変換完了後、関連オブジェクト（会社、連絡先、商談）を表示し、詳細ページに直接ジャンプできるようにします。
この場合、任意の詳細ポップアップ（例えば会社）を見つけて、リンクをコピーします。
![20250311085502](https://static-docs.nocobase.com/20250311085502.png)
他のポップアップやページでは、詳細リンク形式の最後の部分（filterbytk の後の数字）が現在のオブジェクトの id を表します。例：

```text
{Base URL}/admin/w3yyu23uro0/popups/ki0wcnfruj6/filterbytk/{id}
```

### 7.2 Handlebars を使用した関連リンクの生成

会社：

```markdown
{{#if (eq $nRecord.status "已完成")}}
**会社:**
[{{$nRecord.account.name}}](w3yyu23uro0/popups/ki0wcnfruj6/filterbytk/{{$nRecord.account_id}})
{{/if}}
```

連絡先：

```markdown
{{#if (eq $nRecord.status "已完成")}}
**連絡先:**
[{{$nRecord.contact.name}}](1oqybfwrocb/popups/8bbsqy5bbpl/filterbytk/{{$nRecord.contact_id}})
{{/if}}
```

商談：

```markdown
{{#if (eq $nRecord.status "已完成")}}
**商談:**
[{{$nRecord.opportunity.name}}](si0io9rt6q6/popups/yyx8uflsowr/filterbytk/{{$nRecord.opportunity_id}})
{{/if}}
```

![](https://static-docs.nocobase.com/20250226093501.png)

## 8. 関連オブジェクトを非表示にして値を保持する

変換完了後に関連情報を正常に表示するために、「会社」「連絡先」「商談」のステータスを「非表示（値を保持）」に設定する必要があります。これにより、これらのフィールドはフォーム上に表示されませんが、値は引き続き記録・伝達されます。
![](https://static-docs.nocobase.com/20250226093906.png)

## 9. 変換完了後のステータス変更を防止する

変換完了後にステータスが誤って変更されるのを防ぐため、すべてのボタンに判定条件を追加しました。ステータスが「完了」の場合、すべてのボタンが無効化されます。
![](https://static-docs.nocobase.com/20250226094302.png)

## 10. おわりに

以上のすべてのステップが完了すれば、リードフォローアップ変換機能の構築は完了です！本章のステップバイステップの解説を通じて、NocoBase におけるステータスフォーム連動の実装方法をより明確に理解していただけたのではないでしょうか。操作がスムーズに進むことを願っています。お疲れさまでした！
