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

自定义Item Warehouse Details复合键导航按钮至Inventory ID切换的技术问询

能否将导航按钮改为在Inventory ID间切换?

当然可以实现!Acumatica的框架给了我们足够的灵活性来自定义表单的导航行为,默认的上/下一条按钮是基于复合主键的顺序(先Inventory ID再Site ID)来切换,但我们可以通过重写导航逻辑,把切换规则改成优先按Inventory ID来跳转。

实现需求需用到的事件/方法

要完成这个自定义,核心要用到以下几个Acumatica框架中的关键部分:

  • 重写GetNextDocument和GetPreviousDocument方法
    这两个方法是Acumatica负责获取“下一条”和“上一条”记录的核心逻辑,默认会严格按照DAC的主键定义顺序来查找记录。我们需要在对应的Graph(这里是ItemMaint,因为Item Warehouse Details属于Item Maintenance表单)里重写这两个方法,自定义查询规则:

    • 对于“下一条”:构建查询条件,找到比当前记录InventoryID更大的第一条ItemWarehouse记录,按InventoryID升序排序;
    • 对于“上一条”:找到比当前记录InventoryID更小的最后一条ItemWarehouse记录,按InventoryID降序排序。
      举个简单的代码示例:
    public override ItemWarehouse GetNextDocument(ItemWarehouse current)
    {
        if (current == null) return null;
        return PXSelect<ItemWarehouse,
            Where<ItemWarehouse.inventoryID, Greater<Current<ItemWarehouse.inventoryID>>>,
            OrderBy<Asc<ItemWarehouse.inventoryID, Asc<ItemWarehouse.siteID>>>>
            .Select(this);
    }
    
    public override ItemWarehouse GetPreviousDocument(ItemWarehouse current)
    {
        if (current == null) return null;
        return PXSelect<ItemWarehouse,
            Where<ItemWarehouse.inventoryID, Less<Current<ItemWarehouse.inventoryID>>>,
            OrderBy<Desc<ItemWarehouse.inventoryID, Desc<ItemWarehouse.siteID>>>>
            .Select(this);
    }
    
  • RowSelected事件(可选但推荐)
    你可以在ItemWarehouse视图的RowSelected事件里添加逻辑,确保导航按钮的状态正确——比如当当前记录已经是最小的InventoryID时,禁用“上一条”按钮;当是最大的InventoryID时,禁用“下一条”按钮,提升用户体验。

  • 自定义查询逻辑
    重写上述两个方法时,需要根据你的业务需求调整查询条件:比如是否要过滤特定状态的记录,或者是否要保留Site ID的排序优先级(在同一个Inventory ID下),这些都可以通过修改PXSelect的Where和OrderBy子句来实现。

内容的提问来源于stack exchange,提问作者Nickolas Hook

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:21:26