自定义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
相关产品推荐
相关产品推荐

