Acumatica 使用 PXLongOperation 恢复功能
Posted
技术标签:
【中文标题】Acumatica 使用 PXLongOperation 恢复功能【英文标题】:Acumatica return to function with PXLongOperation 【发布时间】:2022-01-17 21:40:45 【问题描述】:我正在为 Acumatica 创建一个集成,该集成从另一个应用程序加载数据以同步库存项目。它使用 API 调用来获取列表(最多 5000 个项目),然后我使用 PXLongOperation
插入或更新这些项目。如果没有这种方法,我无法运行它,因为大批量(也就是插入 5000 个库存商品)会超时并崩溃。
处理表单是一个自定义表/表单,它检索此信息,然后解析 JSON 项目列表并调用 InventoryItemMaint 图上的自定义函数。所有这一切都完美无缺,但它永远不会返回到调用函数。我希望能够写出信息来记录,以记录它是成功还是失败。我试过PXLongOperation.WaitCompletion
但这似乎并没有改变任何东西。我确定我没有正确使用它的异步特性,但我想知道是否有合理的解决方法。
// This is the lsit of items from SI
List<TEKDTools.TEKdtoolModels.Product> theItems;
if (Guid.TryParse(Convert.ToString(theRow.DtoolsID), out theCatID))
// Get the list of items from dtools.
theItems = TEKDTools.TEKdtoolsCommon.ReadOneCatalog(theCatID);
// Start the long operation
PXLongOperation.StartOperation(this, delegate ()
// Create the graph to make a new Stock Item
InventoryItemMaint itemMaint = PXGraph.CreateInstance<InventoryItemMaint>();
var itemMaintExt = itemMaint.GetExtension<InventoryItemMaintTEKExt>();
foreach (TEKDTools.TEKdtoolModels.Product theItem in theItems)
itemMaint.Clear();
itemMaintExt.CreateUpdateDToolsItem(theItem, true);
PXLongOperation.WaitCompletion(itemMaint.UID);
);
stopWatch.Stop(); // Just using this to figure out how long things were taking.
// For fun I tried the Wait Completion here too
PXLongOperation.WaitCompletion(this.UID);
theRow = MasterView.Current;
// Tried some random static values to see if it was writing
theRow.RowsCreated = 10;
theRow.RowsUpdated = 11;
theRow.Data2 = "Elasped Milliseconds: " + stopWatch.ElapsedMilliseconds.ToString();
theRow.RunStart = startTime;
theRow.RunEnd = DateTime.Now;
// This never gets the record udpated.
Caches[typeof(TCDtoolsBatch)].Update(theRow);
【问题讨论】:
【参考方案1】:一种可能的解决方案是使用 PXLongOperation.SetCustomInfo 方法。通常这用于在长操作完成后更新 UI 线程。在这个“类”中,您可以订阅可用于更新行的事件。类的定义如下:
public class UpdateUICustomInfo : IPXCustomInfo
public void Complete(PXLongRunStatus status, PXGraph graph)
// Set Code Here
您使用的等待完成方法,一般用于通过传递该长操作的键来等待另一个长操作完成。
【讨论】:
以上是关于Acumatica 使用 PXLongOperation 恢复功能的主要内容,如果未能解决你的问题,请参考以下文章