Платформа 3V/Формы/Источники данных/Справочник/Фильтрация/Несколькими фильтрами через И или ИЛИ: различия между версиями

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
 
(не показана 21 промежуточная версия 2 участников)
Строка 1: Строка 1:
!!! СТРАНИЦА НАХОДИТСЯ В РАЗРАБОТКЕ!!!
+
На практике часто необходимо отфильтровывать данные несколькими фильтрами, для это используется фильтр CompoundDictionaryCardsFilter. В нем обязательно указывается тип объединения фильтров - выбрать только те элементы, которые удовлетворяют всем вложенным фильтрам одновременно (And), либо выбрать элементы, которые удовлетворяют хотя бы одному вложенному фильтру (Or).  <br>
<br>
+
Далее идет блок "filters", где описывается каждый вложенный фильтр. Необходимо отметить, что в структуре этих вложенных фильтров опущено конструкция "filter": {...}, они начинаются сразу с непосредственного описания (подробнее см. в примере).
На практике часто необходимо отфильтровывать данные несколькими фильтрами, для это используется тип фильтра CompoundDictionaryFilterDto. В нем обязательно указывается тип объединения фильтров - выбрать только те элементы, которые удовлетворяют всем вложенным фильтрам одновременно (And), либо выбрать элементы, которые удовлетворяют хотя бы одному вложенному фильтру (Or).  <br>
 
Далее идет блок "filters", где описывается каждый вложенный фильтр. Необходимо отметить, что в структуре этих вложенных фильтров опущено конструкция "filter":{...}, они начинаются сразу с непосредственного описания (см. пример).
 
  
 
<syntaxhighlight lang="JSON" line>
 
<syntaxhighlight lang="JSON" line>
Строка 12: Строка 10:
 
         ],
 
         ],
 
         "inversion": false,
 
         "inversion": false,
         "discriminator": "CompoundDictionaryFilterDto"
+
         "discriminator": "CompoundDictionaryCardsFilter"
 +
}     
 
</syntaxhighlight>
 
</syntaxhighlight>
 
== Описание свойств фильтра ==
 
== Описание свойств фильтра ==
Строка 19: Строка 18:
 
! Свойство !! Описание
 
! Свойство !! Описание
 
|-
 
|-
| type|| Тип And - выбор элементов, удовлетворяющих одновременно всем описанным фильтрам. <br> Тип Or - выберутся элементы, которые удовлетворяют хотя бы одному из описанных фильтров.
+
| type|| Тип And - выбор элементов, удовлетворяющих одновременно всем описанным фильтрам. <br> Тип Or - выбор элементов, которые удовлетворяют хотя бы одному из описанных фильтров.
 
|-  
 
|-  
| inversion || В значении "false" фильтр отберет удовлетворяющие ему значения, в значении "true" - все значения, которые наоборот не удовлетворяют ему
+
| inversion || В значении "false" источник-справочник принимает значения, которые удовлетворяют фильтру, в значении "true" - все значения, которые наоборот не удовлетворяют ему
 
|-
 
|-
| discriminator|| CompoundDictionaryFilterDto
+
| discriminator|| CompoundDictionaryCardsFilter
 
 
 
|}
 
|}
  
 
== Пример: ==
 
== Пример: ==
 +
Справочник "Контрагенты" содержит имя контрагента, его вид и логическую отметку о статусе - действующий или нет.
 +
 +
[[Файл:Screenshot 2021-04-19 at 14.35.56.png|обрамить|слева]]
 +
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 +
 +
Элементы списка "Контрагент" можно отфильтровать по двум атрибутам - по виду и статусу.<br>
 +
 +
Первый атрибут связный, поэтому элементы списка "Контрагент" выбраны [[Платформа_3V/Формы/Источники данных/Справочник/Фильтрация/От другого справочника|''' фильтром от справочника''']] "Вид контрагента", второй атрибут логический, выбран [[Платформа_3V/Формы/Источники_данных/Справочник/Фильтрация/По_фиксированным_значениям|'''фильтром по значению''']].<br>
 +
<syntaxhighlight lang="JSON" line>
 +
"filter": {
 +
        "type": "And",
 +
        "filters": [
 +
          {
 +
            "dictionaryEntrySourceId": 2,
 +
            "sourceAttribute": {
 +
              "id": 1,
 +
              "discriminator": "OwnAttributeDefinitionDto"
 +
            },
 +
            "attribute": {
 +
              "id": 21,
 +
              "discriminator": "OwnAttributeDefinitionDto"
 +
            },
 +
            "conditionType": "AttributeInCollection",
 +
            "inversion": false,
 +
            "conditionId": null,
 +
            "discriminator": "EntryFilterDto"
 +
          },
 +
          {
 +
            "value": "true",
 +
            "attributeId": 22,
 +
            "attribute": null,
 +
            "conditionType": "AttributeInCollection",
 +
            "inversion": false,
 +
            "conditionId": null,
 +
            "discriminator": "ValueConditionalDictionaryCardsFilter"
 +
          }
 +
        ],
 +
        "inversion": false,
 +
        "discriminator": "CompoundDictionaryCardsFilter"
 +
      },
 +
</syntaxhighlight>
 +
В данном примере первый элемент пользовательской карточки - выпадающий список "Вид контрагента" (id=10754). После того, как был выбран элемент "Государственные и муниципальные учреждения", второй элемент пользовательской карточки - выпадающий список "Контрагенты" (id=10755) отфильтрован по связному атрибуту "Вид" (3 элемента удовлетворяют условию первого фильтра) и далее по логическому атрибуту "Статус" (осталось 2 элемента, удовлетворяющих обоим фильтрам).
 +
 +
[[Файл:Screenshot 2021-04-19 at 14.41.48.png|обрамить|слева]]
 +
<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": 10735,
 +
  "name": "Пример фильтра от справочника (EntryFilterDto)",
 +
  "description": null,
 +
  "title": "Пример фильтрации_справочник от справочника",
 +
  "entrySettings": null,
 +
  "uiSources": [
 +
    {
 +
      "dataSourceId": 2,
 +
      "nameTemplate": "",
 +
      "displayAttribute": null,
 +
      "hasMultipleValue": false,
 +
      "hasNullableValue": false,
 +
      "maxElements": null,
 +
      "hasServerFiltration": false,
 +
      "searchSettings": {
 +
        "maxElements": null,
 +
        "minInputChars": 2,
 +
        "searchMode": "Client",
 +
        "debounceMs": 300
 +
      },
 +
      "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": "DictionarySourceEntry"
 +
    },
 +
    {
 +
      "dataSourceId": 3,
 +
      "nameTemplate": "",
 +
      "displayAttribute": null,
 +
      "hasMultipleValue": false,
 +
      "hasNullableValue": false,
 +
      "maxElements": null,
 +
      "hasServerFiltration": false,
 +
      "searchSettings": {
 +
        "maxElements": null,
 +
        "minInputChars": 2,
 +
        "searchMode": "Client",
 +
        "debounceMs": 300
 +
      },
 +
      "id": 2,
 +
      "caption": "Контрагенты",
 +
      "enable": true,
 +
      "visible": true,
 +
      "hint": null,
 +
      "doActionOnChangeValue": false,
 +
      "onAfterChangeValueConditionalActions": null,
 +
      "onAfterChangeValueByClientConditionalActions": null,
 +
      "rebuildDependentsObjectOnChange": true,
 +
      "enableRuleIds": [],
 +
      "visibleRuleIds": [],
 +
      "access": null,
 +
      "isValueChanged": false,
 +
      "expressionId": null,
 +
      "discriminator": "DictionarySourceEntry"
 +
    }
 +
  ],
 +
  "entryDataSources": [
 +
    {
 +
      "dictionaryId": 10754,
 +
      "hierarchyId": null,
 +
      "filter": null,
 +
      "sortingOptions": null,
 +
      "groupingOptions": null,
 +
      "dictionaryAttributes": null,
 +
      "defaultValue": [],
 +
      "defaultValueExpressionId": null,
 +
      "parameterId": null,
 +
      "dictionarySourceSelectionMode": "None",
 +
      "dataSourceAttributesAdditionsSettings": [],
 +
      "externalFileStorageUrl": null,
 +
      "filePrefix": null,
 +
      "defaultNewElementSettings": null,
 +
      "id": 2,
 +
      "name": "Вид контрагента",
 +
      "isReadOnly": true,
 +
      "dataEditRuleIds": [],
 +
      "beforeSaveDataActions": [],
 +
      "afterSaveDataActions": [],
 +
      "discriminator": "DictionaryDataSource"
 +
    },
 +
    {
 +
      "dictionaryId": 10755,
 +
      "hierarchyId": null,
 +
      "filter": {
 +
        "type": "And",
 +
        "filters": [
 +
          {
 +
            "dictionaryEntrySourceId": 2,
 +
            "sourceAttribute": {
 +
              "id": 1,
 +
              "discriminator": "OwnAttributeDefinitionDto"
 +
            },
 +
            "attribute": {
 +
              "id": 21,
 +
              "discriminator": "OwnAttributeDefinitionDto"
 +
            },
 +
            "conditionType": "AttributeInCollection",
 +
            "inversion": false,
 +
            "conditionId": null,
 +
            "discriminator": "EntryFilterDto"
 +
          },
 +
          {
 +
            "value": "true",
 +
            "attributeId": 22,
 +
            "attribute": null,
 +
            "conditionType": "AttributeInCollection",
 +
            "inversion": false,
 +
            "conditionId": null,
 +
            "discriminator": "ValueConditionalDictionaryCardsFilter"
 +
          }
 +
        ],
 +
        "inversion": false,
 +
        "discriminator": "ValueConditionalDictionaryCardsFilter"
 +
      },
 +
      "sortingOptions": null,
 +
      "groupingOptions": null,
 +
      "dictionaryAttributes": [],
 +
      "defaultValue": [],
 +
      "defaultValueExpressionId": null,
 +
      "parameterId": null,
 +
      "dictionarySourceSelectionMode": "None",
 +
      "dataSourceAttributesAdditionsSettings": [],
 +
      "externalFileStorageUrl": null,
 +
      "filePrefix": null,
 +
      "defaultNewElementSettings": null,
 +
      "id": 3,
 +
      "name": "Контрагенты",
 +
      "isReadOnly": true,
 +
      "dataEditRuleIds": [],
 +
      "beforeSaveDataActions": [],
 +
      "afterSaveDataActions": [],
 +
      "discriminator": "DictionaryDataSource"
 +
    }
 +
  ],
 +
  "parameters": [],
 +
  "binaryConditionsRules": [],
 +
  "submitValidateRules": [],
 +
  "expressions": [],
 +
  "controlsValueCalculateRules": [],
 +
  "actions": [],
 +
  "conditionActionIdsOnOpen": [],
 +
  "conditionalActions": [],
 +
  "selectionSets": [],
 +
  "reportTemplates": [],
 +
  "useNewDependenciesBuilder": null
 +
}
 +
</syntaxhighlight>
 +
</div></div>

Текущая версия на 14:47, 4 апреля 2022

На практике часто необходимо отфильтровывать данные несколькими фильтрами, для это используется фильтр CompoundDictionaryCardsFilter. В нем обязательно указывается тип объединения фильтров - выбрать только те элементы, которые удовлетворяют всем вложенным фильтрам одновременно (And), либо выбрать элементы, которые удовлетворяют хотя бы одному вложенному фильтру (Or).
Далее идет блок "filters", где описывается каждый вложенный фильтр. Необходимо отметить, что в структуре этих вложенных фильтров опущено конструкция "filter": {...}, они начинаются сразу с непосредственного описания (подробнее см. в примере).

