HeightVisual: IVZNumericVisual;
HeightVisual: Prognoz.Platform.Interop.Visualizators.VZNumericVisual;
Свойство HeightVisual определяет визуализатор для определения высоты дочерних элементов плоского дерева.
Для выполнения примера предполагается наличие в репозитории экспресс-отчета с идентификатором «EXP». Модуль, в котором размещается пример, должен иметь ссылки на системные сборки Express, Metabase и Visualizators. Указанная процедура должна вызываться из точки входа Main.
Преобразуем набор чисел с помощью собственного преобразователя, увеличивающего значение на входе в 5 раз:
// Определим собственный преобразователь
Class MyAdapter: object, IVZDataAdapter
// Значение на входе будем увеличивать в 5 раз
Function GetData(Value: Variant): Variant;
Begin
Return Value * 5
End Function GetData;
End Class MyAdapter;
Sub UserProc;
Var
Metabase: IMetabase; // Метабаза
EaxAnalyzer: IEaxAnalyzer; // Экспресс-отчёт
TreeMap: IVZTreeMap; // Плоское дерево
HeightVisual: IVZNumericVisual; // Визуализатор высоты элементов диаграммы
DataSourceMapping: IVZDataSourceMapping; // Настройки сопоставления данных
DataTransformer: IVZDataAdapter; // Преобразователь данных
Begin
// Получим объект метабазы
Metabase := MetabaseClass.Active;
// Получим объект экспресс-отчёта
EaxAnalyzer := Metabase.ItemById("EXP").Edit As IEaxAnalyzer;
// Получим плоское дерево
TreeMap := EaxAnalyzer.TreeMap.TreeMap;
// Создадим новый объект визуализатора
HeightVisual := New VZNumericVisual.Create;
// Получим настройки сопоставления данных
DataSourceMapping := HeightVisual.NumericMapping;
// Установим тип сопоставления "Преобразователь данных"
DataSourceMapping.MappingType := VisualizatorDataMappingType.DataMappingTransformer;
// Создадим и установим собственный преобразователь данных
DataTransformer := New MyAdapter.Create;
DataSourceMapping.DataTransformer := DataTransformer;
Debug.WriteLine("Преобразование данных:");
Debug.IndentLevel := 1;
Debug.WriteLine("Вход: 1, выход: " +
((DataTransformer.GetData(1)) As Double).ToString);
Debug.WriteLine("Вход: 5, выход: " +
((DataTransformer.GetData(5)) As Double).ToString);
Debug.WriteLine("Вход: 30, выход: " +
((DataTransformer.GetData(30)) As Double).ToString);
// Установим визуализатор для определения высоты элементов дерева
TreeMap.HeightVisual := HeightVisual;
End Sub UserProc;
В результате выполнения примера был создан собственный преобразователь, увеличивающий значение на входе в 5 раз, а в консоли среды разработки были выведены результаты преобразования чисел 1, 5 и 30:
Преобразование данных:
Вход: 1, выход: 5
Вход: 5, выход: 25
Вход: 30, выход: 150
Для выполнения примера предполагается наличие в репозитории экспресс-отчета с идентификатором «EXP». Приведённые ниже примеры вставляются в модуль Program .NET-сборки. В данный модуль должны быть импортированы сборки Express, Metabase и Visualizators из системной сборки Prognoz.Platform.Interop.
Сначала реализуем интерфейс IVZDataAdapter, определив класс MyAdapter с открытым свойством:
// Определим собственный преобразователь
Public Class MyAdapter: object, IVZDataAdapter
Value: String;
// Значение на входе будем увеличивать в 5 раз
Public Function GetData(Value: object): object;
Var
Result: double;
Begin
Result := double.Parse(Value.ToString()) * 5;
Return Result As Object
End Function GetData;
//Переопределяем открытое свойство Id интерфейса IVZDataAdapter
Public Property Id: String
Get
Begin
Return value;
End Get
Set
Begin
Value := "";
End Set
End Property Id;
End Class MyAdapter;
В результате выполнения примеров был создан собственный преобразователь, увеличивающий значение на входе в 5 раз.
Теперь преобразуем набор исходных чисел с помощью данного преобразователя, заменив процедуру Main в модуле Program следующим кодом:
Public Shared Sub Main(Params: StartParams);
Var
Metabase: IMetabase; // Метабаза
EaxAnalyzer: IEaxAnalyzer; // Экспресс-отчёт
TreeMap: IVZTreeMap; // Плоское дерево
HeightVisual: IVZNumericVisual; // Визуализатор высоты элементов диаграммы
DataSourceMapping: IVZDataSourceMapping; // Настройки сопоставления данных
DataTransformer: IVZDataAdapter; // Преобразователь данных
Begin
// Получим объект метабазы
Metabase := Params.Metabase;
// Откроем экспресс-отчёт
EaxAnalyzer := Metabase.ItemById["EXP"].Edit() As IEaxAnalyzer;
// Получим плоское дерево
TreeMap := EaxAnalyzer.TreeMap.TreeMap;
// Создадим новый объект визуализатора
HeightVisual := New VZNumericVisual.Create();
// Получим настройки сопоставления данных
DataSourceMapping := HeightVisual.NumericMapping;
// Установим тип сопоставления "Преобразователь данных"
DataSourceMapping.MappingType := VisualizatorDataMappingType.vdmtDataMappingTransformer;
// Создадим и установим собственный преобразователь данных
DataTransformer := New MyAdapter();
DataSourceMapping.DataTransformer := DataTransformer;
System.Diagnostics.Debug.WriteLine("Преобразование данных:");
System.Diagnostics.Debug.IndentLevel := 1;
System.Diagnostics.Debug.WriteLine("Вход: 1, выход: " +
((DataTransformer.GetData(1)) As Double).ToString());
System.Diagnostics.Debug.WriteLine("Вход: 5, выход: " +
((DataTransformer.GetData(5)) As Double).ToString());
System.Diagnostics.Debug.WriteLine("Вход: 30, выход: " +
((DataTransformer.GetData(30)) As Double).ToString());
// Установим визуализатор для определения высоты элементов дерева
TreeMap.HeightVisual := HeightVisual As VZNumericVisual;
End Sub;
Результат выполнения примера аналогичен результату, полученному после выполнения примера для языка Fore.
См. также: