logo

[ELMA3] Использование фильтра в выпадающем списке

При использовании объектов в качестве параметров для отчета, может возникнуть необходимость осуществить фильтрацию экземпляров объектов по какому-то признаку. Например, при использовании в качестве параметра объекта Проект, в выпадающем списке будут находиться активные проекты, черновики проектов, архивные проекты.
Для того, чтобы отфильтровать данные в выпадающем списке такого параметра, на вкладке отчета Настройки отображения, необходимо выбрать Форму ввода параметров Форма задается пользователем (.NET Razor) и перейти к вкладке.

По умолчанию страница будет пустая, для начала необходимо воспользоваться мастером шаблона. Будет сгенерирован код макета параметров, имеющий примерно такой вид:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@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

Окончательный вариант макет будет выглядеть так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@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>

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