Ключ сегмента Acumatica Vendor ID отличается от длины сегмента BIZZACCOUNT - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу знать, возможно ли настроить ключи сегмента Vendor ID с меньшим количеством символов, чем BiZAccounts .. Например, я создал ключи ветви, например USBRANCH1, но теперь я хочу создать идентификатор поставщика, например V001, но не дать пользователю возможность ввести более 4 символов? Я не уверен, почему BIZaccount привязан к поставщикам, клиентам, сотрудникам с точки зрения ключей сегмента, поскольку это уменьшает гибкость и изменяет длину ключа и тип

Спасибо

1 Ответ

0 голосов
/ 25 апреля 2018

Для этого вы можете сделать следующее:
1. Создайте свой собственный сегментированный ключ, как показано ниже:

enter image description here

  1. Создать расширение кэша для ЦАП поставщика для изменения значения по умолчанию VENDOR Сегментированный ключ, который наследуется от BIZACCT до вашего MYVENDOR, как показано ниже:

    using PX.Data;
    using PX.Data.EP;
    using PX.Objects.AP;
    using PX.Objects.CR;
    using PX.Objects.GL;
    using System;
    namespace ClassLibrary1.DAC
    {
        public class VendorExt:PXCacheExtension<Vendor>
        {
            [MyVendorRaw(IsKey = true)]
            [PXDefault]
            [PXFieldDescription]
            public virtual string AcctCD { get; set; }
        }
    
        [PXDBString(30, IsUnicode = true, InputMask = "")]
        [PXUIField(DisplayName = "Vendor", Visibility = PXUIVisibility.Visible)]
        public sealed class MyVendorRawAttribute : AcctSubAttribute
        {
            public MyVendorRawAttribute() : this(null)
            {
            }
    
            public MyVendorRawAttribute(Type where)
            {
                Type type = BqlCommand.Compose(new Type[]
                {
                    typeof(Search2<, , >),
                    typeof(Vendor.acctCD),
                    typeof(LeftJoin<Contact, On<Contact.bAccountID, Equal<Vendor.bAccountID>, And<Contact.contactID, Equal<Vendor.defContactID>>>, LeftJoin<Address, On<Address.bAccountID, Equal<Vendor.bAccountID>, And<Address.addressID, Equal<Vendor.defAddressID>>>>>),
                    (where == null) ? typeof(Where<Match<Current<AccessInfo.userName>>>) : BqlCommand.Compose(new Type[]
                    {
                        typeof(Where2<, >),
                        typeof(Where<Match<Current<AccessInfo.userName>>>),
                        typeof(And<>),
                        where
                    })
                });
                PXDimensionSelectorAttribute pxdimensionSelectorAttribute;
                this._Attributes.Add(pxdimensionSelectorAttribute = new PXDimensionSelectorAttribute("MYVENDOR", type, typeof(Vendor.acctCD), new Type[]
                {
                    typeof(Vendor.acctCD),
                    typeof(Vendor.acctName),
                    typeof(Vendor.vendorClassID),
                    typeof(Vendor.status),
                    typeof(Contact.phone1),
                    typeof(Address.city),
                    typeof(Address.countryID)
                }));
                pxdimensionSelectorAttribute.DescriptionField = typeof(Vendor.acctName);
                this._SelAttrIndex = this._Attributes.Count - 1;
                this.Filterable = true;
                ((PXDimensionSelectorAttribute)this._Attributes[this._SelAttrIndex]).CacheGlobal = true;
            }
    
            public const string DimensionName = "MYVENDOR";
        }
    }
    

После этого Vendor CD будет работать с длиной 4 . Но, как вы можете видеть на скриншоте ниже, будут некоторые проблемы с существующими записями. Поэтому я рекомендую вам делать это только в том случае, если в системе нет существующих поставщиков. Также после этого я предполагаю, что вы проверили все страницы, которые используют Vendor для правильной работы.

enter image description here

...