Transformation: JSON;
Свойство Transformation определяет трансформации сервиса для работы с экспресс-отчетом.
Значение свойства устанавливается с помощью метода setTransformation, а возвращается с помощью метода getTransformation. Из JSON значение свойства задать нельзя.
Параметры метода setTransformation:
- report: PP.Exp.EaxAnalyzer. Модель экспресс-отчета, которой устанавливаются трансформации;
- transformations: Array of Object. Массив объектов трансформации;
- transformOperation: PP.Exp.TransfOperationType. Тип операции;
- returnTransformations: Boolean. Признак получения всех трансформаций. Если для параметра установлено значение true, то в функцию обратного вызова будут возвращены все трансформации сервиса;
- callback: Function. Функция обратного вызова.
Параметры метода getTransformation:
- report: PP.Exp.EaxAnalyzer. Модель экспресс-отчета, у которой получаются трансформации;
- dimKey: Number. Ключ измерения;
- dimElKey: Number. Ключ элемента измерения;
- transfKey: Number. Ключ трансформации; Если для параметра установлено значение null, то будут возвращены все трансформации сервиса;
- callback: Function. Функция обратного вызова.
Для выполнения примера необходимо наличие на html-странице компонента TransformDialog с наименованием «dialog» (см. «Пример создания компонента TransformDialog»). Должно быть открыто измерение с ключом 109, а в данном измерении должен присутствовать элемент с ключом 225. В качестве этих ключей можно использовать собственные значения.
Добавим новую трансформацию в сервис экспресс-отчета, а затем определим формулу, соответствующую данной трансформации:
// Получаем документ экспресс-отчета
var source = expressBox.getSource();
// Получаем сервис для работы с экспресс-отчетом
var service = expressBox.getSource().getPPService();
var transformation;
var dimKey = 109;
var elemId = 225;
// Добавляем новую трансформацию в сервис экспресс-отчета
transformation = {
enabled: true,
expression: "2010",
vis: true,
elemId: elemId,
dimkey: dimKey,
k: 0,
isFilter: false,
formulaTransform: {
calculationDirection: "Forward",
calculationType: "Serie"
}
}
// Устанавливаем данную трансформацию
service.setTransformation(source, [transformation], PP.Exp.TransfOperationType.Add, false);
// Получаем трансформацию
service.getTransformation(expressBox.getSource(), dimKey, elemId, null, function(sender,args) {
var res = args && args.ResponseText && JSON.parse(args.ResponseText);
var transformers = this._Items = PP.getProperty(res, 'GetEaxMdResult.meta.transformations.its.Item') || [];
transformation = transformers[0];
if(transformation) {
console.log("Формула расчёта для элемента %s: %s", elemId, transformation.expression);
}
});
В результате выполнения примера в консоли браузера была выведена формула расчёта для элемента с ключом 225:
Формула расчёта для элемента 225: 2010
Установим наименование для созданной трансформации и сохраним её настройки:
// Устанавливаем наименование трансформации
transformation.name = "Custom transformation";
if(transformation.isFilter) {
// Обновляем настройки трансформации
service.updateFilterTransformation(source, transformation);
} else {
// Сохраняем настройки трансформации
service.setTransformationState(source, PP.Exp.TransfType.CalcTransformations, PP.Exp.TransfState.Save, dimKey, elemId);
}
// Определяем наименование трансформации
var tKey;
service.getTransformation(expressBox.getSource(), dimKey, elemId, null, function(sender, args) {
var res = args && args.ResponseText && JSON.parse(args.ResponseText);
var transformers = this._Items = PP.getProperty(res, 'GetEaxMdResult.meta.transformations.its.Item') || [];
console.log("Наименование трансформации: " + transformers[0].name);
tKey = transformers[0].k;
});
В результате в консоль было выведено наименование обновленной трансформации:
Наименование трансформации: Custom transformation
Установим новую позицию трансформации в соответствующей коллекции:
// Устанавливаем новую позицию трансформации service.setTransformationPos(source, tKey, 1);
В результате трансформация-фильтр была перемещена в коллекции.
См. также: