ICubeMetaUpdateEx.ForceEmptyValues

Синтаксис Fore

ForceEmptyValues: Boolean;

Синтаксис Fore.NET

ForceEmptyValues: boolean;

Описание

Свойство ForceEmptyValues определяет, заменять ли пустыми значениями точки данных, отсутствующие в источнике, но присутствующие в приемнике.

Комментарии

Доступные значения:

Пример Fore

Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «TSDB» (источник данных) и базы данных временных рядов с идентификатором «TSDB_COPY» (приемник данных). Структуры баз данных временных рядов должны совпадать.

Добавьте ссылки на системные сборки: Cubes и Metabase.

Sub UserProc;
Var
    Metabase: IMetabase;
    RubUpdateEx: ICubeMetaUpdateEx;
    Rub: IRubricator;
    Callback: MyUpdateCallback;
Begin
    // Получаем текущую базу данных временных рядов
    Metabase := MetabaseClass.Active;
    // Создаем объект для копирования базы данных временных рядов
    RubUpdateEx := New CubeMetaUpdateClass.Create As ICubeMetaUpdateEx;
    // Задаем копируемую базу данных временных рядов
    Rub := Metabase.ItemById("TSDB").Bind As IRubricator;
    RubUpdateEx.Rubricator := Rub;
    // Указываем, что копирование выполняется с данными и вложенными объектами
    RubUpdateEx.CopyData := True;
    RubUpdateEx.CopyExtraObjects := False;
    // Указываем репозиторий и базу данных временных рядов, в которую будут скопированы данные
    RubUpdateEx.Metabase := Metabase;
    RubUpdateEx.TargetRubricator := Metabase.ItemById("TSDB_COPY").Bind As IRubricator;
    // Указываем, что точки данных, отсутствующие в источнике, но присутствующие в приемнике,
    // будут заменены значением Null;
    RubUpdateEx.ForceEmptyValues := True;
    // Указываем, что копирование будет выполнено за одну транзакцию
    RubUpdateEx.DisableTransactions := True;
    // Указываем, что для обработки транзакций будет использоваться пользовательский объект
    Callback := New MyUpdateCallback.Create;
    RubUpdateEx.UpdateCallback := Callback;
    // Выполняем копирование
    RubUpdateEx.Apply(Null);
End Sub UserProc;

// Класс, реализующий события, которые происходят при транзакциях во время копирования
Class MyUpdateCallback: CubeMetaUpdateCallback
    // Событие, возникающее при открытии транзакции и ревизии
    public Sub OnAfterStartTransaction(Rubricator: IRubricatorInstance; Connection: ISecurityConnection);
    Begin
        Debug.WriteLine("Пользователь " + Connection.UserNameLo + " начал копирование");
    End Sub OnAfterStartTransaction;
    
    // Событие, возникающее перед закрытием транзакции и ревизии
    Public Sub OnBeforeCommit(Rubricator: IRubricatorInstance; Connection: ISecurityConnection);
    Begin
        Debug.WriteLine("Пользователь " + Connection.UserNameLo + " завершил копирование");
    End Sub OnBeforeCommit;

End Class MyUpdateCallback;

В результате выполнения примера данные из базы данных временных рядов «TSDB» будут скопированы за одну транзакцию в базу данных временных рядов «TSDB_COPY». Точки данных, отсутствующие в источнике, но присутствующие в приемнике, будут заменены значением «Null». В окно консоли будет выведена информация о начале и окончании копирования.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Cubes;

Public Shared Sub Main(Params: StartParams);
Var
    Metabase: IMetabase;
    RubUpdateEx: ICubeMetaUpdateEx;
    Rub: IRubricator;
    Callback: MyUpdateCallback;
Begin
    // Получаем текущую базу данных временных рядов
    Metabase := Params.Metabase;
    // Создаем объект для копирования базы данных временных рядов
    RubUpdateEx := New CubeMetaUpdateClass.Create() As ICubeMetaUpdateEx;
    // Задаем копируемую базу данных временных рядов
    Rub := Metabase.ItemById["TSDB"].Bind() As IRubricator;
    RubUpdateEx.Rubricator := Rub;
    // Указываем, что копирование выполняется с данными и вложенными объектами
    RubUpdateEx.CopyData := True;
    RubUpdateEx.CopyExtraObjects := False;
    // Указываем репозиторий и базу данных временных рядов, в которую будут скопированы данные
    RubUpdateEx.Metabase := Metabase;
    RubUpdateEx.TargetRubricator := Metabase.ItemById["TSDB_COPY"].Bind() As IRubricator;
    // Указываем, что точки данных, отсутствующие в источнике, но присутствующие в приемнике,
    // будут заменены значением Null;
    RubUpdateEx.ForceEmptyValues := True;
    // Указываем, что копирование будет выполнено за одну транзакцию
    RubUpdateEx.DisableTransactions := True;
    // Указываем, что для обработки транзакций будет использоваться пользовательский объект
    Callback := New MyUpdateCallback.Create();
    RubUpdateEx.UpdateCallback := Callback;
    // Выполняем копирование
    RubUpdateEx.Apply(Null);
End Sub;

// Класс, реализующий события, которые происходят при транзакциях во время копирования
Public Class MyUpdateCallback: ICubeMetaUpdateCallback
    // Событие, возникающее при открытии транзакции и ревизии
    Public Sub OnAfterStartTransaction(Rubricator: IRubricatorInstance; Connection: ISecurityConnection);
    Begin
        System.Diagnostics.Debug.WriteLine("Пользователь " + Connection.UserNameLo + " начал копирование");
    End Sub OnAfterStartTransaction;
    
    // Событие, возникающее перед закрытием транзакции и ревизии
    Public Sub OnBeforeCommit(Rubricator: IRubricatorInstance; Connection: ISecurityConnection);
    Begin
        System.Diagnostics.Debug.WriteLine("Пользователь " + Connection.UserNameLo + " завершил копирование");
    End Sub OnBeforeCommit;

End Class MyUpdateCallback;

См. также:

ICubeMetaUpdateEx