Web 駆動型アプリケーションでWindows Workflow Foundation (WF) テクノロジを利用することに関心のあるクライアントがいます。私は .NET 開発者ですが、WF または SharePoint ワークフローの経験はありません。クライアントがやりたいことのほとんどは、エンド ユーザーが独自のカスタム ワークフローを作成/編集できる機能を望んでいることを除けば、単純明快なようです。WF に関する私の簡単な調査では、これが通常の方法であるとは思えません。ユーザーが自分でワークフローを作成できるようにすることは実現可能ですか?それとも、これは実際にカスタム ASP.NET MVC アプリケーションまたは SharePoint アプリケーションである必要がありますか?
3 に答える
ユーザーがワークフローを変更できるようにすることは、WFの重要なポイントの1つであると考えられています。ただし、WF 3では、モデル全体がマークアップではなくコード生成に非常に適合しているため、実行が困難です。純粋なマークアップワークフローを使用できるため不可能ではありませんが、それは困難です。
WF 4では、すべてのワークフローが純粋なマークアップであり、コードがまったく含まれていないため、ストーリーははるかに優れているはずです。すべてのコードは事前定義されたアクティビティにあり、コンパイルされます。ユーザーは必要に応じてワークフローを変更できます。また、WFデザイナーは、独自のアプリケーションで再ホストするのがはるかに簡単です。
PSSharePointワークフローは新しいSharePointバージョンでもWF3ワークフローであり、WF4はコードをまったく共有しない完全に新しい製品です。
ユーザーからのトリガーを受け入れることができるステート マシンを作成したい場合があります。Nicholas Blumhardt は、statelessと呼ばれる非常に優れた軽量のステート マシンを実装しています。簡単なステートメントでステート マシンを作成できます。
var stateMachine = new StateMachine<TState, TTrigger>();
プロジェクト サイトから:
var phoneCall = new StateMachine<State, Trigger>(State.OffHook);
phoneCall.Configure(State.OffHook)
.Permit(Trigger.CallDialed, State.Ringing);
phoneCall.Configure(State.Ringing)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.CallConnected, State.Connected);
phoneCall.Configure(State.Connected)
.OnEntry(() => StartCallTimer())
.OnExit(() => StopCallTimer())
.Permit(Trigger.LeftMessage, State.OffHook)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.PlacedOnHold, State.OnHold);
// ...
phoneCall.Fire(Trigger.CallDialled);
Assert.AreEqual(State.Ringing, phoneCall.State);
ご覧のとおり、コードは非常に単純です。1 つのプロジェクトで必要なすべてを達成できます。
State と Trigger は任意のタイプになる可能性があるため、データベース (おそらく Step テーブル) からステート マシンをフィードし、Approve=1、Reject=2 のトリガーを許可できます。ユーザーと一緒に一連のステップを事前に作成し、ステップを提示してユーザーがトリガーを選択できるようにし、ユーザーが選択したトリガーに基づいて次のステップを割り当てられるようにすることができます。
WF (4.0 を含むすべてのバージョン) を使用する前に、特にワークフローを長時間実行する場合は、後方互換性とバージョン管理を確認するように注意してください。
ワークフロー インスタンスが「実行中」の場合、コンポーネント (コード アクティビティ) を変更するのは困難な場合があります。この問題に対処するために私が見たバージョニングにはいくつかのアプローチがありますが、実際にはどちらも実際には実用的ではないことに気付くかもしれません。