2017-06-14 40 views
0

我想設置我在INTranSplit表中創建的自定義字段。我獲取目標記錄,設置自定義字段,更新包含頁面記錄的視圖,並執行PressSave()。在保存過程中的某個時刻,代碼將INTranSplit.TranDate設置爲null並引發異常。INTranSplit日期變爲空時保存更新記錄

這裏是我的代碼:

public PXAction<EMPWorkOrder> addSerialNbr; 
    [PXUIField(DisplayName = "Add Serial Number")] 
    protected void AddSerialNbr() 
    { 
     AvailableSNFilter serialNbrRow = AvailableSNs.Current; 

     if (serialNbrRow.AvailableSNs != null) 
     { 
      //Gets record from DAC created from a SQL View 
      GetAvailableSerialNumbers targetSN = (GetAvailableSerialNumbers)PXSelectorAttribute.Select<AvailableSNFilter.availableSNs>(AvailableSNs.Cache, serialNbrRow); 

      //Fetches the INTranSplit record 
      INTranSplit tran = PXSelect<INTranSplit, Where<INTranSplit.refNbr, Equal<Required<GetAvailableSerialNumbers.refNbr>>, And<INTranSplit.lotSerialNbr, 
       Equal<Required<GetAvailableSerialNumbers.lotSerialNbr>>, And<INTranSplit.inventoryID, Equal<Required<GetAvailableSerialNumbers.inventoryID>> 
       ,And<INTranSplit.lotSerialNbr, NotEqual<Required<INTranSplit.lotSerialNbr>>>>>>> 
       .Select(this, targetSN.RefNbr, targetSN.LotSerialNbr, targetSN.InventoryID, string.Empty);//, targetSN.SplitLineNbr); 

      INTranSplitExt tranExt = PXCache<INTranSplit>.GetExtension<INTranSplitExt>(tran); 

      //Sets the custom field 
      tranExt.UsrWOID = CurrentDocument.Current.Id; 

      WorkOrderSerialNumbers.Update(tran); 

      serialNbrRow.AvailableSNs = string.Empty; 

      AvailableSNs.Update(serialNbrRow); 

      this.Actions.PressSave(); 
     } 
     else 
     { 
      Document.Ask("AvailableSN Null", MessageButtons.OK); 
     } 
    } 

我得到的錯誤是這樣的:

Error #14: Updating 'IN Transaction Split' record raised at least one error. Please review the errors.

Error: 'Transaction Date' cannot be empty.

我經歷的過程加強,發現TRANDATE不爲空,直到代碼進入PressSave後()函數。

有什麼辦法可以解決這個問題嗎?

+0

你在圖中包含INRegister嗎? INTranSplit.TranDate上的PXDBDefault來自INRegister.tranDate。 – Brendan

+0

我確實對INRegister有一個直接的看法。有什麼我需要做的嗎? –

+0

可能確保它填充了相關的INRegister。根據視圖的配置方式調用viewname.select(),或至少確保在視圖中設置了當前值。 – Brendan

回答

1

請確保您包含父視圖並將INRegister和INTran設置爲TranDate,INTranSplit基於INRegister。