IMetabaseUpdate.PrepareC

Синтаксис Fore

PrepareC(Context: IMetabaseUpdateContext);

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

PrepareC(Context: Prognoz.Platform.Interop.Metabase.IMetabaseUpdateContext);

Параметры

Context. Дополнительные настройки объекта обновления.

Описание

Метод PrepareC проверяет корректность обновления с учетом дополнительных настроек.

Комментарии

При выполнении метода осуществляется проверка соответствия параметров объектов в обновлении и соответствующих объектов в репозитории. Для объектов в обновлении будет выставлено свойство ApplyState.

Примечание. Свойство ApplyState выставляется только для тех объектов обновления, которые соответствуют объектам репозитория. Метод PrepareC автоматически вызывается после вызова метода ApplyEx, перед непосредственным обновлением объектов. Для проверки готовности объектов к обновлению можно использовать пользовательское событие OnBeforeApplyUpdate.

Если параметру Context передать значение Null, то проверка произойдет без учета дополнительных настроек.

Пример Fore

Для выполнения примера предполагается наличие файла обновления «C:\Update.pefx» и наличие в репозитории объекта с идентификатором «BD2». Добавьте ссылку на системную сборку Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    MU: IMetabaseUpdate;
    Root: IMetabaseUpdateFolderNode;
    Node: IMetabaseUpdateNode;
    ObjectNode: IMetabaseUpdateObjectNode;
    i: Integer;
    State: IMetabaseUpdateObjectApplyState;
    UpdateCxt: IMetabaseUpdateContext;
    NewObject: IMetabaseObject;
Begin
    MB := MetabaseClass.Active;
    MU := MB.CreateUpdate;
    MU.LoadFromFileNF("C:\Update.pefx");
    UpdateCxt := MU.CreateUpdateContext;
    NewObject := MB.ItemById("BD2").Bind As IMetabaseObject;
    UpdateCxt.RegisterIdChange(NewObject.ClassId, "BD1""BD2", NewObject);
    MU.PrepareC(UpdateCxt);
    Root := MU.RootFolder;
    For i := 0 To Root.Count - 1 Do
        Node := Root.Item(i);
        If Node.NodeType = MetabaseUpdateNodeType.Object Then
            ObjectNode := Node As IMetabaseUpdateObjectNode;
            State := ObjectNode.ApplyState;
            Select Case State.State
                Case MetabaseUpdateObjectApplyState.CreateNew:
                    Debug.WriteLine("Объект обновления: " + ObjectNode.ObjectId + "; Состояние: Создание нового");
                Case MetabaseUpdateObjectApplyState.EditExisting:
                    Debug.WriteLine("Объект обновления: " + ObjectNode.ObjectId + "; Состояние: Обновление существующего.");
                Case MetabaseUpdateObjectApplyState.Conflict Or MetabaseUpdateObjectApplyState.ConflictKey:
                    Debug.WriteLine("Объект обновления: " + ObjectNode.ObjectId + "; Состояние: Конфликт. Существует объект с таким же ключом.");
                Case MetabaseUpdateObjectApplyState.Conflict Or MetabaseUpdateObjectApplyState.ConflictId:
                    Debug.WriteLine("Объект обновления: " + ObjectNode.ObjectId + "; Состояние: Конфликт. Существует объект с таким же идентификатором.");
                Case MetabaseUpdateObjectApplyState.Conflict Or MetabaseUpdateObjectApplyState.ConflictClassId:
                    Debug.WriteLine("Объект обновления: " + ObjectNode.ObjectId + "; Состояние: Конфликт.Существующий объект имеет другой класс.");
                Case MetabaseUpdateObjectApplyState.Conflict Or MetabaseUpdateObjectApplyState.ConflictObjectNotFound:
                    Debug.WriteLine("Объект обновления: " + ObjectNode.ObjectId + "; Состояние: Конфликт. Не найден объект репозитория, для которого установлен тип обновления Только обновление.");
                Case MetabaseUpdateObjectApplyState.Conflict Or MetabaseUpdateObjectApplyState.ConflictMissingMetadata:
                    Debug.WriteLine("Объект обновления: " + ObjectNode.ObjectId + "; Состояние: Конфликт. В обновлении отсутствуют метаданные для создания объекта.");
            End Select;
        End If;
    End For;
End Sub UserProc;

После выполнения примера будет осуществлена загрузка и проверка файла обновления «Update.pefx» с учетом возможного переопределения ссылки обновляемого объекта на объект репозитория-приемника с идентификатором "BD2". Для объектов, содержащихся в корневой папке обновления, и соответствующих объектов репозитория в консоль среды разработки будет выведено состояние готовности к обновлению.

См. также:

IMetabaseUpdate | IMetabaseUpdate.Prepare