gpt4 book ai didi

acumatica - Excel文件生成-公开的API/方法?

转载 作者:行者123 更新时间:2023-12-04 13:48:00 32 4
gpt4 key购买 nike

Acumatica显然具有从系统中各个位置创建excel文件的能力。

用于生成excel文件的方法是否偶然公开显示,并且可以在标准网格,报表和导入服务之外使用?

我需要能够从我的一项操作中生成一个excel文件,并将其作为文件附件附加。如果可能,我宁愿使用内置的excel方法来简化操作,然后再尝试使用EPPlus dll或类似文件。

谢谢你的任何信息

最佳答案

您可以利用PX.Export.Excel.Core.Package生成Excel文件。

生成的Excel可以使用PXRedirectToFileException重定向异常下载,也可以使用通知模板和TemplateNotificationGenerator作为电子邮件附件发送。

using System;
using System.Linq;
using System.Text;
using PX.Objects.SO;
using PX.Objects.CR;
using PX.Common;
using PX.Data;
using PX.SM;
using System.IO;

namespace PXDemoPkg
{
public class SOOrderEntryPXExt : PXGraphExtension<SOOrderEntry>
{
public PXAction<SOOrder> ExportToExcelAndSendEmailAttachment;
[PXUIField(DisplayName = "Export To Excel And Send Email Attachment", MapViewRights = PXCacheRights.Select, MapEnableRights = PXCacheRights.Update)]
[PXButton]
protected virtual void exportToExcelAndSendEmailAttachment()
{
if (Base.Document.Current == null ||
Base.Document.Cache.GetStatus(Base.Document.Current) == PXEntryStatus.Inserted) return;

var excel = new PX.Export.Excel.Core.Package();
var sheet = excel.Workbook.Sheets[1];

//Add Header
sheet.Add(1, 1, "Line #");
sheet.Add(1, 2, "Transaction Description");
sheet.Add(1, 3, "Ordered Quantity");

//Add Data
var index = 2;
foreach (PXResult<SOLine> lineItem in Base.Transactions.Select())
{
SOLine dataRow = (SOLine)lineItem;
sheet.Add(index, 1, Convert.ToString(dataRow.LineNbr));
sheet.Add(index, 2, dataRow.TranDesc);
sheet.Add(index, 3, Convert.ToString(dataRow.OrderQty));
index++;
}
sheet.SetColumnWidth(1, 20);
sheet.SetColumnWidth(2, 45);
sheet.SetColumnWidth(3, 35);

//ExportFile(excel);
SendEmail(excel);
}

//To download generated Excel
private void ExportFile(PX.Export.Excel.Core.Package excel)
{
using (MemoryStream stream = new MemoryStream())
{
excel.Write(stream);
string path = String.Format("SO-{0}-Transaction Info.xlsx", Base.Document.Current.OrderNbr);
var info = new PX.SM.FileInfo(path, null, stream.ToArray());
throw new PXRedirectToFileException(info, true);
}
}

//Email generated Excel as an attachment
private void SendEmail(PX.Export.Excel.Core.Package excel)
{
bool sent = false;

//Notiftcaion with name "SOTransactionInfo" should be created via screen SM204003 prior to using this code.
Notification rowNotification = PXSelect<Notification,
Where<Notification.name,
Equal<Required<Notification.name>>>>
.Select(Base, "SOTransactionInfo");

if (rowNotification == null)
throw new PXException("Notification Template for is not specified.");

var sender = PX.Objects.EP.TemplateNotificationGenerator.Create(Base.Document.Current,
rowNotification.NotificationID.Value);
sender.MailAccountId = rowNotification.NFrom.HasValue ?
rowNotification.NFrom.Value :
PX.Data.EP.MailAccountManager.DefaultMailAccountID;

sender.To = "demo@demo.com";

//Attach Excel
using (MemoryStream stream = new MemoryStream())
{
excel.Write(stream);
string path = String.Format("SO-{0}-Transaction Info.xlsx", Base.Document.Current.OrderNbr);
sender.AddAttachment(path, stream.ToArray());
}
sent |= sender.Send().Any();
}
}
}

关于acumatica - Excel文件生成-公开的API/方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36225717/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com