2009-09-03 10 views
3

私たちのアプリケーションの一部として、私はドキュメント作成ライフサイクルをサポートするために使用される「シンプルな」ワークフローシステムを書く必要があります。 - さまざまなアクティビティ:ドキュメントの編集、ドキュメントの確認(承認、却下)、ドキュメントの公開... - このアクティビティを異なる人/ユーザに割り当てます。 - "並列分割および結合"。たとえば、次のようなワークフローをサポートしたいと考えています。単純なワークフローシステムを作成する

- begin 
1.) Create document 
2.) Translate document 
2.1) Translate into English 
2.1.1) Translate document into English 
2.1.2) Verify English translation 
2.2) Translate into Italian 
2.2.1) Translate document into Italian 
2.2.2) Verify Italian translation 
3.) Verify complete document 
4.) Publish document 
- end 

asp.netアプリケーション(C#)で使用されます。

最後の部分:この作業を開始するのに役立つパターン、ライブラリ、または記事があるかどうかを知りたいと思いますか? WWFはこれにふさわしいでしょうか?

(たとえstackoverflow上であっても)いくつかの素材がありますが、どのように並列性に対処するのか分かりません。

答えて

4

ワークフローエンジンは簡単な概念です。堅牢で管理可能な実装を作成することは、それが現れるよりはるかに多くの作業です。強くあなたが自分でそれを構築することなく、既製品を好む。 WWF (Windows Workflow Foundation)あなたのニーズに合わせて見えます。

0

私はWindowsワークフローを使用してワークフローをモデル化するのは比較的簡単で、ワークフローの状態を把握するなどの気にならない問題については心配する必要はありません。あなたのビジネスドメインの問題の外に。

http://msdn.microsoft.com/en-us/library/aa480214.aspx

0

数年前、私は、データベースがすでにexisted.Basically我々はココアベースのソリューションへのWebインターフェイスを提供してホーム成長した溶液を用いたワークフローsystem.Itを実装プロジェクトで働いていました。

オープンソースのBPMソリューションを使用することができます(私はJBPMをJava用に見たことがありますが、優れたASPベースのオープンソースソリューションを検索できます)。これらのソリューションはプロセスベースです。 xmlファイルを作成します。各承認者はノードであり、親ノードのみが承認した場合、ツリーの次のノードが画像に入ります。

また ASPは問題ではないでしょう。あなた自身のソリューションでは、データベースを最初に作成することをお勧めします。データベースにツリー構造を格納する方法が必要です.Parallelは、2つのノードが同じ親あなたは 'has_approved'のような属性を置くことができ、両方のノードにhas_approved = 1がある場合にのみフローがさらに進化します。

これはもっと広いトピックです。特定のソリューションに合わせてコードを変更する必要があるため、最も単純なものを選択してください。

0

あなたが求めていることはありますが、.NET 3.xワークフローランタイムに基づいて独自のワークフローホストをローリングすることについては何も「単純」ではありません。これをした人からこれを取ってください。 .NET 4.0ではもっと簡単になるので、あなたのソリューションは数ヶ月で時代遅れになると考える価値があります。

問題のドメインにドキュメントベースのワークフローのみが含まれている場合は、代わりにSharePointソリューションを検討することを強くお勧めします。このオプションのいくつかの情報については、以下のリンクを参照してください。

http://office.microsoft.com/en-us/sharepointdesigner/HA101005911033.aspx http://channel9.msdn.com/posts/RobertShelton/Building-an-Approval-Workflow-with-SharePointMOSS-2007-and-Visual-Studio-2008/

0

それは実装することは難しいことではありません。私はそれが巨大なパッケージ化された解決策を必要としないほど簡単だと分かった。

監視するアイテム(ドキュメント)を決定する必要があります。次に、それらの文書がどの状態(または状態)に入ることができるかを判断する必要があります。ステータスは、文書の処理ステップを記録します。 (それがあなたの「仕事の流れ」のどこにあるか)。あなたはすでにあなたの投稿にそれをしています。

ステートマシンは、各種ステータスを通じて文書の動きを処理するための優れたパターンです:http://en.wikipedia.org/wiki/State_machine

あなたはまだ文書がにすることができ、各状態のリストを作成しなければならないと何にそれを移動するために、それはどうなります新しい州。あなたは既に仕事のほとんどをやってきました。あなたの課題のコードは、1ページまたは2ページ以上を取るべきではありません。

サンプル実装:

あなたはそれを追跡し、それを、それはあなたのプロセスにある場合を示すステータスを割り当てることができるように、各文書に番号を割り当てます。通常は両方とも数字で終わっていますが、必ずしもそうである必要はありません。このような

何か:

public class document 
{ 
    public int documentId; 
    public String documentStatus; 
} 

// create a new document to track 
document doc = new document(); 
doc.documentId = 42;  // arbitrary id# 
doc.documentStatus = "1"; // document is at the start of the process 
2

WF Virtual Labsで遊んでみてください。技術に慣れれば、WFが適切かどうか、または自分自身をロールバックする必要があるかどうかをよりよく理解できます。また、あなたはK2をチェックアウトすることができますが、それははるかに重量です。

関連する問題