snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 3s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
---
title: 期限付きタスクのカレンダービューを作成
description: タスクと期限をカレンダー上で可視化します。
---
<img src="/images/user-guide/views/calendar-view-zoom.png" style={{width:'100%'}} />
## 前提条件
タスク オブジェクトには、**期限日** フィールド(「日付」または「日付と時刻」タイプ)が必要です。
## 手順
1. **タスク** に移動します
2. ビューのドロップダウンをクリックし、**+ ビューを追加**を選択します
3. ビューに名前を付けます(例: "タスク カレンダー")。
4. **作成** をクリックします
5. **オプション** をクリックし、レイアウトとして **カレンダー** を選択します
6. 日付フィールドとして **期限日** を選択します
7. **保存**をクリック
## カレンダーの設定
### イベントにフィールドを表示
1. **オプション → フィールド**をクリックします
2. フィールドの表示/非表示を切り替えるには、**目のアイコン**をクリックします
3. ドラッグして並べ替えます
表示を推奨するフィールド:
* **タイトル** — タスク名
* **担当者** — 誰が担当か
* **ステータス** — 現在の進捗
### カレンダーを絞り込む
目的別のビューを作成:
* **自分のタスク**: 担当者 = 自分 でフィルター
* **今週**: 期日 = 今週 でフィルター
* **期限超過**: 期日 < 今日、ステータス ≠ 完了でフィルタリング
## その他のカレンダーのユースケース
| オブジェクト | 日付フィールド | 目的 |
| -------- | ------- | ------------------ |
| 商談 | 締切日 | 予定される締切を追跡する |
| カスタムイベント | イベント日 | アクティビティを計画する |
| プロジェクト | 期限 | プロジェクトのタイムラインを監視する |
## ヒント
* **毎週見直す**: 毎週の始めにカレンダービューを確認する
* **テーブルビューと組み合わせる**: 概要はカレンダー、詳細はテーブルを使用する
* **可視性を設定**: 個人タスクのカレンダーは Unlisted のままにする
## 関連
* [カレンダービュー](/l/ja/user-guide/views-pipelines/capabilities/calendar-view) — カレンダービューのすべての機能
* [フィルターと並べ替え](/l/ja/user-guide/views-pipelines/capabilities/filters-and-sorting) — カレンダーをフィルタリング

View File

