IMetabaseUpdate.SaveToFileNFEx

Синтаксис

SaveToFileNFEx(FileName: String; Progress: IMetabaseUpdateProgress);

Параметры

FileName. Полный путь и имя файла, в который будет сохранено обновление.

Progress. Объект, реализующий события, возникающие при формирования обновления.

Описание

Метод SaveToFileNFEx сохраняет обновление в файл с расширением *.pefx с возможностью отслеживания событий.

Комментарии

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

Пример

Для выполнения примера в репозитории предполагается наличие алгоритма расчёта показателей с идентификатором ALGO.

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

Sub UserProc;
Var
    MB: IMetabase;
    Update: IMetabaseUpdate;
    UFN: IMetabaseUpdateFolderNode;
    UON: IMetabaseUpdateObjectNode;
    Progress: IMetabaseUpdateProgress;
Begin
    MB := MetabaseClass.Active;
    // Создание обновления
    Update := Mb.CreateUpdate;
    UFN := Update.RootFolder;
    // Добавление в обновления объекта
    UON := UFN.Add(MetabaseUpdateNodeType.DataObject) As IMetabaseUpdateObjectNode;
    UON.Object := MB.ItemById("ALGO");
    // Создаём объект для обработки событий
    Progress := New MyUpdateProgress.Create;
    // Сохранение обновления в файл
    Update.SaveToFileNFEx("D:\Work\Algo.pefx", Progress);
End Sub UserProc;

// Класс, реализующий события, которые происходят во время формирования обновления
Class MyUpdateProgress: UpdateProgress
    // Событие, возникающее до сохранения пользовательских объектов в файл
    Sub OnBeforeCustomObjectSaveToPef(Resolver: ICustomObjectResolver);
    Var
        Refs: IMetabaseCustomObjectReferences;
        Ref: IMetabaseCustomObjectReference;
        XmlVar: Variant;
        XmlDoc: IXmlDomDocument;
        i: Integer;
    Begin
        // Выводим базовую информацию о пользовательском объекте
        Debug.WriteLine("Класс объекта: " + Resolver.ClassId.ToString);
        Debug.WriteLine("Наименование: " + Resolver.Name);
        Debug.WriteLine("Описание: " + Resolver.Description);
        Debug.WriteLine("Идентификатор: " + Resolver.Id);
        Debug.WriteLine("Ключ: " + Resolver.Key.ToString);
        // Выводим информацию о зависимостях объекта
        Refs := Resolver.References;
        If Refs.Count > 0 Then
            Debug.WriteLine("Зависимости объекта:");
            Debug.Indent;
            For i := 0 To Refs.Count - 1 Do
                Ref := Refs.Item(i);
                Debug.WriteLine("Объект: " + Ref.Object.Name);
                If Not IsNull(Ref.Owner) Then
                    Debug.WriteLine("Владелец: " + Ref.Owner.Name)
                End If;
            End For;
            Debug.Unindent;
        End If;
        // Читаем данные из объекта в формат XML
        Resolver.ReadToXML(XmlVar);
        // Представляем считанные данные в виде документа
        XmlDoc := XmlVar As IXmlDomDocument;
        // Если документ содержит данные, то выводим их в окно консоли
        If (XmlDoc <> NullThen
            Debug.WriteLine("Данные объекта:");
            Debug.WriteLine(XmlDoc.xml);
        End If;
    End Sub OnBeforeCustomObjectSaveToPef;
End Class MyUpdateProgress;

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

См. также:

IMetabaseUpdate