2017-07-11 2 views
0

Il y a un champ personnalisé, que je déclarais pour le CAD client:Comment ajouter un champ personnalisé dans le sélecteur client ARInvoice?

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 
} 

Les tentatives de modifier le ARInvoice sélecteur de client avec le semblent Personnaliser les colonnes de sélection pop-up ne pas travailler. Comment puis-je ajouter mon champ personnalisé dans le sélecteur client ARInvoice?

enter image description here

Répondre

2

Soyez au courant, depuis Acumatica ERP build # 17.201.0043, il est possible de personnaliser la liste des colonnes définies pour client recherche de factures AR via les Personnaliser les colonnes Sélecteur de dialogue (disponible dans la section Data Class du gestionnaire de personnalisation). Pour obtenir des instructions étape par étape s'il vous plaît vérifier la capture d'écran ci-dessous: enter image description here

Pour modifier la recherche de clients sur Acumatica ERP de factures AR ver. 6.1 et plus tôt, veuillez suivre les étapes ci-dessous: La définition de PXCustomizeSelectorColumns générée par la fenêtre Customize Selector Columns fonctionne avec brio avec la majorité des sélecteurs dans Acumatica ERP. Fondamentalement, PXCustomizeSelectorColumns remplace simplement les colonnes définies à l'origine pour un sélecteur avec l'ensemble personnalisé de colonnes lors d'une initialisation de 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; 
     } 
    } 
} 

Alors, que peut faire l'PXCustomizeSelectorColumns attribuent à l'échec et ne remplace pas les colonnes définies à l'origine de sélection? Chaque fois que la méthode SetColumns est exécutée sur une instance de PXDimensionSelectorAttribute ou PXSelectorAttribute après l'initialisation de PXCache, PXCustomizeSelectorColumns n'a aucune chance de faire son travail.

[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); 
    } 
    ... 
} 

Cela dit, pour ajouter un champ personnalisé dans le ARInvoice sélecteur de client, il faut remplacer tous les attributs déclarés pour le champ ARInvoice.CustomerID et redéfinir les colonnes du sélecteur de client dans l'attribut 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)] 

Après avoir publié la personnalisation, devrait enfin faits sur commande de démonstration dans le champ apparaissent ARInvoice sélecteur de client: enter image description here

Pour activer la recherche contre un champ personnalisé à l'intérieur du sélecteur de clientèle ARInvoice, ouvrez les factures et l'écran Mémos dans l'éditeur de mise en page et tapez UsrDemoField comme la propriété GridProperties.FastFilterFields du sélecteur de client:

enter image description here

enter image description here

+0

Cela a fonctionné. Je vous remercie. – Krunal