通过代码而不是自动化步骤添加报告菜单项

Add a Report Menu item via code rather than Automation Steps

我正在尝试通过代码而不是使用自动化步骤将报告添加到 SO Order Entry 页面的 Reports 菜单。我使用的代码如下但产生了错误: 错误 CS0122:'PX.Objects.SO.SOOrderEntry.Report(PX.Data.PXAdapter, string)' 由于其保护级别而无法访问 错误 CS0119:'PX.Objects.SO.SOOrderEntry.Report(PX.Data.PXAdapter, string)' 是一个 'method',在给定的上下文中无效

public SOOrderEntry_Extension()
 {
    Base.Report.AddMenuAction(sOAcknowledgementReport);
 }

public PXAction<SOOrder> sOAcknowledgementReport;
    [PXButton]
    [PXUIField(DisplayName = "SO Acknowledgement Report")]
    protected void SOAcknowledgementReport()
       {
          if (Base.Document.Current.OrderNbr != string.Empty)
        {
           throw newPXReportRequiredException(Base.Document.Current, "SO641010", string.Empty);
        }
      }

有人建议如何通过代码而不是使用自动化步骤将报告添加到报告菜单吗?

首先,您要在初始化调用中执行菜单添加并使用 "report" 与 "Report"。

public override void Initialize()
{
    base.Initialize();
    //Edit:  use report vs Report as HB_ACUMATICA mentioned
    Base.report.AddMenuAction(sOAcknowledgementReport);
}

其次,您需要通过扩展 RowSelected 来指示按钮已启用。我认为自动化的东西会自动禁用按钮,因此有必要使用启用按钮所需的任何条件将按钮转回。

public virtual void SOOrder_RowSelected(PXCache sender, PXRowSelectedEventArgs e, PXRowSelected del)
{
    del?.Invoke(sender, e);
    sOAcknowledgementReport.SetEnabled(true);
}

我认为您可以重写 Initialize() 方法并在此处添加报告到报告菜单。请参阅下面有关 SOOrderEntry Graph Extension 的代码片段:

public class SOOrderEntry_Extension:PXGraphExtension<SOOrderEntry>
{


    public override void Initialize()
    {
        Base.report.AddMenuAction(sOAcknowledgementReport);
    }


    public PXAction<SOOrder> sOAcknowledgementReport;
    [PXButton]
    [PXUIField(DisplayName = "SO Acknowledgement Report")]
    protected void SOAcknowledgementReport()
    {
        if (Base.Document.Current.OrderNbr != string.Empty)
        {
           throw new PXException("Test");
        }
    }

}