【发布时间】:2019-01-29 16:42:58
【问题描述】:
我在一个独立的应用程序中有代码,它调用 Acumatica 操作来生成报告;操作完成时,我在大型文档上遇到超时。
处理这些超时的最佳方法是什么?我需要等待操作完成才能检索我生成的文件。
独立应用代码:
public SalesOrder GenerateAcumaticaLabels(string orderNbr, string reportType)
{
SalesOrder salesOrder = null;
using (ISoapClientProvider clientProvider = soapClientFactory.Create())
{
try
{
SalesOrder salesOrderToFind = new SalesOrder
{
OrderType = new StringSearch { Value = orderNbr.Split(OrderSeparator.SalesOrder).First() },
OrderNbr = new StringSearch { Value = orderNbr.Split(OrderSeparator.SalesOrder).Last() },
ReturnBehavior = ReturnBehavior.OnlySpecified,
};
salesOrder = clientProvider.Client.Get(salesOrderToFind) as SalesOrder;
InvokeResult invokeResult = new InvokeResult();
invokeResult = clientProvider.Client.Invoke(salesOrder, new exportSFPReport());
ProcessResult processResult = clientProvider.Client.GetProcessStatus(invokeResult);
//Wait for the update to complete before we attempt to retrieve the files
while (processResult.Status == ProcessStatus.InProcess)
{
Thread.Sleep(1000); //pause for 1 second
processResult = clientProvider.Client.GetProcessStatus(invokeResult);
}
}
Acumatica 中的动作:
public PXAction<SOOrder> ExportSFPReport;
[PXButton]
[PXUIField(DisplayName = "Generate Robot SFP PDF")]
protected IEnumerable exportSFPReport(PXAdapter adapter)
{
//Report Paramenters
Dictionary<String, String> parameters = new Dictionary<String, String>();
parameters["SOOrder.OrderType"] = Base.Document.Current.OrderType;
parameters["SOOrder.OrderNbr"] = Base.Document.Current.OrderNbr;
IEnumerable reportFileInfo = ExportReport(adapter, "IN619217", parameters);
exportTrayLabelReport(adapter, "SFP");
return reportFileInfo;
}
【问题讨论】:
-
你到底什么时候超时?
exportSFPReport方法是什么 - 一个动作处理程序? -
意识到我在剪切和粘贴中遗漏了几行;编辑了上面的代码。是的,它是一个动作处理程序。
-
建议使用 PXLongOperation.StartOperation 将您的操作包装在 Long 操作中,正如@SergRogovtsev 所说。在其他情况下,您也可以在浏览器中超时。
标签: acumatica