Создание объекта собственного класса

Для выполнения примера предполагается наличие в репозитории объекта-ресурсы с идентификатором «OBJ_RES». В файловой системе должны присутствовать две пиктограммы: «C:\Icon_small.ico» и «C:\Icon_large.ico».

Sub Main;

Var

Mb: IMetabase;

Object: IMetabaseObject;

CustomClassExtender: IMetabaseCustomExtender;

CustClasses: IMetabaseCustomClasses;

CustomClass: IMetabaseCustomClass;

Operations: IMetabaseCustomClassOperations;

Operation: IMetabaseCustomClassOperation;

CreateInfo: IMetabaseObjectCreateInfo;

Description: IMetabaseObjectDescriptor;

ImgList: IGxImageList;

ImgList32: IGxImageList;

Icon: IGxIcon;

CustomObject: IMetabaseCustomObject;

se: IMetabaseSecurity;

AL: IAuditLog;

ALogs: IAuditLogons;

AOperat: IAuditOperations;

i: Integer;

Begin

Mb := MetabaseClass.Active;

// Создание контейнера пользовательских классов

CreateInfo := Mb.CreateCreateInfo;

CreateInfo.ClassId := MetabaseObjectClass.KE_CLASS_CUSTOM_EXTENDER;

CreateInfo.Name := "CUSTOM_EXTENDER";

CreateInfo.Permanent := True;

CreateInfo.Parent := Mb.Root;

Description := Mb.CreateObject(CreateInfo);

Object := Description.Edit;

CustomClassExtender := Object As IMetabaseCustomExtender;

ImgList := New GxImageList.Create;

ImgList.Height := 16;

Icon := New GxIcon.CreateFromFile("C:\Icon_small.ico");

ImgList.AddIcon(Icon);

CustomClassExtender.SmallImages := ImgList;

ImgList32 := New GxImageList.Create;

ImgList32.Height := 32;

Icon := New GxIcon.CreateFromFile("C:\Icon_large.ico");

ImgList32.AddIcon(Icon);

CustomClassExtender.LargeImages := ImgList32;

CustomClassExtender.IsShared := True;

CustomClassExtender.Resource := Mb.ItemById("OBJ_RES").Bind As IResourceObject;

CustomClassExtender.NameResource := "ID_CUSTOM_EXTENDER";

 

// Добавление пользовательского класса в контейнер

CustClasses := CustomClassExtender.Classes;

CustomClass := CustClasses.Add;

CustomClass.Description := "Собственный класс";

CustomClass.Id := "MY_CLASS";

CustomClass.Name := "My_Class";

CustomClass.ImageIndex := 0;

Operations := CustomClass.Operations;

Operation := Operations.Add(0);

Operation.Name := "Новый метод";

Object.Save;

 

// Создание объекта пользовательского класса

CreateInfo.ClassId := CustomClass.ClassId;

CreateInfo.Name := "Объект собственного класса";

CreateInfo.Permanent := True;

CreateInfo.Parent := Mb.Root;

Description := Mb.CreateObject(CreateInfo);

Object := Description.Edit;

CustomObject := Object As IMetabaseCustomObject;

CustomObject.Extender := CustomClassExtender;

CustomObject.CustomClass := CustomClass;

Object.Save;

 

// Проверка прав доступа к операции пользовательского класса.

se := Mb.Security;

Description.CheckAndAudit(CustomClass.Key, "Проверка прав доступа к операции");

Al := se.OpenAuditLog;

ALogs := AL.OpenLogons(False);

AOperat := AL.OpenOperations(ALogs.Session);

For i := 0 To 4 Do

Debug.WriteLine("Объект: " + AOperat.ObjectName);

Debug.WriteLine("Операция: " + AOperat.Name);

Debug.WriteLine("Успешно выполнена: " + AOperat.Succeeded.ToString);

Debug.WriteLine("Примечание: " + AOperat.Comment);

Debug.WriteLine("--------");

AOperat.Next;

End For;

End Sub Main;

После выполнения примера будет создан контейнер пользовательских классов, содержащий один класс: «My_Class». Для контейнера будет определен идентификатор строкового ресурса «ID_CUSTOM_EXTENDER» из ресурсов «OBJ_RES». Для класса будет определена одна операция. В репозитории будет создан объект класса «My_Class». Источником большой пиктограммы для объекта будет файл «C:\Icon_large.ico», маленькой - «C:\Icon_small.ico». Для объекта будет проведена проверка прав доступна на операцию класса, результаты будут записаны в протокол доступа. Последние пять записей протокола доступа будут выведены в окно консоли.

См. также:

Примеры | IMetabaseCustomExtender | IMetabaseCustomClass | IMetabaseCustomClassOperation | IMetabaseCustomObject