.
Пишем утилиту управления метаданными. Урок 4. Создание класса метаданных типа.
Автор megabax   
28.12.2010 г.
New Page 1

Пишем утилиту управления метаданными. Урок 4. Создание класса метаданных типа.

Что бы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


Исходники к уроку можно скачать в платном разделе.

На прошлом уроке мы создали класс описания типа. Сегодня создадим класс описания метаданных типа. Для чего он нужен? Что бы пользователь системы MDE мог включить в нее свой набор типов. И так, давайте объявим класс...

... Собственно говоря, пока класс у нас состоит из свойств и методов для сериализации этих свойств. В дальнейшем мы расширим его функционал. Что же это за свойства? Первое, TypeName - имя типа. Далее идет набор свойств управления доступом к свойству DataType (через класс TMDEDataType, помните, мы на прошлом уроке писали к этому классу заглушки? пришло время начать их реализовывать):

  • IsDataTypeAllowed  - доступно ли свойство DataType. 
  • IsDataTypeFixed - фиксировано ли свойство DataType. Например, если у нас тип - ссылка на другую таблицу, то свойство  фиксировано (имеет тип, в котором можно хранить, например, ID записи, на которую ссылается поле) и менять его нельзя. 
  • DefaultDataType - значение по умолчанию, или фиксированное значение если установлен флаг IsDataTypeFixed. 

Аналогично для полей Size, Precision, TableName. Теперь давайте разберем несколько примеров, как будут описываться некоторые типы при помощи данного класса... 

...

....Ссылка на справочник товаров

Значение DataType Size Precision TableName
Is....Allowed   false false false false
Is....Fixed  true false false true
Default ftFloat 10 0 'Wares'

А теперь реализуем методы класса....

...

И тестовый пример (не забудьте на форме разместить нужные TLabel):

function lBoolToStr(a:boolean):string;

begin

  if a  then result:='true' else result:='false';

end;

 

 

procedure TfrmMDETest.btnLoadClick(Sender: TObject);

var  Stream:TFileStream;

     TD:TMDETypeDescription;

begin

  Stream:=TFileStream.Create('d:\1\1.mde',fmOpenRead);

  TD:=TMDETypeDescription.Create;

  TD.Unserialize(Stream);

  Stream.Free;

  lbTypeName.Caption:=TD.TypeName;

  lbIsDataTypeAllowed.Caption:=lBoolToStr(TD.IsDataTypeAllowed);

  lbIsSizeAllowed.Caption:=lBoolToStr(TD.IsSizeAllowed);

  if(TD.DefaultDataType=ftFloat) then lbDefaultDataType.Caption:='Float';

  lbDefaultTableName.Caption:=TD.DefaultTableName;

end;

 

procedure TfrmMDETest.btnSaveClick(Sender: TObject);

var Stream:TFileStream;

    TD:TMDETypeDescription;

begin

  TD:=TMDETypeDescription.Create;

  TD.TypeName:='MyType';

  TD.IsDataTypeAllowed:=true;

  TD.IsSizeAllowed:=false;

  TD.DefaultDataType:=ftFloat;

  TD.DefaultTableName:='TestTable';

 

    Stream:=TFileStream.Create('d:\1\1.mde',fmCreate);

  TD.Serialize(Stream);

  Stream.Free;

end;

Внешний вид формы:

Урок 4. Создание класса метаданных типа.

Если все сделано правильно, то после нажатия на кнопочку "Сохранить", а потом "Прочитать" появиться что то вроде того:

Урок 4. Создание класса метаданных типа.

 

(C) Шуравин Александр 


Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями   программного продукта "Turbo Delphi", авторское право на который принадлежит "Borland Software Corporation


 

Последнее обновление ( 06.11.2011 г. )