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

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
(нет различий)

Версия 13:52, 11 февраля 2022

Описание

Новый элемент справочника можно создавать с помощью Action (CreateNewElementInDictionaryAction), но если выполнение этого Action запускается при открытии формы, то происходит следующее:

1. Запрашиваются все источники, которые используются в форме;

2. Выполняются Действия, установленные на открытии формы (ConditionActionIdsOnOpen), в т.ч. создается новый элемент справочника;

3. Перестраиваются источники, которые зависят от этого элемента.

Если все источники зависят от одного главного справочника, то это, по сути, приводит к двойному построению формы. Метод defaultNewElementSettings срабатывает еще по первого построения источников и позволяет уйти от двойного запроса одних и тех же справочников и пивотов.

Для того, чтобы при открытии формы сразу создавался элемент справочника, необходимо в источнике данных (DictionaryDataSource ) прописать defaultNewElementSettings:

"entryDataSources": {}
 1  "defaultNewElementSettings": {
 2         "createElementConditionId": 111100,
 3         "defaultValues": [
 4           {
 5             "attributeId": 2,
 6             "value": "Новый объект",
 7             "expressionId": null
 8           },    
 9           {
10             "attributeId": 3,
11             "value": null,
12             "expressionId": 1001
13           }
14         ],
15         "saveElementOnInitialize": true
16       },
Поле Описание
createElementConditionId Условие, при выполнении которого необходимо создавать новый элемент (binaryConditionsRules)
defaultValues Значения атрибутов, которые присваиваются новому элементу
saveElementOnInitialize Сохранять элемент при инициализации формы

Особенности использования

Новому элементу можно сразу при создании присвоить дефолтые значения атрибутов. Эти значения могут быть константой либо вычислены в expression. Но есть одно ограничение: этот метод не сможет подставить значение из других справочников, т.к. он срабатывает ДО построения источников


JSON серверной карточки
  1 {
  2   "id": 1,
  3   "name": "Создание элемента справочника",
  4   "description": null,
  5   "ConditionActionIdsOnOpen": [],
  6   "uiSources": [
  7     {
  8       "defaultValue": null,
  9       "value": null,
 10       "id": 105,
 11       "hasMultipleValue": false,
 12       "caption": "Справочник",
 13       "enable": true,
 14       "visible": true,
 15       "dataSourceId": 105,
 16       "hint": null,
 17       "uiDataSource": {
 18         "attributeId": 1,
 19         "sourceId": 105,
 20         "discriminator": "UiDataSourceDictionary"
 21       },
 22       "doActionOnChangeValue": true,
 23       "onAfterChangeValueConditionalActions": null,
 24       "onAfterChangeValueByClientConditionalActions": [],
 25       "enableRuleIds": [],
 26       "visibleRuleIds": [],
 27       "access": {
 28         "read": {
 29           "roles": [],
 30           "inversion": false,
 31           "default": true
 32         },
 33         "edit": {
 34           "roles": [],
 35           "inversion": false,
 36           "default": true
 37         }
 38       },
 39       "isValueChanged": false,
 40       "expressionId": null,
 41       "discriminator": "DictionarySourceEntry"
 42     }
 43   ],
 44   "entryDataSources": [
 45     {
 46       "discriminator": "DictionaryDataSource",
 47       "dictionaryId": 105,
 48       "filter": null,
 49       "dictionarySourceSelectionMode": "None",
 50       "id": 105,
 51       "name": "Справочник",
 52       "isReadOnly": false,
 53       "defaultNewElementSettings": {
 54         "createElementConditionId": 111100,
 55         "defaultValues": [
 56           {
 57             "attributeId": 2,
 58             "value": "Новый объект1",
 59             "expressionId": null
 60           },
 61           {
 62             "attributeId": 21,
 63             "value": null,
 64             "expressionId": 3001
 65           }
 66         ],
 67         "saveElementOnInitialize": true
 68       }
 69     }
 70   ],
 71   "parameters": [
 72     {
 73       "id": 1,
 74       "name": "Элемент справочника",
 75       "defaultValue": []
 76     }
 77   ],
 78   "binaryConditionsRules": [
 79     {
 80       "id": 111100,
 81       "binaryCondition": {
 82         "expressionId": 111100,
 83         "value": null,
 84         "conditionType": "ValueIsNotNull",
 85         "inversion": true,
 86         "discriminator": "BinaryConditionExpressionOperand"
 87       }
 88     }
 89   ],
 90   "SubmitValidateRules": [],
 91   "expressions": [
 92     {
 93       "id": 3001,
 94       "expression": "Now()",
 95       "returnFirstParameterValue": true,
 96       "parameters": [],
 97       "comment": "Текущая дата"
 98     },
 99     {
100       "id": 111100,
101       "expression": null,
102       "returnFirstParameterValue": true,
103       "parameters": [
104         {
105           "parameterId": 1,
106           "id": 0,
107           "allowMultipleValues": false,
108           "discriminator": "EntryExpressionCardParameterDto"
109         }
110       ],
111       "comment": "Возвращает значение параметр карточки [1]"
112     }
113   ],
114   "actions": [],
115   "conditionalActions": [],
116   "selectionSets": []
117 }