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 <> Null) Then
Debug.WriteLine("Данные объекта:");
Debug.WriteLine(XmlDoc.xml);
End If;
End Sub OnBeforeCustomObjectSaveToPef;
End Class MyUpdateProgress;
При выполнении примера будет создано новое обновление, в него будет добавлен алгоритм расчёта. При сохранении обновления в файл в консоль среды разработки будет выведена базовая информация об объекте, информация о его зависимостях и данные объекта.
См. также: