logo

[ELMA3] Создание ссылок на объекты ELMA в отчете

В данной статье будут рассмотрены способы организации гиперссылок на объекты системы ELMA в отчетах с использованием как стандартной формы Fast Report, так и Razor.

Данная статья будет полезна, если Вы хотите создать отчет, содержащий гиперссылки на документы, задачи, проекты, записи справочников и т.д. Далее мы рассмотрим три примера создания просто отчета с ссылками на одинаковые объекты системы с использованием простой формы FastReport, сложные отчет с ссылками на различные типы объектов системы с использованием FastReport и этот же отчет, но с использованием формы на языке Razor. Подробнее об отчетах можно прочитать в справке по ELMA3.

Ссылки на объекты системы

В системе ELMA ссылка на страницу формируется из адреса сервера, постоянной части, одинаковой для всех объектов определённого типа, и идентификатора объекта.

Посмотреть адрес ссылки на страницу можно в адресной строке браузера (рис. 1).

Рис. 1. Адресная строка браузера

Пример ссылки на задачу:

https://elma.testserv.com/Workflow/WorkflowTask/Execute/1003 ,где:

  • https://elma.testserv.com/- адрес сервера (для локального сервера это может быть 127.0.0.1, но такой адрес будет работать только непосредственно на том компьютере, на котором запущен сервер);
  • Workflow/WorkflowTask/Execute/ – постоянная часть для процессных задач;
  • 1003 – идентификатор задачи.
Внимание!

ВНИМАНИЕ! Для разных типов задач постоянная часть отличается.

Несколько примеров постоянной части адреса:

  • /Workflow/WorkflowTask/Execute/ - процессная задача;
  • /Tasks/Task/Execute/ - задача-поручение;
  • /Projects/ProjectTask/Execute/ - проектная задача;
  • /Docflow/Route/RegistrationDocument/ - задача регистрации документа;
  • /Common/Catalogs/ViewItem/10?uid=e13b9f1b-b664-432e-b01c-ad060cc0219a – запись справочника, имеющего Uid = e13b9f1b-b664-432e-b01c-ad060cc0219a с идентификатором записи Id = 10.

Пример создания ссылки на экземпляр процесса

Создание ссылки на экземпляр процесса осуществляется пользователем самостоятельно по следующей форме:

{BaseUrlSystem}/Processes/Monitor/Index?FilterId=0&Filter.Query=EqlFilter , где

  • {BaseUrlSystem} – базовый URL-системы (не обязателен при использовании ссылки в отчете);
  • /Processes/Monitor/Index?FilterId=0&Filter.Query= – постоянная часть ссылки, которая указывает на процесс из монитора процессов;
  • EqlFilter – EQL- запрос. Подробнее см. статью Сложные фильтры, язык EQL.

Рассмотрим формирование ссылки на примере.

1. Создадим EQL- запрос (рис. 2).

Рис. 2. Монитор процессов. Создание EQL- запроса

Данный запрос позволяет выбрать экземпляры процесса P_CommercialProposal, которые были запущены пользователем с id=1.

2. Подставим созданный EQL-запрос . Ссылка будет выглядеть следующим образом:

http://127.0.0.1:8002/Processes/Monitor/Index?FilterId=0&Filter.Query=Id in (from P_CommercialProposal select WorkflowInstance where Iniciator = 1)

3. При вводе ссылки в адресную строку отобразятся экземпляры процессов (рис. 3) согласно заданному EQL-запросу.

Рис. 3. Монитор процессов. Отображение экземпляров процесса

После отображения экземпляров процесса ссылка будет выглядеть следующим образом:

http://127.0.0.1:8002/Processes/Monitor/Index?FilterId=0&Filter.Query=Id%20in%20(from%20P_CommercialProposal%20select%20WorkflowInstance%20where%20Iniciator%20=%201)

В сформировавшейся ссылке обычные пробелы будут заменены на %20.

Простой отчет с использованием FastReport

Рассмотрим пример отчета, выводящего все документы, находящиеся в архиве. SQL запрос на выборку данных для отчета представлен на рис. 4.

Рис. 4. Вкладка "Источники данных". SQL-запрос

select DmsObject.Name , Document.Id
from Document
Left join DmsObject on DmsObject.Id=Document.Id
Where IsArchived=’true’;

Этим запросом мы получаем имя объекта документооборота (Name) и его (Id). Id в дальнейшем будет использован в гиперссылке к объекту.

Подробнее о составлении запросов для формирования отчетов можно прочитать в этой статье.

Перейдем на вкладку Макет отчета и вынесем столбцы Id и Name на форму FastReport (рис. 5).

Рис. 5. Вкладка "Макет отчета"

Для размещения гиперссылки на объект, выберем поле Name в области данных отчета (поле в середине), щелкнем правой кнопкой мыши и выберем Hyperlink (рис. 6).

Рис. 6. Вкладка "Макет отчета". Контекстное меню

В появившемся окне на вкладке URL (рис. 7) мы можем задать постоянную ссылку на веб-страницу в поле Specify an URL (example: http://www.url.com) или выражение, вычисляющее адрес гиперссылки в поле or enter the expression that returns an URL:
Так как ссылки на каждый документ отличаются идентификатором, нам потребуется ввести во второе поле формулу, вычисляющую адрес. Формула состоит из постоянной части в двойных кавычках, знака «плюс» и идентификатора объекта:

"/Documents/Document/View/"+[Данные.Id]

Рис. 7. Диалоговое окно "Edit Hyperlink"
Внимание!
Рекомендуется использовать относительные ссылки без указания адреса сервера:
"/Documents/Document/View/"+[Данные.Id], а не "https://elma.elewise.com/Documents/Document/View/"+[Данные.Id]

Для более простого ввода формулы можно нажать на пиктограмму , расположенную справа. При этом появится окно Edit expression (рис. 8), в котором можно выносить данные, системные переменные и математические и иные функции мышью из колонки справа.

Рис. 8. Диалоговое окно "Edit Expression"

Установите флажок Modify the object’s appearance so it will look like a clickable link (рис. 7) и нажмите кнопку ОК, чтобы объект приобрел подчеркивание и выглядел как гиперссылка (рис. 9).

Рис. 9. Диалоговое окно "Edit Hyperlink"

Запустите отладку и в веб-приложении будет отображен отчет (рис. 10), в котором имена документов будут выглядеть как гиперссылки, а нажатие на них открывает страницу соответствующего документа.

Рис. 10. Отображение отчета в веб- приложении

Полезная информация

Данная статья является первой из трех статьей о создании ссылок в отчетах

О том, как сделать отчет с ссылками на разные типы объектов с использованием стандартной формы FastReport можно прочитать в этой статье.

Использование ссылок в отчете с использованием разметки Razor подробно описано в этой статье.