Платформа 3V/Формы/Источники данных/Справочник/Создание нового элемента при открытии формы: различия между версиями
м (M.obukhova переименовал страницу Платформа 3V/Карточка/CardsDto/defaultNewElementSettings в Платформа 3V/Формы/Источники данных/Справочник/Создание нового элемента) |
|||
Строка 1: | Строка 1: | ||
== Описание == | == Описание == | ||
− | Для того, чтобы при открытии формы сразу создавался элемент справочника, необходимо в источнике данных ([[Платформа_3V/Формы/Источники_данных/Справочник |'''DictionaryDataSource ''']]) прописать '''defaultNewElementSettings''' : | + | Новый элемент справочника можно создавать с помощью Action ([[Платформа 3V/Формы/Действия/Создание_нового_элемента_справочника |'''CreateNewElementInDictionaryAction''']]), но если выполнение этого Action запускается при открытии формы, то происходит следующее: |
+ | 1. Запрашиваются все источники, которые используются в форме; | ||
+ | 2. Выполняются Действия, установленные на открытии формы (ConditionActionIdsOnOpen), в т.ч. создается новый элемент справочника; | ||
+ | 3. Перестраиваются источники, которые зависят от этого элемента. | ||
+ | Если все источники зависят от одного главного справочника, то это, по сути, приводит к двойному построению формы. Метод '''defaultNewElementSettings''' срабатывает еще по первого построения источников и позволяет уйти от двойного запроса одних и тех же справочников и пивотов. | ||
+ | |||
+ | Для того, чтобы при открытии формы сразу создавался элемент справочника, необходимо в источнике данных ([[Платформа_3V/Формы/Источники_данных/Справочник |'''DictionaryDataSource ''']]) прописать '''defaultNewElementSettings''': | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! " | + | ! "entryDataSources": {} |
|- | |- | ||
| <syntaxhighlight lang="JSON" line> | | <syntaxhighlight lang="JSON" line> | ||
Строка 39: | Строка 45: | ||
|} | |} | ||
+ | |||
+ | |||
+ | <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": 1, | ||
+ | "name": "Создание элемента справочника", | ||
+ | "description": null, | ||
+ | "ConditionActionIdsOnOpen": [], | ||
+ | "uiSources": [ | ||
+ | { | ||
+ | "defaultValue": null, | ||
+ | "value": null, | ||
+ | "id": 105, | ||
+ | "hasMultipleValue": false, | ||
+ | "caption": "Справочник", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "dataSourceId": 105, | ||
+ | "hint": null, | ||
+ | "uiDataSource": { | ||
+ | "attributeId": 1, | ||
+ | "sourceId": 105, | ||
+ | "discriminator": "UiDataSourceDictionary" | ||
+ | }, | ||
+ | "doActionOnChangeValue": true, | ||
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": [], | ||
+ | "enableRuleIds": [], | ||
+ | "visibleRuleIds": [], | ||
+ | "access": { | ||
+ | "read": { | ||
+ | "roles": [], | ||
+ | "inversion": false, | ||
+ | "default": true | ||
+ | }, | ||
+ | "edit": { | ||
+ | "roles": [], | ||
+ | "inversion": false, | ||
+ | "default": true | ||
+ | } | ||
+ | }, | ||
+ | "isValueChanged": false, | ||
+ | "expressionId": null, | ||
+ | "discriminator": "DictionarySourceEntry" | ||
+ | } | ||
+ | ], | ||
+ | "entryDataSources": [ | ||
+ | { | ||
+ | "discriminator": "DictionaryDataSource", | ||
+ | "dictionaryId": 105, | ||
+ | "filter": null, | ||
+ | "dictionarySourceSelectionMode": "None", | ||
+ | "id": 105, | ||
+ | "name": "Справочник", | ||
+ | "isReadOnly": false, | ||
+ | "defaultNewElementSettings": { | ||
+ | "createElementConditionId": 111100, | ||
+ | "defaultValues": [ | ||
+ | { | ||
+ | "attributeId": 2, | ||
+ | "value": "Новый объект1", | ||
+ | "expressionId": null | ||
+ | }, | ||
+ | { | ||
+ | "attributeId": 21, | ||
+ | "value": null, | ||
+ | "expressionId": 3001 | ||
+ | } | ||
+ | ], | ||
+ | "saveElementOnInitialize": true | ||
+ | } | ||
+ | } | ||
+ | ], | ||
+ | "parameters": [ | ||
+ | { | ||
+ | "id": 1, | ||
+ | "name": "Элемент справочника", | ||
+ | "defaultValue": [] | ||
+ | } | ||
+ | ], | ||
+ | "binaryConditionsRules": [ | ||
+ | { | ||
+ | "id": 111100, | ||
+ | "binaryCondition": { | ||
+ | "expressionId": 111100, | ||
+ | "value": null, | ||
+ | "conditionType": "ValueIsNotNull", | ||
+ | "inversion": true, | ||
+ | "discriminator": "BinaryConditionExpressionOperand" | ||
+ | } | ||
+ | } | ||
+ | ], | ||
+ | "SubmitValidateRules": [], | ||
+ | "expressions": [ | ||
+ | { | ||
+ | "id": 3001, | ||
+ | "expression": "Now()", | ||
+ | "returnFirstParameterValue": true, | ||
+ | "parameters": [], | ||
+ | "comment": "Текущая дата" | ||
+ | }, | ||
+ | { | ||
+ | "id": 111100, | ||
+ | "expression": null, | ||
+ | "returnFirstParameterValue": true, | ||
+ | "parameters": [ | ||
+ | { | ||
+ | "parameterId": 1, | ||
+ | "id": 0, | ||
+ | "allowMultipleValues": false, | ||
+ | "discriminator": "EntryExpressionCardParameterDto" | ||
+ | } | ||
+ | ], | ||
+ | "comment": "Возвращает значение параметр карточки [1]" | ||
+ | } | ||
+ | ], | ||
+ | "actions": [], | ||
+ | "conditionalActions": [], | ||
+ | "selectionSets": [] | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div></div> | ||
+ | |||
+ | == Особенности использования == | ||
+ | Новому элементу можно сразу при создании присвоить дефолтые значения атрибутов. Эти значения могут быть константой либо вычислены в expression. Но есть одно ограничение: этот метод не сможет подставить значение из других справочников, т.к. он срабатывает ДО построения источников |
Версия 04:25, 29 апреля 2021
Описание
Новый элемент справочника можно создавать с помощью 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 | Сохранять элемент при инициализации формы |
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. Но есть одно ограничение: этот метод не сможет подставить значение из других справочников, т.к. он срабатывает ДО построения источников