我嘗試在創建並向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類中。我還研究了在彈出窗口關閉時可能執行的更新,但我不知道該怎麼做。歡迎任何幫助,讓我指出正確的方向。
已將代碼更改爲: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);我仍然得到同樣的錯誤。我應該改變它在別的地方嗎? –
爲了補充一點,我在KitAssemblyEntry中創建視圖時嘗試使用PXSelectReadonly寄存器。那也失敗了,但也是我可以讓註冊表視圖填充的唯一方法。僅使用PXSelect <>失敗,寄存器將始終爲空。 –
已更新的回答。我試圖將數據的持久性保留在單個圖中。當你試圖在多個圖表中持續存儲數據時,事情會變得有點奇怪。我會假設的一個常見問題是您收到的錯誤,因爲圖1更新了表格,然後圖2嘗試更新,但沒有來自圖1更新的最新數據(因此錯誤) – Brendan