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

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
(Новая страница: «!!! СТРАНИЦА НАХОДИТСЯ В СТАДИИ РАЗРАБОКИ!!! <br> <syntaxhighlight lang="JSON" line> "filter": { "expressionId": 10,...»)
 
 
(не показано 14 промежуточных версий 2 участников)
Строка 1: Строка 1:
!!! СТРАНИЦА НАХОДИТСЯ В СТАДИИ РАЗРАБОКИ!!! <br>
+
Фильтр по значению выражения используется в тех случаях, когда необходимо отфильтровать данные по нескольким параметрам, которые невозможно или трудоемко описать другими типами фильтров (см. пример). <br>
 +
Ниже представлена структура фильтра.
  
 
<syntaxhighlight lang="JSON" line>
 
<syntaxhighlight lang="JSON" line>
Строка 11: Строка 12:
 
         "inversion": false,
 
         "inversion": false,
 
         "conditionId": null,
 
         "conditionId": null,
         "discriminator": "EntryExpressionFilterDto"
+
         "discriminator": "EntryExpressionFilter"
 
       },
 
       },
 
</syntaxhighlight>
 
</syntaxhighlight>
Строка 24: Строка 25:
 
| attribute|| [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' Атрибут''']] текущего источника - справочника, элемент которого будет выбран по заданному параметру. Указывается номер Id и тип атрибута в данном случае собственный (OwnAttributeDefinitionDto), так как используются данные текущего справочника.  
 
| attribute|| [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' Атрибут''']] текущего источника - справочника, элемент которого будет выбран по заданному параметру. Указывается номер Id и тип атрибута в данном случае собственный (OwnAttributeDefinitionDto), так как используются данные текущего справочника.  
 
|-
 
|-
| discriminator|| EntryExpressionFilterDto
+
| discriminator|| EntryExpressionFilter
 
|-
 
|-
 
| conditionType || Тип условий
 
| conditionType || Тип условий
 
|-  
 
|-  
| inversion || В значении "false" фильтр отберет удовлетворяющие ему значения, в значении "true" - все значения, которые наоборот не удовлетворяют ему
+
| inversion || В значении "false" источник-справочник принимает значения, которые удовлетворяют фильтру, в значении "true" - все значения, которые наоборот не удовлетворяют ему
 
|-  
 
|-  
 
| 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 описана на странице Параметры выражений и отчетов

Пример

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

Screenshot 2021-04-23 at 17.37.11.png


















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       ],