修改婚姻状况

在此示例中,你将修改 “ 联系人” 表单(CR302000) 上的 “ 婚姻状况” 下拉列表 : **** StackOverflow 文档

向 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 数组的大小,以便在 Marital Status 下拉列表中添加 3 个附加项。存储在 _AllowedValues 数组中的内部值将分配给 DAC 字段并保存在数据库中,_AllowedValues 数组中的外部值表示 UI 中的内部值。

要测试结果,请在 Contact DAC 扩展中使用 MaritalStatusesCst1Attribute 装饰 MaritalStatus 字段:

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

现在 Marital Status 下拉列表中有 7 个项目 :

StackOverflow 文档

删除 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 数组的大小,以从 Marital Status 下拉列表中删除 Single item。 ****

要测试结果,请在 Contact DAC 扩展中使用 MaritalStatusesCst2Attribute 修饰 MaritalStatus 字段:

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

现在只有 6 个项目:3 个原始和 3 个自定义 - 在 Marital Status 下拉列表中:

StackOverflow 文档

替换 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;
    }
}

在上面的示例中,你分别在 _AllowedValues_AllowedLabels 阵列中用 V - 离婚(不是普通法) 替换 D - 离婚项目。通过这样做,我们替换下拉项的内部和外部值。 ****** ******

要测试结果,请在 Contact DAC 扩展中使用 MaritalStatusesCst3Attribute 修饰 MaritalStatus 字段:

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

现在只有 6 个项目:2 个原始项目,3 个自定义项目和 1 个被替换项目 - 在 Marital Status 下拉列表中:

StackOverflow 文档