2017-05-19 53 views
0

我嘗試在創建並向KitAssemblyEntry圖形中插入新的INKitRegister對象後,爲INRegister設置擴展字段值。我瞭解INKitRegister在保存時有一種方法可以創建存儲在數據庫數據庫中的INRegister。保存後,我有要執行的代碼,將設置我添加到INRegister數據表中的擴展字段。執行此代碼時,出現以下錯誤:嘗試爲INRegister設置擴展字段值時出現「更新」錯誤

Error #78: Another process has updated the 'INRegister' record. Your changes will be lost.

我不確定爲什麼,因爲我在數據表條目完成後執行此編輯。

這裏是我的代碼:

 ...//Code to create component children 

     INKitRegister kitHeader = new INKitRegister 
     { 
      //set header fields 
     }; 

     //I also have this extended field on the INKitRegister DAC 
     INKitRegisterExt kitHeaderExt = PXCache<INKitRegister>.GetExtension<INKitRegisterExt>(kitHeader); 
     kitHeaderExt.UsrWOID = CurrentDocument.Current.Id; 

     INTranSplit kitParentAssembly = new INTranSplit 
     { 
      //Making INTranSplit entry for kit 
     }; 

     ... 
     //Do I need to get the graph's extension? set register view? do I need to get kitHeader's inserted refNbr and forward that to function to set woid? 
     KitAssemblyEntry graphKAE = PXGraph.CreateInstance<KitAssemblyEntry>(); 
     graphKAE.Document.Insert(kitHeader); 
     graphKAE.Document.Current.KitRevisionID = "1"; 
     graphKAE.Actions.PressSave(); 

     foreach (INComponentTran ch in kitChildren) 
     { 
      ch.RefNbr = kitHeader.RefNbr; 
      graphKAE.Components.Insert(ch); 
     } 

     graphKAE.Actions.PressSave(); 

     //Code in which I get the newly created INRegister and set the extended field. 
     string refNbr = graphKAE.Document.Current.RefNbr; 
     INRegister reg = PXSelect<INRegister, Where<INRegister.refNbr, Equal<Required<INRegister.refNbr>>, And<INRegister.docType, Equal<Required<INRegister.docType>>>>> 
      .Select(this, refNbr, "P"); 
     INRegisterExt regExt = PXCache<INRegister>.GetExtension<INRegisterExt>(reg); 
     regExt.UsrWOID = CurrentDocument.Current.Id; 

     INRegisters.Update(reg);   

     this.Actions.PressSave(); 


     PXRedirectHelper.TryRedirect(graphKAE, PXRedirectHelper.WindowMode.Popup); 

有什麼建議?我試着將代碼放在INAcitRegister_RowPersisting和INKitRegister_RowUpdating下的KitAssemblyEntry_Extension類中。我還研究了在彈出窗口關閉時可能執行的更新,但我不知道該怎麼做。歡迎任何幫助,讓我指出正確的方向。

回答

1

這表明您擁有的記錄不是最新的,因爲它存在於數據庫中。嘗試使用PXSelectReadonly代替PXSelect以獲取您的INRegister(reg)對象。

我認爲這是行「INRegisters.Update(reg);」那麼保存是失敗的?

我也會嘗試使用套件圖更新INRegister並選擇註冊表。嘗試更改這一部分...

//Code in which I get the newly created INRegister and set the extended field. 
string refNbr = graphKAE.Document.Current.RefNbr; 
INRegister reg = PXSelectReadOnly<INRegister, 
    Where<INRegister.refNbr, Equal<Required<INRegister.refNbr>>, 
    And<INRegister.docType, Equal<Required<INRegister.docType>>>>> 
    .Select(graphKAE, refNbr, "P"); 
INRegisterExt regExt = PXCache<INRegister>.GetExtension<INRegisterExt>(reg); 
regExt.UsrWOID = CurrentDocument.Current.Id; 

graphKAE.Caches[typeof(INRegister)].PersistUpdated(graphKAE.Caches[typeof(INRegister)].Update(reg)); 
+0

已將代碼更改爲:string refNbr = graphKAE.Document.Current.RefNbr; INRegister reg = PXSelectReadonly >,>>>> .Select(this,refNbr, 「P」); INRegisterExt regExt = PXCache .GetExtension (reg); regExt.UsrWOID = CurrentDocument.Current.Id; INRegisters.Update(reg);我仍然得到同樣的錯誤。我應該改變它在別的地方嗎? –

+0

爲了補充一點,我在KitAssemblyEntry中創建視圖時嘗試使用PXSelectReadonly 寄存器。那也失敗了,但也是我可以讓註冊表視圖填充的唯一方法。僅使用PXSelect <>失敗,寄存器將始終爲空。 –

+0

已更新的回答。我試圖將數據的持久性保留在單個圖中。當你試圖在多個圖表中持續存儲數據時,事情會變得有點奇怪。我會假設的一個常見問題是您收到的錯誤,因爲圖1更新了表格,然後圖2嘗試更新,但沒有來自圖1更新的最新數據(因此錯誤) – Brendan

相關問題