2017-06-28 4 views
0

PX.Objects.AR.ARStatementPrintグラフの詳細デリゲートメソッドをオーバーライドしたい。ここデータビューのデリゲートメソッドをオーバーライド

は方法

protected virtual IEnumerable details() 
{ 
    ARSetup setup = ARSetup.Current; 

    PrintParameters header = Filter.Current; 
    List<DetailsResult> result = new List<DetailsResult>(); 
    if (header == null) 
     yield break; 

    GL.Company company = PXSelect<GL.Company>.Select(this); 
    foreach (PXResult<ARStatement, Customer> it in PXSelectJoin<ARStatement, 
      InnerJoin<Customer, On<Customer.bAccountID, Equal<ARStatement.statementCustomerID>>>, 
      Where<ARStatement.statementDate, Equal<Required<ARStatement.statementDate>>, 
       And<ARStatement.statementCycleId, Equal<Required<ARStatement.statementCycleId>>>>, 
      OrderBy<Asc<ARStatement.statementCustomerID, Asc<ARStatement.curyID>>>> 
      .Select(this, header.StatementDate, header.StatementCycleId)) 
    { 
     DetailsResult res = new DetailsResult(); 
     ARStatement st = it; 
     Customer cust = it; 
     res.Copy(st, cust); 

     if (setup?.ConsolidatedStatement != true && st.BranchID != header.BranchID) 
       continue; 

     if (Filter.Current.Action == 0 && 
      header.ShowAll != true && 
      (st.DontPrint == true || st.Printed == true)) 
       continue; 

     if ((Filter.Current.Action == 1 || Filter.Current.Action == 2) && 
      header.ShowAll != true && 
      (st.DontEmail == true || st.Emailed == true)) 
       continue; 

     if (cust.PrintCuryStatements == true) 
     { 
      if (Filter.Current.CuryStatements != true) 
       continue; 

      DetailsResult last = result.Count > 0 ? result[result.Count - 1] : null; 
      if (last?.CustomerID == res.CustomerID && last?.CuryID == res.CuryID) 
      { 
       last.Append(res); 
      } 
      else 
      { 
       result.Add(res); 
      } 
     } 
     else 
     { 
      if (Filter.Current.CuryStatements == true) 
       continue; 

      res.ResetToBaseCury(company.BaseCuryID); 

      DetailsResult last = result.Count > 0 ? result[result.Count - 1] : null; 
      if (last?.CustomerID == res.CustomerID) 
      { 
       last.Append(res); 
      } 
      else 
      { 
       result.Add(res); 
      } 
     } 
    } 

    foreach (var item in result) 
    { 
     var located = Details.Cache.Locate(item); 
     if (located != null) 
     { 
      yield return located; 
     } 
     else 
     { 
      Details.Cache.SetStatus(item, PXEntryStatus.Held); 
      yield return item; 
     } 
    } 

    Details.Cache.IsDirty = false; 
} 

それは別のフィールドによって注文されたので、イムは特に変化にforeachのselect文を望むです。

foreach (PXResult<ARStatement, Customer> it in PXSelectJoin<ARStatement, 
     InnerJoin<Customer, On<Customer.bAccountID, Equal<ARStatement.statementCustomerID>>>, 
     Where<ARStatement.statementDate, Equal<Required<ARStatement.statementDate>>, 
      And<ARStatement.statementCycleId, Equal<Required<ARStatement.statementCycleId>>>>, 
     OrderBy<Asc<ARStatement.statementCustomerID, Asc<ARStatement.curyID>>>> 
     .Select(this, header.StatementDate, header.StatementCycleId)) 
{ 

アイブ
[PXOverride]

保護された仮想のIEnumerable詳細を試みた()
{

しかし運、それはこのメソッドをオーバーライドすることができますか?

+0

これを試してみるとエラーが発生しますか?またはオーバーライドとして接続していないだけですか? – Brendan

答えて

2

このようなオーバーライドについては、ベースグラフのメソッドが保護されていても、オーバーライドメソッドをpublicにする必要があると思います。以下を試してください...

[PXOverride] 
public virtual IEnumerable details() 
{ 
    //override code here... 
} 
関連する問題