Прежде чем приступить к написанию кода по работе с репозиторием, сам репозиторий должен быть физически создан на сервере СУБД. Для этого используется приложение «Менеджер репозитория», входящее в состав «Форсайт. Аналитическая платформа».
В ядре Fore для работы с менеджером репозиториев предназначен интерфейс IMetabaseManager. Получить доступ к нему можно, используя статическое свойство Active класса MetabaseManagerFactory. Для того, чтобы платформа знала где расположен репозиторий, с которым будет осуществляться работа, добавьте соответствующее описание в коллекцию Definitions менеджера репозитория:
Sub CreateDefinition;
Var
MbManager: IMetabaseManager;
Definition: IMetabaseDefinition;
PostgreSPLD: IPrimaryPostgresSPLD;
Begin
// Получение доступа к менеджеру репозитория
MbManager := MetabaseManagerFactory.Active;
// Создание нового описания репозитория
Definition := MbManager.Definitions.Add;
// Базовые свойства описания
Definition.Id := "TestDefinition";
Definition.Name := "TestDefinition";
Definition.Authentication := AuthenticationMode.Password;
Definition.DriverId := "POSTGRES";
Definition.SecurityPackage := "STANDARDSECURITYPACKAGE";
Definition.Scope := MetabaseDefinitionScope.LocalMachine;
// Дополнительные настройки, содержащие информацию о сервере СУБД
// Для сервера на базе PostgreSQL приведите значение свойства LogonData к интерфейсу IPrimaryPostgresSPLD
// Для серверов на базе других СУБД также имеются собственные интерфейсы с постфиксом SPLD
PostgreSPLD := Definition.LogonData As IPrimaryPostgresSPLD;
PostgreSPLD.Server := "Server";
PostgreSPLD.Database := "Repository";
// Сохранение описания
Definition.Save;
End Sub CreateDefinition;
Имея описание репозитория, можно осуществить подключение к нему. Для этого предназначены методы IMetabaseDefinition.Open или IMetabaseDefinition.OpenDefault. Функция для подключения может выглядеть следующим образом:
Function ConnectToRepository(DefinitionID: String; User: String; Password: String): IMetabase;
Var
MbManager: IMetabaseManager;
Definition: IMetabaseDefinition;
Package: ISecurityPackage;
Creds: IPasswordCredentials;
Mb: IMetabase;
Begin
// Менеджер репозитория
MbManager := MetabaseManagerFactory.Active;
// Описание репозитория, к которому осуществляется подключение
Definition := MbManager.Definitions.FindById(DefinitionID);
If Definition <> Null Then
Package := MbManager.Packs.FindById(Definition.SecurityPackage).Package;
// Учётные данные для подключения
Creds := Package.CreateCredentials(AuthenticationMode.Password) As IPasswordCredentials;
Creds.UserName := User;
Creds.Password := Password;
// Подключение
Mb := Definition.Open(Creds);
If Mb <> Null Then
Return Mb;
Else
Return Null;
End If;
Else
Return Null;
End If;
End Function ConnectToRepository;
Если подключение к репозиторию осуществляется через визуальный интерфейс платформы и вся дальнейшая работа предполагается в рамках этого репозитория, то доступ к текущему репозиторию из прикладного кода можно получить, используя статическое свойство Active класса MetabaseClass:
Function GetCurrentRepository: IMetabase;
Begin
// Текущий репозиторий
Return MetabaseClass.Active;
End Function GetCurrentRepository;
См. также:
Общие принципы программирования с использованием сборки Metabase