共用方式為


補償範例

Download sample

補償會定義因商務例外狀況而導致執行的商務邏輯。補償完全是在建立商務處理流程模型之工作流程設計工具的範圍內;補償的觸發是由使用者而非執行階段所定義。執行階段會提供要定義補償的機制。

在此範例中,所補償的工作單位會包含在 CompensatableTransactionScopeActivity 活動中。接著,針對定義此補償工作之範圍定義 CompensationHandlerActivity 活動。由於範圍必須等到完成時才能進行補償,所以 ThrowActivity 活動會在範圍已完成執行之後擲回例外狀況。這個例外狀況會由包含補償活動的例外狀況處理常式攔截。補償活動會指定執行階段接下來將要執行的目標範圍。

在此案例中會收到一份訂購單,並從買方的信用卡中提款。工作流程會檢查是否有提供已選定的產品。如果有的話,便會將產品出貨。如果產品已經停售,便會擲回 DiscontinuedProductExceptionDiscontinuedProductException 會由工作流程例外狀況處理常式攔截。接著,例外狀況處理常式會觸發已包含於該例外狀況處理常式之 CompensateActivity 所定義的補償處理常式。接下來,補償處理常式會退款給買方。

以下是範例的輸出:

補償範例輸出

使用範例

若要使用此範例,您必須建立 SQL 持續性資料庫。

建立 SQL 持續性資料庫

  1. 如果您使用 Microsoft SQL Server 2005 Express、SQL Server 2000 (含) 以後版本或 SQL Server 2000 Desktop Engine (MSDE),請使用 SQL 查詢陳述式 (Statement) 建立名為 WorkflowPersistenceStore 的新資料庫:

    CREATE DATABASE SqlPersistenceService

    注意:在工作流程應用程式中同時使用 SqlTrackingServiceSqlWorkflowPersistenceService 時,建議您使用單一資料庫,以保持持續性並方便進行追蹤。

  2. 在 SQL Server Query Analyzer 工作區中,從可用資料庫的清單中選取您在步驟 1 建立的資料庫。

  3. 在 [檔案] 功能表上,按一下 [開啟],並開啟 SQL 指令碼 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistence_Schema.sql

  4. 按一下 [執行] 或按下 F5 執行查詢,以建立 SQL 持續性服務資料表。

  5. 在 [檔案] 功能表上,按一下 [開啟],並開啟 SQL 指令碼 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistence_Logic.sql

  6. 按一下 [執行] 或按下 F5 執行查詢,以建立 SQL 持續性服務預存程序。

建置範例

  1. 按一下此主題中的 [下載範例] 來下載範例。

    這樣便會將範例專案擷取到本機硬碟上。

  2. 按一下 [開始],並依序指向 [程式集] 和 [Microsoft Windows SDK],再按一下 [CMD 殼層]。

  3. 移至範例的來源目錄。

  4. 在命令提示字元上,輸入 MSBUILD <Solution file name>

執行範例

  • 在 [SDK 命令提示字元] 視窗中,執行 Compensation\bin\debug 資料夾 (若是範例的 VB 版本,則是 Compensation\bin 資料夾) 中的 .exe 檔案,該資料夾位於此範例的主要資料夾下方。

請參閱

參考

CompensatableTransactionScopeActivity
CompensationHandlerActivity
CodeActivity
FaultHandlerActivity
FaultHandlersActivity
IfElseActivity
IfElseBranchActivity
ThrowActivity

其他資源

Using the CompensationHandler Activity
Adding Compensatable Activities and Compensation Handlers
Compensation Overview
活動範例
Windows Workflow Foundation 範例

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.