【发布时间】:2018-10-25 18:54:24
【问题描述】:
今天的乐趣: 有一个可以做很多事情的处理屏幕 可以创建/发布: 一步转移 IN 2 步传输 SO 2 步转移 采购订单收据 套件组装
有趣的部分 #1:发布不能(显然)在事务中
所以,它一直很好,直到套件组件的发布。
- 首次运行:抛出错误
- 第二次运行,未更改代码:成功
- 如果尝试通过 Kit 组装屏幕手动释放,则可行
- 如果尝试通过 IN Doc 发布,则可行
然而,我不断得到:
2018-08-23 19:07:16Z [23] Error w3wp.exe 0: 23803b8a-d4f4-4523-b310-a6ddd16bc3bd 100035 PX.Data.PXOperationCompletedSingleErrorException: Error: Another process has updated the 'INRegister' record. Your changes will be lost. ---> PX.Data.PXLockViolationException: Error: Another process has updated the 'INRegister' record. Your changes will be lost.
at PX.Data.PXTableAttribute.PersistUpdated(PXCache sender, Object row)
at PX.Data.PXCache`1.PersistUpdated(Object row)
at PX.Data.PXCache`1.Persist(PXDBOperation operation)
at PX.Data.PXGraph.Persist(Type cacheType, PXDBOperation operation)
at PX.Data.PXGraph.Persist()
at PX.Objects.IN.INReleaseProcess.ReleaseDocProc(JournalEntry je, INRegister doc)
at PX.Objects.IN.INReleaseProcess.ReleaseDocProcR(JournalEntry je, INRegister doc)
at PX.Objects.IN.INDocumentRelease.ReleaseDoc(List`1 list, Boolean isMassProcess)
--- End of inner exception stack trace ---
at PX.Objects.IN.INDocumentRelease.ReleaseDoc(List`1 list, Boolean isMassProcess)
at MaxQ.Products.SupplyChain.WorkOrderReportProductionProcess.KitAssemblyReleaseOrDelete(MQSCWorkOrd& workOrd) in C:\_Development\Acumatica Development\MaxQ Products\Supply Chain Planning\Source\Graph\WorkOrderReportProductionProcess.cs:line 1370
at MaxQ.Products.SupplyChain.WorkOrderReportProductionProcess.ProcessWOrders(List`1 WOrdersToProcess, Nullable`1 Consolidate) in C:\_Development\Acumatica Development\MaxQ Products\Supply Chain Planning\Source\Graph\WorkOrderReportProductionProcess.cs:line 155
我可能会搞砸什么?
- 图表与之前的操作无关
- 所有读取都是 PXSelectReadonly 和 SelectSingle
- 直接调用INDocumentRelease,它基于KitAssemblyEntry.cs中的代码,靠近“virtual IEnumerable Release(”
代码块:
WorkOrderMaint workOrderMaint = PXGraph.CreateInstance<WorkOrderMaint>();
INKitRegister iNKitRegister = new PXSelectReadonly<INKitRegister, Where<MQSCInKitRegisterExt.wONbr, Equal<Required<MQSCInKitRegisterExt.wONbr>>, And<INKitRegister.released, Equal<False>>>>(workOrderMaint).SelectSingle(workOrd.WONbr);
// using (PXTransactionScope XAct = new PXTransactionScope())
{
Trace.TraceInformation(string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", "1b2010c2-be46-4da7-8f29-e496a7cc240d"));
#region Handle the assembly Release
if (iNKitRegister != null)
{
if (workOrd.CloseWO.GetValueOrDefault() && workOrd.QtyToComplete.GetValueOrDefault() == Decimal.Zero)
{
Trace.TraceInformation(string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", "fefb4f77-b33c-4ade-a187-b1fb1f7dafba"));
// If closing the WO, AND none to complete remove existing assembly doc
KitAssemblyEntry kitAssemblyEntry = PXGraph.CreateInstance<KitAssemblyEntry>();
kitAssemblyEntry.Document.Current = new PXSelect<INKitRegister, Where<MQSCInKitRegisterExt.wONbr, Equal<Required<MQSCInKitRegisterExt.wONbr>>, And<INKitRegister.released, Equal<False>>>>(workOrderMaint).SelectSingle(workOrd.WONbr); ;
kitAssemblyEntry.Document.Delete(kitAssemblyEntry.Document.Current);
kitAssemblyEntry.Actions.PressSave();
}
else
{
// Need to Release. Make sure we don't get an "another process has updated..." message.
Trace.TraceInformation(string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", "1a4b3f1c-23a8-49ed-943e-722abbfcad60"));
// At this point, this is throwing error messages about cost (e.g. "Error: 'Total Cost' cannot be empty", "Error: 'Ext. Cost' cannot be empty"
// This does NOT happen when do through the screen, or the IN document release process
// kitAssemblyEntry.release.Press();
// INRegister doc = PXSelect<INRegister, Where<INRegister.docType, Equal<Required<INRegister.docType>>, And<INRegister.refNbr, Equal<Required<INRegister.refNbr>>>>>.Select(workOrderMaint, iNKitRegister.DocType, iNKitRegister.RefNbr);
INRegister iNRegister = new PXSelectReadonly<INRegister, Where<INRegister.docType, Equal<Required<INRegister.docType>>, And<INRegister.refNbr, Equal<Required<INRegister.refNbr>>>>>(workOrderMaint).SelectSingle(iNKitRegister.DocType, iNKitRegister.RefNbr);
INDocumentRelease.ReleaseDoc(new List<INRegister>() { iNRegister }, false);
Trace.TraceInformation(string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", "0798d686-a736-4f77-97b7-d808ec082e09"));
}
}
#endregion
【问题讨论】:
标签: acumatica