> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alforse.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ワークフロー

> Alforse のイベントやスケジュールへの反応を自動化します。1 つのトリガーを、条件とアクションにキャンバス上でつなぎ、公開して、すべての実行をステップごとに確認します。

ワークフローを使うと、何かが起きたときに Alforse が自動で反応できます。受注が担当者の名前で登録された瞬間に担当営業へ知らせる、製造指図が保留になるたびに問題を作成する、出荷が転記されたら別のシステムに通知する、などです。ワークフローの権限を持つユーザーが、**自動化 → ワークフロー**でこれらの自動化を設計し、**自動化 → 実行**でその動作を監査します。

## 概要

各ワークフローは、キャンバスに描かれます。一番上にトリガーカードが 1 枚あり、条件カードとアクションカードがそこからぶら下がり、1 つのトリガーから複数の独立した経路に分岐できます。**「公開」**（Publish）を選択するまで、何も実行されません。以降、トリガーが作動するたびに記録された実行になり、そのすべてのステップを開いて確認できます。[実行と履歴](#runs-and-history)を参照してください。

Alforse screenshot**自動化 → ワークフローのワークフロービルダーのキャンバス：条件とアクションのステップにつながれたトリガーカード、パレット、公開ボタン**

1 つのトリガーが複数の分岐に分かれ、それぞれに終点があります。

## ワークフローを開始するもの

ワークフローには、必ず 1 つだけ**トリガー**ステップがあります。そこにある**「トリガー タイプ」**の切り替えで、**「イベント」**または**「スケジュール」**を選べます。一方を選ぶと、もう一方に設定していた内容は消去されます。

### レコードイベント

イベントは、1 つのレコードタイプに対する 1 種類の変更を指定します。形式は 3 つあります。

| イベントの形式 | 例 | ワークフローに渡されるデータ |
| - | - | - |
| 作成された | `job.created` | 新しく作成されたレコード |
| 削除された | `purchaseOrder.deleted` | 削除される前のレコードのスナップショット |
| 列が変更された | `customer.assignee.changed` | レコードと、フィールドの `before` および `after` の値 |

NOTE

**汎用の「更新された」イベントはありません**

「何かが変わった」ではなく、気にするフィールドを指定します。監視できるレコードタイプは 10 種類です。発注書、受注、製造指図、アイテム、入荷、出荷、見積、仕入先、得意先、問題。それぞれが、監視対象のフィールドの短いリストを公開しており、それ以外のフィールドの編集がワークフローを開始することはありません。

### ビジネスモーメント

ピッカーの下の方にある**「ビジネスモーメント」**の見出しの下には、Alforse の組み込みプロセスにおける 9 つのマイルストーンがあります。

| 領域 | モーメント |
| - | - |
| 生産 | 製造指図のリリース · 製造指図の保留 · 製造指図の工程の完了 |
| 販売 | 見積の送信 · 見積の承諾 |
| 物流 | 入荷の転記 · 出荷の転記 |
| 請求 | 売上請求書の転記 · 仕入請求書の転記 |

ビジネスモーメントは、ワークフローに、*どの*レコードが関わったか（その識別子）を伝えますが、フィールドはコピーしません。後のステップが、モーメントが提供しなかった値を必要とする場合は、その前に**検索**ステップを置いてください。

### スケジュール

時刻で実行するには、**「スケジュール」**を選びます。**「頻度」**に毎日、毎週、毎月のいずれかを設定し、該当する日を選んでから、**「時間」**と**「タイムゾーン」**を入力します。編集中は、**「次回の実行：」**（Next fires at:）の行に、次の実行がプレビューされます。

HEADS UP

**スケジュールは追いつきません**

Alforse は時計の時刻とタイムゾーンを別々に保持しているため、午前 9:00 のスケジュールは、時計の切り替え後も 9:00 に実行されます。31 日に固定された毎月のスケジュールは、日数の少ない月を単に**スキップ**します。実行期限が来たときに Alforse が利用できなかった場合も、遡って実行することはなく、次の期限を待ち、1 時間以上遅れた実行はスキップとして記録されます。各スケジュールには、負荷を分散するために最大 5 分の固定のジッターも付くため、9:00 は実際には 9:00 から 9:05 の間のどこかを意味します。

### 誰の変更を対象にするか制限する

イベントトリガーでは、**「トリガー元」**が、**「ユーザー」**、**「ワークフロー」**、**「両方」**のいずれの編集がワークフローを起動できるかを決めます。新しいトリガーのデフォルトは**「ユーザー」**で、これは安全な設定です。このワークフロー自身を含め、あらゆるワークフローによる変更を無視するためです。ある自動化が別の自動化を動かすことを意図している場合など、意図的な場合に限って**「両方」**に切り替えてください。

## ワークフローを構築する

### 6 種類のステップ

ステップは、パレットに次の順序で一覧表示されます。

| ステップ | キャンバス上の役割 |
| - | - |
| **トリガー** | 唯一の入口。ほかのステップがここに接続することはできません。 |
| **条件** | 実行がたどる経路を1つ選びます。経路は節の集合で、**「その他」**の経路は任意です。 |
| **アクション** | 通知、作成、更新、外部呼び出しなどの作業を実行し、独立した**成功**と**失敗**のハンドルを公開します。 |
| **計算** | レコードから、注文合計やスクラップ率などの数値を導き出します。何も変更しません。 |
| **検索** | 後で使うレコードを取得します。 |
| **絞り込み** | リストを、ルールを満たすエントリに絞り込みます。 |

### アクションでできること

16 のアクションが、3 つのファミリーにグループ化されています。

1. **作成（4）。** 製造指図、問題、発注書、受注。これらは Alforse 自身の画面の背後にあるサービスをそのまま呼び出すため、採番シーケンス、デフォルト、必須フィールドが、ユーザーが操作した場合とまったく同じように適用されます。
2. **更新（10）。** 監視できるレコードタイプごとに1つ。既存のレコードを編集します。
3. **通知と外部呼び出し（2）。** **「誰かに通知」**と**「外部URLを呼び出す」**。

NOTE

**更新は意図的に絞られています**

各更新アクションが公開するのは、Alforse が定義した少数のフィールドだけです。担当者、期日、参照番号、優先度などです。ワークフローからステータスを変更することはできず、何かを削除するアクションもありません。ワークフローが*監視*できるフィールドと*書き込め*るフィールドは、別々のリストとして管理されています。

### ステップへの値の指定

フィールドには、入力したリテラル値、または上流で生成された値を指定できます。テキストフィールドで `{` を入力すると変数メニューが開き、先行するステップ、その出力、2 階層までのプロパティが一覧表示されます。

そこに表示されるのは、現在のステップより前に実行されることが*確実な*ステップだけです。条件分岐の反対側の値は除外され、それらへの参照は公開時に拒否されます。

### リストの項目ごとにステップを 1 回実行する

単一の値を期待するフィールドにリストをつなぐと、ステップはエントリごとに最大 100 回までループします。フォームがこれを示します。1 つのステップに 2 つの異なるリストをつなぐと、ループに単一の元がなくなるため、公開時に拒否されます。

## 外部 URL を呼び出す

**「外部URLを呼び出す」**は、HTTP リクエスト、つまりWebhookを発行し、別のシステムが Alforse 内のイベントに反応できるようにします。

FieldType

<details>
  <summary>**URL**required`text`</summary>

  `https` のエンドポイント。変数を含められます（たとえば、パスにレコードの ID を入れるなど）。
</details>

<details>
  <summary>**メソッド**required`choice`</summary>

  `GET`、`POST`、`PUT`、`PATCH`、`DELETE`。新しいステップのデフォルトは `GET` です。
</details>

<details>
  <summary>**ヘッダー**`名前/値の行`</summary>

  認可キーなどの追加のリクエストヘッダー。変数が使え、実行履歴ではすべてのヘッダーの*値*がマスクされます。
</details>

<details>
  <summary>**本文**`text`</summary>

  変数が埋め込まれたペイロード。`POST`、`PUT`、`PATCH` でのみ利用でき、送信されます。
</details>

HEADS UP

**Webhook ステップの制限**

* 受け付けるのは `https` のみです。プライベートまたはリンクローカルの範囲に解決されるアドレスも拒否され、`localhost` とクラウドのメタデータエンドポイントも含まれます。
* リダイレクトには従わず、10 秒経っても応答のないリクエストは破棄されます。
* 成功の範囲外の応答は、ステップを失敗としてマークします。
* Alforse は 8 つのヘッダーを管理しており、置き換えることはできません。
* リクエストは署名されません。受信側が送信者を認証する必要がある場合は、共有シークレットをヘッダーに含めてください。

## 保存、公開、バージョン

### 自動保存

保存ボタンはありません。編集は継続的に保存され、タイトルの横のステータスは**「保存中…」**、**「保存済み」**、**「保存できませんでした」**と表示されます。不完全な下書きも問題なく保存されます。検証は公開まで待つためです。

### 公開

**「公開」**は、完全に成功するか、何も変更しないかのどちらかです。公開する前に、Alforse はトリガーがあること、どのステップも先行するステップに戻っていないこと、必須フィールドが入力されていること、すべての変数が上流のステップを指していることを確認します。失敗はパネルにまとめて表示され、項目を選択すると、キャンバスが原因のステップまでスクロールします。

公開は電源スイッチも兼ねています。公開されているバージョンが実行されるバージョンで、**「公開を取り消す」**はワークフローを停止しますが何も削除せず、もう一度公開すれば元に戻ります。公開されたバージョンがないワークフローには、**下書き**というラベルが付きます。

### バージョン

公開されると、バージョンはロックされます。編集を続けるには、バージョンメニューから新しいバージョンを作成します。公開済みのもののコピーとして、次の番号で始まります。すでに進行中の実行は、その間に別のバージョンが公開されても、開始時のバージョンで完了します。

### テストラン

ワークフローの所有者は、トリガーカードの**「テストラン」**を選択できます。これは本物の実行で、アクションは実際に行われますが、実行履歴にはエントリが残りません。

## 権限

ワークフローは、すべてのルートに必要な従業員アカウントに加えて、専用の権限モジュールで管理されます。

| 権限 | 許可される内容 |
| - | - |
| **表示** | ワークフロー一覧、ビルダー、実行履歴。 |
| **作成** | 新しいワークフローと新しいバージョン。 |
| **更新** | 編集、公開、テストラン。 |
| **削除** | ワークフローを、そのバージョンおよび履歴とともに削除。 |

NOTE

**ワークフローは、トリガーした人ではなく所有者として実行されます**

すべてのステップは所有者の権限で動作し、ステップごとに改めて確認されます。所有者がある領域へのアクセスを失った場合、実行はその領域を示すメッセージとともに停止します。ワークフローは自社の会社内に限定され、実行履歴はデータベースレベルで書き込み保護されているため、どれほど権限が高い人でも、実行ログを改ざんしたり捏造したりすることはできません。

## 実行と履歴

トリガーが作動するたびにワークフローの実行が生成されます。実行そのものを表す 1 件のレコードと、ステップごとに 1 件のレコードがあり、何が入力され、何が出力され、なぜそう終わったかが記録されます。

### 実行一覧

**自動化 → 実行**では、各行にステータス、ワークフロー、トリガー、所要時間、所有者、そして発生元のレコードが、名前または番号で表示され、すばやくアクセスできるようリンクされます。別の実行がこの実行を引き起こした場合、**チェーン**列には**「ホップ 2」**以降が表示されます。実行がキュー待ち、または実行中の間は、一覧がリアルタイムで更新されます。

<details>
  <summary>**キュー済み**</summary>

  受理され、ワーカーを待っています。
</details>

<details>
  <summary>**実行中**</summary>

  ワーカーに取得され、現在ステップを実行しています。
</details>

<details open>
  <summary>**成功**</summary>

  実行されたすべてのステップが、エラーなしで完了しました。
</details>

<details>
  <summary>**失敗**</summary>

  ステップが失敗した、または実行が 500 ステップの上限に達しました。
</details>

<details>
  <summary>**ブロック中**</summary>

  どのステップも実行される前に、ループガードによって停止しました。実行がその理由を示します。
</details>

<details>
  <summary>**スキップ済**</summary>

  ワークフローの公開が取り消された、スケジュールされた実行が遅延していた、または前の実行が完了していなかったため、開始されませんでした。
</details>

### 実行を読む

行を開くと**「実行詳細」**ドロワーが表示され、*「Failed at 'notify the buyer': The address answered 500.」*（「購入者に通知」で失敗しました：アドレスが 500 を返しました。）のような、分かりやすい英語の判定が 1 つ、見出しとして表示されます。

Alforse screenshot**自動化 → 実行の実行詳細ドロワー：結果の文、ワークフローの順序で並んだステップ一覧（スキップされた分岐はグレーアウト）、入力と出力を表示するよう展開された1つのステップ**

まず判定の文から読み始め、詳細が必要なときだけステップを展開します。

ステップは、実行された順序ではなく、ワークフロー内の配置どおりに一覧表示されます。そのため、実行されなかったステップは、その位置に留まり、**「未到達」**としてグレーアウトされるか、理由とともにスキップと表示されます。ステップを展開すると**入力**と**出力**が表示されます。条件では、**理由**のセクションが各節をたどり、選ばれた経路を強調表示します。

ループするステップは、すべての項目を記録し、集計を追加します。*「Ran 100 of 150; 50 were not used」*（150 件中 100 件を実行しました。50 件は使用されませんでした）は、エラーではなく、100 項目の上限を示します。

NOTE

**何もしないまま実行が成功することがあります**

条件のどの経路にも一致せず、**「その他」**もない場合、条件は*成功*しています。つまり、正しく停止を判断したのです。その場合、ほとんどのステップに到達していなくても実行は緑色になります。判定の文が、結果を言葉で説明するのはそのためです。データがない場合も、失敗ではなくスキップになります。また、入力を読み取れない条件は、**「その他」**の経路を取り**ません**。分からないことは、該当しないことと異なるためです。

### 失敗の広がり方

ステップが失敗すると、その分岐だけが停止し、兄弟の分岐は続行します。接続された**失敗**ハンドルも引き続きたどられますが、実行が終了すると失敗として報告されます。権限の失敗はより厳格で、失敗の経路がつながれていても、分岐を終了させます。

### ワークフローのチェーン

あるワークフローによる書き込みが別のワークフローを起動する場合、Alforse は実行同士を結びつけ、チェーン全体を表示します。1 つのチェーンに同じワークフローが 2 回現れる場合や、チェーンが 10 ホップを超える場合は、**ブロック中**の実行になります。そもそもチェーンを防ぐには、[**「トリガー元」**](#what-starts-a-workflow)を調整してください。

HEADS UP

**再試行ボタンはありません**

完了した実行を、実行ページから再生することはできません。外部の問題を解消して、トリガーが再び作動するのを待つか、ビルダーから\*\*「テストラン」\*\*を開始してください。途中でクラッシュした実行は、キューによって自動的に再試行されます。すべてのステップは何かを行う前に取得されるため、再試行で完了済みのステップが繰り返されることはありません。

### 保持期間とマスキング

毎晩、クリーンアップジョブが実行履歴を 4 段階で整理します。進行中の実行は決して対象になりません。

| 経過時間 | 効果 |
| - | - |
| 24 時間 | キュー待ちまたは実行中のまま止まった実行は、失敗として閉じられます。 |
| 7 日 | 保存された値が要約に圧縮されます。 |
| 30 日 | ステップの行が削除されます。実行のヘッダーは残ります。 |
| 90 日 | 実行全体が削除されます。 |

認証情報に似た名前のものは `[REDACTED]` として保存され、Webhook のヘッダー値は常にマスクされます。アイテムキーや何かを承認した人など、機密に聞こえるだけのフィールドは保持されます。隠しすぎるログは、隠さなすぎるログと同じくらい、デバッグに役立たないためです。

## トラブルシューティング

| 症状 | 考えられる原因 | 対処 |
| - | - | - |
| 期待した実行が**自動化 → 実行**にない。 | テストランは記録されない。遅延したスケジュール実行は**スキップ済**として表示される。90 日を過ぎた実行は削除される。 | 期限の時刻の**スキップ済**の行を探すか、テストランではなく本物のトリガーを使う。 |
| ワークフローが2回起動した、または自身の編集に反応した。 | **「トリガー元」**が**「両方」**または**「ワークフロー」**になっている。 | **「ユーザー」**に変更する。 |
| ステータスは**成功**なのに、何も変わらなかった。 | 条件がどの経路にも一致せず、**「その他」**がなかった。 | 判定の文がその条件を示すので、節を調整するか**「その他」**を追加する。 |
| 古い実行にステップが表示されない。 | ステップの行は 30 日後に削除される。 | 修正は不要。ドロワーのバナーが説明する。 |
| **「公開」**が問題を報告する。 | 必須フィールドが空、ステップがループしている、または変数が常に先に実行されるとは限らないステップを参照している。 | 一覧表示された各問題を選択して、そのステップに移動する。 |

## 関連項目

**通知**

「誰かに通知」ステップからのメッセージが届く場所と、各ユーザーがトピックをミュートする方法。

[Open](https://docs.alforse.com/ja/docs/reference/notifications.md)

**承認**

自動化のもう一方の柱：ドキュメントに対する、ルールに基づく承認ゲート。

[Open](https://docs.alforse.com/ja/docs/reference/approvals.md)

**監査ログ**

誰がいつどのフィールドを変更したかを、レコードごとに整理した、別の履歴。

[Open](https://docs.alforse.com/ja/docs/reference/audit-log.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.