Den*_*s D 2 pdf rest acumatica
通过对特定屏幕调用操作后,是否可以获得生成报告的PDF输出REST API?
例如,我们希望为外部应用程序的用户提供在Acumatica的“ AR发票”屏幕中针对特定发票执行“打印发票/备忘录表格”操作的功能。他们希望通过电话获得PDF格式的发票表格。
如果没有这样的选项,也许有一种方法可以生成一个链接,该链接将使用户进入使用指定的一组参数值执行的发票表单报告。Acumatica登录信息和报告参数值存储在外部应用程序中。
谢谢!
简短答案是,长答案....不容易。
要实现您要求的功能,必须采取以下步骤。
首先在“ AR发票”屏幕上创建一个操作,该操作将生成报告,并将其保存并附加到文档。
public class ARInvoiceEntryExtension : PXGraphExtension<ARInvoiceEntry>
{
public PXAction<ARInvoice> exportReport;
[PXUIField(DisplayName = "Export Report")]
[PXButton]
public virtual IEnumerable ExportReport(PXAdapter adapter)
{
//Report Paramenters
Dictionary<String, String> parameters = new Dictionary<String, String>();
parameters["ARInvoice.DocType"] = Base.Document.Current.DocType;
parameters["ARInvoice.RefNbr"] = Base.Document.Current.RefNbr;
//Report Processing
PX.Reports.Controls.Report _report = PXReportTools.LoadReport("AR641000", null);
PXReportTools.InitReportParameters(_report, parameters,
SettingsProvider.Instance.Default);
ReportNode reportNode = ReportProcessor.ProcessReport(_report);
//Generation PDF
byte[] data = PX.Reports.Mail.Message.GenerateReport(reportNode,
ReportProcessor.FilterPdf).First();
PX.SM.FileInfo file = new PX.SM.FileInfo(reportNode.ExportFileName + ".pdf", null, data);
UploadFileMaintenance graph = new UploadFileMaintenance();
graph.SaveFile(file);
PXNoteAttribute.AttachFile(Base.Document.Cache, Base.Document.Current, file);
return adapter.Get();
}
}
Run Code Online (Sandbox Code Playgroud)
其次,您将必须使用Contract API创建一种方法来查找发票,触发操作,然后检索附加到文档的文件。
class Program
{
static void Main(string[] args)
{
AcumaticaProcessor processor = new AcumaticaProcessor();
processor.Login();
File[] result = processor.RetrieveReport("Invoice", "001007");
}
}
public class AcumaticaProcessor
{
DefaultSoapClient client = new DefaultSoapClient();
public void Login()
{
client.Login("Username", "Password", "Company", "Branch", null);
}
public File[] RetrieveReport(string docType, string refNbr)
{
ARInvoice invoiceToFind = new ARInvoice()
{
Type = new StringSearch() { Value = docType },
ReferenceNbr = new StringSearch() { Value = refNbr }
};
invoiceToFind = client.Get(invoiceToFind) as ARInvoice;
InvokeResult result = client.Invoke(invoiceToFind, new ExportReport());
return client.GetFiles(invoiceToFind) as File[];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
339 次 |
| 最近记录: |