Workflow
Drupalエンティティ用にカスタマイズ可能な状態遷移を含むワークフローを定義するフィールドタイプを提供します。
workflow
インストール
composer require 'drupal/workflow:^2.2'
概要
Workflowモジュールは、Drupalエンティティ向けの強力なステートマシン実装を提供します。サイト構築者は、複数の状態と、それらの状態間で設定可能な遷移を持つカスタムワークフローを定義できます。各ワークフローは、専用のフィールドタイプを通じて任意のエンティティタイプ(Node、User、Taxonomy Termなど)にアタッチできます。
このモジュールは詳細な権限制御を提供し、管理者は特定の状態遷移を実行できるロールを定義できます。遷移は即時実行することも、cronを介して将来の実行をスケジュールすることもできます。各エンティティについて、タイムスタンプ、ユーザー、オプションのコメントを含む完全な遷移履歴が保持されます。
このモジュールは、ワークフローウィジェットの複数の表示オプション(セレクトリスト、ラジオボタン、アクションボタン、ドロップダウンボタン)をサポートし、さまざまな折りたたみオプションを持つフィールドセット内に表示するように設定できます。遷移時のコメントは、非表示、任意、または必須に設定できます。
WorkflowはViewsと統合して遷移履歴を表示し、Workflow AccessサブモジュールによりDrupalのNode Accessシステムをサポートします。Drupal 7のWorkflow設定からのアップグレード用にマイグレーションサポートも提供されています。
Features
- 複数の状態と遷移を持つ無制限のカスタムワークフローを定義
- 専用フィールドタイプを介して任意のエンティティタイプにワークフローをアタッチ
- 詳細な制御によるロールごとの遷移権限設定
- cronを介した将来の状態遷移のスケジュール
- タイムスタンプ、ユーザー、コメントを含む完全な遷移履歴の保持
- 複数のウィジェット表示オプション:セレクトリスト、ラジオボタン、アクションボタン、ドロップダウンボタン
- 設定可能なコメントフィールド(非表示、任意、必須)
- ワークフロー履歴表示のためのViews統合
- ワークフロー状態に基づくNode Accessコントロール(Workflow Accessサブモジュール経由)
- 遷移に反応するためのイベントシステム(遷移前/遷移後イベント)
- Drupal 7 Workflowモジュールからのマイグレーションサポート
- Actions経由の一括操作サポート(次の状態/指定された状態への変更)
- ワークフロー遷移フォームを表示するためのBlockプラグイン
- カスタマイズ可能な遷移ラベル
- 状態変更のWatchdogログ記録
Use Cases
編集用公開ワークフロー
下書き、レビュー、承認済み、公開などの状態を持つワークフローを作成します。著者がコンテンツをレビューに移動でき、編集者が承認または却下でき、発行者が公開できるように遷移を設定します。Workflow Accessサブモジュールを使用して、匿名ユーザーから未公開コンテンツを非表示にします。
サポートチケットのステータス追跡
新規、進行中、顧客待ち、解決済み、クローズの状態を持つチケットワークフローを実装します。エージェントが各ステータス変更を文書化する必要があるように、コメントフィールドを必須に設定します。遷移履歴ビューを使用して、完全なチケットタイムラインを表示します。
ドキュメント承認プロセス
複数の承認段階を持つ承認ワークフローを設定します。スケジュールを使用して、特定の時間に承認済みドキュメントを自動公開します。各状態が個別の送信ボタンとして表示される、よりクリーンなUI用にアクションボタンを設定します。
製品ライフサイクル管理
製品段階用の状態を作成します:コンセプト、開発、テスト、リリース済み、非推奨、サポート終了。hook_workflow_permitted_state_transitions_alterを使用して、カスタム基準に基づいてどの製品を進められるかについてのビジネスルールを強制します。
ユーザーコンテンツのモデレーション
ユーザーが投稿したコンテンツがレビュー待ちで開始し、モデレーターが承認または却下できるモデレーションワークフローを実装します。Views統合を使用して、レビュー待ちのすべてのコンテンツを表示するモデレーションキューを作成します。
マルチステップフォームウィザードのシミュレーション
ワークフロー状態を使用して、時間をかけてエンティティが編集されるマルチパートプロセスの進捗を追跡します。各状態はステップの完了を表し、ワークフローはプロセスの適切な順序を保証します。
Tips
- 状態が少ないワークフローには、アクションボタンまたはドロップボタンウィジェットタイプを使用します - ドロップダウンよりもクリーンで直感的なインターフェースを提供します。
- 開発中は状態変更を追跡するためにWatchdogログを有効にしますが、高トラフィックサイトの本番環境では無効化を検討します。
- エンティティバンドルごとに複数のワークフローを使用する場合、組み込みのワークフロータブではなくViewsベースの履歴表示を使用します。
- 遷移権限の「作成者」疑似ロールを使用すると、コンテンツ作成者が自分のコンテンツで特定の遷移を実行できます。
- ロールベースの設定で表現できない複雑な権限ロジックには、hook_workflow_permitted_state_transitions_alterを使用します。
- 特にコンプライアンスが重要な環境では、監査証跡目的でコメントフィールドを必須として使用することを検討します。
- D7からマイグレーションする場合、特定のエンティティタイプとフィールド設定をマッピングするためにマイグレーションYAMLファイルをカスタマイズします。
Technical Details
Admin Pages 9
/admin/config/workflow/workflow
システム内で定義されたすべてのワークフローを一覧表示します。このページから、管理者は既存のワークフローの表示、ワークフロー設定へのアクセス、状態、遷移、遷移ラベルの管理ができます。各ワークフローには、編集、削除、状態/遷移の管理操作とともに、ID、ラベル、ステータスが表示されます。
/admin/config/workflow/workflow/add
新しいワークフローを作成するためのフォーム。ワークフロー名、マシン名、フォーム表示オプション、スケジュール設定、コメント処理、Watchdogログ記録などのさまざまな設定を定義できます。
/admin/config/workflow/workflow/{workflow_type}
既存のワークフローの設定を編集するためのフォーム。ワークフローの動作を変更するために、追加フォームと同じオプションを提供します。
/admin/config/workflow/workflow/{workflow_type}/states
ワークフロー状態を管理するためのドラッグ可能なリスト。新しい状態の追加、ラベルの編集、状態の有効化/無効化、ドラッグ&ドロップによる並べ替え、無効化された状態から他の状態へのコンテンツの再割り当てが可能です。
/admin/config/workflow/workflow/{workflow_type}/transition_roles
どのロールがどの状態遷移を実行できるかを設定するためのマトリックスフォーム。ソース状態を行、宛先状態を列としたグリッドを表示し、遷移を実行できる各ロールのチェックボックスがあります。
/admin/config/workflow/workflow/{workflow_type}/transition_labels
各遷移に表示されるラベルをカスタマイズするためのフォーム。デフォルトの「元の状態 → 先の状態」ラベルをカスタムテキストで上書きできます。
/admin/config/workflow/workflow/access
Workflow Accessサブモジュールのグローバル設定。アクセス許可の計算時に使用されるNode Accessの優先度を設定します。
/admin/config/workflow/workflow/{workflow_type}/access
各ワークフロー状態でコンテンツを表示、編集、または削除できるロールを設定するためのフォーム。Workflow Accessサブモジュールが有効な場合にのみ利用可能です。
/admin/config/workflow/workflow/cleanup
孤立した状態と無効なワークフロー状態をクリーンアップするための管理ツール。既存のワークフローに属さなくなった状態と、無効としてマークされた状態を一覧表示します。メンテナンスが必要な場合にのみこのサブモジュールを有効にしてください。
権限 11
Hooks 7
hook_workflow_operations
モジュールがワークフローエンティティリストビルダーに追加の操作を追加できるようにします。ワークフロー、状態、または遷移の操作を追加できます。
hook_workflow
遷移の事前/事後実行、元に戻す操作、権限チェックなどのワークフローイベントに反応できるようにします。モジュールまたはmodule.workflow.incファイルに配置できます。
hook_workflow_comment_alter
モジュールが保存前に遷移コメントを変更できるようにします。
hook_workflow_history_alter
モジュールが操作を追加したり、ワークフロー履歴表示を変更したりできるようにします。D8以降では、ListBuilder::getDefaultOperationsとhook_workflow_operationsの使用を推奨します。
hook_workflow_permitted_state_transitions_alter
許可された状態遷移の追加、削除、または変更を可能にします。利用可能なターゲット状態のリストを構築する際に呼び出されます。
hook_form_workflow_transition_form_alter
ワークフロー遷移フォームの変更を可能にします。エンティティタイプ、バンドル、または現在の状態に基づいてフォームをカスタマイズするのに便利です。
hook_field_widget_single_element_workflow_default_form_alter
workflow_defaultフィールドウィジェットフォーム要素を変更するためのウィジェット固有のフック。
Troubleshooting 6
Workflowフィールドがエンティティバンドルに追加され、フォーム表示がworkflow_defaultウィジェットを表示するように設定されていることを確認します。ユーザーが'create {workflow} workflow_transition'権限を持っているかチェックします。
ワークフローの「遷移」タブで遷移が設定されていることを確認します。ユーザーのロールが現在の状態からの少なくとも1つの遷移に対する権限を持っていることを確認します。hook_workflow_permitted_state_transitions_alterが遷移を削除していないかチェックします。
cronが定期的に実行されていることを確認します。モジュールはcron実行中にスケジュールされた遷移を実行します。'schedule {workflow} workflow_transition'権限が付与されており、ワークフロー設定でスケジュールが有効になっていることを確認します。
アクセス設定を構成した後、/admin/reports/status/rebuildでNode Access権限を再構築する必要があります。他のアクセス制御モジュールを使用している場合、workflow_access_priorityが適切に設定されているか確認します。
フィールドが参照している場合、ワークフローは削除できません。まずこのワークフローを使用するすべてのワークフローフィールドを削除してから、ワークフローを削除します。
作成状態は自動的に作成され、遷移前の初期状態を表します。ユーザーにターゲット状態として表示されるべきではありません。最初の実際の状態を設定し、作成からその状態への遷移を設定します。
Security Notes 5
- 'administer workflow'権限は制限付きとしてマークされており、信頼できる管理者にのみ付与すべきです。
- 'bypass {workflow} workflow_transition access'権限はユーザーがすべての遷移制限を無視できるようにします - 細心の注意を払って付与してください。
- 編集と元に戻す遷移権限は、監査証跡履歴の変更を許可するため、制限されています。
- Workflow Accessを使用する場合、適切なアクセス適用を確保するために、設定変更後は常にNode権限を再構築してください。
- 遷移コメントには状態変更の理由に関する機密情報が含まれている可能性があります - ワークフロー履歴を表示するアクセス権を持つユーザーを考慮してください。