@@ -0,0 +1,80 @@
---
title: プロジェクト用のカンバンビューを作成
description: ビジュアルボードでプロジェクトをステージごとに追跡します。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
カンバンビューを使って、プロジェクト(またはステージのある任意のオブジェクト)を、列間を移動するカードとして可視化します。
<VimeoEmbed videoId="927888627" title="デモ動画" />
## 前提条件
列として使用するには、対象のオブジェクトに **選択フィールド**(例: ステータス、ステージ、フェーズ)が必要です。
まだない場合:
1. **設定 → データモデル** に移動します
2. 対象のオブジェクトを選択します
3. ステージの選択肢を持つ選択フィールドを追加します
## 手順
1. 対象のオブジェクト(例: プロジェクト、タスク)に移動します
2. ビューのドロップダウンをクリックし、**+ ビューを追加**を選択します
3. ビューに名前を付けます(例: "プロジェクト ボード")
4. **作成** をクリックします
5. **オプション** をクリックし、レイアウトとして **カンバン** を選択します
6. ビューは選択フィールドを列として自動的に使用します
7. **保存**をクリック
## ボードを構成する
### カードに主要フィールドを表示
1. **オプション → フィールド** をクリックします
2. 「非表示フィールド」セクションでフィールドを探します
3. カードに表示するには、**目のアイコン**をクリックします
4. ドラッグして並べ替えます
<img src="/images/user-guide/kanban-views/filter.png" style={{width:'100%'}} />
### コンパクトビューを有効にする
全体をざっと確認したい場合:
1. **オプション** をクリックします
2. **コンパクトビュー** をオンにします
カードにはレコード名のみが表示されます。
<img src="/images/user-guide/kanban-views/compact-view.png" style={{width:'100%'}} />
### 集計を追加
各列の上部に件数や合計を表示します:
1. 列名の横の数値をクリックします
2. 集計方法(件数、合計 など)を選択します
3. 必要に応じてフィールドを選択します
## カードの移動
列間でカードをドラッグ&ドロップして、ステータスを更新します。
<VimeoEmbed videoId="927888627" title="デモ動画" />
## 例: タスクボード
| 列(ステータス) | カード |
| -------- | ------ |
| **未着手** | 新規タスク |
| **進行中** | 進行中の作業 |
| **レビュー** | 承認待ち |
| **完了** | 完了 |
## 関連
* [カンバンビュー](/l/ja/user-guide/views-pipelines/capabilities/kanban-views) — 集計、コンパクトビュー、ステージ
* [セールスパイプラインの設定方法](/l/ja/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — 商談向けのカンバン

View File

@@ -0,0 +1,51 @@
---
title: グループ化を使ってテーブルビューを作成
description: フィールド値ごとにレコードを折りたたみ可能なグループに整理します。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Select フィールドでテーブルビューをグループ化し、レコードを折りたたみ可能なセクションに整理します。
<img src="/images/user-guide/table-views/table-group-by.png" style={{width:'100%'}} />
## 手順
1. オブジェクト(人、会社など)に移動します。
2. ビューのドロップダウンをクリックし、**+ ビューを追加**を選択します
3. ビューに名前を付けます(例: "種類別の会社")。
4. **作成** をクリックします
5. **オプション → グループ** をクリックします
6. グループ化の基準にする Select フィールドを選択します
7. **保存**をクリック
## グループの順序を設定
**オプション → グループ → 並べ替え** で、グループの並び順を選択します:
| オプション | 説明 |
| ------------- | -------------------------------- |
| **アルファベット順** | A から Z |
| **アルファベット逆順** | Z から A |
| **手動** | "表示中のグループ" の下で、グループをドラッグして並べ替えます |
グループの横にある **目のアイコン** をクリックして、ビューから非表示にします。
<Note>
**最適なパフォーマンスのため、表示中のグループは10〜15に制限してください。** それ以上が必要な場合は、代わりにダッシュボードの使用を検討してください。
</Note>
## 例:業種別の会社
1. **会社** に移動します
2. "業種別" という名前の新しいビューを作成します
3. **オプション → グループ** をクリックします
4. **業種** フィールドを選択します
5. 保存
これで会社が業種ごとに整理され、1つのセグメントに集中しやすくなります。
## 関連
* [テーブルビュー](/l/ja/user-guide/views-pipelines/capabilities/table-views) — テーブルビューのすべての機能
* [フィルターと並べ替え](/l/ja/user-guide/views-pipelines/capabilities/filters-and-sorting) — グループ化をフィルターと組み合わせる

View File

@@ -0,0 +1,32 @@
---
title: 自分のビューへのアクセスを制限する
description: カスタムビューを誰が閲覧できるかを管理します。
---
各ビュー(デフォルトの「すべての[Object Name]」ビューを除く)には、独自の可視性設定があります。
## 手順
1. 制限したいビューを開きます
2. 右上の**オプション**をクリック
3. **可視性**をクリック
4. **非公開**を選択
これで、ビューは自分にのみ表示されます。
## 可視性のオプション
| 設定 | 閲覧可能なユーザー |
| ----------- | ------------- |
| **ワークスペース** | ワークスペースの全メンバー |
| **非公開** | 自分のみ |
## ノート
* デフォルトの「すべての[Object Name]」ビューは非公開にできません
* 非公開ビューは他のユーザーのビューのドロップダウンに表示されません
* 可視性はいつでもワークスペースに戻すことができます
## 関連
* [ビュー設定](/l/ja/user-guide/views-pipelines/capabilities/view-settings) — ビューのすべての設定オプション

View File

@@ -0,0 +1,120 @@
---
title: セールスパイプラインの設定
description: ステージを介して商談を追跡するための販売パイプラインを設定します。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Twenty の Sales パイプラインは、商談オブジェクトのカンバン ビューです。各列は、販売プロセスのステージを表します。
## ステップ 1: ステージの設定
ステージは商談オブジェクトの **ステージ** 項目で定義されます。
1. **設定 → データモデル** に移動
2. **商談** を選択
3. **ステージ**フィールドを見つけてクリックしてください
4. あなたのプロセスに合わせてステージを追加、削除、またはリネームします
<VimeoEmbed videoId="927890428" title="デモ動画" />
### 推奨ステージ
| ステージ | 目的 |
| ---------- | ---------------- |
| **新しい** | 特定されたばかりの新鮮な機会 |
| **適格** | 良いフィットとして確認されました |
| **ミーティング** | ディスカッションに参加 |
| **提案** | 提案が送信されました |
| **交渉** | 用語で作業する |
| **獲得完了** | 取引が成功しました |
| **閉鎖失敗** | 取引に失敗しました |
<Note>
**5~7段階が最適です** ステージが多すぎるとパイプラインをスキャンしにくくなります。ディールの進捗状況が可視性を失うことはほとんどありません。
</Note>
## ステップ 2: パイプラインビューを作成
1. **商談** に移動
2. ビュードロップダウンをクリックして → **+ ビューを追加**
3. 「セールスパイプライン」という名前を付けてください
4. **作成**をクリックしてください
5. **Options** を開き、レイアウトとして **Kanban** を選択します
ビューは自動的に列に format@@0 フィールドを使用します。
## ステップ 3: ビューの構成
### キーフィールドを表示
1. **オプション → フィールド** をクリックします。
2. 「非表示フィールド」セクションのフィールドを探します
3. **目のアイコン**をクリックすると、会社、金額、日付を閉じる、オーナーが表示されます。
### 集計を有効にする
各列の上部に合計を表示:
1. 列の上部にあるステージ名の横に表示される数字をクリックします
2. 集計の種類(カウント、合計、平均など)を選択します。
3. 集計するフィールドを選択します(例:金額)
**例:** Amount フィールドを合計で集計し、ステージごとの商談総額を表示します。
### コンパクトビューを使用する (オプション)
最小限のカードコンテンツを持つ高レベルの概要:
1. **Options** をクリックします
2. **コンパクトビュー** のトグルをオンにする
## ステップ 4: 個人ビューとチームビューを作成
### "パイプライン"
* **フィルター**: 所有者 = Me
* **可視性**: リストに追加されていない(パーソナルビュー)
### "チームパイプライン"
* **フィルター**: なし (すべて表示)
* **可視性**: ワークスペース (共有ビュー)
### "今月の閉店"
* **タイプ**: 表
* **フィルター**: Close Date = 今月、Stage ≠ Closed Won、Stage ≠ Closed Lost
* **並べ替え**: 終了日昇順
## 商談との作業
### 案件の作成
* 商談ビューで\*\*+ 新しい\*\*をクリックしてください
* または、特定のステージカラムの\*\*+\*\*をクリックしてください
### ステージを移動する
列間で商談カードをドラッグアンドドロップして、ステージを更新します。
<VimeoEmbed videoId="927888627" title="ビデオのデモ" />
## ベストプラクティス
### パイプライン衛生型
* 彼らが進むにつれて毎日情報を更新します
* 速やかに古い取引を移動または閉じる
* 現実的な日付を保ちます
### ステージ制限
* 各ステージの明確な基準を定義する
* 基準が満たされたときに迅速に取引を移動する
* お得な情報をステージにあまりにも長く座らせてはいけません
## 関連
* [かんばんビュー](/l/ja/user-guide/views-pipelines/capabilities/kanban-views) — 集計とコンパクトビュー
* [フィルターと並べ替え](/l/ja/user-guide/views-pipelines/capabilities/filters-and-sorting) — 絞り込まれたビューの作成

View File

@@ -0,0 +1,149 @@
---
title: パイプラインに Expected Amount を表示する。
description: ステージの確率に基づいて商談額に重み付けを行い、計算して表示します。
---
Expected Amount は計算値です:**Amount × Probability**。 これにより、成約見込みに基づいて商談に重み付けを行い、売上を予測できます。
<Tip>
これは、ワークフローを使用して[数式フィールド](/l/ja/user-guide/workflows/how-tos/crm-automations/formula-fields)を作成する例です。
</Tip>
このガイドでは、パイプラインで Expected Amount を計算・表示するために必要なカスタムフィールドとワークフローの設定手順を説明します。
## ステップ1:カスタムフィールドを作成
Opportunities オブジェクトに2つのカスタムフィールドが必要です。
### Probability フィールドを作成
1. **Settings → Data Model → Opportunities** に移動します
2. **+ Add Field** をクリックします
3. 設定:
* **名前**: Probability
* **タイプ**: Number
* **説明**: ステージに基づく確率(0〜100%)
4. **保存**をクリック
### Expected Amount フィールドを作成
1. **+ Add Field** をクリックします
2. 設定:
* **名前**: Expected Amount
* **タイプ**: Currency
* **説明**: 計算式: Amount × Probability
3. **保存**をクリック
### 任意:ユーザー向けにフィールドを読み取り専用にする
ユーザーにこれらの計算フィールドを手動編集させたくない場合:
1. **設定 → メンバー → 役割** に移動します
2. 設定するロールを選択
3. Opportunities オブジェクトを探す
4. **Probability** と **Expected Amount** フィールドを読み取り専用に設定
これにより、これらの値を更新できるのはワークフローのみになります。
## ステップ2:ワークフロー #1 を作成 — ステージ変更時に Probability を更新
このワークフローは、商談が新しいステージへ移動したときに Probability を自動設定します。
### ワークフローを作成
1. **Workflows** に移動します
2. **+ New Workflow** をクリックします
3. 名前を「Update Probability on Stage Change」にします
### トリガーを設定
1. **Record Created or Updated** トリガーを追加
2. オブジェクトとして **Opportunities** を選択
3. フィルター: **Stage** フィールドが更新されたとき
### 各ステージごとに分岐を追加
各ステージに対して、対応する確率のブランチを作成します。
| ステージ | "確率" |
| ----------- | ---- |
| 新規 | 10% |
| 適格 | 25% |
| Meeting | 40% |
| Proposal | 60% |
| Negotiation | 80% |
| Closed Won | 100% |
| Closed Lost | 0% |
<Note>
新しいブランチを作成するには、ワークフローキャンバスを右クリックし、**New action** をクリックします。 次に、前のノードからこの新しいアクションに矢印をドラッグして接続します。
</Note>
各ステージについて:
1. **Filter** ノードを追加: Stage = [stage name]
2. **Update Record** アクションを追加:
* レコード: トリガーとなった Opportunity
* フィールド: Probability
* 値: [そのステージの確率]
### Expected Amount を計算
ブランチを再結合した後:
1. **Filter** ノードを追加: Amount が空でない
2. **Update Record** アクションを追加:
* レコード: トリガーとなった Opportunity
* フィールド: Expected Amount
* 値: Amount × Probability
## ステップ3:ワークフロー #2 を作成 — Amount 変更時に再計算
このワークフローは、商談の Amount が変更されたときに Expected Amount を更新します。
### ワークフローを作成
1. **Workflows** に移動します
2. **+ New Workflow** をクリックします
3. 名前を「Recalculate Expected Amount on Amount Change」にします
### トリガーを設定
1. **Record Created or Updated** トリガーを追加
2. オブジェクトとして **Opportunities** を選択
3. フィルター: **Amount** フィールドが更新されたとき
### ロジックを追加
1. **Filter** ノードを追加: Amount が空でない
2. **Update Record** アクションを追加:
* レコード: トリガーとなった Opportunity
* フィールド: Expected Amount
* 値: Amount × Probability
## ステップ4:パイプラインに表示
カンバンビューに Expected Amount の合計を表示します:
1. お使いの **Sales Pipeline** のカンバンビューを開きます
2. 列の上部にある任意のステージ名の横の **数値** をクリックします
3. **Sum** を選択します
4. **Expected Amount** を選択します
各列には、そのステージの重み付け済みパイプライン合計が表示されます。
## 概要
| コンポーネント | 目的 |
| ------------------------- | ---------------------------------------------------------- |
| **Probability フィールド** | ステージに基づく受注確率を保存します |
| **Expected Amount フィールド** | Amount × Probability を保存します |
| **ワークフロー #1** | ステージが変更されたときに Probability を更新し、その後 Expected Amount を再計算します |
| **ワークフロー #2** | Amount が変更されたときに Expected Amount を再計算します |
| **集計** | ステージごとに Expected Amount の合計を表示します |
## 関連情報
* [数式フィールド](/l/ja/user-guide/workflows/how-tos/crm-automations/formula-fields) — ワークフローを使って計算フィールドを作成
* [カンバンビュー](/l/ja/user-guide/views-pipelines/capabilities/kanban-views) — 列の集計
* [カスタムフィールドの作成方法](/l/ja/user-guide/data-model/how-tos/create-custom-fields) — フィールド設定

View File

@@ -0,0 +1,231 @@
---
title: 各ステージにおける商談の滞在時間を追跡
description: 商談が各ステージに入ったタイミングを追跡して、商談の進行速度を監視します。
---
<Tip>
これは、ワークフローを使って[数式フィールド](/l/ja/user-guide/workflows/how-tos/crm-automations/formula-fields)を作成する例で、特に日付計算です。
</Tip>
商談が各ステージに入った時点を追跡することで、ボトルネックを特定し、商談の進行速度を測定できます。
このガイドでは、商談が各ステージへ移動した時点を自動記録し、前のステージに要した日数を計算するためのカスタムフィールドとワークフローの設定手順を説明します。
## 手順 1: カスタムフィールドを作成する
各ステージに対して、次の2種類のフィールドが必要です:
* **日付と時刻フィールド**: 商談が各ステージに入った時刻を記録します
* **数値フィールド**: 商談が各ステージに滞在した日数を保存します
### "Last Entered" フィールドを作成する
1. **Settings → Data Model → Opportunities** に移動
2. 各ステージについて、**+ Add Field** をクリックして次のように設定します:
* **Name**: Last Entered [Stage Name](例: "Last Entered New", "Last Entered Qualified")
* **Type**: Date & Time
* **Description**: このステージに商談が入ったタイムスタンプ
3. **保存**をクリック
次のフィールドを作成します:
* Last Entered New
* Last Entered Qualified
* Last Entered Meeting
* Last Entered Proposal
* Last Entered Negotiation
* Last Entered Closed Won
* Last Entered Closed Lost
### "Days in Stage" フィールドを作成する
1. 各ステージについて、**+ Add Field** をクリックして次のように設定します:
* **Name**: Days in [Stage Name](例: "Days in New", "Days in Qualified")
* **Type**: Number
* **Description**: このステージに滞在した日数
2. **保存**をクリック
次のフィールドを作成します:
* Days in New
* Days in Qualified
* Days in Meeting
* Days in Proposal
* Days in Negotiation
<Note>
Closed Won と Closed Lost は最終ステージのため、"Days in" フィールドは不要です。
</Note>
### 任意: フィールドを読み取り専用にする
これらの計算フィールドをユーザーに手動編集させたくない場合:
1. **設定 → メンバー → 役割** に移動します
2. 設定するロールを選択
3. Opportunities オブジェクトを見つける
4. "Last Entered" と "Days in" フィールドを読み取り専用に設定する
## 手順 2: ワークフローを作成する
この1つのワークフローで両方のタスクを処理します:
* 新しいステージに入った時刻を記録する
* 前のステージに滞在した日数を計算する
### ワークフローを作成する
1. **Workflows** に移動
2. **+ New Workflow** をクリック
3. 名前を "Track Stage Time" にする
### トリガーを設定する
1. **Record Updated** トリガーを追加
2. オブジェクトとして **Opportunities** を選択
3. フィルター条件: **Stage** フィールドが更新されたとき
### 各ステージ用のブランチを追加する
<Note>
新しいブランチを作成するには、ワークフローキャンバスを右クリックし、**New action** をクリックします。 次に、前のノードからこの新しいアクションへ矢印をドラッグして、このアクションを前のノードにリンクします。
</Note>
---
**ブランチ 1: Stage = New(最初のステージ)**
これは最初のステージなので、このステージに入った時刻のみが記録され、計算の基準となる前のステージはありません。
1. **Filter** ノードを追加: Stage = New
2. **Code** アクションを追加:
```javascript
export const main = async (): Promise<object> => {
return { now: new Date().toISOString() };
};
```
3. **Update Record** アクションを追加:
* Record: トリガーとなった Opportunity
* Field: Last Entered New
* Value: Code ノードの `now`
---
**ブランチ 2: Stage = Qualified**
Qualified に移動したら、入場時刻を記録し、かつ New に滞在した日数を計算します。
1. **Filter** ノードを追加: Stage = Qualified
2. **Code** アクションを追加:
```javascript
export const main = async (params: {
lastEnteredPreviousStage: Date;
}): Promise<object> => {
const { lastEnteredPreviousStage } = params;
const now = new Date();
const entryDate = new Date(lastEnteredPreviousStage);
const diffTime = Math.abs(now.getTime() - entryDate.getTime());
const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
now: now.toISOString(),
daysInPreviousStage: daysInPreviousStage
};
};
```
3. Code ノードの入力を設定: `lastEnteredPreviousStage` を **Last Entered New** フィールドにマップする
4. **Update Record** アクションを追加:
* Record: トリガーとなった Opportunity
* 更新するフィールド:
* Last Entered Qualified = `now`
* Days in New = `daysInPreviousStage`
---
**ブランチ 3: Stage = Meeting**
Meeting に移動したら、入場時刻を記録し、かつ Qualified に滞在した日数を計算します。
1. **Filter** ノードを追加: Stage = Meeting
2. **Code** アクションを追加:
```javascript
export const main = async (params: {
lastEnteredPreviousStage: Date;
}): Promise<object> => {
const { lastEnteredPreviousStage } = params;
const now = new Date();
const entryDate = new Date(lastEnteredPreviousStage);
const diffTime = Math.abs(now.getTime() - entryDate.getTime());
const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
now: now.toISOString(),
daysInPreviousStage: daysInPreviousStage
};
};
```
3. Code ノードの入力を設定: `lastEnteredPreviousStage` を **Last Entered Qualified** フィールドにマップする
4. **Update Record** アクションを追加:
* Record: トリガーとなった Opportunity
* 更新するフィールド:
* Last Entered Meeting = `now`
* Days in Qualified = `daysInPreviousStage`
---
**残りのステージも同様に続けます:**
| ステージ | レコード | 計算 |
| ----------- | ------------------------ | ------------------- |
| Proposal | Last Entered Proposal | Days in Meeting |
| Negotiation | Last Entered Negotiation | Days in Proposal |
| Closed Won | Last Entered Closed Won | Days in Negotiation |
| Closed Lost | Last Entered Closed Lost | Days in Negotiation |
ブランチを再結合する必要はありません。各ブランチは、そのステージ条件が満たされたときに独立して実行されます。
## 手順 3: ステージ滞在時間を分析する
タイムスタンプと日数が記録されたら、商談の進行速度を分析できます。
### "Slow Deals" ビューを作成する
1. Opportunities のテーブルビューを作成する
2. 列を追加: Name、Stage、Days in [previous stage]、Amount
3. "Days in" フィールドで並べ替え(降順)
4. Stage でフィルターして、1つのステージに絞り込む
上位の商談は、前のステージで最も長く滞在していたことを示します。
### 集計を使用する
パイプラインのカンバンビューで:
1. ステージ名の横にある数値をクリック
2. **Average** を選択
3. "Days in" フィールドを選択
各ステージで商談が費やす平均時間が表示されます。
## まとめ
| コンポーネント | 目的 |
| ---------------------- | ----------------------- |
| **Last Entered フィールド** | 商談が各ステージに入った時刻を保存する |
| **Days in フィールド** | 各ステージでの滞在日数を保存する |
| **ワークフロー** | タイムスタンプの記録と日数計算を一度に実行する |
| **ビューと集計** | 商談の進行速度を分析し、ボトルネックを特定する |
## 関連項目
* [ワークフロー](/l/ja/user-guide/workflows/overview) — 自動化の基本
* [カスタムフィールドの作成方法](/l/ja/user-guide/data-model/how-tos/create-custom-fields) — フィールドの設定
* [カンバンビュー](/l/ja/user-guide/views-pipelines/capabilities/kanban-views) — 集計