Платформа 3V/Формы/Источники данных/Справочник/Создание нового элемента при открытии формы
Описание
Существуют 2 варианта реализации данного функционала:
1. Новый элемент справочника можно создавать с помощью Action (CreateNewElementInDictionaryAction), но если выполнение этого Action запускается при открытии формы, то происходит следующее:
- Запрашиваются все источники, которые используются в форме;
- Выполняются Действия, установленные на открытии формы (ConditionActionIdsOnOpen), в т.ч. создается новый элемент справочника;
- Перестраиваются источники, которые зависят от этого элемента.
2. Если все источники зависят от одного главного справочника, то это, по сути, приводит к двойному построению формы. Метод defaultNewElementSettings срабатывает еще по первого построения источников и позволяет уйти от двойного запроса одних и тех же справочников и пивотов.
Для того, чтобы при открытии формы сразу создавался элемент справочника, необходимо в источнике данных (DictionaryDataSource ) прописать defaultNewElementSettings, где обязательно указать "saveElementOnInitialize": true и значения для заполнения атрибутов по умолчанию:
"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. Но есть одно ограничение: этот метод не сможет подставить значение из других справочников, т.к. он срабатывает ДО построения источников
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 }