Для выполнения примера необходимо создать html-страницу и выполнить следующие действия:
1. Добавить ссылки на следующие css-файлы: PP.css, PP.Express.css.
Также нужно добавить ссылки на js-файлы: PP.js, PP.Metabase.js, PP.Express.js и resources.ru.js.
2. Затем в теге <head> дополнительно задаётся стиль для элементов:
<style type="text/css">
body, html {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
3. Далее в теге <head> необходимо добавить скрипт, создающий контейнер для ленты инструментов экспресс-отчета EaxRibbon:
var metabase, eaxAnalyzer, eaxMbService, settings, ribbon, waiter, saveAsD, openD, eaxGrid;
var IMAGE_PATH = "../Img/";
function createView(source, service) {
// Создаем компонент Waiter
eaxGrid = new PP.Exp.Ui.EaxGrid({
ParentNode: document.body,
Source: eaxAnalyzer,
Service: eaxMbService,
Height: 300,
Width: 300,
ImagePath: IMAGE_PATH
});
var chartCategory, tableCategory, dataCategory, mapCategory, titleCategory;
// Создаём контейнер для ленты инструментов экспресс-отчета
ribbon = new PP.Exp.Ui.EaxRibbon({
Source: eaxAnalyzer, // Устанавливаем источник данных для ленты инструментов
Enabled: true, // Делаем ленту инструментов доступной
ImagePath: IMAGE_PATH,
MainButton: {
Content: "dataCategory"
},
ParentNode: document.body,
// Задаем вкладки для ленты инструментов
Categories: [
// Создаем вкладку «Диаграмма»
chartCategory = new PP.Exp.Ui.ChartCategory({
Source: eaxAnalyzer, // Задаем источник данных для вкладки
Service: eaxMbService, // Задаём сервис
// Указываем обработчик события DataChanged
MatadataChanged: function (sender, args) {
eaxGrid.refresh(args); // Обновим таблицу
},
// Указываем обработчик события ControlChanged
ControlChanged: function (sender, args) {
eaxGrid.refresh(args); // Обновим таблицу
},
// Устанавливаем обработчик для события PropertyChanged
PropertyChanged: function (sender, args) {
alert("На вкладке «Диаграмма» изменено свойство");
},
// Устанавливаем обработчик для события RequestMetadata
RequestMetadata: function (sender, args) {
alert("На вкладке «Диаграмма» выполнен запрос метаданных");
},
ImagePath: IMAGE_PATH
}),
// Создаем вкладку «Данные»
dataCategory = new PP.Exp.Ui.DataCategory({
Source: eaxAnalyzer, // Задаем источник данных для вкладки
ImagePath: IMAGE_PATH,
Service: eaxMbService,
// Указываем обработчик события DataChanged
MetadataChanged: function (sender, args) {
eaxGrid.refresh(args); // Обновим таблицу
},
// Устанавливаем обработчик для события PropertyChanged
PropertyChanged: function (sender, args) {
alert("На вкладке «Данные» изменено свойство");
},
// Устанавливаем обработчик для события RequestMetadata
RequestMetadata: function (sender, args) {
alert("На вкладке «Данные» выполнен запрос метаданных");
}
}),
// Создаем вкладку «Карта»
mapCategory = new PP.Exp.Ui.MapCategory({
Source: eaxAnalyzer, // Задаем источник данных для вкладки
ImagePath: IMAGE_PATH,
Service: eaxMbService,
// Указываем обработчик события DataChanged
MetadataChanged: function (sender, args) {
eaxGrid.refresh(args); // Обновим таблицу
},
// Устанавливаем обработчик для события PropertyChanged
PropertyChanged: function (sender, args) {
alert("На вкладке «Карта» изменено свойство");
},
// Устанавливаем обработчик для события RequestMetadata
RequestMetadata: function (sender, args) {
alert("На вкладке «Карта» выполнен запрос метаданных");
}
}),
// Создаем вкладку «Таблица»
tableCategory = new PP.Exp.Ui.TableCategory({
Source: eaxAnalyzer, // Задаем источник данных для вкладки
ImagePath: IMAGE_PATH,
DataView: eaxGrid,
Service: eaxMbService,
// Указываем обработчик события DataChanged
MetadataChanged: function (sender, args) {
eaxGrid.refresh(args); // Обновим таблицу
},
// Устанавливаем обработчик для события PropertyChanged
PropertyChanged: function (sender, args) {
alert("На вкладке «Таблица» изменено свойство");
},
// Устанавливаем обработчик для события RequestMetadata
RequestMetadata: function (sender, args) {
alert("На вкладке «Таблица» выполнен запрос метаданных");
}
}),
// Создаем вкладку «Заголовок»
titleCategory = new PP.Exp.Ui.TitleCategory({
Source: eaxAnalyzer, // Задаем источник данных для вкладки
ImagePath: IMAGE_PATH,
Service: eaxMbService,
// Указываем обработчик события DataChanged
MetadataChanged: function (sender, args) {
eaxGrid.refresh(args); // Обновим таблицу
},
// Устанавливаем обработчик для события PropertyChanged
PropertyChanged: function (sender, args) {
alert("На вкладке «Заголовок» изменено свойство");
},
// Устанавливаем обработчик для события RequestMetadata
RequestMetadata: function (sender, args) {
alert("На вкладке «Заголовок» выполнен запрос метаданных");
}
})],
Width: 600,
Height: 600,
// Устанавливаем обработчик для события Collapsed
Collapsed: function (sender, args) {
alert("Сворачивание");
},
// Устанавливаем обработчик для события Expanded
Expanded: function (sender, args) {
alert("Раскрытие");
},
// Устанавливаем обработчик для события Printing
Printing: function (sender, args) {
alert("Печать");
},
// Устанавливаем обработчик для события SaveAs
SaveAs: function (sender, args) {
alert("Выбран пункт меню «Сохранить как...»");
},
// Устанавливаем обработчик для события DataChanged
DataChanged: function (sender, args) {
// Обновим таблицу
eaxGrid.refresh(args);
},
// Устанавливаем обработчик события DiscussMenuOpened
DiscussMenuOpened: function (sender, args) {
alert("Открыто меню «Поделиться»");
},
// Устанавливаем обработчик события Discuss
Discuss: function (sender, args) {
alert("Выбран пункт меню «Поделитьсяt»");
},
// Устанавливаем обработчик для события PropertyChanged
PropertyChanged: function (sender, args) {
alert("Свойство изменено");
},
// Устанавливаем обработчик для события NewReport
NewReport: function (sender, args) {
alert("Выбран пункт меню «Новый отчёт»");
},
// Устанавливаем обработчик для события Exported
Exported: function (sender, args) {
alert("Выбран пункт меню «Экспорт»");
},
// Устанавливаем обработчик для события Closed
Closed: function (sender, args) {
alert("Выбран пункт меню «Закрыть»");
},
// Устанавливаем обработчик для события Exited
Exited: function (sender, args) {
alert("Выбран пункт меню «Выход»");
},
// Устанавливаем обработчик для события Opened
Opened: function (sender, args) {
alert("Выбран пункт меню «Открыть»");
},
// Устанавливаем обработчик для события Saved
Saved: function (sender, args) {
alert("Выбран пункт меню «Сохранить»");
},
// Устанавливаем обработчик для события RequestMetadata
RequestMetadata: function (sender, args) {
alert("Запрос метаданных");
},
// Устанавливаем обработчик для события CreatedCopy
CreatedCopy: function (sender, args) {
console.log("Выбран пункт меню «Сохранить как...»");
},
// Устанавливаем обработчик для события CreatedReport
CreatedReport: function (sender, args) {
console.log("Выбран пункт меню «Сохранить»");
}
});
// Обновляем все элементы ленты инструментов
ribbon.refreshAll();
// Каждой вкладке задаем представление таблицы
chartCategory.bindView(eaxGrid);
mapCategory.bindView(eaxGrid);
titleCategory.bindView(eaxGrid);
tableCategory.bindView(eaxGrid);
dataCategory.bindView(eaxGrid);
}
function Ready() {
waiter = new PP.Ui.Waiter();
// Создаём соединение с репозиторием
metabase = new PP.Mb.Metabase({
ExportUrl: "PPService.axd?action=export",
ImportUrl: "PPService.axd?action=import",
PPServiceUrl: "PPService.axd?action=proxy",
Id: "WAREHOUSE",
UserCreds: {
UserName: "user",
Password: "password" },
StartRequest: function () {
// Покажем компонент Waiter
waiter.show();
},
EndRequest: function () {
// Скроем компонент Waiter
waiter.hide();
},
Error: function (sender, args) {
// Выводим сообщение об ошибке
alert(args.ResponseText);
}
});
// Открываем соединение с репозиторием
metabase.open();
// Создаём сервис
eaxMbService = new PP.Exp.EaxMdService({ Metabase: metabase });
// Открываем документ с ключом 109
eaxAnalyzer = eaxMbService.edit(109);
//Создаём представление
createView(eaxAnalyzer, eaxMbService);
};
window.onerror = function () {
// В случае ошибки скрываем компонент Waiter
if (waiter)
waiter.hide();
};
4. Тег <body> и его содержимое должны выглядеть следующим образом:
<body onselectstart="return false" class="PPNoSelect" onload="Ready()"> </body>
После выполнения примера на html-странице будут размещены компоненты EaxGrid и EaxRibbon:

См. также: