2017-04-20 7 views
0

カスタムBLCのカスタマイズ拡張機能のPersist()関数をオーバーライドする方法に関する情報が見つかりましたが、カスタムビルドBLCに関するものは見つかりませんでした。 RowPersisting()が始まる直前にアイテムをキャッシュに挿入する必要がありますが、パブリック空のPersist(PersistDelegateのbaseMethod)は、PersistDelegateオブジェクトが定義されていないため動作しません。私が受け取るエラーは次のとおりです。カスタムBLCのPersist()をオーバーライド

PX.Data.PXException:データソースに無効なタイプが指定されています。

カスタムBLCでPersist()をオーバーライドする方法はありますか?もしそうなら、どうすればいいですか?

答えて

1

BLCは、その後、C#で任意の仮想メソッドをオーバーライド異なるものではないカスタムに固執方法オーバーライド:

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

は、私はちょうど.Persist()にする必要がありますが、それが通常の保存プロセスを続けるために私のロジックの終わりに関数呼び出し?私がこれを持ってきた理由は、オーバーライドvoid Persist()を行ったためですが、実際のセーブはこれ以上実行されませんでした。 –

+0

実際のセーブプロセスを実行するロジックの後に 'base.Persist();'を呼び出す必要があります。 – RuslanDev

関連する問題