acumatica
Изменение элементов в раскрывающемся списке
Поиск…
Вступление
В этом разделе вы узнаете, как изменять атрибуты полей, унаследованные от атрибутов 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 заменены - в раскрывающемся списке « Семейное состояние» :