如何隐藏 Acumatica 标准按钮
How to hide Acumatica standard button
我在申请屏幕上创建了一个新的 CREATE QUOTE 按钮,用于替换位于 Action 菜单中的标准按钮。尝试在 RQRequisition_RowSelected 事件中隐藏它后,当申请处于待定报价状态时,该按钮仍然出现并且能够单击。请教如何隐藏它。
Customized Requisition Screen
要隐藏或显示操作按钮,您应该重新定义按钮的 PXUIField 属性的 Visible 参数。
您可以使用以下方法之一更改操作按钮的属性:
- 动态地在 运行 时间,在图形的 Initialize() 方法中
扩展
- 静态地,通过覆盖
图扩展
在 运行 时间隐藏操作按钮
在图形扩展中,添加以下代码。
public override void Initialize()
{
base.Initialize();
Base.MyAction.SetVisible(false);
}
在添加的代码中,将 MyAction 替换为操作名称。
静态隐藏或显示操作按钮
要静态覆盖图形扩展中的操作属性,您应该同时声明 PXAction 类型的图形成员和委托。您应该将一组新的属性附加到动作委托,在图形扩展中声明。此外,您需要对基本图形操作调用 Press() 方法。重新声明 PXAction 的成员后,您可以防止无限循环中的动作委托执行。
探索原始动作声明并将声明复制到图形扩展。
在操作声明中,将 PXUIField 属性的 Visible 参数设置为 false,如以下代码片段所示。
...
[PXUIField(..., Visible = false)]
...
用以下代码模板替换动作委托。
public 虚拟 IEnumerable myAction(PXAdapter 适配器)
{
return Base.MyAction.Press(适配器);
}
在代码模板中,将 myAction 和 MyAction 替换为适当的名称。
- 在模板中,根据基本操作委托的签名重新定义操作委托参数和return类型。
If you have a customization that replaces an original action
declaration statically, after upgrading Acumatica ERP to a new
version, a new functionality of the same action may became
unavailable.
另外,如果在PXDataSource控件中声明了按钮的回调命令,您可以通过自定义ASPX代码来隐藏按钮。为此,在布局编辑器中,展开 PXDataSource 控件,select 适当的 PXDSCallbackCommand 元素,并将该元素的 Visible 属性 设置为 False。
“请购单”屏幕上的“创建报价单”按钮的实现类似于 RQRequisitionEntry BLC 中的正常操作:
public class RQRequisitionEntry : PXGraph<RQRequisitionEntry>
{
...
public PXAction<RQRequisition> createQTOrder;
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntry)]
[PXUIField(DisplayName = Messages.CreateQuotation)]
public virtual IEnumerable CreateQTOrder(PXAdapter adapter)
{
...
}
...
}
但是,CREATE QUOTE 按钮已通过自动化步骤添加到“操作”下拉列表中:
话虽如此,自定义 CREATE QUOTE 按钮的最佳方法是 re-declaring 下面示例中 RQRequisitionEntry BLC 扩展中的操作。如果您提供有关您的请求的更多详细信息,我很乐意提供更具体的示例。
public class RQRequisitionEntryExt : PXGraphExtension<RQRequisitionEntry>
{
public PXAction<RQRequisition> createQTOrder;
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntry)]
[PXUIField(DisplayName = RQ.Messages.CreateQuotation)]
public virtual IEnumerable CreateQTOrder(PXAdapter adapter)
{
return Base.createQTOrder.Press(adapter);
}
}
我在申请屏幕上创建了一个新的 CREATE QUOTE 按钮,用于替换位于 Action 菜单中的标准按钮。尝试在 RQRequisition_RowSelected 事件中隐藏它后,当申请处于待定报价状态时,该按钮仍然出现并且能够单击。请教如何隐藏它。
Customized Requisition Screen
要隐藏或显示操作按钮,您应该重新定义按钮的 PXUIField 属性的 Visible 参数。 您可以使用以下方法之一更改操作按钮的属性:
- 动态地在 运行 时间,在图形的 Initialize() 方法中 扩展
- 静态地,通过覆盖 图扩展
在 运行 时间隐藏操作按钮
在图形扩展中,添加以下代码。
public override void Initialize()
{
base.Initialize();
Base.MyAction.SetVisible(false);
}
在添加的代码中,将 MyAction 替换为操作名称。
静态隐藏或显示操作按钮
要静态覆盖图形扩展中的操作属性,您应该同时声明 PXAction 类型的图形成员和委托。您应该将一组新的属性附加到动作委托,在图形扩展中声明。此外,您需要对基本图形操作调用 Press() 方法。重新声明 PXAction 的成员后,您可以防止无限循环中的动作委托执行。
探索原始动作声明并将声明复制到图形扩展。
在操作声明中,将 PXUIField 属性的 Visible 参数设置为 false,如以下代码片段所示。
... [PXUIField(..., Visible = false)] ...
用以下代码模板替换动作委托。
public 虚拟 IEnumerable myAction(PXAdapter 适配器) { return Base.MyAction.Press(适配器); }
在代码模板中,将 myAction 和 MyAction 替换为适当的名称。
- 在模板中,根据基本操作委托的签名重新定义操作委托参数和return类型。
If you have a customization that replaces an original action declaration statically, after upgrading Acumatica ERP to a new version, a new functionality of the same action may became unavailable.
另外,如果在PXDataSource控件中声明了按钮的回调命令,您可以通过自定义ASPX代码来隐藏按钮。为此,在布局编辑器中,展开 PXDataSource 控件,select 适当的 PXDSCallbackCommand 元素,并将该元素的 Visible 属性 设置为 False。
“请购单”屏幕上的“创建报价单”按钮的实现类似于 RQRequisitionEntry BLC 中的正常操作:
public class RQRequisitionEntry : PXGraph<RQRequisitionEntry>
{
...
public PXAction<RQRequisition> createQTOrder;
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntry)]
[PXUIField(DisplayName = Messages.CreateQuotation)]
public virtual IEnumerable CreateQTOrder(PXAdapter adapter)
{
...
}
...
}
但是,CREATE QUOTE 按钮已通过自动化步骤添加到“操作”下拉列表中:
话虽如此,自定义 CREATE QUOTE 按钮的最佳方法是 re-declaring 下面示例中 RQRequisitionEntry BLC 扩展中的操作。如果您提供有关您的请求的更多详细信息,我很乐意提供更具体的示例。
public class RQRequisitionEntryExt : PXGraphExtension<RQRequisitionEntry>
{
public PXAction<RQRequisition> createQTOrder;
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntry)]
[PXUIField(DisplayName = RQ.Messages.CreateQuotation)]
public virtual IEnumerable CreateQTOrder(PXAdapter adapter)
{
return Base.createQTOrder.Press(adapter);
}
}