2017-06-14 47 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。

相关问题