2017-07-11 13 views
0

カスタムフィールドは、私がお客様のDACに対して宣言ということ、あります:カスタマイズセレクター列のポップアップとARInvoiceカスタマー・セレクターを変更するARInvoice Customerセレクタにカスタムフィールドを追加するには?

public class CustomerExt : PXCacheExtension<Customer> 
{ 
    #region UsrDemoField 
    [PXDBString(255)] 
    [PXUIField(DisplayName = "Demo Field")] 

    public virtual string UsrDemoField { get; set; } 
    public abstract class usrDemoField : IBqlField { } 
    #endregion 
} 

試みが動作していないようでした。カスタムフィールドをARInvoiceカスタマーセレクタに追加するにはどうすればよいですか?

enter image description here

答えて

2

Acumatica ERPは#17.201.0043を構築するので、それが利用可能カスタマイズセレクター列ダイアログ(経由AR請求書カスタマーのルックアップのために定義された列のリストをカスタマイズすることも可能ですが、注意してくださいカスタマイズマネージャの[データクラス]セクションにあります)。詳細な手順については、 enter image description here

Acumatica ERP verでAR請求書のカスタマールックアップを変更するには、次のスクリーンショットをご覧ください。 6.130以前の手順に従ってください。 Customize Selector Columnsポップアップで生成されたPXCustomizeSelectorColumnsの定義は、Acumatica ERP内の大部分のセレクタとうまく機能します。基本的には、PXCustomizeSelectorColumnsは単にPXCacheの初期化時に列のカスタムセットとセレクタのために最初に定義された列を置き換えます。

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = false)] 
public class PXCustomizeSelectorColumns: PXEventSubscriberAttribute 
{ 
    private readonly Type[] _columns; 

    public PXCustomizeSelectorColumns(params Type[] columns) 
    { 
     _columns = columns; 
    } 

    public override void CacheAttached(PXCache cache) 
    { 
     cache.SetAltered(this.FieldName, true); 
     foreach (PXEventSubscriberAttribute attr in cache.GetAttributes(null, this.FieldName)) 
     { 
      PXSelectorAttribute sel = attr as PXSelectorAttribute; 
      if (sel == null) 
       continue; 
      sel.SetFieldList(_columns); 
      sel.Headers = null; 
     } 
    } 
} 

だから何がPXCustomizeSelectorColumnsは、セレクタの最初に定義された列を置き換える失敗しないように属性を引き起こす可能性がありますか? PXCacheが初期化された後にPXDimensionSelectorAttributeまたはPXSelectorAttributeのインスタンスに対してSetColumnsメソッドが実行されるたびに、PXCustomizeSelectorColumnsがジョブを実行する機会はありません。そうは言って

[PXDBInt()] 
[PXUIField(DisplayName = "Customer", Visibility = PXUIVisibility.Visible)] 
[Serializable] 
public class CustomerAttribute : AcctSubAttribute 
{ 
    ... 
    public virtual void FieldSelecting(PXCache sender, PXFieldSelectingEventArgs e) 
    { 
     if (this.AttributeLevel == PXAttributeLevel.Item || e.IsAltered) 
     { 
      PopulateFields(sender); 
     } 

     PXFieldSelecting handler = GetAttribute<PXDimensionSelectorAttribute>().FieldSelecting; 
     handler(sender, e); 
    } 

    protected virtual void PopulateFields(PXCache sender) 
    { 
     if (_FieldList == null) 
     { 
      _FieldList = new string[this._fields.Length]; 
      _HeaderList = new string[this._fields.Length]; 

      for (int i = 0; i < this._fields.Length; i++) 
      { 
       Type cacheType = BqlCommand.GetItemType(_fields[i]); 
       PXCache cache = sender.Graph.Caches[cacheType]; 
       if (cacheType.IsAssignableFrom(typeof(BAccountR)) || 
        _fields[i].Name == typeof(BAccountR.acctCD).Name || 
        _fields[i].Name == typeof(BAccountR.acctName).Name) 
       { 
        _FieldList[i] = _fields[i].Name; 
       } 
       else 
       { 
        _FieldList[i] = cacheType.Name + "__" + _fields[i].Name; 
       } 
       _HeaderList[i] = PXUIFieldAttribute.GetDisplayName(cache, _fields[i].Name); 
      } 
     } 

     var attr = GetAttribute<PXDimensionSelectorAttribute>().GetAttribute<PXSelectorAttribute>(); 
     attr.SetColumns(_FieldList, _HeaderList); 
    } 
    ... 
} 

、ARInvoiceカスタマー・セレクタにカスタムフィールドを追加するために、一つはARInvoice.CustomerIDフィールドの宣言されたすべての属性を交換しCustomerActive属性の中にお客様セレクタの列を再定義する必要があります enter image description here

[PXDefault()] 
[CustomerActive(typeof(Search<BAccountR.bAccountID>), 
    new Type[] 
    { 
     typeof(BAccountR.acctCD), 
     typeof(BAccountR.acctName), 
     typeof(CustomerExt.usrDemoField), 
     typeof(Address.addressLine1), 
     typeof(Address.addressLine2), 
     typeof(Address.postalCode), 
     typeof(CustomerAttribute.Contact.phone1), 
     typeof(Address.city), 
     typeof(Address.countryID), 
     typeof(CustomerAttribute.Location.taxRegistrationID), 
     typeof(Customer.curyID), 
     typeof(CustomerAttribute.Contact.salutation), 
     typeof(Customer.customerClassID), 
     typeof(Customer.status) 
    }, 
    Visibility = PXUIVisibility.SelectorVisible, DescriptionField = typeof(Customer.acctName), Filterable = true, TabOrder = 2)] 

カスタマイズを公開した後、カスタムデモフィールドは最終的にARInvoiceカスタマー・セレクタに表示されます: enter image description here

は、レイアウトエディタでARInvoiceカスタマー・セレクタ、オープン請求書とメモ画面内部のカスタムフィールドに対して検索を有効にし、顧客選択のGridProperties.FastFilterFieldsプロパティとしてUsrDemoFieldを入力するには、次の

enter image description here

enter image description here

+0

これはうまくいきました。ありがとうございました。 – Krunal

関連する問題