Доступ к репозиторию и объектам

В большинстве случаев работа прикладного приложения будет построена на взаимодействии с репозиторием и его объектами. Интерфейс 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;

Получив описание объекта, можно перейти к настройке его свойств, работать с данными, настраивать права доступа и выполнять другие специфические действия.

См. также:

Разработка прикладного приложения