IMetabaseUpdateProgress.OnResolve

Синтаксис

OnResolve(Node: IMetabaseUpdateNode; Resolver: IMetabaseUpdateResolver);

Параметры

Node. Объект обновления.

Resolver. Коллекция зависимостей.

Описание

Метод OnResolve реализует событие, возникающее при наличии зависимостей обновления от объектов репозитория-источника, которые отсутствуют в репозитории назначения.

Пример Fore

Для выполнения примера предполагается наличие в репозитории объекта с идентификатором «CUBEMETAUPD», содержащего настройки копирования базы данных временных рядов. Также в репозитории должна присутствовать база данных временных рядов с идентификатором «FC».

Sub Main;
Var
    MB: IMetabase;
    RubUpdateEx: ICubeMetaUpdateEx;
    Progress: MyUpdateProgress;
Begin
    MB := MetabaseClass.Active;
    RubUpdateEx := MB.ItemById("CUBEMETAUPD").Bind As ICubeMetaUpdateEx;
    Progress := New MyUpdateProgress.Create;
    RubUpdateEx.Apply(Progress);
End Sub Main;
Class MyUpdateProgress: UpdateProgress
    Public Sub OnResolve(Node: IMetabaseUpdateNode; Resolver: IMetabaseUpdateResolver);
    Var
        Unresolv: IMetabaseUpdateUnresolved;
        i: Integer;
        MB: IMetabase;
    Begin
        MB := MetabaseClass.Active;
        Debug.WriteLine("OnResolve");
        For i := 0 To Resolver.Count - 1 Do
            Unresolv := Resolver.Item(i);
            If Unresolv.ClassId = MetabaseObjectClass.KE_CLASS_RUBRICATOR Then
                Debug.WriteLine("Id: " + Unresolv.Id);
                Debug.WriteLine("Name: " + Unresolv.Name);
                Debug.WriteLine("Key: " + Unresolv.Key.ToString);
                Debug.WriteLine("Description: " + Unresolv.Description);
                Debug.WriteLine("KeepResolve: " + Unresolv.KeepResolve.ToString);
                Unresolv.ResolveObject := MB.ItemById("FC");
                Debug.WriteLine("---");
            End If;
        End For;
    End Sub OnResolve;
End Class MyUpdateProgress;

После выполнения примера будет осуществлено копирование базы данных временных рядов по настройкам, содержащимся в объекте «CUBEMETAUPD». Для обработки событий, возникающих во время копирования, используется пользовательский класс «MyUpdateProgress». Если во время копирования была обнаружена зависимость от базы данных временных рядов репозитория-источника, который отсутствует в репозитории назначения, то данная зависимость будет устранена, в окно консоли будет выведена информация о ней.

Пример Fore.NET

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

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

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    RubUpdateEx: ICubeMetaUpdateEx;
    Progress: MyUpdateProgress;
Begin
    MB := Params.Metabase;
    RubUpdateEx := MB.ItemById["CUBEMETAUPD"].Bind() As ICubeMetaUpdateEx;
    Progress := New MyUpdateProgress(MB);
    RubUpdateEx.Apply(Progress);
End Sub;

Class MyUpdateProgress: IMetabaseUpdateProgress
    _MB: IMetabase;

    Public Constructor MyUpdateProgress(MB: IMetabase);
    Begin
        _MB := MB;
    End Constructor;

    Public Sub OnResolve(Node: IMetabaseUpdateNode; Resolver: IMetabaseUpdateResolver);
    Var
        Unresolv: IMetabaseUpdateUnresolved;
        i: Integer;
    Begin
        System.Diagnostics.Debug.WriteLine("OnResolve");
        For i := 0 To Resolver.Count - 1 Do
            Unresolv := Resolver.Item[i];
            If Unresolv.ClassId = (MetabaseObjectClass.KE_CLASS_RUBRICATOR As integer) Then
                System.Diagnostics.Debug.WriteLine("Id: " + Unresolv.Id);
                System.Diagnostics.Debug.WriteLine("Name: " + Unresolv.Name);
                System.Diagnostics.Debug.WriteLine("Key: " + Unresolv.Key.ToString());
                System.Diagnostics.Debug.WriteLine("Description: " + Unresolv.Description);
                System.Diagnostics.Debug.WriteLine("KeepResolve: " + Unresolv.KeepResolve.ToString());
                Unresolv.ResolveObject := _MB.ItemById["FC"];
                System.Diagnostics.Debug.WriteLine("---");
            End If;
        End For;
    End Sub OnResolve;
    
    Public Sub OnAfterApplyCustomObject(Resolver: ICustomObjectResolver);
    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 OnBeforeCustomObjectSaveToPef(Resolver: ICustomObjectResolver);
    Begin
    End Sub;

    Public Sub OnContext(Context: IMetabaseUpdateContext);
    Begin
    End Sub;
    
    Public Sub OnError(Data: IMetabaseUpdateProgressData; Var Ignore: Boolean);
    Begin
    End Sub;

    Public Sub OnNullLinks(Node: IMetabaseUpdateNode; Links: IMetabaseUpdateNullLinks);
    Begin
    End Sub;

    Public Sub OnProgress(Data: IMetabaseUpdateProgressData);
    Begin
    End Sub;

    Public Sub OnSkip(Data: IMetabaseUpdateProgressData);
    Begin
    End Sub;
End Class;

См. также:

IMetabaseUpdateProgress