1 "filter": {
2         "type": "And",
3         "filters": [
4           {...},
5           {...},
6         ],
7         "inversion": false,
8         "discriminator": "CompoundDictionaryCardsFilter"
9  }

Описание свойств фильтра

Свойство Описание
type Тип And - выбор элементов, удовлетворяющих одновременно всем описанным фильтрам.
Тип Or - выбор элементов, которые удовлетворяют хотя бы одному из описанных фильтров.
inversion В значении "false" источник-справочник принимает значения, которые удовлетворяют фильтру, в значении "true" - все значения, которые наоборот не удовлетворяют ему
discriminator CompoundDictionaryCardsFilter

Пример:

Справочник "Контрагенты" содержит имя контрагента, его вид и логическую отметку о статусе - действующий или нет.

Screenshot 2021-04-19 at 14.35.56.png



























Элементы списка "Контрагент" можно отфильтровать по двум атрибутам - по виду и статусу.

Первый атрибут связный, поэтому элементы списка "Контрагент" выбраны фильтром от справочника "Вид контрагента", второй атрибут логический, выбран фильтром по значению.

 1 "filter": {
 2         "type": "And",
 3         "filters": [
 4           {
 5             "dictionaryEntrySourceId": 2,
 6             "sourceAttribute": {
 7               "id": 1,
 8               "discriminator": "OwnAttributeDefinitionDto"
 9             },
10             "attribute": {
11               "id": 21,
12               "discriminator": "OwnAttributeDefinitionDto"
13             },
14             "conditionType": "AttributeInCollection",
15             "inversion": false,
16             "conditionId": null,
17             "discriminator": "EntryFilterDto"
18           },
19           {
20             "value": "true",
21             "attributeId": 22,
22             "attribute": null,
23             "conditionType": "AttributeInCollection",
24             "inversion": false,
25             "conditionId": null,
26             "discriminator": "ValueConditionalDictionaryCardsFilter"
27           }
28         ],
29         "inversion": false,
30         "discriminator": "CompoundDictionaryCardsFilter"
31       },

В данном примере первый элемент пользовательской карточки - выпадающий список "Вид контрагента" (id=10754). После того, как был выбран элемент "Государственные и муниципальные учреждения", второй элемент пользовательской карточки - выпадающий список "Контрагенты" (id=10755) отфильтрован по связному атрибуту "Вид" (3 элемента удовлетворяют условию первого фильтра) и далее по логическому атрибуту "Статус" (осталось 2 элемента, удовлетворяющих обоим фильтрам).

Screenshot 2021-04-19 at 14.41.48.png
















