2009-05-23 16 views
4

私はこの次回のプロジェクトでワークフローエンジンを使用することを考えています。ワークフローエンジンの使用には多くの注意点があり、多くのプラットフォームで多くの開発経験があるため、ワークフローエンジンの選択を私たちのお気に入りのツールセットや開発者IDEよりも優先させていただきたいと思います。どのワークフローエンジンをお勧めしますか?

外部のワークフロー(つまり、SOAPコールをトランザクション対応、より高いレベルのSOAに集約)よりも内部ワークフロー(つまり、コーダー時間を必要とせずに簡単に変更可能なERP目的のペトリネット)に興味があります。どのワークフローエンジンをお勧めしますか? OracleMicrosoft、およびopensourceというものもあります。非常に圧倒的ですので、内部のワークフローを実際に実践している場合にのみ対応してください。

答えて

5

私は以前にK2とWFシステムの両方を導入しました。 K2はかなり強いですが、費用がかかります。 WFは弱者だが、すぐに改善する。どちらも.NETスタック(MOSS専用)と非常によく統合されており、両方とも非常に優れたツール統合を備えています。ワークフローモデルを理解すれば、どちらも開発が比較的容易です。

私は、WFがソリューションのサポートを少し容易にすることができます(つまり、より多くのパートナーがK2よりWFを知っているコンサルタントを多く抱えているということですが)。

残念ながら、私はオラクル製品やオープンソースの代替案について何も経験していないため、コメントできません。

あなたが圧倒された場合は、WF Virtual Labs(ページの下部)をご覧ください。彼らはあなたが技術に手を差し伸べるようにして、いくつかのシナリオを経て、用語解説を得る。いったんそれができたら、WFがあなたがしようとしているものにどのように適合できるかを理解することは、はるかに簡単であるはずです。また、私はEssential Windows Workflowをお勧めすることができます - 非常に良い本。 WF 4.0 from PDCの紹介です。

8

ステートマシンを使用できる場合は、StateLess by Nicholas Blumhardt (Autofaq creator)というオープンソースプロジェクトをお勧めします。彼のアプローチは、状態が文字列やintのような単純な変数によって定義されるため、ランタイムエンジンによって保持されている長時間実行されるワークフローの問題を回避します。ここで

はサンプル状態マシンである:

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); 

あなたの状態は、データベースからそれを現在の状態を供給することを可能にする整数を指定できます。これは、次のようにステートマシンのコンストラクタで設定することができます。

var stateMachine = new StateMachine<State, Trigger>(
    () => myState.Value, 
    s => myState.Value = s); 

あなたがWindowsワークフローを実行する必要があり、複数のプロジェクトに比べて、一つだけのアセンブリでこれを実装することができます。メンテナンスは非常に低く、あなたのためのコードを生成する "デザイナー"はありません。また、シンプルであり、美しさがあります。

+1

+1のコードサンプル。 – georgiosd

関連する問題