Особенности генерации перечислимого типа, генерация заголовков для перечислимого типа, пример генерации перечисления

Enumeration - стереотип UML-класса, обозначающий перечислимый тип.

Атрибуты UML-класса являются значениями перечислимого типа.

Дополнительно редактируемые свойства

Окно редактирования свойств перечислимого типа выглядит следующим образом (две закладки):

Закладка Класс

  • Name - имя перечислимого типа, то же, что и отображается непосредственно на UML-классе.
  • Description - при необходимости, некоторое подробное описание, для повышения информативности модели в Flexberry Designer, генерируется в код на .Net-языке как DocComment;
  • OnlyShowSelectedValue - не используется (зарезервировано для будущих версий);
  • Packet, NamespacePostfix - позволяют настроить сборку и пространство имен, в которое должен генерироваться тип, см. Расположение сборок после генерации кода.

Закладка Возможные значения

Эта страница предназначена для настройки свойств значений перечислимого типа. Для каждого свойства:

  • Name - имя значения перечислимого типа, оно же отображается непосредственно на UML-классе.
  • Description - ри необходимости, некоторое подробное описание значения, для повышения информативности модели в Flexberry Designer, генерируется в код на .Net-языке как DocComment;
  • Caption - позволяет указать значение, информативное для пользователя (используется в пользовательском интерфейсе);
  • DefaultValue - целое число для значения перечислимого типа.

Что генерируется с описания перечислимого типа

Что генерируется Генерация в SQL DDL Генерация в .Net-язык
Имя UML-класса   Имя .Net-типа (перечислимый тип)
Имя атрибута UML-класса Выбирается самое длинное имя из всех в перечислимом типе, считается число символов, поле в таблице объявляется типа VARCHAR(число символов).Далее, сервисы данных сохраняют значения перечислимого типа как строковые константы, соответствующие именам Имя константы в перечислимом типе
Свойство Caption атрибута UML-класса Значения перечислимого типа хранятся в БД значениями заголовков Генерируется .Net-атрибут EnumCaption (Namespace: ICSSoft.STORMNET Assembly: ICSSoft.STORMNET.DataObject (in ICSSoft.STORMNET.DataObject.dll) )
Свойство DefaultValue атрибута UML-класса   Целое число для значения перечислимого типа (если не указано иначе, то при редактировании поля перечислимого типа по умолчанию будет отображён элемент с минимальным DefaultValue, а в выпадающем списке элементы перечислимого типа будут отображаться в порядке возрастания их DefaultValue)

Пример сгенерированного в C# кода перечислимого типа:

public enum СостояниеОшибки
{ 
    Черновик, 
    Зарегистрирована, 
    Оценка, 
    Подтверждена, 
    Отладка, 
    Задержка, 
    Повторена, 
    AlphaTesting, 
    BetaTesting, 
    Исправлена,
}

Отображение значений перечислимого типа

Программист может настроить отображение значений перечислимого типа в виде одного выбираемого (подобно ComboBox), либо нескольких помечаемых (подобно RadioButton). Это делается указанием атрибута OnlyShowSelectedValueAttribute, указываемого для перечислимого типа.

Заголовки значений перечислимого типа

Часто бывает удобным, чтобы значения перечислимых типов имели некоторый заголовок, понятный пользователю. Этот заголовок приписывается атрибутом Caption непосредственно значениям перечислимого типа.

Пример:


public enum AccessModifier
	{
		[Caption("+")]
		Public,
		[Caption("-")]
		Private,
		[Caption("#")]
		Protected
	}

Значения перечислимого типа хранятся в БД значениями заголовков.

Пустые значения

Чтобы добавить пустое значение в перечисление (пустую строку), необходимо создать новый элемент и в его Caption поставить знак “тильда” (~):

В результате, в коде появится следующая запись:

[Caption(""))
Пусто,

Работа с заголовками

Программист может конвертировать значения от Caption к перечислимому типу и обратно, вызовом методов статического класса ICSSoft.STORMNET.EnumCaption:

  • EnumCaption.GetCaptionFor(object value)
  • EnumCaption.GetValueFor(string caption, Type enumType)
  • EnumCaption.TryGetValueFor<TEnum>(string caption, out TEnum enumValue)