如何隐藏Acumatica标准按钮

时间:2017-01-31 09:49:35

标签: acumatica

我在“申请单”屏幕上创建了一个新的CREATE QUOTE按钮,用于替换位于“操作”菜单中的标准按钮。在尝试将其隐藏在RQRequisition_RowSelected事件后,该按钮仍然显示,并且当请购单处于待处理报价状态时能够单击。请提出如何隐藏它的建议。

Customized Requisition Screen

2 个答案:

答案 0 :(得分:0)

要隐藏或显示操作按钮,您应该重新定义按钮的PXUIField属性的Visible参数。 您可以使用以下方法之一更改操作按钮的属性:

  • 在运行时动态地在图形的Initialize()方法中 扩展
  • 静态地,通过覆盖中的动作属性 图表扩展

在运行时隐藏操作按钮

在图表扩展中,添加以下代码。

public override void Initialize()
{
  base.Initialize();
  Base.MyAction.SetVisible(false);
}

在添加的代码中,将MyAction替换为操作名称。

静态隐藏或显示操作按钮

要静态覆盖图表扩展中的操作属性,您应该声明PXAction类型的图形成员和委托。您应该在动作委托中附加一组新属性,并在图形扩展中声明。此外,您需要在基本图形操作上调用Press()方法。重新声明PXAction的成员后,您将阻止从无限循环执行操作委托。

  1. 探索原始行动声明并将声明复制到图表扩展名。

  2. 在操作声明中,将PXUIField属性的Visible参数设置为false,如以下代码段所示。

    ... [PXUIField(...,Visible = false)] ...

  3. 使用以下代码模板替换操作委托。

    public virtual IEnumerable myAction(PXAdapter adapter) {   return Base.MyAction.Press(adapter); }

  4. 在代码模板中,将myAction和MyAction替换为相应的名称。

  5. 在模板中,根据基本操作委托的签名重新定义操作委托参数和返回类型。
  6.   

    如果您有自定义替换原始操作   在将Acumatica ERP升级为新的后,静态声明   版本,可能会成为相同操作的新功能   不可用。

    此外,如果在PXDataSource控件中声明了该按钮的回调命令,则可以通过自定义ASPX代码来隐藏该按钮。为此,在布局编辑器中,展开PXDataSource控件,选择适当的PXDSCallbackCommand元素,并将元素的Visible属性设置为False。

答案 1 :(得分:0)

“申请单”屏幕上的“创建报价”按钮的实现方式与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按钮会通过Automation Steps添加到Actions下拉列表中:

enter image description here

如上所述,自定义CREATE QUOTE按钮的最佳方法是在下面的示例中重新声明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);
    }
}