修改婚姻狀況

在此示例中,你將修改 “ 聯絡人” 表單(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 文件