Sales Order界面自定义保存按钮后如何调整主工具栏按钮顺序?
嘿,这个问题我之前折腾Acumatica自定义功能时也碰到过,头部工具栏的按钮调整确实不像网格操作那么直观,不过有几种靠谱的方法能帮你把自定义保存按钮放到原按钮的位置上,我给你一步步拆解:
方法1:通过按钮Position属性直接定位
这是最直接的方式,你只需要在自定义保存按钮的定义里指定和原保存按钮一致的Position值,同时把原按钮隐藏掉就行:
- 首先在Graph扩展里隐藏原保存按钮:
public class SalesOrderEntry_Extension : PXGraphExtension<SalesOrderEntry> { public override void Initialize() { base.Initialize(); // 把原生保存按钮设为不可见 Base.save.SetVisible(false); } }
- 然后给你的自定义保存按钮设置
Position属性,数值和原保存按钮保持一致(原保存按钮的Position通常是10,你也可以通过调试确认具体值):
public PXAction<SOOrder> customSave; [PXButton(CommitChanges = true), PXUIField(DisplayName = "Save", Position = 10)] protected IEnumerable CustomSave(PXAdapter adapter) { // 这里写你的自定义保存逻辑 // 比如调用原生保存逻辑再加上你的自定义操作: Base.save.Press(); // 你的额外处理代码... return adapter.Get(); }
方法2:通过代码调整Toolbar的按钮顺序
如果Position属性不好用,或者你想更灵活地控制位置,可以直接操作Toolbar的Items集合,把自定义按钮移到原保存按钮的位置:
public override void Initialize() { base.Initialize(); Base.save.SetVisible(false); // 获取头部主工具栏 PXToolbar mainToolbar = Base.Tools["toolbar"] as PXToolbar; if (mainToolbar != null) { // 找到我们的自定义保存按钮 var customSaveBtn = mainToolbar.Items.OfType<PXToolbarButton>() .FirstOrDefault(btn => btn.ActionName == "customSave"); if (customSaveBtn != null) { // 先移除自定义按钮 mainToolbar.Items.Remove(customSaveBtn); // 找到原保存按钮的位置索引 int originalSaveIndex = mainToolbar.Items.OfType<PXToolbarButton>() .ToList().FindIndex(btn => btn.ActionName == "save"); // 把自定义按钮插入到原位置,如果找不到就插在最前面 if (originalSaveIndex >= 0) { mainToolbar.Items.Insert(originalSaveIndex, customSaveBtn); } else { mainToolbar.Items.Insert(0, customSaveBtn); } } } }
方法3:直接修改布局文件(.aspx)
如果你更习惯可视化操作,可以打开Sales Order的自定义布局副本,直接调整Toolbar里的按钮顺序:
- 在Customization Project里找到SalesOrder.aspx,进入编辑模式
- 找到头部的
<px:PXToolbar>节点,展开它的<Items>集合 - 把你的自定义
<px:PXToolbarButton ActionName="customSave">节点拖到原保存按钮的位置 - 给原保存按钮加上
Visible="False"属性,把它隐藏起来 - 保存布局并发布项目
这样调整后,你的自定义保存按钮就会完美替代原按钮的位置了,和原生按钮的视觉体验保持一致。
内容的提问来源于stack exchange,提问作者Stan A
相关产品推荐
相关产品推荐

