Открыть меню
Платформа Эра. Документация
Toggle preferences menu
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Разработка отчётов: различия между версиями

Материал из Платформа Эра. Документации
 
(не показаны 3 промежуточные версии этого же участника)
Строка 81: Строка 81:
|allowSearchPanel
|allowSearchPanel
|True
|True
|Включает отображение поля поиска в панели инструментов
|Включает отображение поля поиска в панели инструментов. Поиск "из коробки" работает только при использовании класса как источника данных. При использовании сервиса необходимо на стороне метода получить из Invocation параметры поиска и отфильтровать содержимое выдачи в соответствии с ними, т.е. поиск остаётся на усмотрение разработчика.
|-
|-
|allowRowNumbers
|allowRowNumbers
Строка 176: Строка 176:
</syntaxhighlight>
</syntaxhighlight>


=== Пример настроенного контрола ===
[[Файл:Пример контрола с получением данных из сервиса.png|центр|1051x1051px|безрамки]]





Текущая версия от 18:40, 13 марта 2025

Предыдущая статья курса: Работа с универсальным источником данных

Общая информация

В качестве отчётов, в рамках приложений на платформе Эра, выступают особым образом настроеные контролы. В платформе изначально предусмотрен достаточно исчерпывающий перечень видов контролов, которые закрывают подавляющее большинство задач по разработке отчёта. Полный список базовых видов контролов можно посмотреть в статье этого курса, посвещенной контролам.

Общий алгоритм разработки отчёта следующий:

  1. Определение источников данных для отчёта. Это могут быть данные объектов, перечислений, информация из внешней системы, константы и т.д.
  2. Определение логики построения отчёта и выбор способа сбора данных. На этом этапе необходимо понять, как из исходных данных собрать целевой отчёт и какой из инструментов платформы подойдет для этого лучше. Выбранный источник данных должен быть настроен в соответствующем контроле с помощью универсального источника данных, рассмотренного в предыдущей статье. Возможные варианты:
    1. Получение данных классов напрямую из хранилища. Фильтрация, группировка и преобразование данных выполняется на уровне dataSource
    2. Разработка сервиса, подготавливающего данные для отчёта
    3. Использование внешнего источника данных (URL)
  3. Если на шаге 2 был выбран сервис, то данный сервис необходимо разработать и протестировать
  4. Создать контрол необходимого для отчёта типа. Выбрать controlMode = Custom. Настроить у контрола dataSource с необходимым способом получения данных, фильтрами и обработками. Удобнее всего начать с контрола с типом table, даже если целевой отчёт не должен быть таблицей. В таблице удобно протестировать создаваемый отчет, его фильтры и обработки. Уже после тестирования можно создать новый контрол другого типа и перенести все настройки в него
  5. Произвести мелкие настройки контрола, например разрешить или запретить сортировку и изменение состава колонок. Этот этап в целом является опциональным, перечень параметров, доступных для настройки можно найти в статье по контролам. Обращаем внимание, что особые настройки контрола становятся доступными после сохранения контрола с определенным типом. Тип контрола после сохранения изменять нельзя.

В общем виде любой сложный отчёт состоит из двух частей:

  1. Сервис, который принимает Invocation с параметрами, реализует логику построения отчёта, совершает внутренние и внешние вызовы для сбора данных, подготавливает данные в структуру JSON и возвращает их.
  2. Контрол необходимого для отчёта типа, с набором необходимых фильтров, набором настроек интерфейса, облегчающих работу с отчётом, а также dataSource, сконфигурированный для работы с созданным сервисом.

Для простых отчётов, сервис может отсутствовать, например если данные для отчёта получаются напрямую из объектов опредленного класса и не требуется какие-либо сложные операции.

Пример вывода данных из сервиса в контрол

Настройки контрола

Свойство Значение Комментарий
controlKind table Используется тип контрола Таблица как стандартный способ вывода отчетов
controlMode custom Режим custom означает, что контрол не привязан к конкретному классу и использует собственные настройки для отображения.
dataSource
{
  "action": {
    "method": "Control_getData",
    "request": {
      "parameters": {}
    },
    "responsePath": "",
    "service": "creomate_tutorial.Server2Service"
  },
  "kind": "action"
}
Универсальный источник данных, получающий данные из сервиса Server2Service. Отдельного внимания заслуживает пустое значение в responsePath. Это означает, что данные из сервиса передаются не обёрнутые в какой-либо объект.
allowExport True Данная настройка разрешает экспорт данных пользователем в Excel, CSV и JSON. Для табличных отчётов полезно оставлять включенной
showToolbar True Включает отображение панели инструментов с полем поиска и кнопками экспорта
allowShowCard False Данная настройка запрещает открытие карточек по ссылкам
allowColumnChoose False Данная настройка разрешает произвольный выбор колонки. Эта настройка остаётся на усмотрение разработчика
allowColumnReorder True Данная настройка разрешает изменение порядка колонок в контроле. Эта настройка остаётся на усмотрение разработчика
allowColumnResize True Настройка разрешает изменение ширины колонок
allowSearchPanel True Включает отображение поля поиска в панели инструментов. Поиск "из коробки" работает только при использовании класса как источника данных. При использовании сервиса необходимо на стороне метода получить из Invocation параметры поиска и отфильтровать содержимое выдачи в соответствии с ними, т.е. поиск остаётся на усмотрение разработчика.
allowRowNumbers True Настройка включает отображение номеров строк
pageSize 20 Настройка задаёт ограничение по количеству строк на одной "странице" отчёта
customColumns
[
  {
    "caption": "Имя",
    "propertyName": "name"
  },
  {
    "caption": "valuex",
    "propertyName": "valuex"
  },
  {
    "caption": "Идентификатор",
    "propertyName": "id"
  }
]
JSON, описывающий колонки для отображения. В поле caption задаётся заголовок для отображения пользователю. В поле propertyName задается имя свойства элемента коллекции
wordWrap True Настройка разрешает перенос строк, если они не помещаются в ширину колонки

Исходный код сервиса

import { GlobalUtils, Converter } from "./../../utils";
import { Service } from "./../../platform/core";
import { IInvocation } from "../../platform/model";

class Server2Service extends Service {
    constructor() {
        super("creomate_tutorial.Server2Service");
        
        // onCreateCode

        this.load();
    }
    async Control_getData(invocation_: IInvocation){
        this.log.debug("control get start");
        try{
            this.log.debug({data: [{id: "123", name:"Test 1"}, {id:"124", name:"Test 2"}]});
            return [{name:"Test 1", valuex:"1", id:"223"}, {name:"Test 2", valuex:"2", id:"2345"} ];

        }catch(e){

            this.log.exception("Control_getData", e);

        }

    }
    async onInit() {
        await super.onInit();
        try {

            // onInitCode

        }
        catch (e) {
            this.log.exception("onInit", e);
        }
    }


    async onTimer() {
        await super.onTimer();
        try {

            // onTimerCode

        }
        catch (e) {
            this.log.exception("onTimer", e);
        }
    }


    // declarationsCode

    // functionsCode
}

export default Server2Service;

Пример настроенного контрола


Следующая статья курса: Задание 11. Разработка кастомного отчета
Предыдущая статья курса: Работа с универсальным источником данных