acumatica
Modificar elementos en una lista desplegable
Buscar..
Introducción
En este tema, aprenderá cómo modificar los atributos de campo heredados de los atributos PXStringList o PXIntList. El enfoque demostrado se asegurará de no romper la funcionalidad del producto base Acumatica ERP y requerirá un mantenimiento mínimo, en caso de que exista, mientras se actualizan sus personalizaciones a una versión más nueva de Acumatica.
Observaciones
En todos los ejemplos anteriores, realizó cambios en las matrices _AllowedValues
y _AllowedLabels
. Si su tarea es modificar solo la etiqueta (valor externo) de un elemento desplegable, considere usar los diccionarios de traducción. Para obtener más información sobre los diccionarios de traducción, consulte la documentación de Acumatica ERP.
Modificación de los estados maritales
En este ejemplo, modificará la lista desplegable Estado civil que se encuentra en el formulario de Contactos (CR302000):
Para agregar nuevos elementos al sucesor de PXStringListAttribute
La mejor manera de extender los elementos desplegables codificados dentro de un atributo heredado de los atributos PXStringList o PXIntList es aumentar el tamaño de las matrices _AllowedValues
y _AllowedLabels
en el constructor de su atributo de campo personalizado:
[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;
}
}
En el ejemplo anterior, aumentó el tamaño de las matrices _AllowedValues
y _AllowedLabels
para agregar 3 elementos adicionales a la lista desplegable Estado civil . Los valores internos, almacenados en la matriz _AllowedValues
, se asignarán a los campos DAC y se guardarán en la base de datos, y los valores externos de la matriz _AllowedValues
representan valores internos en la interfaz de usuario.
Para probar los resultados, en la extensión Contact DAC, decora el campo MaritalStatus con el MaritalStatusesCst1Attribute
:
public class ContactExt : PXCacheExtension<Contact>
{
[PXRemoveBaseAttribute(typeof(MaritalStatusesAttribute))]
[PXMergeAttributes(Method = MergeMethod.Append)]
[MaritalStatusesCst1]
public string MaritalStatus { get; set; }
}
Ahora hay 7 elementos en la lista desplegable Estado civil :
Para eliminar elementos declarados en el sucesor de PXStringListAttribute
Para eliminar un elemento desplegable específico, que fue codificado dentro de un atributo heredado de los atributos PXStringList o PXIntList, debe reducir el tamaño de las matrices _AllowedValues
y _AllowedLabels
en el constructor de su atributo de campo personalizado:
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;
}
}
En el ejemplo anterior, redujo el tamaño de las matrices _AllowedValues
y _AllowedLabels
para eliminar un elemento individual de la lista desplegable Estado civil .
Para probar los resultados, en la extensión Contact DAC, decora el campo MaritalStatus con el MaritalStatusesCst2Attribute
:
public class ContactExt : PXCacheExtension<Contact>
{
[PXRemoveBaseAttribute(typeof(MaritalStatusesAttribute))]
[PXMergeAttributes(Method = MergeMethod.Append)]
[MaritalStatusesCst2]
public string MaritalStatus { get; set; }
}
Ahora solo hay 6 elementos: 3 originales y 3 personalizados, en la lista desplegable Estado civil :
Para reemplazar los elementos declarados en el sucesor PXStringListAttribute
Para reemplazar un elemento desplegable específico, originalmente codificado dentro de un atributo heredado de los atributos PXStringList o PXIntList, debe actualizar el valor apropiado en las matrices _AllowedValues
y _AllowedLabels
en el constructor de su atributo de campo personalizado:
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;
}
}
En el ejemplo anterior, reemplazó D - Artículo divorciado con V - Divorciado (no tiene derecho común) en las matrices _AllowedValues
y _AllowedLabels
respectivamente. Al hacerlo, reemplazamos los valores internos y externos de un elemento desplegable.
Para probar los resultados, en la extensión Contact DAC, decora el campo MaritalStatus con el MaritalStatusesCst3Attribute
:
public class ContactExt : PXCacheExtension<Contact>
{
[PXRemoveBaseAttribute(typeof(MaritalStatusesAttribute))]
[PXMergeAttributes(Method = MergeMethod.Append)]
[MaritalStatusesCst3]
public string MaritalStatus { get; set; }
}
Ahora solo hay 6 elementos: 2 originales, 3 personalizados y 1 reemplazado, en la lista desplegable Estado civil :