Поиск…


Вступление

В этом разделе вы узнаете, как изменять атрибуты полей, унаследованные от атрибутов PXStringList или PXIntList. Продемонстрированный подход позволит не нарушать функциональность базового продукта Acumatica ERP и требует минимального обслуживания, если таковое имеется, при обновлении настроек до более новой версии Acumatica.

замечания

Во всех примерах выше вы вносили изменения в массивы _AllowedValues и _AllowedLabels . Если ваша задача состоит в том, чтобы изменить только метку (внешнее значение) раскрывающегося элемента, попробуйте использовать словари перевода. Для получения дополнительной информации о словарях перевода см. Документацию Acumatica ERP

Изменение семейных статусов

В этом примере вы будете изменять раскрывающийся список « Семейное состояние» в форме « Контакты» (CR302000): введите описание изображения здесь

Чтобы добавить новые элементы в преемник PXStringListAttribute

Лучший способ расширить выпадающие элементы, жестко закодированные внутри атрибута, унаследованного от атрибута PXStringList или PXIntList, заключается в увеличении размера массивов _AllowedValues и _AllowedLabels в конструкторе вашего настраиваемого атрибута поля:

[PXLocalizable(Messages.Prefix)]
public static class MaritalStatusesMessages
{
    public const string CommonLaw = "Living common law";
    public const string Separated = "Separated (not living common law)";
    public const string DivorcedNoCommonLaw = "Divorced (not living common law)";
    public const string NeverMarried = "Never Married";
}

public class MaritalStatusesCst1Attribute : MaritalStatusesAttribute
{
    public const string CommonLaw = "L";
    public const string Separated = "P";
    public const string NeverMarried = "N";

    public MaritalStatusesCst1Attribute()
    {
        Array.Resize(ref _AllowedValues, _AllowedValues.Length + 3);
        _AllowedValues[_AllowedValues.Length - 3] = CommonLaw;
        _AllowedValues[_AllowedValues.Length - 2] = Separated;
        _AllowedValues[_AllowedValues.Length - 1] = NeverMarried;
        Array.Resize(ref _AllowedLabels, _AllowedLabels.Length + 3);
        _AllowedLabels[_AllowedLabels.Length - 3] = MaritalStatusesMessages.CommonLaw;
        _AllowedLabels[_AllowedLabels.Length - 2] = MaritalStatusesMessages.Separated;
        _AllowedLabels[_AllowedLabels.Length - 1] = MaritalStatusesMessages.NeverMarried;
    }
}

В приведенном выше примере вы увеличили размер массивов _AllowedValues и _AllowedLabels чтобы добавить 3 дополнительных элемента в раскрывающийся список « Семейное состояние» . Внутренние значения, хранящиеся в массиве _AllowedValues , будут назначены полям ЦАП и сохранены в базе данных, а внешние значения из массива _AllowedValues представляют внутренние значения в пользовательском интерфейсе.

Чтобы проверить результаты, в расширении Contact DAC, украсите поле MatStatus с помощью MaritalStatusesCst1Attribute :

public class ContactExt : PXCacheExtension<Contact>
{
    [PXRemoveBaseAttribute(typeof(MaritalStatusesAttribute))]
    [PXMergeAttributes(Method = MergeMethod.Append)]
    [MaritalStatusesCst1]
    public string MaritalStatus { get; set; }
}

Теперь в раскрывающемся списке « Семейное состояние» есть 7 элементов:

введите описание изображения здесь

Чтобы удалить элементы, объявленные в преемнике PXStringListAttribute

Чтобы удалить определенный раскрывающийся элемент, который был жестко закодирован внутри атрибута, унаследованного от атрибута PXStringList или PXIntList, вам необходимо уменьшить размер массивов _AllowedValues и _AllowedLabels в конструкторе вашего настраиваемого атрибута поля:

public class MaritalStatusesCst2Attribute : MaritalStatusesCst1Attribute
{
    public MaritalStatusesCst2Attribute()
    {
        string[] allowedValues = new string[_AllowedValues.Length - 1];
        string[] allowedLabels = new string[_AllowedLabels.Length - 1];
        Array.Copy(_AllowedValues, 1, allowedValues, 0, _AllowedValues.Length - 1);
        Array.Copy(_AllowedLabels, 1, allowedLabels, 0, _AllowedValues.Length - 1);
        _AllowedValues = allowedValues;
        _AllowedLabels = allowedLabels;
    }
}

В приведенном выше примере вы уменьшили размер массивов _AllowedValues и _AllowedLabels чтобы удалить Single item из раскрывающегося списка « Семейное состояние» .

Чтобы проверить результаты, в расширении Contact DAC, украсите поле MatStatus с помощью MaritalStatusesCst2Attribute :

public class ContactExt : PXCacheExtension<Contact>
{
    [PXRemoveBaseAttribute(typeof(MaritalStatusesAttribute))]
    [PXMergeAttributes(Method = MergeMethod.Append)]
    [MaritalStatusesCst2]
    public string MaritalStatus { get; set; }
}

Теперь в раскрывающемся списке « Семейное состояние» есть только 6 элементов: 3 оригинала и 3 пользовательских -

введите описание изображения здесь

Чтобы заменить элементы, объявленные в преемнике PXStringListAttribute

Чтобы заменить определенный раскрывающийся элемент, первоначально жестко закодированный внутри атрибута, унаследованного от атрибута PXStringList или PXIntList, вам необходимо обновить соответствующее значение в _AllowedValues и _AllowedLabels в конструкторе вашего настраиваемого атрибута поля:

public class MaritalStatusesCst3Attribute : MaritalStatusesCst2Attribute
{
    public const string DivorcedNoCommonLaw = "V";

    public MaritalStatusesCst3Attribute()
    {
        _AllowedValues[Array.IndexOf(_AllowedValues, Divorced)] = DivorcedNoCommonLaw;
        _AllowedLabels[Array.IndexOf(_AllowedLabels, Messages.Divorced)] = MaritalStatusesMessages.DivorcedNoCommonLaw;
    }
}

В приведенном выше примере вы заменили D - разведенный элемент на V - разведенный (не живущий общий закон) в _AllowedValues и _AllowedLabels соответственно. Поступая таким образом, мы заменяем как внутренние, так и внешние значения раскрывающегося элемента.

Чтобы проверить результаты, в расширении Contact DAC, украсите поле MatStatus с помощью MaritalStatusesCst3Attribute :

public class ContactExt : PXCacheExtension<Contact>
{
    [PXRemoveBaseAttribute(typeof(MaritalStatusesAttribute))]
    [PXMergeAttributes(Method = MergeMethod.Append)]
    [MaritalStatusesCst3]
    public string MaritalStatus { get; set; }
}

Теперь есть только 6 элементов: 2 оригинала, 3 пользовательских и 1 заменены - в раскрывающемся списке « Семейное состояние» :

введите описание изображения здесь



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow