次の方法で共有


CashDrawer の実装 (POS for .NET v1.14 SDK ドキュメント)

ほとんどの販売時点管理アプリケーションでは、金銭のやり取りにキャッシュ ドロワーが使われます。 サービス オブジェクトの開発者は、Microsoft Point of Service for .NET (POS for .NET) の CashDrawerBase クラスを使って、Unified Point Of Service (UnifiedPOS) に準拠した CashDrawer サービス オブジェクトを簡単に実装できます。

機能

すべての CashDrawer サービス オブジェクトは、少なくともドロワーを開く機能をサポートする必要があります。 これを行うには、サービス オブジェクトのクラスで抽象メソッド CashDrawerBase.OpenDrawerImpl を実装します。

サービス オブジェクトでは、キャッシュ ドロワーが開いているかどうかを判断することもできます。 サービス オブジェクトにこの機能がある場合は、CapStatus プロパティを true に設定する必要があります。 CapStatustrue の場合、アプリケーションは DrawerOpened プロパティを使ってデバイスの状態を調べることができます。 CapStatus が設定されていない場合、DrawerOpened は常に false に設定され、true に設定しようとすると例外が生成されます。

CapStatustrue に設定されている場合は、サービス オブジェクトで 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 メソッドの動作に影響します。

CapStatusMultiDrawerDetectfalse に設定されている場合、DrawerOpened の値 true は、少なくとも 1 つのドロワーが開かれていることを示します。 アプリケーションでは、特定のドロワーが開いているかどうかを判断できません。

CapStatusMultiDrawerDetectfalse に設定されている場合、WaitForDrawerClose メソッドは、開いているキャッシュ ドロワーがすべて閉じられるまで待ってから、アプリケーションに戻ります。

関連項目