CashDrawer 实现(POS for .NET v1.14 SDK 文档)

大多数销售点应用程序将使用收银机进行金融交易。 服务对象开发人员可以使用适用于 .NET 的 Microsoft 服务点 (POS for .NET) 类 CashDrawerBase 轻松实现符合统一服务点 (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 类中实现。

多个收银机

可以将多个收银机连接到计算机并使用相同的硬件端口。 在这种情况下,CashDrawer 服务对象可能知道它没有具体连接到哪个收银机。 如果服务对象可以区分其连接的收银机设备,则应将 CapStatusMultiDrawerDetect 属性设置为 true。 该属性的值将影响 DrawerOpened 属性和 WaitForDrawerClose 方法的行为。

如果 CapStatusMultiDrawerDetect 设置为 false,则 DrawerOpened 值为 true 表示至少有一个收银机已打开。 应用程序无法具体确定某个收银机是否打开。

如果 CapStatusMultiDrawerDetect 设置为 false,则 WaitForDrawerClose 方法会在返回到应用程序之前等待所有打开的收银机关闭。

另请参阅