Acumatica中的发票和备忘录屏幕电子邮件发票/备忘录操作

Acumatica中的发票和备忘录屏幕电子邮件发票/备忘录操作,acumatica,Acumatica,我们已经创建了一些自定义报告,这些报告将根据“详细信息”选项卡中的销售订单类型打开。使用“操作”菜单中的“电子邮件发票/备忘录”操作时,我们希望根据订单类型发送报告的方式相同 我们试图重写代码,但仍然看到默认报告是通过电子邮件发送的。我怎样才能解决这个问题?我的代码如下: [PXOverride] public PXAction<ARInvoice> sendARInvoiceMemo; [PXUIField(DisplayName =

我们已经创建了一些自定义报告,这些报告将根据“详细信息”选项卡中的销售订单类型打开。使用“操作”菜单中的“电子邮件发票/备忘录”操作时,我们希望根据订单类型发送报告的方式相同

我们试图重写代码,但仍然看到默认报告是通过电子邮件发送的。我怎样才能解决这个问题?我的代码如下:

        [PXOverride]
        public PXAction<ARInvoice> sendARInvoiceMemo;
        [PXUIField(DisplayName = "Send AR Invoice/Memo", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
        [PXLookupButton]
        public IEnumerable SendARInvoiceMemo(PXAdapter adapter, String reportID)
        {
            PXReportRequiredException ex = null;

            foreach (ARInvoice doc in adapter.Get<ARInvoice>())
            {
                var parameters = new Dictionary<string, string>();

                ARTran TranData = PXSelectReadonly<ARTran, Where<ARTran.tranType, Equal<Required<ARTran.tranType>>,
                    And<ARTran.refNbr, Equal<Required<ARTran.refNbr>>>>>.Select(Base, doc.DocType, doc.RefNbr);
                if (TranData != null)
                {
                    if (TranData.SOOrderType == "WS" || TranData.SOOrderType == "WO" || TranData.SOOrderType == "TS" || TranData.SOOrderType == "IM")
                    {
                        if (reportID == null) reportID = "KR501011";
                        Dictionary<string, string> mailParams = new Dictionary<string, string>();
                        if (reportID == "KR501011")
                        {
                            mailParams["DocType"] = doc.DocType;
                            mailParams["RefNbr"] = doc.RefNbr;
                            if (!ReportNotificationGenerator.Send(reportID, mailParams).Any())
                            {
                                throw new PXException(ErrorMessages.MailSendFailed);
                            }
                        }
                        Base.Clear();
                        Base.Document.Current = Base.Document.Search<ARInvoice.refNbr>(doc.RefNbr, doc.DocType);
                    }

                    if (TranData.SOOrderType == "RS" || TranData.SOOrderType == "RO" || TranData.SOOrderType == "PS" || TranData.SOOrderType == "QT")
                    {
                        if (reportID == null) reportID = "KR501012";
                        Dictionary<string, string> mailParams = new Dictionary<string, string>();
                        if (reportID == "KR501012")
                        {
                            mailParams["DocType"] = doc.DocType;
                            mailParams["RefNbr"] = doc.RefNbr;
                            if (!ReportNotificationGenerator.Send(reportID, mailParams).Any())
                            {
                                throw new PXException(ErrorMessages.MailSendFailed);
                            }
                        }
                        Base.Clear();
                        Base.Document.Current = Base.Document.Search<ARInvoice.refNbr>(doc.RefNbr, doc.DocType);
                    }
                }
            }           

            if (ex != null) throw ex;

            return adapter.Get();
        }
[PXOverride]
公共行动备忘录;
[PXUIField(DisplayName=“发送应收发票/备忘”,MapEnableRights=PXCacheRights.Select,MapViewRights=PXCacheRights.Select)]
[查看按钮]
公共IEnumerable SendARInvoiceMemo(PXAdapter适配器,字符串报告ID)
{
PXReportRequiredException ex=null;
foreach(adapter.Get()中的语音文档)
{
var参数=新字典();
ARTran TranData=PXSelectReadonly.Select(基本、doc.DocType、doc.RefNbr);
if(transdata!=null)
{
如果(TranData.SOOrderType==“WS”| | TranData.SOOrderType==“WO”| | TranData.SOOrderType==“TS”| | TranData.SOOrderType==“IM”)
{
如果(reportID==null)reportID=“KR501011”;
Dictionary mailParams=新字典();
如果(报告ID==“KR501011”)
{
mailParams[“DocType”]=doc.DocType;
mailParams[“RefNbr”]=doc.RefNbr;
if(!ReportNotificationGenerator.Send(reportID,mailParams).Any())
{
抛出新的PXException(ErrorMessages.MailSendFailed);
}
}
Base.Clear();
Base.Document.Current=Base.Document.Search(doc.RefNbr,doc.DocType);
}
如果(TranData.SOOrderType==“RS”| | TranData.SOOrderType==“RO”| | TranData.SOOrderType==“PS”| | TranData.SOOrderType==“QT”)
{
如果(reportID==null)reportID=“KR501012”;
Dictionary mailParams=新字典();
如果(报告ID==“KR501012”)
{
mailParams[“DocType”]=doc.DocType;
mailParams[“RefNbr”]=doc.RefNbr;
if(!ReportNotificationGenerator.Send(reportID,mailParams).Any())
{
抛出新的PXException(ErrorMessages.MailSendFailed);
}
}
Base.Clear();
Base.Document.Current=Base.Document.Search(doc.RefNbr,doc.DocType);
}
}
}           
如果(ex!=null)抛出ex;
返回适配器Get();
}
注意,没有指定版本,因此我的工作是针对2020r2完成的

“电子邮件发票/备忘录”操作不会调用SendARInvoiceMemo。相反,
通知
是该操作的委托

请注意,通知实际上并不是调用报表ID,而是依赖于通知CD和您的邮件设置来确定要运行的报表。我修改了代码,将其更改为我创建的名为INVOICEALT的新notificationCD。这已配置为我的备用报告ID

    [PXOverride()]
    [PXUIField(DisplayName = "Notifications", Visible = false)]
    [PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)]
    public virtual IEnumerable Notification(PXAdapter adapter,
    [PXString]
    string notificationCD)
    {
        foreach (ARInvoice doc in adapter.Get().RowCast<ARInvoice>())
        {
            Base.Document.Current = doc;

            Dictionary<string, string> parameters = new Dictionary<string, string>
            {
                ["DocType"] = doc.DocType,
                ["RefNbr"] = doc.RefNbr
            };

            using (var ts = new PXTransactionScope())
            {
                if (ProjectDefaultAttribute.IsProject(Base, doc.ProjectID) && Base.Activity.IsProjectSourceActive(doc.ProjectID, notificationCD))
                {
                    Base.Activity.SendNotification(PMNotificationSource.Project, notificationCD, doc.BranchID, parameters);
                }
                else
                {
                    //Base.Activity.SendNotification(ARNotificationSource.Customer, notificationCD, doc.BranchID, parameters); //This is what was there
                    //Inserted switch based on Sales Order Type >>

                    ARTran TranData = PXSelectReadonly<ARTran, Where<ARTran.tranType, Equal<Required<ARTran.tranType>>,
                        And<ARTran.refNbr, Equal<Required<ARTran.refNbr>>>>>.Select(Base, doc.DocType, doc.RefNbr);
                    switch (TranData.SOOrderType)
                    {
                        case "IN":
                            Base.Activity.SendNotification(ARNotificationSource.Customer, "INVOICEALT", doc.BranchID, parameters);
                            break;
                        default:
                            Base.Activity.SendNotification(ARNotificationSource.Customer, notificationCD, doc.BranchID, parameters);
                            break;
                    }
                    //<< Inserted switch based on Sales Order Type
                }
                Base.Save.Press();

                ts.Complete();
            }

            yield return doc;
        }
    }
[PXOverride()]
[PXUIField(DisplayName=“Notifications”,Visible=false)]
[PXButton(ImageKey=PX.Web.UI.Sprite.Main.DataEntryF)]
公共虚拟IEnumerable通知(PXAdapter,
[字符串]
字符串通知(CD)
{
foreach(适配器.Get().RowCast()中的语音文档)
{
Base.Document.Current=单据;
字典参数=新字典
{
[“DocType”]=doc.DocType,
[“参考编号”]=doc.RefNbr
};
使用(var ts=new PXTransactionScope())
{
if(ProjectDefaultAttribute.IsProject(Base,doc.projectd)和&Base.Activity.IsProjectSourceActive(doc.projectd,notificationCD))
{
Base.Activity.SendNotification(PMNotificationSource.Project、notificationCD、doc.BranchID、参数);
}
其他的
{
//Base.Activity.SendNotification(ARNotificationSource.Customer,notificationCD,doc.BranchID,parameters);//这就是其中的内容
//基于销售订单类型插入的开关>>
ARTran TranData=PXSelectReadonly.Select(基本、doc.DocType、doc.RefNbr);
开关(TranData.SOOrderType)
{
案例“IN”:
Base.Activity.SendNotification(ARNotificationSource.Customer,“INVOICEALT”,doc.BranchID,参数);
打破
违约:
Base.Activity.SendNotification(ARNotificationSource.Customer、notificationCD、doc.BranchID、参数);
打破
}

//如果reportID为null,则您似乎只分配了自定义reportID。您确定reportID此时为null吗?
    public PXAction<ARInvoice> sendARInvoiceMemoAlt;
    [PXUIField(DisplayName = "Alt Email Invoice/Memo", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
    [PXLookupButton]
    public IEnumerable SendARInvoiceMemoAlt(PXAdapter adapter, String reportID)
    {
        PXReportRequiredException ex = null;

        foreach (ARInvoice doc in adapter.Get<ARInvoice>())
        {
            var parameters = new Dictionary<string, string>();

            ARTran TranData = PXSelectReadonly<ARTran, Where<ARTran.tranType, Equal<Required<ARTran.tranType>>,
                And<ARTran.refNbr, Equal<Required<ARTran.refNbr>>>>>.Select(Base, doc.DocType, doc.RefNbr);
            if (TranData != null)
            {
                if (TranData.SOOrderType == "SO")// || TranData.SOOrderType == "WS" || TranData.SOOrderType == "WO" || TranData.SOOrderType == "TS" || TranData.SOOrderType == "IM")
                {
                    if (reportID == null) reportID = "AR641000";
                    Dictionary<string, string> mailParams = new Dictionary<string, string>();
                    if (reportID == "AR641000")
                    {
                        mailParams["DocType"] = doc.DocType;
                        mailParams["RefNbr"] = doc.RefNbr;
                        if (!ReportNotificationGenerator.Send(reportID, mailParams).Any())
                        {
                            throw new PXException(ErrorMessages.MailSendFailed);
                        }
                    }
                    Base.Clear();
                    Base.Document.Current = Base.Document.Search<ARInvoice.refNbr>(doc.RefNbr, doc.DocType);
                }

                if (TranData.SOOrderType == "IN")// || TranData.SOOrderType == "RS" || TranData.SOOrderType == "RO" || TranData.SOOrderType == "PS" || TranData.SOOrderType == "QT")
                {
                    if (reportID == null) reportID = "AR641001";
                    Dictionary<string, string> mailParams = new Dictionary<string, string>();
                    if (reportID == "AR641001")
                    {
                        mailParams["DocType"] = doc.DocType;
                        mailParams["RefNbr"] = doc.RefNbr;
                        if (!ReportNotificationGenerator.Send(reportID, mailParams).Any())
                        {
                            throw new PXException(ErrorMessages.MailSendFailed);
                        }
                    }
                    Base.Clear();
                    Base.Document.Current = Base.Document.Search<ARInvoice.refNbr>(doc.RefNbr, doc.DocType);
                }
            }
        }

        if (ex != null) throw ex;

        return adapter.Get();
    }

    public override void Initialize()
    {
        base.Initialize();

        Base.ActionsMenuItem.AddMenuAction(sendARInvoiceMemoAlt);
    }