Add(Value: Variant): Integer;
Add(Value: object): integer;
Value. Значение подстановки расшифровки.
Метод Add добавляет значение подстановки расшифровки в коллекцию.
Метод возвращает ключ значения подстановки расшифровки, добавленного в коллекцию.
Нумерация элементов коллекции начинается с нуля. Если из коллекции были удалены элементы при помощи метода IEaxDrillSettingsValues.RemoveAt, то новый элемент будет добавлен с наименьшим свободным ключом. Для получения массива содержащихся ключей используйте свойство IEaxDrillSettingsValues.Keys.
Для выполнения примера предполагается наличие в репозитории регламентного отчёта с идентификатором REG_VALUES. Источником данных является куб, в котором содержится календарное измерение. Отчёт содержит один лист, на котором создана аналитическая область данных.
Добавьте ссылки на системные сборки: Dimensions, Express, ForeSystem (для примера на Fore.NET), Metabase, Pivot, Report, System, Tab.
Sub UserProc;
Var
MB: IMetabase;
Rep: IPrxReport;
PivSlice: IEaxDataAreaPivotSlice;
Pivot: IPivot;
HeadSets: IDataAreaHeaderSettingsBase;
Grid: IEaxGrid;
DimSettings: IEaxGridDimensionSettings;
PivotDims: IPivotDimension;
DimModel: IDimensionModel;
DimIndex: IDimIndex;
Attributes: IDimAttributesInstance;
Attribute: IDimAttribute;
Drill: IEaxDrillSettings;
ElementKey : Integer;
Begin
// Получим репозиторий
MB := MetabaseClass.Active;
// Получим регламентный отчет
Rep := MB.ItemById("REG_VALUES").Edit As IPrxReport;
// Получим срез данных в качестве области данных таблицы отчета
PivSlice := Rep.DataArea.Slices.Item(0) As IEaxDataAreaPivotSlice;
// Получим таблицу данных
Pivot := PivSlice.Pivot;
// Получим измерение Calendar
PivotDims := Pivot.Dimensions.Item(1);
// Получим структуру измерения
DimModel := PivotDims.DimInstance.Dimension;
// Получим структуру указанного индекса измерения
DimIndex := DimModel.Indexes.Item(0);
// Получим коллекцию атрибутов измерения
Attributes := PivotDims.DimInstance.Attributes;
// Получим структуру указанного атрибута
Attribute := Attributes.Item(0).Attribute;
// Получим настройки заголовка аналитической области данных
HeadSets := PivotDims As IDataAreaHeaderSettingsBase;
// Включим настройки расшифровки для указанного представления
Grid := (PivSlice As IEaxDataAreaSlice).Views.Item(0) As IEaxGrid;
Grid.ViewSettings.HyperlinkAsText := False;
DimSettings := Grid.ViewSettings.GetViewSettings(HeadSets) As IEaxGridDimensionSettings;
If Not DimSettings.IsDrilled Then
DimSettings.Drilled := TriState.OnOption;
End If;
// Получим настройки расшифровки
Drill := DimSettings.Drill;
// Укажем лист
Drill.SheetKey := Rep.Sheets.Item(0).Key;
// Укажем измерение
Drill.Dimension := PivotDims;
// Установим способ изменения отметки - замена
Drill.Mode := EaxDataDrillMode.Replace;
// Установим индекс для поиска элементов
Drill.DimensionIndex := DimIndex;
// Установим атрибут поиска в индексе
Drill.DimensionAttribute := Attribute;
Drill.DimensionAttributes := "BLOCK_TYPE";
// По щелчку по гиперссылке будет осуществлен переход на указанный сайт
// Ссылка откроется в новой
вкладке браузера
Drill.ActionType := TabHyperlinkActionType.OpenURL;
// Очистим коллекцию от возможных уже хранящихся значений
Drill.Values.Clear;
// Добавим значение подстановки в коллекцию и временно сохраним его ключ
ElementKey := Drill.Values.Add("первый элемент коллекции");
// Выведем этот элемент коллекции в консоль
Debug.WriteLine("Ключ добавленного элемента: " + ElementKey.ToString);
Debug.WriteLine("Значение добавленного элемента: " + Drill.Values.GetAt(ElementKey));
Debug.WriteLine("");
// Добавим ещё одно значение подстановки, но без сохранения ключа
Drill.Values.Add("second element in collection");
// Получим ключ нового элемента
ElementKey := Drill.Values.Keys[Drill.Values.Count - 1];
// Выведем этот элемент коллекции в консоль
Debug.WriteLine("Ключ добавленного элемента: " + ElementKey.ToString);
Debug.WriteLine("Значение добавленного элемента: " + Drill.Values.GetAt(ElementKey));
Debug.WriteLine("");
// Добавим третье значение подстановки, но сразу перед выводом в консоль
Debug.WriteLine("Ключ добавленного элемента: " + Drill.Values.Add("Подстановка номер три").ToString);
Debug.WriteLine("Значение добавленного элемента: " + Drill.Values.GetAt(Drill.Values.Keys[Drill.Values.Count - 1]));
Debug.WriteLine("");
// Выведем список ключей в консоль
Debug.WriteLine("Список ключей:");
For Each ElementKey In Drill.Values.Keys Do
Debug.WriteLine(ElementKey);
End For;
Debug.WriteLine("");
// Удалим второй элемент коллекции
Debug.WriteLine("Успешность удаления существующего элемента: " + Drill.Values.RemoveAt(1).ToString);
// Попробуем удалить его повторно
Debug.WriteLine("Успешность удаления отсутствующего элемента: " + Drill.Values.RemoveAt(1).ToString);
// Выведем в консоль список ключей после удаления элемента
Debug.WriteLine("Список ключей после удаления элемента с ключом 1:");
For Each ElementKey In Drill.Values.Keys Do
Debug.WriteLine(ElementKey);
End For;
Debug.WriteLine("");
// Добавим новый элемент и узнаем его ключ
ElementKey := Drill.Values.Add("Четвёртый (в порядке добавления)");
// Выведем этот элемент коллекции в консоль
Debug.WriteLine("Ключ добавленного элемента: " + ElementKey.ToString);
Debug.WriteLine("Значение добавленного элемента: " + Drill.Values.GetAt(ElementKey));
Debug.WriteLine("");
// Выведем список ключей после добавления элемента
Debug.WriteLine("Список ключей после добавления элемента:");
For Each ElementKey In Drill.Values.Keys Do
Debug.WriteLine(ElementKey);
End For;
Debug.WriteLine("");
// Изменим значение первого элемента
Drill.Values.SetAt(0, "Отредактированная Подстановка");
// Выведем его в консоль:
Debug.WriteLine("Новое значение первого элемента: " + Drill.Values.GetAt(0));
Debug.WriteLine("");
Debug.WriteLine("Список элементов коллекции:");
Debug.WriteLine(Drill.Values.GetAt(0));
Debug.WriteLine(Drill.Values.GetAt(1));
Debug.WriteLine(Drill.Values.GetAt(2));
// Укажем необходимые ключи элементов коллекции в качестве подстановок.
// В браузере будет открыт поисковый запрос со значениями элементов коллекции,
// ключи которых указаны в подстановке
Drill.Action := "http://www.google.com/search?q=&[2]
и &[0]";
Drill.Target := TabHyperlinkTarget.Top;
// Обновим отчёт и сохраним изменения
Rep.Recalc;
(Rep As IMetabaseObject).Save;
End Sub UserProc;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Express;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Pivot;
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Tab;
…
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Rep: IPrxReport;
PivSlice: IEaxDataAreaPivotSlice;
Pivot: IPivot;
HeadSets: IDataAreaHeaderSettingsBase;
Grid: IEaxGrid;
DimSettings: IEaxGridDimensionSettings;
PivotDims: IPivotDimension;
DimModel: IDimensionModel;
DimIndex: IDimIndex;
Attributes: IDimAttributesInstance;
Attribute: IDimAttribute;
Drill: IEaxDrillSettings;
ElementKey : Integer;
KeysArray : Array;
Begin
// Получим репозиторий
MB := Params.Metabase;
// Получим регламентный отчет
Rep := MB.ItemById["REG_VALUES"].Edit() As IPrxReport;
// Получим срез данных в качестве области данных таблицы отчета
PivSlice := Rep.DataArea.Slices.Item[0] As IEaxDataAreaPivotSlice;
// Получим таблицу данных
Pivot := PivSlice.Pivot;
// Получим измерение Calendar
PivotDims := Pivot.Dimensions.Item[1];
// Получим структуру измерения
DimModel := PivotDims.DimInstance.Dimension;
// Получим структуру указанного индекса измерения
DimIndex := DimModel.Indexes.Item[0];
// Получим коллекцию атрибутов измерения
Attributes := PivotDims.DimInstance.Attributes;
// Получим структуру указанного атрибута
Attribute := Attributes.Item[0].Attribute;
// Получим настройки заголовка аналитической области данных
HeadSets := PivotDims As IDataAreaHeaderSettingsBase;
// Включим настройки расшифровки для указанного представления
Grid := (PivSlice As IEaxDataAreaSlice).Views.Item[0] As IEaxGrid;
Grid.ViewSettings.HyperlinkAsText := False;
DimSettings := Grid.ViewSettings.GetViewSettings[HeadSets] As IEaxGridDimensionSettings;
If Not DimSettings.IsDrilled Then
DimSettings.Drilled := TriState.tsOnOption;
End If;
// Получим настройки расшифровки
Drill := DimSettings.Drill;
// Укажем лист
Drill.SheetKey := Rep.Sheets.Item[0].Key;
// Укажем измерение
Drill.Dimension := PivotDims;
// Установим способ изменения отметки - замена
Drill.Mode := EaxDataDrillMode.eddmReplace;
// Установим индекс для поиска элементов
Drill.DimensionIndex := DimIndex;
// Установим атрибут поиска в индексе
Drill.DimensionAttribute := Attribute;
Drill.DimensionAttributes := "BLOCK_TYPE";
// По щелчку по гиперссылке будет осуществлен переход на указанный сайт
// Ссылка откроется в новой
вкладке браузера
Drill.ActionType := TabHyperlinkActionType.thatOpenURL;
// Очистим коллекцию параметров подстановки от возможных уже хранящихся значений
Drill.Values.Clear();
// Добавим значение подстановки в коллекцию и временно сохраним его ключ
ElementKey := Drill.Values.Add("первый элемент коллекции");
// Выведем этот элемент коллекции в консоль
System.Diagnostics.Debug.WriteLine("Ключ добавленного элемента: " + ElementKey.ToString());
System.Diagnostics.Debug.WriteLine("Значение добавленного элемента: " + Drill.Values.GetAt(ElementKey));
System.Diagnostics.Debug.WriteLine("");
// Добавим ещё одно значение подстановки, но без сохранения ключа
Drill.Values.Add("second element in collection");
// Получим массив ключей
KeysArray := Drill.Values.Keys;
// Получим ключ нового элемента
ElementKey := KeysArray[Drill.Values.Count - 1] As Integer;
// Выведем этот элемент коллекции в консоль
System.Diagnostics.Debug.WriteLine("Ключ добавленного элемента: " + ElementKey.ToString());
System.Diagnostics.Debug.WriteLine("Значение добавленного элемента: " + Drill.Values.GetAt(ElementKey));
System.Diagnostics.Debug.WriteLine("");
// Добавим третье значение подстановки, но сразу перед выводом в консоль
System.Diagnostics.Debug.WriteLine("Ключ добавленного элемента: " + Drill.Values.Add("Подстановка номер три").ToString());
// Обновим массив ключей
KeysArray := Drill.Values.Keys;
// Получим ключ нового элемента
ElementKey := KeysArray[Drill.Values.Count - 1] As Integer;
System.Diagnostics.Debug.WriteLine("Значение добавленного элемента: " + Drill.Values.GetAt(ElementKey));
System.Diagnostics.Debug.WriteLine("");
// Выведем список ключей в консоль
System.Diagnostics.Debug.WriteLine("Список ключей:");
For Each ElementKey In Drill.Values.Keys Do
System.Diagnostics.Debug.WriteLine(ElementKey);
End For;
System.Diagnostics.Debug.WriteLine("");
// Удалим второй элемент коллекции
System.Diagnostics.Debug.WriteLine("Успешность удаления существующего элемента: " + Drill.Values.RemoveAt(1).ToString());
// Попробуем удалить его повторно
System.Diagnostics.Debug.WriteLine("Успешность удаления отсутствующего элемента: " + Drill.Values.RemoveAt(1).ToString());
// Выведем в консоль список ключей после удаления элемента
System.Diagnostics.Debug.WriteLine("Список ключей после удаления элемента с ключом 1:");
For Each ElementKey In Drill.Values.Keys Do
System.Diagnostics.Debug.WriteLine(ElementKey);
End For;
System.Diagnostics.Debug.WriteLine("");
// Добавим новый элемент и узнаем его ключ
ElementKey := Drill.Values.Add("Четвёртый (в порядке добавления)");
// Выведем этот элемент коллекции в консоль
System.Diagnostics.Debug.WriteLine("Ключ добавленного элемента: " + ElementKey.ToString());
System.Diagnostics.Debug.WriteLine("Значение добавленного элемента: " + Drill.Values.GetAt(ElementKey));
System.Diagnostics.Debug.WriteLine("");
// Выведем список ключей после добавления элемента
System.Diagnostics.Debug.WriteLine("Список ключей после добавления элемента:");
For Each ElementKey In Drill.Values.Keys Do
System.Diagnostics.Debug.WriteLine(ElementKey);
End For;
System.Diagnostics.Debug.WriteLine("");
// Изменим значение первого элемента
Drill.Values.SetAt(0, "Отредактированная Подстановка");
// Выведем его в консоль:
System.Diagnostics.Debug.WriteLine("Новое значение первого элемента: " + Drill.Values.GetAt(0));
System.Diagnostics.Debug.WriteLine("");
System.Diagnostics.Debug.WriteLine("Список элементов коллекции:");
System.Diagnostics.Debug.WriteLine(Drill.Values.GetAt(0));
System.Diagnostics.Debug.WriteLine(Drill.Values.GetAt(1));
System.Diagnostics.Debug.WriteLine(Drill.Values.GetAt(2));
// Укажем необходимые ключи элементов коллекции в качестве подстановок.
// В браузере будет открыт поисковый запрос со значениями элементов коллекции,
// ключи которых указаны в подстановке
Drill.Action := "http://www.google.com/search?q=&[2]
и &[0]";
Drill.Target := TabHyperlinkTarget.thtTop;
// Обновим отчёт и сохраним изменения
Rep.Recalc();
(Rep As IMetabaseObject).Save();
End Sub;
После выполнения примера:
для указанного регламентного отчёта будет использоваться расшифровка элементов измерения;
при нажатии по элементу измерения будет осуществляться переход по указанной гиперссылке. В гиперссылку в будут подставлены значения элементов коллекции с указанными ключами;
См. также: