2017-05-19 10 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); 

어떤 제안 : 여기

내 코드? INKitRegister_RowPersisting 및 INKitRegister_RowUpdating 아래에있는 KitAssemblyEntry_Extension 클래스에 코드를 삽입 해 보았습니다. 또한 팝업 창이 닫힐 때 업데이트를 실행하는 방법을 살펴 보았지만이를 수행하는 방법을 모르겠습니다. 어떤 도움이 나에게 올바른 방향으로 나를 가리 키도록 환영합니다.

답변

1

데이터베이스에있는 최신 레코드가 아니라는 것을 나타냅니다. PXSelect 대신 PXSelectReadonly를 사용하여 INRegister (reg) 개체를 가져 오십시오.

"INRegisters.Update (reg);"라고 가정합니다. 그때 그것을 저장하지 실패?

또한 키트 그래프를 사용하여 INRegister를 업데이트하고 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, "피"); INRegisterExt regExt = PXCache .GetExtension (reg); regExt.UsrWOID = CurrentDocument.Current.Id; INRegisters.Update (reg); 그리고 여전히 같은 오류가 발생하고 있습니다. 다른 곳으로 변경해야합니까? –

+0

추가하려면 PXSelectReadonly를 사용하려고 시도했습니다. KitAssemblyEntry에서 뷰를 만들 때 등록합니다. 그뿐 아니라 거기에서 작동하지 못했지만, 또한 내가 Register 뷰를 채울 수있는 유일한 방법이었습니다. PXSelect <> 만 사용하면 실패하고 레지스터는 항상 null입니다. –

+0

업데이트 답변. 나는 하나의 그래프에 데이터의 지속성을 유지하려고합니다. 여러 개의 그래프와 동일한 DAC의 데이터를 유지하려고하면 약간 이상하게 느껴질 수 있습니다. 한 가지 일반적인 문제는 그래프 1이 테이블을 업데이트하고 그래프 2가 시도하고 업데이트 할 때받은 오류 일 것이지만 그래프 1 (따라서 오류)의 업데이트에서 최신 데이터를 가지고 있지 않습니다. – Brendan