【问题标题】:Add a Report Menu item via code rather than Automation Steps通过代码而不是自动化步骤添加报告菜单项
【发布时间】:2017-07-22 01:46:47
【问题描述】:

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

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);
        }
      }

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

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    首先,您要在 Initialize 调用中执行菜单添加并使用“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);
    }
    

    【讨论】:

    • “报告”标识符指的是方法定义,因此错误签名为:PX.Objects.SO.SOOrderEntry.Report(PX.Data.PXAdapter, string)。应该是指行动的“报告”。
    • 好收获@HB_ACUMATICA。似乎是不使用初始化的组合,但也指出错误使用动作“报告”与“报告”的错误
    【解决方案2】:

    我认为您可以覆盖 Initialize() 方法并在那里添加 Report to report 菜单。在 SOOrderEntry Graph Extension 上查看下面的 sn-p 代码:

    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");
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      相关资源
      最近更新 更多