2012-10-28 22 views
3

我們正在嘗試更改我們的業務流程,以便通過WF4實施。 我們的業務流程如下所示:WF4:驗證所有活動的退出狀態已轉換爲其他活動

  • 有許多處理程序。
  • 每個處理程序都有多個輸出狀態。
  • 處理程序被實現爲活動
  • 設計師將支持這些活動的輸出狀態,這樣
    • ,我們可以很容易地看到什麼狀態的原因是什麼下一個活動
    • 我們可以在編譯時驗證每一個活動的所有狀態與其他一些活動相關聯。

,我們怎樣才能WF4實現這一目標?

+0

您可以使用[狀態機(http://msdn.microsoft.com/en-us/library/system.activities.statements.statemachine.aspx)提供。但是,我不知道如何完成轉換驗證,因此這是一條評論。如果有人能夠回答你如何驗證所有的狀態是連接的,他們有你的答案。 – Will

+0

謝謝,威爾,我已經在使用.net 4.0.1和它的狀態機。但問題的核心是非常確認。 –

+1

我對StateMachine不熟悉,但是在設計時驗證是通過活動約束來實現的。我的猜測是,這與StateMachines沒有什麼不同。查看我的回答[this](http://stackoverflow.com/questions/8016606/how-do-i-use-system-activities-validation-getparentchain/8018098#8018098)問題的介紹和示例。 – Joao

回答

0

也許你可以在你的處理器活動中定義所需的屬性(過渡活動)。然後在處理程序的CacheMetadata覆蓋您可以驗證它們是否提供。在處理程序活動的末尾執行方法時,您可以使用工作流運行時安排已分配的轉換活動。像下面這樣:在.NET 4.5

public sealed class MyHandlerActivity : NativeActivity 
{ 
    public MyHandlerActivity NextHandler 
    { 
     get; 
     set; 
    } 

    protected override void CacheMetadata(NativeActivityMetadata metadata) 
    { 
     // Ensure next handler is supplied. 
     if (this.NextHandler == null) 
     { 
      metadata.AddValidationError("Next handler is not assigned."); 
      return; 
     } 

     // Let the workflow runtime that this activity could schedule another activity (the handler activity). 
     metadata.AddChild(this.NextHandler); 
    } 

    protected override void Execute(NativeActivityContext context) 
    { 
     // TODO: Handler should do something here. 

     // Schedule the next handler. 
     context.ScheduleActivity(this.NextHandler); 
    } 
} 
+0

其實我不希望我的活動知道接下來應該安排什麼活動。還有什麼我應該做的時候,有幾個下一個活動,我們應該從中選擇一個狀態機的條件? –

相關問題