logo

[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>

Таким образом фильтровать можно экземпляры любых объектов: контрагенты определенной категории, задачи какого-то исполнителя, согласованные документы и т.д.