Цитата:
Сообщение от
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;
}