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

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

Описание

Новый элемент справочника можно создавать с помощью 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 Сохранять элемент при инициализации формы


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 }

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

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