[ELMA3] Использование фильтра в выпадающем списке
При использовании объектов в качестве параметров для отчета, может возникнуть необходимость осуществить фильтрацию экземпляров объектов по какому-то признаку. Например, при использовании в качестве параметра объекта Проект, в выпадающем списке будут находиться активные проекты, черновики проектов, архивные проекты.
Для того, чтобы отфильтровать данные в выпадающем списке такого параметра, на вкладке отчета Настройки отображения, необходимо выбрать Форму ввода параметров Форма задается пользователем (.NET Razor) и перейти к вкладке.
По умолчанию страница будет пустая, для начала необходимо воспользоваться мастером шаблона. Будет сгенерирован код макета параметров, имеющий примерно такой вид:
@using EleWise.ELMA.BPM.Web.Reports.Extensions @using System.Data @model EleWise.ELMA.BPM.Web.Reports.Models.ReportParametersInfo <style> .list th { background: none repeat scroll 0 0 #666666; color: #FFFFFF; padding: 5px; text-align: left; } .list td { border-bottom: 1px solid #CCCCCC; padding: 3px 5px; vertical-align: middle; } </style> <table style="width:100%" class="listTaskExec"> @Html.EditorFor(m => m.Parameters) </table>
В конце макета будут находиться следующие строчки:
<table style="width:100%" class="listTaskExec">
@Html.EditorFor(m => m.Parameters)
</table>
@Html.EditorFor(m => m.Parameters)
Выводит все параметры на форму.
Сперва необходимо добавить ссылку на сборку
@using EleWise.ELMA.Web.Mvc.Html
А затем, описать вывод каждого параметра отдельно, удалим @Html.EditorFor(m => m.Parameters)
и заменим на:
@Html.EditableProperty("Parameters.Ispolnitelj")
@Html.EditableProperty("Parameters.Proekt")
@Html.EditableProperty("Parameters.Status")
Где Parameters.Name – название нужного параметра.
Теперь эти параметры можно настроить так, как это необходимо, например, для отображения только активных проектов, необходимо дописать:
@Html.EditableProperty("Parameters.Proekt", a => a.TypeSettingsAction = s => ((EleWise.ELMA.Model.Types.Settings.EntitySettings)s).FilterQuery = "Status = Enum(’Active’)")
Где FilterQuery – EQL-запрос. Подробней о EQL можно узнать в справке по системе, по ссылке:
АдресВашегоСервера/Modules/EleWise.ELMA.BPM.Web.Common/Content/Help/WebHelp/index.htm#page=User/EQL_language/index.html
Окончательный вариант макет будет выглядеть так:
@using EleWise.ELMA.BPM.Web.Reports.Extensions @using System.Data @using EleWise.ELMA.Web.Mvc.Html @model EleWise.ELMA.BPM.Web.Reports.Models.ReportParametersInfo <style> .list th { background: none repeat scroll 0 0 #666666; color: #FFFFFF; padding: 5px; text-align: left; } .list td { border-bottom: 1px solid #CCCCCC; padding: 3px 5px; vertical-align: middle; } </style> <table style="width:100%" class="listTaskExec"> @Html.EditableProperty("Parameters.Ispolnitelj") @Html.EditableProperty("Parameters.Proekt", a => a.TypeSettingsAction = s => ((EleWise.ELMA.Model.Types.Settings.EntitySettings)s).FilterQuery = "Status = Enum(’Active’)") @Html.EditableProperty("Parameters.Status") </table>
Таким образом фильтровать можно экземпляры любых объектов: контрагенты определенной категории, задачи какого-то исполнителя, согласованные документы и т.д.