2017-08-01 15 views
0

私はAcumaticaの受注のビジネスロジックをカスタマイズしようとしています。ここで私は間違ったタイプの拡張が要求されました

protected void SOLine_InventoryID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e) 
{ 
    var row = (SOLine)e.Row; 

    InventoryItem item = (InventoryItem)PXSelectorAttribute.Select<SOLine.inventoryID>(cache, row); 

    if(item != null) 
    { 
    InventoryItemExt itemExt = orderitem.Cache.GetExtension<InventoryItemExt>(item); 
    if(item.InventoryID == row.InventoryID && itemExt.GarmentType == true) 
    { 
     PXUIFieldAttribute.SetEnabled<SOLine.orderQty>(this.orderitem.Cache, null, false); 
    } 
    } 
} 

public PXSelect<InventoryItem> Inventory; 

を書いて、私は取得していますエラーが、私は他のグラフで数回前にこのコードを使用して任意の問題がありませんでした。この

Error Trace

でコードがあります。そして私は、私はこのグラフのため欠場でしたその伸長グラフか何かが、私は

が 助け

EDITために、事前に、私は後に取得エラーをいただき、ありがとうございます、本当にわからないので、それが何であるか疑問に思って編集

protected void SOLine_RowSelected(PXCache cache, PXRowSelectedEventArgs e) 
{ 
    var row = (SOLine)e.Row; 

    InventoryItem item = (InventoryItem)PXSelectorAttribute.Select<SOLine.inventoryID>(cache, row); 

    if(item != null) 
    { 
    InventoryItemExt itemExt = Inventory.Cache.GetExtension<InventoryItemExt>(item); 
    if(item.InventoryID == row.InventoryID && itemExt.GarmentType == true) 
    { 
     PXUIFieldAttribute.SetEnabled<SOLine.orderQty>(this.orderitem.Cache, null, false); 
    } 
    } 

を下回っている、それはバグですか、問題は私のコードである後RowSelectedイベント にイベントやコードを変更しますか?

The latest error trace

+0

私はFieldUpdatedない(RowSelectedのフィールドを有効または無効に推薦します)。また、行をSetEnabledに渡すことを忘れないでください。チェックする行だけでなく、すべての行を有効/無効にします。 – Brendan

+0

RowSelectedを使用しようとしても同じエラーが発生しました –

+0

はいエラーは私のものとは無関係ですコメント。私のコメントは、SetEnabledを使用する上での一般的なものでした。あなたのアップデートのGetExtension呼び出しについては、それを単に....に変更してください。InventoryItemExt itemExt = item.GetExtension (); – Brendan

答えて

0

あなたが投稿したコードがSOLine.InventoryIDのFieldUpdatedイベントハンドラです:あなたが投稿

protected void SOLine_InventoryID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e) 
{ 
[...] 

エラートレースコールスタックを示すエラーが別のイベントハンドラを起源: error trace

SOLine InventoryIDフィールド更新ハンドラではなく、SOLine RowSelectedイベントハンドラを確認してください。トレースは、SOOrderEntry.csの73行目で例外が発生したことを示します。

エラーには関係ありません。拡張クラスを作成する場合は、ベースクラスとは異なるファイル名を付けることをお勧めします。 SOOrderEntry.csはAcumaticaの基本クラスファイルです.SOOrderEntryExt.csファイルに基底クラスとの区別を付けることができます。

EDIT、あなたのDataViewは、InventoryItemタイプでもしようとしない場合があります

Base.Caches[typeof(InventoryItem)].GetExtension<InventoryItemExt>(item) 

EDIT 2完全なコード

public class InventoryItemExt : PXCacheExtension<PX.Objects.IN.InventoryItem> 
{ 
    #region UsrCustomField 
    [PXString] 
    [PXUIField(DisplayName = "Custom Field")] 
    public virtual string UsrCustomField { get; set; } 
    public abstract class usrCustomField : IBqlField { } 
    #endregion 
} 

public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry> 
{ 
    protected void SOLine_RowSelected(PXCache cache, PXRowSelectedEventArgs e) 
    { 
     SOLine soLine = e.Row as SOLine; 

     if (soLine != null) 
     { 
      InventoryItem item = (InventoryItem)PXSelectorAttribute.Select<SOLine.inventoryID>(cache, soLine); 

      if (item != null) 
      { 
       InventoryItemExt itemExt = Base.Caches[typeof(InventoryItem)].GetExtension<InventoryItemExt>(item); 
       PXTrace.WriteInformation(string.Concat("Success = ", (itemExt != null).ToString())); 
      } 
     } 
    } 
} 
+0

rowselectedイベントを使用しようとしましたが、同じエラーが発生しました。また、グラフの名前を変更します。お勧めのおかげで –

+0

投稿したトレースから、エラーは常にRowSelectedのものでした。しかし、この問題で提供されるコードはFieldUpdatedであり、RowSelectedとは無関係です。エラーが発生した場所にコードを投稿できますか? –

+0

申し訳ありませんが、あなたがFieldUpdatedを指し示す新しいトレースを投稿したことがわかります –

関連する問題