ほとんどの販売時点管理アプリケーションでは、金銭のやり取りにキャッシュ ドロワーが使われます。 サービス オブジェクトの開発者は、Microsoft Point of Service for .NET (POS for .NET) の CashDrawerBase クラスを使って、Unified Point Of Service (UnifiedPOS) に準拠した CashDrawer サービス オブジェクトを簡単に実装できます。
機能
すべての CashDrawer サービス オブジェクトは、少なくともドロワーを開く機能をサポートする必要があります。 これを行うには、サービス オブジェクトのクラスで抽象メソッド CashDrawerBase.OpenDrawerImpl を実装します。
サービス オブジェクトでは、キャッシュ ドロワーが開いているかどうかを判断することもできます。 サービス オブジェクトにこの機能がある場合は、CapStatus プロパティを true に設定する必要があります。 CapStatus が true の場合、アプリケーションは DrawerOpened プロパティを使ってデバイスの状態を調べることができます。 CapStatus が設定されていない場合、DrawerOpened は常に false に設定され、true に設定しようとすると例外が生成されます。
CapStatus が true に設定されている場合は、サービス オブジェクトで DrawerOpened プロパティを更新する必要があります。 これは、サービス オブジェクトの OpenDrawerImpl メソッドの実装で行う必要があります。 デバイスの状態を監視するバックグラウンド スレッドで、DrawerOpened プロパティを設定することもできます。
CashDrawer のイベント
サービス オブジェクトで CapStatus プロパティを true に設定した場合、CashDrawerBasic.DrawerOpened によって StatusUpdateEvent がアプリケーションに送信されます。
キャッシュ ドロワー デバイスとサービス オブジェクトの実装によっては、ハードウェアの状態を監視し、変更を非同期的に報告するため、サービス オブジェクトで別のスレッドが必要になる場合があります。 これは、たとえば、キャッシュ ドロワーをオペレーターが手動で開くことができ、アプリケーションに通知する必要がある場合などに必要です。
CashDrawer サービス オブジェクトでは、DirectIOEvent をアプリケーションに送信することもできます。 DirectIOEvent は、サービス オブジェクトの実装に固有であり、したがって一部のアプリケーションと互換性がない可能性があるデータを、アプリケーションに送信するために使われます。 詳しくは、「デバイスの入力とイベント」をご覧ください。
デバイスの共有
キャッシュ ドロワーは共有可能なデバイスです。 複数のアプリケーションで、開き、有効にして、そのすべてのプロパティとメソッドにアクセスできます。 ただし、あるアプリケーションがデバイスを要求した後は、そのアプリケーションのみが CashDrawerBase.OpenDrawer または CashDrawerBase.WaitForDrawerClose を呼び出すことができます。 他のアプリケーションがこれらのメソッドを呼び出そうとすると、ErrorCode.Claimed が設定された PosException がスローされます。
複数のアプリケーションがデバイスを開いて有効にした場合、サービス オブジェクトによって送信されるすべてのイベントを各アプリケーションが受信します。
この機能をサポートするために必要なコードは、POS for .NET の CashDrawerBase クラスで実装されています。
複数のキャッシュ ドロワー
1 台のコンピューターに複数のキャッシュ ドロワーを接続し、同じハードウェア ポートを使うことができます。 このような状況では、CashDrawer サービス オブジェクトでは、明確に接続されていないキャッシュ ドロワーを認識できます。 サービス オブジェクトが接続されているキャッシュ ドロワー デバイスを区別できる場合は、CapStatusMultiDrawerDetect プロパティを true に設定する必要があります。 このプロパティの値は、DrawerOpened プロパティと WaitForDrawerClose メソッドの動作に影響します。
CapStatusMultiDrawerDetect が false に設定されている場合、DrawerOpened の値 true は、少なくとも 1 つのドロワーが開かれていることを示します。 アプリケーションでは、特定のドロワーが開いているかどうかを判断できません。
CapStatusMultiDrawerDetect が false に設定されている場合、WaitForDrawerClose メソッドは、開いているキャッシュ ドロワーがすべて閉じられるまで待ってから、アプリケーションに戻ります。
関連項目
.NET