Показать сообщение отдельно
Старый 04.03.2024, 15:46   #15  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,877 / 3127 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от ax_mct Посмотреть сообщение
В AX2012 это должно работать только если элемент с индексом 0 явно назван None.
То есть Mandatory=Yes AND 0 = None
Какая гадостная штука.
Поотваливались проверки на обязательность при переходе на Ax2012

Дописали свою проверку Best practice
\Classes\SysBPCheckTableField\checkEnumFieldMandatory_MRC

X++:
boolean checkEnumFieldMandatory_MRC()
{
    str         message;
    boolean     ret = true;
    ;

    if (!sysDictTable || !sysDictField)
    {
        return ret;
    }

    if (sysDictField.baseType() != Types::Enum)
    {
        return ret;
    }

    if (!sysDictField.mandatory())
    {
        return ret;
    }

    if (!sysDictEnum)
    {
        return ret;
    }

    if (!sysDictEnum.value2Symbol(0))
    {
        return ret;
    }

    if (sysDictEnum.value2Symbol(0) == "None")
    {
        return ret;
    }

    ret = false;
    message = strFmt("Свойство \"Mandatory\" не будет работать, так как дефолтное значение енума \"%1\" равно \"%2\". " +
        "Чтобы работало переименуйте на \"%1::None\". Это появилось с 2012-й версии. См. " +
        "https://dynamicsaxhints.blogspot.com/2016/05/mandatory-table-field-based-on-enum.html" + "\n" +
        "https://learn.microsoft.com/en-us/dynamicsax-2012/developer/best-practices-for-base-enums" + "\n" +
        "https://dax.axforum.info/forums/showthread.php?p=394676#post394676" + "\n",
        sysDictEnum.name(),
        sysDictEnum.value2SymbolWithEnumName_MRC(0)
        );
    sysBPCheck.addError(#BPErrorMandatoryEnumValue_MRC /* 12502 */, 0, 0, message, "Mandatory", sysDictField.path());

    return ret;
}