OnResolve(Node: IMetabaseUpdateNode; Resolver: IMetabaseUpdateResolver);
Node. Объект обновления.
Resolver. Коллекция зависимостей.
Метод OnResolve реализует событие, возникающее при наличии зависимостей обновления от объектов репозитория-источника, которые отсутствуют в репозитории назначения.
Для выполнения примера предполагается наличие в репозитории объекта с идентификатором «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.
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;
См. также: