|
![]() |
#1 |
Модератор
|
Цитата:
Делали бы тогда однотипно.
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
![]() |
#2 |
Участник
|
Цитата:
В бизнес-логике много ситуаций, когда необходимо при изменениях, например статуса записи, ОБЯЗАТЕЛЬНО указать значение перечисления (подразумевается есть 0 = пусто = неопределено - до смены статуса записи). Так вот по бест-практик и надо подсветить такое поле красным, мало того не контрол, а объект-поле на дата-соурсе, чтобы не сломать механизм, когда пользователь может через настройки пользователя добавить свой контрол в произвольную группу контролов на форме. Вот второй дубль контрол также станет обязательным. В данном примере форма - форма смены статуса записи и указания нужного значения перечисления. При этом до этой формы - смены статуса значение перечисления может быть неопределено, а записи создаются на другой форме, где значение поля НЕОБЯЗАТЕЛЬНО и это требование бизнес-логики. Насчет возможности сделать поле енум на таблице обязательным - да бест практик РЕКОМЕНДУЕТ не делать чего-то, а как бы Аксапта разрешает. Пример - две таблицы - первая имеет запись с полем енум - необязательно, вторая - история этой записи - вот там енум ставим обязательно, да отходим от бест-практик - в истории не может быть неопределенного статуса записи - тут приоритет другого требования бест-практик - в таблице не должно быть записи с некорректным значением, и закрывается такая ситуация именно на таблице. Смысл такой - если вторую таблицу открыть даже в обозревателе (что делается консультантами часто), то не смогут создать, изменить там запись некорректно. Здесь как раз ситуация что программист ожидает такого поведения, потому-что во второй таблице она логична. |
|
|
За это сообщение автора поблагодарили: Poleax (1). |
![]() |
#3 |
Axapta
|
Цитата:
Сообщение от titov
![]() При этом до этой формы - смены статуса значение перечисления может быть неопределено, а записи создаются на другой форме, где значение поля НЕОБЯЗАТЕЛЬНО и это требование бизнес-логики.
... вот там енум ставим обязательно, да отходим от бест-практик - в истории не может быть неопределенного статуса записи - тут приоритет другого требования бест-практик - в таблице не должно быть записи с некорректным значением, и закрывается такая ситуация именно на таблице. Upd. У BaseEnum любое значение - уже "непустое". Просто потому, что это "перечисление". Даже если вы некое из значений почему-то рассматриваете "пустым". И если по бизнес-логике в какой-то ситуации какое-то из значений не должно иметь место быть, то проверка на это должна быть прозрачно видна из кода, а не переложена в неожиданное место, на свойство поля. Свойство "мандатори" проверяет заполненность поля, а в вашем случае поле будет заполнено. Аналогично, например, нехорошо для поля с типом Энум (за исключением, возможно, типа NoYes), писать 'if (table.enumField)' вместо 'if (table.enumField != BaseEnum::None). Последний раз редактировалось oip; 12.08.2010 в 13:18. Причина: Добавил |
|
![]() |
#4 |
Участник
|
джоб нашел 100 объектов для ах2009
X++: static void EnumTypeMandatory(Args _args) { Dictionary dictionary = new Dictionary(); DictTable dictTable; DictField dictField; int countFiledsTotal; tableId tableId; fieldId fieldId; ; setprefix('Сканирование АОТ. Таблицы, имеющие поле enum mandatory'); for (tableId = dictionary.tableNext(0);tableId;tableId = dictionary.tableNext(tableId)) { dictTable = new DictTable(tableId); if ( (! dictTable.isMap()) && (! dictTable.isTmp()) && (! dictTable.isView())) { setPrefix(dictTable.name() + '-' + dictTable.label()); for (fieldId = dictTable.fieldNext(0);fieldId;fieldId = dictTable.fieldNext(fieldId)) { dictField = dictTable.fieldObject(fieldId); if( dictField.type() == types::Enum && dictField.mandatory() == true ) { info(dictField.name() + '-' + dictField.label()); countFiledsTotal++; } } } } info(strFmt("Total found %1 objects",countFiledsTotal)); } |
|
|
За это сообщение автора поблагодарили: oip (1). |
![]() |
#5 |
MCP
|
Столкнулся с таким же поведением enum'а в существующей нестандартной таблице. Не догадался обратить внимание на свойство mandatory табличного поля, почему-то казалось что что-то хитрое с enum'ом или EDT. Респект за тему
![]() |
|
![]() |
#6 |
Участник
|
|
|
Теги |
ax2009, enum |
|
![]() |
||||
Тема | Ответов | |||
Как получить из элемента enum-а код типа (enum-а)? | 12 | |||
Странный баг при расширении Enum | 1 | |||
Глюк компилятора | 5 | |||
Enum: глюк? | 11 | |||
Фильтрация по полю Enum в Query | 8 |
|