Не удается сохранить запись APTran из пользовательского графика - PullRequest
0 голосов
/ 22 мая 2019

У меня есть пользовательская страница с пользовательским графиком с именем POReceiptTieOut

Источник данных:

public PXSelect<POReceipt> Document;

Форма данных Memeber: документ

Данные сетки Участник: Транзакции:

public PXSelectJoin<
        APTran,
                LeftJoin<POReceiptLine,
                          On<POReceiptLine.receiptNbr, Equal<APTran.receiptNbr>,
                          And<POReceiptLine.lineNbr, Equal<APTran.receiptLineNbr>>>>,
        Where<APTran.receiptNbr, Equal<Current<POReceipt.receiptNbr>>>> Transactions;

Я хочу иметь возможность обновлять записи транзакций в этой сетке. Когда я нажимаю стандартную кнопку Сохранить, я получаю эту ошибку Ошибка: «TranDate» не может быть пустым. APTran.TranDate для всех записей в моем DAC транзакций присутствует, но по какой-то причине действие сохранения не признавая это.

Вот код для графа POReceiptTieOut

namespace APPOReceiptTieOut
{
public class POReceiptTieOut : PXGraph<POReceiptTieOut, POReceipt>
{

IPOReceiptRepository _receiptRepository {get;set;}

public POReceiptTieOut()
{
  _receiptRepository = new POReceiptRepository();
}


public PXSelect<POReceipt> Document;

[PXViewName(PX.Objects.AP.Messages.APTran)]
public PXSelectJoin<
        APTran,
                LeftJoin<POReceiptLine,
                          On<POReceiptLine.receiptNbr, Equal<APTran.receiptNbr>,
                          And<POReceiptLine.lineNbr, Equal<APTran.receiptLineNbr>>>>,
        Where<APTran.receiptNbr, Equal<Current<POReceipt.receiptNbr>>>> Transactions;


protected void POReceipt_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
  var row = (POReceipt)e.Row;
  var rowExt = row.GetExtension<POReceiptExt>();
  this.SetCalculatedValues(cache, row);      
}

protected void APTran_CuryLineAmt_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{      
  var row = (APTran)e.Row;      
  POReceipt receipt = Document.Current;
  this.SetCalculatedValues(Document.Cache, receipt);       
}

private void SetCalculatedValues(PXCache cache, object record)
{
  decimal invoiceLineTotal, receiptLineTotal;
  this.CalculateLineTotals(out invoiceLineTotal, out receiptLineTotal);

  cache.SetValueExt<POReceiptExt.usrTranTotal>(record, invoiceLineTotal);
  cache.SetValueExt<POReceiptExt.usrReceiptLineTotal>(record, receiptLineTotal);
  cache.SetValueExt<POReceiptExt.usrBalance>(record, receiptLineTotal - invoiceLineTotal);
  if( Math.Abs(receiptLineTotal  - invoiceLineTotal ) < 10 )
  {
    cache.SetValueExt<POReceipt.status>(record, "B");
  }
  else
  {
    cache.SetValueExt<POReceipt.status>(record, "H");
    cache.SetValueExt<POReceipt.hold>(record, true);
  }   
}

private void CalculateLineTotals(out decimal tranTotal, out decimal lineTotal)
{
    tranTotal = 0;
    lineTotal = 0;
    foreach(PXResult<APTran, POReceiptLine> record in Transactions.Select())
    {
       APTran tran = (APTran)record;
       POReceiptLine rLine = (POReceiptLine)record;
       lineTotal += rLine.TranCostFinal ?? 0; 
       tranTotal += tran.CuryTranAmt ?? 0;        
    }         
}

public bool ValidateReceiptBalance(string receiptNbr)
{      
    POReceipt receipt = _receiptRepository.GetByReceiptNbr(receiptNbr);
    if(receipt == null)
      throw new PXException("Receipt " + receiptNbr + " was not found");      

    this.Document.Current = receipt;

    decimal tranTotal = 0;
    decimal lineTotal = 0;
    this.CalculateLineTotals(out tranTotal, out lineTotal);


    return true;
}

}
}

Вот этот след ...

5/22/2019 16:38:19 Ошибка: Ошибка: «TranDate» не может быть пустым. в PX.Data.PXDBDefaultAttribute.RowPersisting (отправитель PXCache, PXRowPersistingEventArgs e) в PX.Data.PXCache.OnRowPersisting (элемент объекта, операция PXDBOperation) в PX.Data.PXCache 1.PersistUpdated(Object row, Boolean bypassInterceptor) at PX.Data.PXCache 1.Persist (операция PXDBOperation) в PX.Data.PXGraph.Persist (Тип cacheType, операция PXDBOperation) в PX.Data.PXGraph.Persist () в PX.Data.PXSave 1.d__2.MoveNext() at PX.Data.PXAction 1.d__32.MoveNext () в PX.Data.PXAction`1.d__32.MoveNext () в PX.Web.UI.PXBaseDataSource.tryExecutePendingCommand (String viewName, String [] sortcolumns, логические [] нисходящие, поиски Object [], параметры Object [], аргументы PXFilterRow [], аргументы DataSourceSelectArguments, логические и адаптеры closeWindowReowStartTowToRTRALTOWTTROTTALTORTTALTRENTEALTORTINGTREINT, Int32 ) в PX.Web.UI.PXBaseDataSource.ExecuteSelect (аргументы String viewName, DataSourceSelectArguments, PXDSSelectArguments pxarguments)

...