2017-04-20 2 views
0

Ich habe Informationen darüber gefunden, wie die Persist() - Funktion für eine Anpassungserweiterung für eine sofort einsatzbereite BLC überschreiben, aber ich kann nichts über eine benutzerdefinierte BLC finden. Ich muss ein Element in den Cache einfügen, direkt bevor RowPersisting() beginnt, aber die Verwendung von public void Persist (PersistDelegate baseMethod) funktioniert nicht, da ich kein PersistDelegate-Objekt definiert habe. Der Fehler, den ich erhalte, ist:Überschreiben von Persist() in benutzerdefinierten BLC

PX.Data.PXException: Für die Datenquelle wurde ein ungültiger Typ angegeben.

Gibt es eine Möglichkeit, Persist() in einem benutzerdefinierten BLC zu überschreiben? Wenn ja, wie mache ich das?

Antwort

1

die Methode in einem benutzerdefinierten Persist Aufschalten BLC ist nicht anders als jede virtuelle Methode in C# überschreiben:

public class ARSalesPriceMaint : PXGraph<ARSalesPriceMaint> 
{ 
    ... 
    public override void Persist() 
    { 
     foreach (ARSalesPrice price in Records.Cache.Inserted) 
     { 
      ARSalesPrice lastPrice = FindLastPrice(this, price); 
      if (lastPrice?.EffectiveDate > price.EffectiveDate && price.ExpirationDate == null) 
      { 
       Records.Cache.RaiseExceptionHandling<ARSalesPrice.expirationDate>(price, price.ExpirationDate, new PXSetPropertyException(ErrorMessages.FieldIsEmpty, PXUIFieldAttribute.GetDisplayName<ARSalesPrice.expirationDate>(Records.Cache))); 
       throw new PXSetPropertyException(ErrorMessages.FieldIsEmpty, PXUIFieldAttribute.GetDisplayName<ARSalesPrice.expirationDate>(Records.Cache)); 
      } 
      ValidateDuplicate(this, Records.Cache, price); 
     } 
     foreach (ARSalesPrice price in Records.Cache.Updated) 
     { 
      ARSalesPrice lastPrice = FindLastPrice(this, price); 
      if (lastPrice?.EffectiveDate > price.EffectiveDate && price.ExpirationDate == null) 
      { 
       Records.Cache.RaiseExceptionHandling<ARSalesPrice.expirationDate>(price, price.ExpirationDate, new PXSetPropertyException(ErrorMessages.FieldIsEmpty, PXUIFieldAttribute.GetDisplayName<ARSalesPrice.expirationDate>(Records.Cache))); 
       throw new PXSetPropertyException(ErrorMessages.FieldIsEmpty, PXUIFieldAttribute.GetDisplayName<ARSalesPrice.expirationDate>(Records.Cache)); 
      } 
      ValidateDuplicate(this, Records.Cache, price); 
     } 
     base.Persist(); 
    } 
    ... 
} 
+0

Muss ich nur den .Persist machen(); Funktionsaufruf am Ende meiner Logik, damit es seinen normalen Speichervorgang fortsetzt? Der Grund, warum ich das angesprochen habe, ist, dass ich das Überschreiben void Persist() gemacht habe, aber das eigentliche Speichern nicht mehr durchgeführt hat. –

+0

Korrekt, Sie sollten 'base.Persist();' nach Ihrer Logik aufrufen, um den eigentlichen Speichervorgang zu starten. – RuslanDev

Verwandte Themen