You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:24:44