如何在 Acumatica ERP 系统(2021 R1 版)的账单和调整屏幕的报告按钮中创建其他菜单选项

How To Create Additional Menu Options in Report Button of Bill and Adjusment Screen in Acumatica ERP System (Version 2021 R1)

有谁知道如何在Acumatica ERP系统的帐单和调整屏幕中添加报告按钮的菜单项,请看下面的截图。

我还为新的操作按钮创建了一些自定义代码,请看下面的代码。

namespace PX.Objects.AP
{
    public class APInvoiceEntry_Extension : PXGraphExtension<APInvoiceEntry>
    {
        public override void Initialize()
        {
            Base.report.AddMenuAction(VendorInvoiceUnreleased);
            Base.report.AddMenuAction(VendorInvoiceReleased);
        }

        #region buton Vendor Invoice Not Released
        public PXAction<APInvoice> VendorInvoiceUnreleased;
        [PXButton]
        [PXUIField(DisplayName = "Vendor Invoice")]
        public IEnumerable vendorInvoiceUnreleased(PXAdapter adapter)
        {
            var result = adapter.Get<APInvoice>();
            foreach (APInvoice doc in result)
            {

                object FinPeriodID;
                if (Base.Caches[typeof(APInvoice)].GetStatus(doc) == PXEntryStatus.Notchanged)
                {
                    Base.Caches[typeof(APInvoice)].SetStatus(doc, PXEntryStatus.Updated);
                }
                Base.Save.Press();

                var docPeriod = (FinPeriodID = Base.Caches[typeof(APInvoice)].GetValueExt<APRegister.finPeriodID>(doc)) is PXFieldState ? (string)((PXFieldState)FinPeriodID).Value : (string)FinPeriodID;
                Dictionary<string, string> parameters = new Dictionary<string, string>();
                parameters["BranchID"] = null;
                parameters["PeriodFrom"] = docPeriod;
                parameters["PeriodTo"] = docPeriod;
                parameters["CreatedBy"] = null;
                parameters["LastModifiedBy"] = null;
                parameters["DocType"] = doc.DocType;
                parameters["RefNbr"] = doc.RefNbr;
                throw new PXReportRequiredException(parameters, "AP910503", "Report");
            }
            return result;
        }
        #endregion

        #region Vendor Invoice Released
        public PXAction<APInvoice> VendorInvoiceReleased;
        [PXButton]
        [PXUIField(DisplayName = "Vendor Invoice Released")]
        public IEnumerable vendorInvoiceReleased(PXAdapter adapter)
        {
            var result = adapter.Get<APInvoice>();
            foreach (APInvoice doc in result)
            {
                object FinPeriodID;
                if (Base.Caches[typeof(APInvoice)].GetStatus(doc) == PXEntryStatus.Notchanged)
                {
                    Base.Caches[typeof(APInvoice)].SetStatus(doc, PXEntryStatus.Updated);
                }
                Base.Save.Press();

                var docPeriod = (FinPeriodID = Base.Caches[typeof(APInvoice)].GetValueExt<APRegister.finPeriodID>(doc)) is PXFieldState ? (string)((PXFieldState)FinPeriodID).Value : (string)FinPeriodID;
                Dictionary<string, string> parameters = new Dictionary<string, string>();
                parameters["BranchID"] = null;
                parameters["PeriodFrom"] = docPeriod;
                parameters["PeriodTo"] = docPeriod;
                parameters["CreatedBy"] = null;
                parameters["LastModifiedBy"] = null;
                parameters["DocType"] = doc.DocType;
                parameters["RefNbr"] = doc.RefNbr;
                throw new PXReportRequiredException(parameters, "AP910501", "Report");
            }
            return result;
        }
        #endregion

但是,我遇到了以下错误。

此代码在 Acumatica 版本 2017 R2 中有效,但在 2021 R1 版本中无效。 有谁知道解决这个问题的正确方法吗??

谢谢。

我建议使用acumatica 自定义项目功能。这可以从定制项目访问。对于这种方法,您有两种可能的情况。如果一个按钮只需要显示一个报告而没有额外的逻辑。在这种情况下,您只需在自定义项目屏幕的操作部分指定按钮,如下面的屏幕截图所示。

另一个选项是在代码中定义按钮,然后也转到自定义项目的操作部分,而不是添加新的,您可以 select 添加现有的。这将添加您现有的按钮,您将能够指定您希望它位于报告菜单下。