Платформа 3V/Формы/Источники данных/Справочник/Фильтрация/От значений выражения: различия между версиями
(не показано 11 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | + | Фильтр по значению выражения используется в тех случаях, когда необходимо отфильтровать данные по нескольким параметрам, которые невозможно или трудоемко описать другими типами фильтров (см. пример). <br> | |
− | Фильтр по значению выражения используется в тех случаях, когда необходимо отфильтровать данные по нескольким параметрам ( | + | Ниже представлена структура фильтра. |
− | Ниже представлена структура фильтра | ||
<syntaxhighlight lang="JSON" line> | <syntaxhighlight lang="JSON" line> | ||
Строка 13: | Строка 12: | ||
"inversion": false, | "inversion": false, | ||
"conditionId": null, | "conditionId": null, | ||
− | "discriminator": " | + | "discriminator": "EntryExpressionFilter" |
}, | }, | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 26: | Строка 25: | ||
| attribute|| [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' Атрибут''']] текущего источника - справочника, элемент которого будет выбран по заданному параметру. Указывается номер Id и тип атрибута в данном случае собственный (OwnAttributeDefinitionDto), так как используются данные текущего справочника. | | attribute|| [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' Атрибут''']] текущего источника - справочника, элемент которого будет выбран по заданному параметру. Указывается номер Id и тип атрибута в данном случае собственный (OwnAttributeDefinitionDto), так как используются данные текущего справочника. | ||
|- | |- | ||
− | | discriminator|| | + | | discriminator|| EntryExpressionFilter |
|- | |- | ||
| conditionType || Тип условий | | conditionType || Тип условий | ||
Строка 34: | Строка 33: | ||
| conditionId || [[Платформа_3V/Формы/Правила| '''Условия''']], при которых применяется фильтр | | conditionId || [[Платформа_3V/Формы/Правила| '''Условия''']], при которых применяется фильтр | ||
|} | |} | ||
+ | |||
+ | Помимо фильтра необходимо описать выражение и параметры, которые используются для определения значений выражения. | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "expressions": [ | ||
+ | { | ||
+ | "id": 10, | ||
+ | "expression": "if([1]='true', [2], [3])", | ||
+ | "returnFirstParameterValue": false, | ||
+ | "parameters": [ | ||
+ | { | ||
+ | "uiSourceId": 1, | ||
+ | "id": 1, | ||
+ | "allowMultipleValues": false, | ||
+ | "discriminator": "EntryExpressionUiSourceParameter" | ||
+ | }, | ||
+ | { | ||
+ | "id": 2, | ||
+ | "allowMultipleValues": true, | ||
+ | "discriminator": "EntryExpressionConstantParameter", | ||
+ | "value": [ | ||
+ | 3, | ||
+ | 5 | ||
+ | ] | ||
+ | }, | ||
+ | { | ||
+ | "id": 3, | ||
+ | "allowMultipleValues": true, | ||
+ | "discriminator": "EntryExpressionConstantParameter", | ||
+ | "value": [8] | ||
+ | } | ||
+ | ], | ||
+ | </syntaxhighlight> | ||
+ | === Описание свойств выражений === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Свойство !! Описание | ||
+ | |- | ||
+ | | Id || id выражения, на которое ссылается фильтр | ||
+ | |- | ||
+ | | expression|| Выражение описывается через параметры (операнды), которые описываются внутри данного блока. Более подробно об этом элементе можно найти на странице [[Платформа 3V/Формы/Выражения|''' Выражения ''']] | ||
+ | |- | ||
+ | | returnFirstParameterValue|| Флаг получения в выражении отметки первого параметра в блоке "parameters" без учета самого выражения, написанного в "expression" | ||
+ | |- | ||
+ | | parameters || Виды параметров и ссылки на детальную настройку каждого вида в JSON описана на странице [[Платформа 3V/Формы/Параметры выражений и отчетов|'''Параметры выражений и отчетов''']] | ||
+ | |} | ||
+ | |||
+ | ===Пример=== | ||
+ | В клиентской карточке размещен чек-бокс, при включении которого из справочника "Контрагенты" отфильтровываются только элементы вида ПАО и ООО. Если чек-бокс отключен, то отфильтровываются остальные элементы. | ||
+ | [[Файл:Screenshot 2021-04-23 at 17.37.11.png|обрамить|слева]] | ||
+ | <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:800px; overflow:auto;"> | ||
+ | <div style="font-weight:bold;line-height:1.6;">JSON серверной карточки</div> | ||
+ | <div class="mw-collapsible-content mw-collapsed-content"> | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "id": 48, | ||
+ | "name": "Пример фильтра от значений в выражении (EntryExpressionFilter)", | ||
+ | "description": null, | ||
+ | "title": "Пример фильтра от значений в выражениие", | ||
+ | "entrySettings": null, | ||
+ | "uiSources": [ | ||
+ | { | ||
+ | "id": 1, | ||
+ | "caption": "Галочка", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "hint": null, | ||
+ | "doActionOnChangeValue": true, | ||
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": null, | ||
+ | "rebuildDependentsObjectOnChange": true, | ||
+ | "enableRuleIds": [], | ||
+ | "visibleRuleIds": [], | ||
+ | "access": null, | ||
+ | "isValueChanged": true, | ||
+ | "expressionId": null, | ||
+ | "discriminator": "BoolSourceEntry" | ||
+ | }, | ||
+ | { | ||
+ | "trimSpaces": false, | ||
+ | "defaultValue": null, | ||
+ | "value": null, | ||
+ | "id": 2, | ||
+ | "caption": "Контрагент", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "hint": null, | ||
+ | "doActionOnChangeValue": false, | ||
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": null, | ||
+ | "rebuildDependentsObjectOnChange": true, | ||
+ | "enableRuleIds": [], | ||
+ | "visibleRuleIds": [], | ||
+ | "access": null, | ||
+ | "isValueChanged": false, | ||
+ | "dataSourceId": 3, | ||
+ | "discriminator": "DictionarySourceEntry", | ||
+ | "hasMultipleValue": true | ||
+ | } | ||
+ | ], | ||
+ | "entryDataSources": [ | ||
+ | { | ||
+ | "dictionaryId": 47, | ||
+ | "hierarchyId": null, | ||
+ | "filter": { | ||
+ | "expressionId": 10, | ||
+ | "attribute": { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "conditionType": "AttributeInCollection", | ||
+ | "inversion": false, | ||
+ | "conditionId": null, | ||
+ | "discriminator": "EntryExpressionFilter" | ||
+ | }, | ||
+ | "sortingOptions": null, | ||
+ | "groupingOptions": null, | ||
+ | "dictionaryAttributes": [], | ||
+ | "defaultValue": [], | ||
+ | "defaultValueExpressionId": null, | ||
+ | "parameterId": null, | ||
+ | "dictionarySourceSelectionMode": "SelectAll", | ||
+ | "dataSourceAttributesAdditionsSettings": [], | ||
+ | "externalFileStorageUrl": null, | ||
+ | "filePrefix": null, | ||
+ | "defaultNewElementSettings": null, | ||
+ | "id": 3, | ||
+ | "name": "Контрагенты", | ||
+ | "isReadOnly": false, | ||
+ | "dataEditRuleIds": [], | ||
+ | "beforeSaveDataActions": [], | ||
+ | "afterSaveDataActions": [], | ||
+ | "discriminator": "DictionaryDataSource" | ||
+ | } | ||
+ | ], | ||
+ | "parameters": [], | ||
+ | "binaryConditionsRules": [], | ||
+ | "submitValidateRules": [], | ||
+ | "expressions": [ | ||
+ | { | ||
+ | "id": 10, | ||
+ | "expression": "if([1]='true', [2], [3])", | ||
+ | "returnFirstParameterValue": false, | ||
+ | "parameters": [ | ||
+ | { | ||
+ | "uiSourceId": 1, | ||
+ | "id": 1, | ||
+ | "allowMultipleValues": false, | ||
+ | "discriminator": "EntryExpressionUiSourceParameter" | ||
+ | }, | ||
+ | { | ||
+ | "id": 2, | ||
+ | "allowMultipleValues": true, | ||
+ | "discriminator": "EntryExpressionConstantParameter", | ||
+ | "value": [ | ||
+ | 3, | ||
+ | 5 | ||
+ | ] | ||
+ | }, | ||
+ | { | ||
+ | "id": 3, | ||
+ | "allowMultipleValues": true, | ||
+ | "discriminator": "EntryExpressionConstantParameter", | ||
+ | "value": [ | ||
+ | 1, | ||
+ | 2, | ||
+ | 4, | ||
+ | 6, | ||
+ | 7, | ||
+ | 8 | ||
+ | ] | ||
+ | } | ||
+ | ], | ||
+ | "comment": null | ||
+ | } | ||
+ | ], | ||
+ | "controlsValueCalculateRules": [], | ||
+ | "actions": [], | ||
+ | "conditionActionIdsOnOpen": [], | ||
+ | "conditionalActions": [], | ||
+ | "selectionSets": [], | ||
+ | "reportTemplates": [], | ||
+ | "useNewDependenciesBuilder": null | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | </div></div> | ||
+ | Фильтр настроен на связный атрибут "Вид" справочника "Контрагенты". Этот атрибут принимает значения от 1 до 8. | ||
+ | Выражение от значений которого фильтруется справочник логическое: "expression": "if([1]='true', [2], [3])" и содержит три операнда (параметра. <br> | ||
+ | Первый операнд (параметр) id=1 берет значение из первого контрола uiSourceId = 1, который имеет в данном примере логический тип - это чек-бокс. | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "parameters": [ | ||
+ | { | ||
+ | "uiSourceId": 1, | ||
+ | "id": 1, | ||
+ | "allowMultipleValues": false, | ||
+ | "discriminator": "EntryExpressionUiSourceParameter" | ||
+ | }, | ||
+ | {...}, | ||
+ | {...}, | ||
+ | ], | ||
+ | </syntaxhighlight> | ||
+ | Далее, если первый операнд (параметр) принимает значение true (чек-бокс включен), то фильтр работает по параметру id=2. И отфильтруются элементы справочника "Контрагенты", у которых значение атрибута "Вид" равно значениями в параметре - 3 и 5. | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "parameters": [ | ||
+ | {...}, | ||
+ | { | ||
+ | "id": 2, | ||
+ | ""allowMultipleValues": true, | ||
+ | "discriminator": "EntryExpressionConstantParameter", | ||
+ | "value": [ | ||
+ | 3, | ||
+ | 5 | ||
+ | ] | ||
+ | }, | ||
+ | {...}, | ||
+ | ], | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Наконец, если первый операнд (параметр) принимает значение false (чек-бокс выключен), то фильтр работает по параметру id=3. Отфильтруются элементы справочника "Контрагенты", у которых значение атрибута "Вид" равно значениями указанным в параметре. | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | |||
+ | "parameters": [ | ||
+ | {...}, | ||
+ | {...}, | ||
+ | { | ||
+ | "id": 3, | ||
+ | "allowMultipleValues": true, | ||
+ | "discriminator": "EntryExpressionConstantParameter", | ||
+ | "value": [ | ||
+ | 1, | ||
+ | 2, | ||
+ | 4, | ||
+ | 6, | ||
+ | 7, | ||
+ | 8 | ||
+ | ] | ||
+ | } | ||
+ | ], | ||
+ | |||
+ | </syntaxhighlight> |
Текущая версия на 14:43, 4 апреля 2022
Фильтр по значению выражения используется в тех случаях, когда необходимо отфильтровать данные по нескольким параметрам, которые невозможно или трудоемко описать другими типами фильтров (см. пример).
Ниже представлена структура фильтра.
1 "filter": {
2 "expressionId": 10,
3 "attribute": {
4 "id": 21,
5 "discriminator": "OwnAttributeDefinitionDto"
6 },
7 "conditionType": "AttributeInCollection",
8 "inversion": false,
9 "conditionId": null,
10 "discriminator": "EntryExpressionFilter"
11 },
Описание свойств выражений
Свойство | Описание |
---|---|
expressionId | id выражения |
attribute | Атрибут текущего источника - справочника, элемент которого будет выбран по заданному параметру. Указывается номер Id и тип атрибута в данном случае собственный (OwnAttributeDefinitionDto), так как используются данные текущего справочника. |
discriminator | EntryExpressionFilter |
conditionType | Тип условий |
inversion | В значении "false" источник-справочник принимает значения, которые удовлетворяют фильтру, в значении "true" - все значения, которые наоборот не удовлетворяют ему |
conditionId | Условия, при которых применяется фильтр |
Помимо фильтра необходимо описать выражение и параметры, которые используются для определения значений выражения.
1 "expressions": [
2 {
3 "id": 10,
4 "expression": "if([1]='true', [2], [3])",
5 "returnFirstParameterValue": false,
6 "parameters": [
7 {
8 "uiSourceId": 1,
9 "id": 1,
10 "allowMultipleValues": false,
11 "discriminator": "EntryExpressionUiSourceParameter"
12 },
13 {
14 "id": 2,
15 "allowMultipleValues": true,
16 "discriminator": "EntryExpressionConstantParameter",
17 "value": [
18 3,
19 5
20 ]
21 },
22 {
23 "id": 3,
24 "allowMultipleValues": true,
25 "discriminator": "EntryExpressionConstantParameter",
26 "value": [8]
27 }
28 ],
Описание свойств выражений
Свойство | Описание |
---|---|
Id | id выражения, на которое ссылается фильтр |
expression | Выражение описывается через параметры (операнды), которые описываются внутри данного блока. Более подробно об этом элементе можно найти на странице Выражения |
returnFirstParameterValue | Флаг получения в выражении отметки первого параметра в блоке "parameters" без учета самого выражения, написанного в "expression" |
parameters | Виды параметров и ссылки на детальную настройку каждого вида в JSON описана на странице Параметры выражений и отчетов |
Пример
В клиентской карточке размещен чек-бокс, при включении которого из справочника "Контрагенты" отфильтровываются только элементы вида ПАО и ООО. Если чек-бокс отключен, то отфильтровываются остальные элементы.
1 {
2 "id": 48,
3 "name": "Пример фильтра от значений в выражении (EntryExpressionFilter)",
4 "description": null,
5 "title": "Пример фильтра от значений в выражениие",
6 "entrySettings": null,
7 "uiSources": [
8 {
9 "id": 1,
10 "caption": "Галочка",
11 "enable": true,
12 "visible": true,
13 "hint": null,
14 "doActionOnChangeValue": true,
15 "onAfterChangeValueConditionalActions": null,
16 "onAfterChangeValueByClientConditionalActions": null,
17 "rebuildDependentsObjectOnChange": true,
18 "enableRuleIds": [],
19 "visibleRuleIds": [],
20 "access": null,
21 "isValueChanged": true,
22 "expressionId": null,
23 "discriminator": "BoolSourceEntry"
24 },
25 {
26 "trimSpaces": false,
27 "defaultValue": null,
28 "value": null,
29 "id": 2,
30 "caption": "Контрагент",
31 "enable": true,
32 "visible": true,
33 "hint": null,
34 "doActionOnChangeValue": false,
35 "onAfterChangeValueConditionalActions": null,
36 "onAfterChangeValueByClientConditionalActions": null,
37 "rebuildDependentsObjectOnChange": true,
38 "enableRuleIds": [],
39 "visibleRuleIds": [],
40 "access": null,
41 "isValueChanged": false,
42 "dataSourceId": 3,
43 "discriminator": "DictionarySourceEntry",
44 "hasMultipleValue": true
45 }
46 ],
47 "entryDataSources": [
48 {
49 "dictionaryId": 47,
50 "hierarchyId": null,
51 "filter": {
52 "expressionId": 10,
53 "attribute": {
54 "id": 21,
55 "discriminator": "OwnAttributeDefinitionDto"
56 },
57 "conditionType": "AttributeInCollection",
58 "inversion": false,
59 "conditionId": null,
60 "discriminator": "EntryExpressionFilter"
61 },
62 "sortingOptions": null,
63 "groupingOptions": null,
64 "dictionaryAttributes": [],
65 "defaultValue": [],
66 "defaultValueExpressionId": null,
67 "parameterId": null,
68 "dictionarySourceSelectionMode": "SelectAll",
69 "dataSourceAttributesAdditionsSettings": [],
70 "externalFileStorageUrl": null,
71 "filePrefix": null,
72 "defaultNewElementSettings": null,
73 "id": 3,
74 "name": "Контрагенты",
75 "isReadOnly": false,
76 "dataEditRuleIds": [],
77 "beforeSaveDataActions": [],
78 "afterSaveDataActions": [],
79 "discriminator": "DictionaryDataSource"
80 }
81 ],
82 "parameters": [],
83 "binaryConditionsRules": [],
84 "submitValidateRules": [],
85 "expressions": [
86 {
87 "id": 10,
88 "expression": "if([1]='true', [2], [3])",
89 "returnFirstParameterValue": false,
90 "parameters": [
91 {
92 "uiSourceId": 1,
93 "id": 1,
94 "allowMultipleValues": false,
95 "discriminator": "EntryExpressionUiSourceParameter"
96 },
97 {
98 "id": 2,
99 "allowMultipleValues": true,
100 "discriminator": "EntryExpressionConstantParameter",
101 "value": [
102 3,
103 5
104 ]
105 },
106 {
107 "id": 3,
108 "allowMultipleValues": true,
109 "discriminator": "EntryExpressionConstantParameter",
110 "value": [
111 1,
112 2,
113 4,
114 6,
115 7,
116 8
117 ]
118 }
119 ],
120 "comment": null
121 }
122 ],
123 "controlsValueCalculateRules": [],
124 "actions": [],
125 "conditionActionIdsOnOpen": [],
126 "conditionalActions": [],
127 "selectionSets": [],
128 "reportTemplates": [],
129 "useNewDependenciesBuilder": null
130 }
Фильтр настроен на связный атрибут "Вид" справочника "Контрагенты". Этот атрибут принимает значения от 1 до 8.
Выражение от значений которого фильтруется справочник логическое: "expression": "if([1]='true', [2], [3])" и содержит три операнда (параметра.
Первый операнд (параметр) id=1 берет значение из первого контрола uiSourceId = 1, который имеет в данном примере логический тип - это чек-бокс.
1 "parameters": [
2 {
3 "uiSourceId": 1,
4 "id": 1,
5 "allowMultipleValues": false,
6 "discriminator": "EntryExpressionUiSourceParameter"
7 },
8 {...},
9 {...},
10 ],
Далее, если первый операнд (параметр) принимает значение true (чек-бокс включен), то фильтр работает по параметру id=2. И отфильтруются элементы справочника "Контрагенты", у которых значение атрибута "Вид" равно значениями в параметре - 3 и 5.
1 "parameters": [
2 {...},
3 {
4 "id": 2,
5 ""allowMultipleValues": true,
6 "discriminator": "EntryExpressionConstantParameter",
7 "value": [
8 3,
9 5
10 ]
11 },
12 {...},
13 ],
Наконец, если первый операнд (параметр) принимает значение false (чек-бокс выключен), то фильтр работает по параметру id=3. Отфильтруются элементы справочника "Контрагенты", у которых значение атрибута "Вид" равно значениями указанным в параметре.
1
2 "parameters": [
3 {...},
4 {...},
5 {
6 "id": 3,
7 "allowMultipleValues": true,
8 "discriminator": "EntryExpressionConstantParameter",
9 "value": [
10 1,
11 2,
12 4,
13 6,
14 7,
15 8
16 ]
17 }
18 ],