IMetabaseUpdate.LocalCopy

Синтаксис Fore

LocalCopy: Boolean;

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

LocalCopy: Boolean;

Описание

Свойство LocalCopy определяет признак копирования данных при локальном копировании объектов репозитория с помощью обновления.

Комментарии

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

Примечание. В «Форсайт. Аналитическая платформа» свойство используется для локального копирования автокубов вместе с данными. В частности используется для копирования контейнеров моделирования и его дочерних объектов, построенных на основе автокубов.

Пример Fore

Для выполнения примера предполагается наличие в репозитории контейнера моделирования с идентификатором «ModelSpace». Также в репозитории создана папка с идентификатором «COPY_OBJECT».

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

Sub UserProc;
Var
    Mb: IMetabase;
    Source, Parent: IMetabaseObjectDescriptor;
    Update: IMetabaseUpdate;
    RootNode: IMetabaseUpdateObjectNode;
Begin
    Mb := MetabaseClass.Active;
    Source := Mb.ItemById("ModelSpace");
    Parent := Mb.ItemById("COPY_OBJECT");
    Update := Mb.CreateUpdate;
    //Признак локальной копии
    Update.LocalCopy := True;
    //Обновление по идентификаторам
    Update.BoundType := MetabaseObjectUpdateBoundType.ById;
    //Добавление в корень обновления контейнера моделирования
    //При выполнении метода AddToUpdate будет произведено
    //рекурсивное добавление всех дочерних объектов каталога моделирования
    AddToUpdate(Source, Update.RootFolder);
    RootNode := Update.RootFolder.Item(0As IMetabaseUpdateObjectNode;
    RootNode.Parent.ObjectId := Parent.Id;
    //Новое наименование и идентификатор для каталога
    RootNode.ObjectId := Source.Id + "_Copy";
    RootNode.ObjectName := "Копия " + Source.Id;
    Update.SaveToFileNF("c:\ModelSpace.pefx");
End Sub UserProc;

Sub AddToUpdate(Object: IMetabaseObjectDescriptor; Folder: IMetabaseUpdateFolderNode);
Var
    Node: IMetabaseUpdateObjectNode;
    NodeAsFolder: IMetabaseUpdateFolderNode;
    Children: IMetabaseObjectDescriptors;
    Child: IMetabaseObjectDescriptor;
Begin
    Node := Folder.Add(MetabaseUpdateNodeType.Object) As IMetabaseUpdateObjectNode;
    Node.Object := Object;
    //Параметры обновления объектов
    Node.UpdatePart := MetabaseObjectUpdatePart.DataMetadata;
    Node.Constraint := MetabaseObjectUpdateConstraint.CreateOnly;
    //Рекурсивное добавление дочерних объектов
    Children := Object.FetchChildren;
    NodeAsFolder := Node As IMetabaseUpdateFolderNode;
    For Each Child In Children Do
        AddToUpdate(Child, NodeAsFolder);
    End For;
End Sub AddToUpdate;

После выполнения примера будет создан новый файл обновления. В обновление будет включен контейнер моделирования со всеми дочерними объектами. Данное обновление будет предназначено для применения в том же репозитории, в котором оно создано. Если произвести обновление, то в папке «COPY_OBJECT» будет создана копия контейнера моделирования. Переменные моделирования будут скопированы вместе с данными.

Пример Fore.NET

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

Public Shared Sub Main(Params: StartParams);
Var
    Mb: IMetabase;
    Source, Parent: IMetabaseObjectDescriptor;
    Update: IMetabaseUpdate;
    RootNode: IMetabaseUpdateObjectNode;
Begin
    Mb := Params.Metabase;
    Source := Mb.ItemById["ModelSpace"];
    Parent := Mb.ItemById["COPY_OBJECT"];
    Update := Mb.CreateUpdate();
    //Признак локальной копии
    Update.LocalCopy := True;
    //Обновление по идентификаторам
    Update.BoundType := MetabaseObjectUpdateBoundType.moubtById;
    //Добавление в корень обновления контейнера моделирования
    //При выполнении метода AddToUpdate будет произведено
    //рекурсивное добавление всех дочерних объектов каталога моделирования
    AddToUpdate(Source, Update.RootFolder);
    RootNode := Update.RootFolder.Item[0As IMetabaseUpdateObjectNode;
    RootNode.Parent.ObjectId := Parent.Id;
    //Новое наименование и идентификатор для каталога
    RootNode.ObjectId := Source.Id + "_Copy";
    RootNode.ObjectName := "Копия " + Source.Id;
    Update.SaveToFileNF("c:\ModelSpace.pefx");
End Sub;

Shared Sub AddToUpdate(Object: IMetabaseObjectDescriptor; Folder: IMetabaseUpdateFolderNode);
Var
    Node: IMetabaseUpdateObjectNode;
    NodeAsFolder: IMetabaseUpdateFolderNode;
    Children: IMetabaseObjectDescriptors;
    Child: IMetabaseObjectDescriptor;
Begin
    Node := Folder.Add(MetabaseUpdateNodeType.untObject) As IMetabaseUpdateObjectNode;
    Node.Object := Object;
    //Параметры обновления объектов
    Node.UpdatePart := MetabaseObjectUpdatePart.moupDataMetadata;
    Node.Constraint := MetabaseObjectUpdateConstraint.moucCreateOnly;
    //Рекурсивное добавление дочерних объектов
    Children := Object.FetchChildren();
    NodeAsFolder := Node As IMetabaseUpdateFolderNode;
    For Each Child In Children Do
        AddToUpdate(Child, NodeAsFolder);
    End For;
End Sub AddToUpdate;

См. также:

IMetabaseUpdate