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