JSON серверной карточки
  1 {
  2   "id": 10735,
  3   "name": "Пример фильтра от справочника (EntryFilterDto)",
  4   "description": null,
  5   "title": "Пример фильтрации_справочник от справочника",
  6   "entrySettings": null,
  7   "uiSources": [
  8     {
  9       "dataSourceId": 2,
 10       "nameTemplate": "",
 11       "displayAttribute": null,
 12       "hasMultipleValue": false,
 13       "hasNullableValue": false,
 14       "maxElements": null,
 15       "hasServerFiltration": false,
 16       "searchSettings": {
 17         "maxElements": null,
 18         "minInputChars": 2,
 19         "searchMode": "Client",
 20         "debounceMs": 300
 21       },
 22       "id": 1,
 23       "caption": "Вид контрагента",
 24       "enable": true,
 25       "visible": true,
 26       "hint": null,
 27       "doActionOnChangeValue": true,
 28       "onAfterChangeValueConditionalActions": null,
 29       "onAfterChangeValueByClientConditionalActions": null,
 30       "rebuildDependentsObjectOnChange": true,
 31       "enableRuleIds": [],
 32       "visibleRuleIds": [],
 33       "access": null,
 34       "isValueChanged": true,
 35       "expressionId": null,
 36       "discriminator": "DictionarySourceEntry"
 37     },
 38     {
 39       "dataSourceId": 3,
 40       "nameTemplate": "",
 41       "displayAttribute": null,
 42       "hasMultipleValue": false,
 43       "hasNullableValue": false,
 44       "maxElements": null,
 45       "hasServerFiltration": false,
 46       "searchSettings": {
 47         "maxElements": null,
 48         "minInputChars": 2,
 49         "searchMode": "Client",
 50         "debounceMs": 300
 51       },
 52       "id": 2,
 53       "caption": "Контрагенты",
 54       "enable": true,
 55       "visible": true,
 56       "hint": null,
 57       "doActionOnChangeValue": false,
 58       "onAfterChangeValueConditionalActions": null,
 59       "onAfterChangeValueByClientConditionalActions": null,
 60       "rebuildDependentsObjectOnChange": true,
 61       "enableRuleIds": [],
 62       "visibleRuleIds": [],
 63       "access": null,
 64       "isValueChanged": false,
 65       "expressionId": null,
 66       "discriminator": "DictionarySourceEntry"
 67     }
 68   ],
 69   "entryDataSources": [
 70     {
 71       "dictionaryId": 10754,
 72       "hierarchyId": null,
 73       "filter": null,
 74       "sortingOptions": null,
 75       "groupingOptions": null,
 76       "dictionaryAttributes": null,
 77       "defaultValue": [],
 78       "defaultValueExpressionId": null,
 79       "parameterId": null,
 80       "dictionarySourceSelectionMode": "None",
 81       "dataSourceAttributesAdditionsSettings": [],
 82       "externalFileStorageUrl": null,
 83       "filePrefix": null,
 84       "defaultNewElementSettings": null,
 85       "id": 2,
 86       "name": "Вид контрагента",
 87       "isReadOnly": true,
 88       "dataEditRuleIds": [],
 89       "beforeSaveDataActions": [],
 90       "afterSaveDataActions": [],
 91       "discriminator": "DictionaryDataSource"
 92     },
 93     {
 94       "dictionaryId": 10755,
 95       "hierarchyId": null,
 96       "filter": {
 97         "type": "And",
 98         "filters": [
 99           {
100             "dictionaryEntrySourceId": 2,
101             "sourceAttribute": {
102               "id": 1,
103               "discriminator": "OwnAttributeDefinitionDto"
104             },
105             "attribute": {
106               "id": 21,
107               "discriminator": "OwnAttributeDefinitionDto"
108             },
109             "conditionType": "AttributeInCollection",
110             "inversion": false,
111             "conditionId": null,
112             "discriminator": "EntryFilterDto"
113           },
114           {
115             "value": "true",
116             "attributeId": 22,
117             "attribute": null,
118             "conditionType": "AttributeInCollection",
119             "inversion": false,
120             "conditionId": null,
121             "discriminator": "ValueConditionalDictionaryCardsFilter"
122           }
123         ],
124         "inversion": false,
125         "discriminator": "ValueConditionalDictionaryCardsFilter"
126       },
127       "sortingOptions": null,
128       "groupingOptions": null,
129       "dictionaryAttributes": [],
130       "defaultValue": [],
131       "defaultValueExpressionId": null,
132       "parameterId": null,
133       "dictionarySourceSelectionMode": "None",
134       "dataSourceAttributesAdditionsSettings": [],
135       "externalFileStorageUrl": null,
136       "filePrefix": null,
137       "defaultNewElementSettings": null,
138       "id": 3,
139       "name": "Контрагенты",
140       "isReadOnly": true,
141       "dataEditRuleIds": [],
142       "beforeSaveDataActions": [],
143       "afterSaveDataActions": [],
144       "discriminator": "DictionaryDataSource"
145     }
146   ],
147   "parameters": [],
148   "binaryConditionsRules": [],
149   "submitValidateRules": [],
150   "expressions": [],
151   "controlsValueCalculateRules": [],
152   "actions": [],
153   "conditionActionIdsOnOpen": [],
154   "conditionalActions": [],
155   "selectionSets": [],
156   "reportTemplates": [],
157   "useNewDependenciesBuilder": null
158 }