# リードフォローアップとステータス管理

## 1. はじめに

### 1.1 本章の目標

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

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

前章では、リードと会社・連絡先・商談のデータを関連管理する方法を説明しました。ここではリードモジュールに焦点を当て、リードのフォローアップとステータス管理の方法について解説します。まずは以下の動作イメージをご覧ください：
![](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      | 会社 Collection への関連                                                 |
| Contact        | **連絡先**         | Many to one      | 連絡先 Collection への関連                                               |
| Opportunity    | **商談**           | Many to one      | 商談 Collection への関連                                                 |

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

### 3.1 作成手順

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

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

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

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

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

#### 4.2.1 編集ボタン

- 連動ルール：レコードの status が「Completed」（完了）の場合、このボタンを自動的に無効化し、不要な編集を防止します。

#### 4.2.2 未適格ボタン 1（非アクティブ）

- スタイルと外観：タイトルは「Unqualified >」と表示されます。
- 操作と動作：クリックすると update 操作が実行され、レコードの status が「Unqualified」に更新されます。更新成功後、前のページに戻り、「Unqualified」の成功メッセージが表示されます。
- 連動ルール：レコードの status が空の場合のみ表示されます。status に値がある場合、このボタンは自動的に非表示になります。

#### 4.2.3 未適格ボタン 2（アクティブ状態）

- スタイルと外観：同じく「Unqualified >」と表示されます。
- 操作と動作：レコードの status を「Unqualified」に更新するために使用します。
- 連動ルール：status が空の場合、このボタンは非表示になります。status が「Completed」の場合、ボタンは無効化されます。

#### 4.2.4 新規リードボタン 1（非アクティブ）

- スタイルと外観：タイトルは「New >」と表示されます。
- 操作と動作：クリックするとレコードが更新され、status が「New」に設定されます。更新成功後、「New」のメッセージが表示されます。
- 連動ルール：レコードの status がすでに「New」、「Working」、「Nurturing」、または「Completed」の場合、このボタンは非表示になります。

#### 4.2.5 新規リードボタン 2（アクティブ状態）

- スタイルと外観：タイトルは同じく「New >」です。
- 操作と動作：同様にレコードを更新し、status を「New」に設定します。
- 連動ルール：status が「Unqualified」または空の場合は非表示になります。status が「Completed」の場合、ボタンは無効化されます。

#### 4.2.6 対応中ボタン（非アクティブ）

- スタイルと外観：タイトルは「Working >」と表示されます。
- 操作と動作：ボタンをクリックすると、レコードの status が「Working」に更新され、「Working」の成功メッセージが表示されます。
- 連動ルール：レコードの status がすでに「Working」、「Nurturing」、または「Completed」の場合、このボタンは非表示になります。

#### 4.2.7 対応中ボタン（アクティブ状態）

- スタイルと外観：タイトルは同じく「Working >」です。
- 操作と動作：レコードの status を「Working」に更新するために使用します。
- 連動ルール：status が「Unqualified」、「New」、または空の場合、このボタンは非表示になります。status が「Completed」の場合、ボタンは無効化されます。

#### 4.2.8 フォローアップ中ボタン（非アクティブ）

- スタイルと外観：タイトルは「Nurturing >」と表示されます。
- 操作と動作：ボタンをクリックすると、レコードの status が「Nurturing」に更新され、「Nurturing」の成功メッセージが表示されます。
- 連動ルール：レコードの status がすでに「Nurturing」または「Completed」の場合、ボタンは非表示になります。

#### 4.2.9 フォローアップ中ボタン（アクティブ状態）

- スタイルと外観：タイトルは同じく「Nurturing >」です。
- 操作と動作：同様にレコードの status を「Nurturing」に更新します。
- 連動ルール：status が「Unqualified」、「New」、「Working」、または空の場合は非表示になります。status が「Completed」の場合、ボタンは無効化されます。

#### 4.2.10 変換ボタン

- スタイルと外観：タイトルは「transfer」と表示され、modal ポップアップ形式で開きます。
- 操作と動作：主にレコードの転送操作を実行するために使用します。更新操作後、ドロワー、Tabs、フォームを含むインターフェースがポップアップ表示され、レコードの転送を行えます。
- 連動ルール：レコードの status が「Completed」の場合、重複した転送を防ぐためにこのボタンは非表示になります。
  ![](https://static-docs.nocobase.com/20250226094223.png)

#### 4.2.11 変換完了ボタン（アクティブ状態）

- スタイルと外観：タイトルは「transfered」と表示され、同じく modal ポップアップ形式で開きます。
- 操作と動作：このボタンは変換完了後の情報表示にのみ使用され、編集機能はありません。
- 連動ルール：レコードの status が「Completed」の場合のみ表示されます。その他のステータス（「Unqualified」、「New」、「Working」、「Nurturing」、または空）の場合は非表示になります。
  ![](https://static-docs.nocobase.com/20250226094203.png)

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

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

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

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

- レコードが未確認または status が空の場合、名前のみを表示します。
  ![](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 関連オブジェクトの説明

変換完了後、関連オブジェクト（会社、連絡先、商談）を表示し、詳細ページへのジャンプリンクを付けます。他のポップアップやページでは、詳細リンク形式の最後の部分（filterbytk の後の数字）が現在のオブジェクトの id を表します。例：

```text
http://localhost:13000/apps/tsting/admin/w3yyu23uro0/popups/ki0wcnfruj6/filterbytk/1
```

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

会社の場合：

```markdown
{{#if (eq $nRecord.status "已完成")}}
**Account:**
[{{$nRecord.account.name}}](http://localhost:13000/apps/tsting/admin/w3yyu23uro0/popups/ki0wcnfruj6/filterbytk/{{$nRecord.account_id}})
{{/if}}
```

連絡先の場合：

```markdown
{{#if (eq $nRecord.status "已完成")}}
**Contact:**
[{{$nRecord.contact.name}}](http://localhost:13000/apps/tsting/admin/1oqybfwrocb/popups/8bbsqy5bbpl/filterbytk/{{$nRecord.contact_id}})
{{/if}}
```

商談の場合：

```markdown
{{#if (eq $nRecord.status "已完成")}}
**Opportunity:**
[{{$nRecord.opportunity.name}}](http://localhost:13000/apps/tsting/admin/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 におけるステータスフォーム連動の実装方法をより明確に理解していただけたのではないでしょうか。操作がスムーズに進むことを願っています。お疲れさまでした！
