Acumatica 22版新WMS/拣货打包发货系统条码代码对接咨询
Acumatica 22版本条码处理对接方案
问题背景
曾在旧版拣货打包发货界面使用自定义代码修改QR码后传入Acumatica系统,升级至22版本后代码失效,需了解新版本WarehouseManagementSystem的条码处理对接方式。
旧版失效代码
using WMSBase = PX.Objects.IN.WarehouseManagementSystemGraph<PX.Objects.IN.INScanReceive, PX.Objects.IN.INScanReceiveHost, PX.Objects.IN.INRegister, PX.Objects.IN.INScanReceive.Header>; using PX.Objects; using PX.Objects.IN; namespace ExtScannerCode { public class INScanReceiveHostExtCustomPackage : PXGraphExtension<INScanReceive, INScanReceiveHost> { public static bool IsActive() => true; #region Overrides ProcessItemBarcode //ProcessItemBarcode public delegate void ProcessItemBarcodeDelegate(string barcode); [PXOverride] public virtual void ProcessItemBarcode(string barcode, ProcessItemBarcodeDelegate baseMethod) { baseMethod?.Invoke(barcode); } #endregion #region Overrides ProcessLotSerialBarcode //ProcessLotSerialBarcode public delegate void ProcessLotSerialBarcodeDelegate(string barcode); [PXOverride] public virtual void ProcessLotSerialBarcode(string barcode, ProcessLotSerialBarcodeDelegate baseMethod) { baseMethod?.Invoke(barcode); } #endregion #region Overrides ProcessExpireDate //ProcessLotSerialBarcode public delegate void ProcessExpireDateDelegate(string barcode); [PXOverride] public virtual void ProcessExpireDate(string barcode, ProcessLotSerialBarcodeDelegate baseMethod) { baseMethod?.Invoke(barcode); } #endregion } [PXProtectedAccess] public abstract class INScanReceiveHostExtProtectedAccess : PXGraphExtension<INScanReceiveHostExtCustomPackage, INScanReceive, INScanReceiveHost> { [PXProtectedAccess(typeof(INScanReceive))] protected abstract void ProcessItemBarcode(string barcode); [PXProtectedAccess(typeof(INScanReceive))] protected abstract void ApplyState(string state); [PXProtectedAccess(typeof(INScanReceive))] protected abstract void ProcessLotSerialBarcode(string barcode); } }
22版本对接方案
Acumatica 22版本重构了WMS架构,原有的INScanReceive相关扩展方式已不再适用,需基于新的WarehouseManagementSystem框架进行扩展:
核心调整点
- 扩展目标变更:不再直接扩展
INScanReceiveHost,而是扩展通用的WarehouseManagementSystemGraph或其对应的WMS流程类 - 条码处理入口更新:新版本使用统一的
ProcessBarcode方法拦截处理条码,替代原有的分方法重载 - 移除
PXProtectedAccess依赖:新版本框架开放了更多公共API,无需通过抽象类访问受保护方法
示例代码(收货流程)
using PX.Objects; using PX.Objects.IN; using PX.Objects.IN.WMS; namespace ExtScannerCode { public class WMSReceiveBarcodeExt : PXGraphExtension<WarehouseManagementSystemGraph<INScanReceive, INRegister, INScanReceive.Header>> { public static bool IsActive() => true; #region Override ProcessBarcode public delegate void ProcessBarcodeDelegate(string barcode, BarcodeProcessingContext context); [PXOverride] public virtual void ProcessBarcode(string barcode, BarcodeProcessingContext context, ProcessBarcodeDelegate baseMethod) { // 在这里添加QR码修改逻辑,比如格式转换、补充字段等 string modifiedBarcode = ModifyBarcode(barcode, context); // 调用基础方法处理修改后的条码 baseMethod?.Invoke(modifiedBarcode, context); } #endregion private string ModifyBarcode(string originalBarcode, BarcodeProcessingContext context) { // 自定义修改逻辑示例:根据当前操作类型调整条码内容 if (context.CurrentOperation == WMSOperation.Receive) { // 针对收货操作的条码修改规则 return originalBarcode; } return originalBarcode; } } }
拣货发货流程适配
如果是对接拣货发货界面,只需替换WarehouseManagementSystemGraph的泛型参数为发货流程对应的类:
public class WMSShipBarcodeExt : PXGraphExtension<WarehouseManagementSystemGraph<INScanShip, INRegister, INScanShip.Header>> { // 内部逻辑与收货流程一致,仅泛型参数调整 }
关键说明
BarcodeProcessingContext:包含当前WMS流程的上下文信息(如当前单据、操作类型、用户权限等),可用于精准控制条码修改逻辑- 功能启用:部署前需确认Acumatica系统已启用Warehouse Management功能,并在对应仓库的设置中开启条码扫描支持
- 测试验证:通过系统内的条码扫描界面测试修改后的逻辑,确认条码能正确识别并传入系统
内容的提问来源于stack exchange,提问作者JvD
相关产品推荐
相关产品推荐

