AutoPeriod: IRubricatorAutoPeriod;
AutoPeriod: Prognoz.Platform.Interop.Cubes.IRubricatorAutoPeriod;
Свойство AutoPeriod возвращает параметры периода копирования данных временных рядов.
По умолчанию начало/окончание периода копирования совпадает с началом/окончанием данных.
Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «TSDB», базы данных с идентификатором «DB_MSSQL» и папки с идентификатором «TSDB_COPY_FOLDER».
Добавьте ссылки на системные сборки: Cubes, Db, Metabase.
Sub UserProc;
Var
mb: IMetabase;
RubUpdateEx: ICubeMetaUpdateEx;
Rub: IRubricator;
Progress: IMetabaseUpdateProgress;
CrInfo: IMetabaseObjectCreateInfo;
ExpPeriod: IRubricatorAutoPeriod;
ExpPeriodDate: IRubricatorAutoPeriodDate;
Begin
// Получаем текущий репозиторий
mb := MetabaseClass.Active;
// Создаем объект копирования
базы данных временных рядов
RubUpdateEx := New CubeMetaUpdateClass.Create As ICubeMetaUpdateEx;
// Получаем базу данных временных рядов
Rub := mb.ItemById("TSDB").Bind As IRubricator;
// Указываем копируемую
базу данных временных рядов
RubUpdateEx.Rubricator := Rub;
// Указываем, что копирование выполняется в текущий репозиторий
RubUpdateEx.Metabase := Mb;
// Получаем параметры создаваемой базы данных временных рядов
CrInfo := RubUpdateEx.CreateInfo;
// Указываем папку, в которой она будет создана
CrInfo.Parent := mb.ItemById("TSDB_COPY_FOLDER");
// Указываем наименование и идентификатор новой базы данных временных рядов
CrInfo.Id := Mb.GenerateId("TSDB_COPY");
CrInfo.Name := "База данных временных рядов
(копия)";
// Указываем периоды копирования временных рядов
ExpPeriod := RubUpdateEx.AutoPeriod;
// Задаем начало периода: начало данных, смещенное на одну точку вперед
ExpPeriodDate := ExpPeriod.Start;
ExpPeriodDate.AutoDateType := RubricatorAutoDateType.DateStart;
ExpPeriodDate.Offset := 1;
// Задаем окончание периода: окончание данных, смещенное на одну точку назад
ExpPeriodDate := ExpPeriod.End_;
ExpPeriodDate.AutoDateType := RubricatorAutoDateType.DateEnd;
ExpPeriodDate.Offset := -1;
// Указываем репозиторий НСИ, который будет использоваться
// скопированной базой данных временных рядов
RubUpdateEx.RdsDatabase := Rub.Database;
// Указываем объект
репозитория - База данных, настройки которой будут использоваться
// скопированной базой данных временных рядов
RubUpdateEx.Database := MB.ItemById("DB_MSSQL").Bind As IDatabase;
// Указываем, что будем копировать данные
RubUpdateEx.CopyData := True;
// Указываем, что будем копировать вложенные объекты базы данных временных рядов
RubUpdateEx.CopyExtraObjects := True;
// Указываем, что копирование и сопоставление объектов будут выполняться
// по уникальным индексам, используемым для формирования отметки
RubUpdateEx.RemapBySelectionIndex := True;
// Задаем название ревизии в скопированной базе данных временных рядов
RubUpdateEx.NewRevisionName := "Копирование всей базы 'TSDB'";
// Создаем объект, реализующий события, которые происходят во время копирования
Progress := New MyUpdateProgress.Create;
// Выполняем копирование
RubUpdateEx.Apply(Progress);
End Sub UserProc;
// Класс, реализующий события, которые происходят во время копирования
Class MyUpdateProgress: UpdateProgress
// Событие, возникающее при ошибках копирования
Sub OnError(Data: IMetabaseUpdateProgressData; Var Ignore: Boolean);
Begin
Debug.WriteLine("Ошибка копирования объекта обновления '" + Data.Node.Label + "'");
Debug.WriteLine("Текст ошибки: " + Data.Error.Message);
If Data.Object <> Null Then
Debug.WriteLine("Источник ошибки: " + Data.Object.Id);
Debug.WriteLine("Ключ объекта: " + Data.Object.Key.ToString);
End If;
Debug.WriteLine("Объект будет пропущен");
Ignore := True;
End Sub OnError;
End Class MyUpdateProgress;
После выполнения примера в папке «TSDB_COPY_FOLDER» будет создана копия базы данных временных рядов «TSDB».
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Db;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
RubUpdateEx: ICubeMetaUpdateEx;
Rub: IRubricator;
Progress: IMetabaseUpdateProgress;
CrInfo: IMetabaseObjectCreateInfo;
ExpPeriod: IRubricatorAutoPeriod;
ExpPeriodDate: IRubricatorAutoPeriodDate;
Begin
// Получаем текущий репозиторий
mb := Params.Metabase;
// Создаем объект копирования
базы данных временных рядов
RubUpdateEx := New CubeMetaUpdateClass.Create() As ICubeMetaUpdateEx;
// Получаем базу данных временных рядов
Rub := mb.ItemById["TSDB"].Bind() As IRubricator;
// Указываем копируемую базу данных временных рядов
RubUpdateEx.Rubricator := Rub;
// Указываем, что копирование
выполняется в текущий репозиторий
RubUpdateEx.Metabase := Mb;
// Получаем параметры создаваемой базы данных временных рядов
CrInfo := RubUpdateEx.CreateInfo;
// Указываем папку, в которой она будет создана
CrInfo.Parent := mb.ItemById["TSDB_COPY_FOLDER"];
// Указываем наименование и идентификатор новой базы данных временных рядов
CrInfo.Id := Mb.GenerateId("TSDB_COPY", 0);
CrInfo.Name := "База данных временных рядов
(копия)";
// Указываем периоды копирования
временных рядов
ExpPeriod := RubUpdateEx.AutoPeriod;
// Задаем начало периода: начало данных, смещенное на одну точку вперед
ExpPeriodDate := ExpPeriod.Start;
ExpPeriodDate.AutoDateType := RubricatorAutoDateType.radtDateStart;
ExpPeriodDate.Offset := 1;
// Задаем окончание периода: окончание данных, смещенное на одну точку назад
ExpPeriodDate := ExpPeriod.@End;
ExpPeriodDate.AutoDateType := RubricatorAutoDateType.radtDateEnd;
ExpPeriodDate.Offset := -1;
// Указываем репозиторий НСИ, который будет использоваться
// скопированной базой данных временных рядов
RubUpdateEx.RdsDatabase := Rub.Database;
// Указываем объект
репозитория - База данных, настройки которой будут использоваться
// скопированной базой данных временных рядов
RubUpdateEx.Database := MB.ItemById["DB_MSSQL"].Bind() As IDatabase;
// Указываем, что будем копировать
данные
RubUpdateEx.CopyData := True;
// Указываем, что будем копировать
вложенные объекты базы данных временных рядов
RubUpdateEx.CopyExtraObjects := True;
// Указываем, что копирование и сопоставление объектов будут выполняться
// по уникальным индексам, используемым для формирования отметки
RubUpdateEx.RemapBySelectionIndex := True;
// Задаем название ревизии в скопированной базе данных временных рядов
RubUpdateEx.NewRevisionName := "Копирование всей базы 'TSDB'";
// Создаем объект, реализующий события, которые происходят во время копирования
Progress := New MyUpdateProgress.Create();
// Выполняем копирование
RubUpdateEx.Apply(Progress);
End Sub;
…
// Класс, реализующий события, которые происходят во время копирования
Public Class MyUpdateProgress: IMetabaseUpdateProgress
// Событие, возникающее при ошибках копирования
Public Sub OnError(Data: IMetabaseUpdateProgressData; Var Ignore: Boolean);
Begin
System.Diagnostics.Debug.WriteLine("Ошибка копирования объекта обновления '" + Data.Node.Label + "'");
System.Diagnostics.Debug.WriteLine("Текст ошибки: " + Data.Error.Message);
If Data.Object <> Null Then
System.Diagnostics.Debug.WriteLine("Источник ошибки: " + Data.Object.Id);
System.Diagnostics.Debug.WriteLine("Ключ объекта: " + Data.Object.Key.ToString());
End If;
System.Diagnostics.Debug.WriteLine("Объект будет пропущен");
Ignore := True;
End Sub;
Public Sub OnContext(Context: IMetabaseUpdateContext);
Begin
End Sub;
Public Sub OnProgress(Data: IMetabaseUpdateProgressData);
Begin
End Sub;
Public Sub OnAskConstraintsHandling(Node: IMetabaseUpdateNode; Details: String; Var Handling: UpdateDataConstraintsHandlingType);
Begin
End Sub;
Public Sub OnAskReflectRights(Var Cancel: Boolean);
Begin
End Sub;
Public Sub OnResolve(Node: IMetabaseUpdateNode; Resolver: IMetabaseUpdateResolver);
Begin
End Sub;
Public Sub OnSkip(Data: IMetabaseUpdateProgressData);
Begin
End Sub;
Public Sub OnNullLinks(Node: IMetabaseUpdateNode; Links: IMetabaseUpdateNullLinks);
Begin
End Sub;
Public Sub OnBeforeCustomObjectSaveToPef(Resolver: ICustomObjectResolver);
Begin
End Sub;
Public Sub OnAfterApplyCustomObject(Resolver: ICustomObjectResolver);
Begin
End Sub;
End Class MyUpdateProgress;
См. также: