2017-06-28 1 views
0

Ich möchte die Detailsdelegate-Methode für PX.Objects.AR.ARStatementPrint-Diagramm überschreiben.Überschreiben der Delegierungsmethode "dataview"

hier ist die Methode

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; 
} 

Im speziell auf die Änderung Select-Anweisung die foreach wollen, so dass es durch ein anderes Feld ist bestellt.

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)) 
{ 

Ive versuchte
[PXOverride]

geschützte virtuelle IEnumerable Details()
{

Aber kein Glück, ist es möglich, diese Methode zu überschreiben?

+0

Erhalten Sie irgendwelche Fehler, wenn Sie dies versuchen? oder verbindet sich einfach nicht als Override? – Brendan

Antwort

2

Ich denke, für Overrides wie diese müssen Sie Ihre Override-Methode veröffentlichen, auch wenn die Basis-Grafik-Methode geschützt ist. Versuchen Sie Folgendes ...

[PXOverride] 
public virtual IEnumerable details() 
{ 
    //override code here... 
}