В большинстве случаев работа прикладного приложения будет построена на взаимодействии с репозиторием и его объектами. Интерфейс IMetabase описывает соединение с репозиторием и имеет набор различных свойств/методов для получения доступа к объектам, менеджеру безопасности и другим блокам платформы.
Для получения доступа к репозиторию в языке Fore используйте статическое свойство MetabaseClass.Active. В Fore.NET доступ к текущему репозиторию можно получить через свойство Metabase у параметра точки входа или через свойство Self.Metabase при работе с Fore.NET формой.
Public Sub WorkInRepository;
Var
Mb: IMetabase;
Begin
Mb := MetabaseClass.Active;
//...
// Дальнейшая работа в текущем репозитории
//...
End Sub WorkInRepository;
При работе в Fore.NET модуле:
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
Mb: IMetabase;
Begin
Mb := Params.Metabase;
//...
// Дальнейшая работа в текущем репозитории
//...
End Sub;
При работе с Fore.NET формой:
Imports Prognoz.Platform.Interop.Metabase;
Public Partial Class TESTForm: Prognoz.Platform.Forms.Net.ForeNetForm
Public Constructor TESTForm();
Begin
InitializeComponent();
End Constructor;
Private Sub button1_Click(sender: System.Object; e: System.EventArgs);
Var
Mb: IMetabase;
Begin
Mb := Self.Metabase;
//...
// Дальнейшая работа в текущем репозитории
//...
End Sub;
End Class;
Если требуется создать новое соединение с репозиторием во время выполнения кода, то используются описания репозиториев из коллекции IMetabaseManager.Definitions менеджера репозиториев. Менеджер репозитория, описываемый интерфейсом IMetabaseManager, можно получить с помощью свойства IMetabaseManagerFactory.Active.
Function ConnectToRepository: IMetabase;
Var
MbManager: IMetabaseManager;
MbDef: IMetabaseDefinition;
Package: ISecurityPackage;
Creds: IPasswordCredentials;
Mb: IMetabase;
Begin
// Менеджер репозитория
MbManager := MetabaseManagerFactory.Active;
// Описание репозитория, к которому осуществляется подключение
MbDef := MbManager.Definitions.FindById("Repository");
If MbDef <> Null Then
Package := MbManager.Packs.FindById(MbDef.SecurityPackage).Package;
//
Учётные данные для подключения
Creds := Package.CreateCredentials(AuthenticationMode.Password) As IPasswordCredentials;
Creds.UserName := "User";
Creds.UserName := "Password";
//
Подключение
Mb := MbDef.Open(Creds);
If Mb <> Null Then
Return Mb;
Else
Return Null;
End If;
Else
Return Null;
End If;
End Function ConnectToRepository;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Metabase;
Function ConnectToRepository(): IMetabase;
Var
MbManagerCls: MetabaseManagerFactory = New MetabaseManagerFactoryClass();
MbManager: MetabaseManager;
MbDef: IMetabaseDefinition;
Package: ISecurityPackage;
Creds: IPasswordCredentials;
Mb: IMetabase;
Begin
// Менеджер репозитория
MbManager := MbManagerCls.Active;
// Описание репозитория, к которому осуществляется подключение
MbDef := MbManager.Definitions.FindById("Repository");
If MbDef <> Null Then
Package := MbManager.Packs.FindById(MbDef.SecurityPackage).Package;
//
Учётные данные для подключения
Creds := Package.CreateCredentials(AuthenticationMode.amPassword) As IPasswordCredentials;
Creds.UserName := "User";
Creds.UserName := "Password";
//
Подключение
Mb := MbDef.Open(Creds, ApplicationMode.amWin, LocaleCodeID.lcidRussian);
If Mb <> Null Then
Return Mb;
Else
Return Null;
End If;
Else
Return Null;
End If;
End Function;
Каждый объект репозитория имеет описание, в котором содержится базовая информация об объекте: наименование, идентификатор, класс объекта, списки дочерних и зависимых объектов и другая информация. Для работы с описанием объекта предназначен интерфейс IMetabaseObjectDescriptor. Получить описание одного или нескольких объектов можно с помощью различных свойств и методов интерфейса IMetabase, IMetabaseObjectDescriptor и других:
Public Sub WorkInRepository;
Var
Mb: IMetabase;
MDesc: IMetabaseObjectDescriptor;
MDescs: IMetabaseObjectDescriptors;
FindInfo: IMetabaseObjectFindInfo;
Begin
Mb := MetabaseClass.Active;
// Получение описания объекта по идентификатору
MDesc := Mb.ItemById("Folder");
// База данных репозитория по умолчанию
MDesc := Mb.SpecialObject(MetabaseSpecialObject.DefaultDatabase);
// Описание дочерних объектов для указанного объекта
MDescs := Mb.ItemById("Folder").Children;
// Поиск объектов по заданным параметрам
FindInfo := Mb.CreateFindInfo;
FindInfo.Text := "Module";
FindInfo.Attribute := FindAttribute.NameOrIdent;
FindInfo.WholeWordsOnly := False;
MDescs := MB.Find(FindInfo);
End Sub WorkInRepository;
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
Mb: IMetabase;
MDesc: IMetabaseObjectDescriptor;
MDescs: IMetabaseObjectDescriptors;
FindInfo: IMetabaseObjectFindInfo;
Begin
Mb := Params.Metabase;
// Получение описания объекта по идентификатору
MDesc := Mb.ItemById["Folder"];
// База данных репозитория по умолчанию
MDesc := Mb.SpecialObject[MetabaseSpecialObject.msoDefaultDatabase];
// Описание дочерних объектов для указанного объекта
MDescs := Mb.ItemById["Folder"].Children;
// Поиск объектов по заданным параметрам
FindInfo := Mb.CreateFindInfo();
FindInfo.Text := "Module";
FindInfo.Attribute := FindAttribute.fnaNameOrIdent;
FindInfo.WholeWordsOnly := False;
MDescs := MB.Find(FindInfo);
End Sub;
Получив описание объекта, можно перейти к настройке его свойств, работать с данными, настраивать права доступа и выполнять другие специфические действия.
См. также: