Microsoft Point of Service for .NET(POS for .NET)中的錯誤處理是建立在物件導向的拋出與捕捉例外模型之上。 針對執行時錯誤會拋出不同的例外,每個例外都包含觸發該 ErrorCode錯誤的資訊,形式為 。
拋出例外的 ErrorCode 屬性會儲存錯誤原因的資訊。 此屬性的可能值代表標準統一服務點(UnifiedPOS)錯誤碼的完整集合。 欲了解更多關於 UnifiedPOS 錯誤代碼與 POS for .NET 錯誤代碼 值之間的映射,請參見 POS for .NET Exception Classes。
POS for .NET 提供四個例外類別,幫助應用程式更好地處理錯誤。 這些分別是 PosException、 PosControlException、 PosManagementException和 PosLibraryException:
- PosException 是一個抽象類別,儲存一般的例外資料。 PosException 扮演類似 .NET Framework 中 System.Exception 類別的角色,並且是 UnifiedPOS 規範中 UposException 類別的 POS for .NET 實作。 所有其他 POS for .NET 例外類別皆由 PosException 衍生而來。
- PosControlException 是 POS 對 .NET 服務物件所拋出的標準例外。 PosControlException 包含 ErrorCode 一個屬性,該屬性包含關於異常原因的資訊。
- PosLibraryException 儲存 PosExplorer 在類別操作中產生的異常資料。 PosLibraryException 不包含 ErrorCode 屬性。
- PosManagementException 儲存 POS 為 .NET 管理 API 產生的例外資料。 PosManagementException 不包含 ErrorCode 屬性。
POS for .NET 中的錯誤處理
POS for .NET 的錯誤處理符合 UnifiedPOS 規範指引。 錯誤處理是事件驅動的,使用錯誤碼來儲存異常資訊,且主要依實作而異。
在 POS for .NET 中處理錯誤的一般流程如下:
事件驅動的輸入會產生錯誤。
裝置會改變其 State 屬性,表示遇到錯誤。
ErrorEvent 事件排入佇列,以警示應用程式已發生錯誤。 ErrorEvent 會被加入到佇列的末端。
如果一個或多個 DataEvent 事件被排在 ErrorEvent 事件之前,則會將另一個 ErrorEvent 排入佇列並放在佇列前端。 這會快速警告應用程式發生錯誤,使其能在處理任何排隊的 資料事件之前,以特定於實作的方式進行回應。
若應用程式屬性設定為接受事件(DataEventEnabled 為真 且 FreezeEvents為假),則將根據屬性決定的方式回應ErrorEvent事件,ErrorResponse如下表所示。
價值觀 回應的意義 晴 清除所有緩衝的 DataEvent 事件和 ErrorEvent 事件,退出錯誤狀態,並將裝置狀態改為閒置。 繼續輸入 會確認錯誤並指示裝置繼續處理。 裝置會維持錯誤狀態,並依照 DataEventEnabled 屬性指示,提供額外的資料事件。 當所有輸入都已交付,且 DataEventEnabled 屬性再次設為 true,則會在 Input 位置交付另一個 ErrorEvent。 Retry 指示裝置重新嘗試輸入。 錯誤狀態被退出,狀態改為閒置。 只有當裝置章節明確允許且位置為輸入時,才會選擇此回應。 應用程式此時也可能採取針對實作的特定步驟來回應錯誤。