Платформа 3V/Формы/Компоненты/Основные/Кнопка/Кнопка 'Сохранить': различия между версиями
Строка 220: | Строка 220: | ||
"discriminator": CustomButtonEntry, | "discriminator": CustomButtonEntry, | ||
} | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Пример=== | ||
+ | Кейс: Внести данные об отпуске сотрудника - ФИО и период, при нажатии кнопки "Сохранить" произойдет вычисление количества дней отпуска, после этого данные сохранятся. | ||
+ | |||
+ | [[Файл:SubmitButton.gif|обрамить|слева]] | ||
+ | |||
+ | <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": 356, | ||
+ | "title": "", | ||
+ | "description": "", | ||
+ | "uiSources": [ | ||
+ | { | ||
+ | "submitRuleIds": [], | ||
+ | "actionConfirmation": { | ||
+ | "message": null, | ||
+ | "conditionId": null | ||
+ | }, | ||
+ | "controlsValueCalculateRulesIds": [], | ||
+ | "conditionalActions": [ | ||
+ | 222, | ||
+ | 111, | ||
+ | 333 | ||
+ | ], | ||
+ | "onBeforeClickConditionalActions": [], | ||
+ | "id": 200, | ||
+ | "caption": "Кнопка для вычисления длительности периода", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "hint": null, | ||
+ | "uiDataSource": null, | ||
+ | "doActionOnChangeValue": false, | ||
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": null, | ||
+ | "enableRuleIds": [], | ||
+ | "visibleRuleIds": [], | ||
+ | "access": { | ||
+ | "read": { | ||
+ | "roles": [], | ||
+ | "inversion": false, | ||
+ | "default": true | ||
+ | }, | ||
+ | "edit": { | ||
+ | "roles": [], | ||
+ | "inversion": false, | ||
+ | "default": true | ||
+ | } | ||
+ | }, | ||
+ | "isValueChanged": false, | ||
+ | "expressionId": null, | ||
+ | "discriminator": "CustomButtonEntry" | ||
+ | }, | ||
+ | { | ||
+ | "id": 222, | ||
+ | "caption": "Длительность периода", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "uiDataSource": { | ||
+ | "attribute": { | ||
+ | "id": 20, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "attributeId": null, | ||
+ | "sourceId": 1, | ||
+ | "discriminator": "UiDataSourceDictionary" | ||
+ | }, | ||
+ | "discriminator": "StringSourceEntry", | ||
+ | "doActionOnChangeValue": false | ||
+ | }, | ||
+ | { | ||
+ | "defaultValue": null, | ||
+ | "value": null, | ||
+ | "id": 21, | ||
+ | "caption": "Дата начала периода", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "hint": null, | ||
+ | "doActionOnChangeValue": false, | ||
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": null, | ||
+ | "visibleRuleIds": [], | ||
+ | "isValueChanged": false, | ||
+ | "expressionId": null, | ||
+ | "discriminator": "DateTimeSourceEntry" | ||
+ | }, | ||
+ | { | ||
+ | "defaultValue": null, | ||
+ | "value": null, | ||
+ | "id": 22, | ||
+ | "caption": "Дата конца периода", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "hint": null, | ||
+ | "doActionOnChangeValue": false, | ||
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": null, | ||
+ | "visibleRuleIds": [], | ||
+ | "isValueChanged": false, | ||
+ | "expressionId": null, | ||
+ | "discriminator": "DateTimeSourceEntry" | ||
+ | }, | ||
+ | { | ||
+ | "trimSpaces": false, | ||
+ | "defaultValue": null, | ||
+ | "value": null, | ||
+ | "id": 1, | ||
+ | "caption": "Список сотрудников", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "hint": null, | ||
+ | "uiDataSource": { | ||
+ | "attribute": { | ||
+ | "id": 2, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "attributeId": null, | ||
+ | "sourceId": 1, | ||
+ | "discriminator": "UiDataSourceDictionary" | ||
+ | }, | ||
+ | "doActionOnChangeValue": false, | ||
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": null, | ||
+ | "enableRuleIds": [], | ||
+ | "visibleRuleIds": [], | ||
+ | "access": null, | ||
+ | "isValueChanged": false, | ||
+ | "expressionId": null, | ||
+ | "discriminator": "StringSourceEntry" | ||
+ | }, | ||
+ | { | ||
+ | "id": 2, | ||
+ | "pivotSourceId": 2, | ||
+ | "doActionOnChangeFocusedCell": false, | ||
+ | "doActionOnChangeCellValue": true, | ||
+ | "caption": "Пивот Режимы", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "hint": null, | ||
+ | "uiDataSource": null, | ||
+ | "doActionOnChangeValue": false, | ||
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": null, | ||
+ | "enableRuleIds": [], | ||
+ | "visibleRuleIds": [], | ||
+ | "access": {}, | ||
+ | "isValueChanged": false, | ||
+ | "expressionId": null, | ||
+ | "discriminator": "PivotSourceEntry" | ||
+ | } | ||
+ | ], | ||
+ | "entryDataSources": [ | ||
+ | { | ||
+ | "dictionaryId": 316, | ||
+ | "hierarchyId": null, | ||
+ | "filter": null, | ||
+ | "sortingOptions": null, | ||
+ | "groupingOptions": null, | ||
+ | "dictionaryAttributes": null, | ||
+ | "defaultValue": [], | ||
+ | "defaultValueExpressionId": null, | ||
+ | "parameterId": null, | ||
+ | "dictionarySourceSelectionMode": "None", | ||
+ | "dataSourceAttributesAdditionsSettings": [], | ||
+ | "externalFileStorageUrl": null, | ||
+ | "filePrefix": null, | ||
+ | "defaultNewElementSettings": null, | ||
+ | "id": 1, | ||
+ | "name": "Отпуска", | ||
+ | "isReadOnly": false, | ||
+ | "dataEditRuleIds": [], | ||
+ | "beforeSaveDataActions": [], | ||
+ | "afterSaveDataActions": [], | ||
+ | "discriminator": "DictionaryDataSource" | ||
+ | }, | ||
+ | { | ||
+ | "pivotId": 358, | ||
+ | "parameters": [], | ||
+ | "id": 2, | ||
+ | "name": "Пивот Сотрудник и количество дней отпуска", | ||
+ | "isReadOnly": false, | ||
+ | "dataEditRuleIds": [], | ||
+ | "beforeSaveDataActions": [], | ||
+ | "afterSaveDataActions": [], | ||
+ | "discriminator": "PivotDataSource" | ||
+ | } | ||
+ | ], | ||
+ | "parameters": null, | ||
+ | "binaryConditionsRules": [], | ||
+ | "expressions": [ | ||
+ | { | ||
+ | "id": 222, | ||
+ | "expression": "if(IsNullOrEmpty([21]) or IsNullOrEmpty([22]), Null(), (TrimTime([22])-TrimTime([21]))+1)", | ||
+ | "returnFirstParameterValue": false, | ||
+ | "parameters": [ | ||
+ | { | ||
+ | "uiSourceId": 22, | ||
+ | "id": 22, | ||
+ | "discriminator": "EntryExpressionUiSourceParameterDto" | ||
+ | }, | ||
+ | { | ||
+ | "uiSourceId": 21, | ||
+ | "id": 21, | ||
+ | "discriminator": "EntryExpressionUiSourceParameterDto" | ||
+ | } | ||
+ | ], | ||
+ | "comment": null | ||
+ | } | ||
+ | ], | ||
+ | "actions": [ | ||
+ | { | ||
+ | "dataSourcesIds": [ | ||
+ | 1 | ||
+ | ], | ||
+ | "id": 111, | ||
+ | "comment": "Сохранение значения", | ||
+ | "discriminator": "SaveDataSourceAction" | ||
+ | }, | ||
+ | { | ||
+ | "id": 222, | ||
+ | "controlId": 222, | ||
+ | "expressionId": 222, | ||
+ | "comment": "Вычисление количества дней отпуска", | ||
+ | "discriminator": "CalculateControlValueAction" | ||
+ | }, | ||
+ | { | ||
+ | "instanceId": 2, | ||
+ | "id": 333, | ||
+ | "comment": null, | ||
+ | "discriminator": "RebuildSourceInstanceAction" | ||
+ | } | ||
+ | ], | ||
+ | "conditionalActions": [ | ||
+ | { | ||
+ | "id": 111, | ||
+ | "binaryConditionRuleId": null, | ||
+ | "actions": [ | ||
+ | 111 | ||
+ | ], | ||
+ | "parallelRunning": true | ||
+ | }, | ||
+ | { | ||
+ | "id": 222, | ||
+ | "binaryConditionRuleId": null, | ||
+ | "actions": [ | ||
+ | 222 | ||
+ | ] | ||
+ | }, | ||
+ | { | ||
+ | "id": 333, | ||
+ | "binaryConditionRuleId": null, | ||
+ | "actions": [ | ||
+ | 333 | ||
+ | ] | ||
+ | } | ||
+ | ], | ||
+ | "conditionActionIdsOnOpen": null | ||
+ | } | ||
+ | |||
</syntaxhighlight> | </syntaxhighlight> |
Версия 07:17, 25 июня 2021
Содержание
!!!СТРАНИЦА НАХОДИТСЯ В СТАДИИ РАЗРАБОТКИ!!!
Кнопку "Сохранить" можно реализовать двумя способами:
1. кнопка ButtonSubmitSourceEntryDto,
2. кнопка CustomButtonEntry.
Обе кнопки могут содержать дополнительные действия помимо сохранения. Основным отличием является порядок сохранения данных - в кнопке ButtonSubmitSourceEntryDto нельзя управлять порядком сохранения.
ButtonSubmitSourceEntryDto
Пример
Имеется справочник контрагентов, ниже представлена серверная карточка для добавления наименования нового контрагента.
1. Добавлен контрол кнопка Сохранить id=100.
Этот вид кнопки сохраняет все введенные данные автоматически, при условии, что источник (источники), куда записываются данные имеет свойство "isReadOnly": false.
1 {
2 "actionConfirmation": {
3 "message": null,
4 "conditionId": null
5 },
6 "controlsValueCalculateRulesIds": [],
7 "conditionalActions": [],
8 "onBeforeClickConditionalActions": [],
9 "submitRuleIds": [],
10 "id": 100,
11 "caption": "Сохранить",
12 "enable": true,
13 "visible": true,
14 "hint": null,
15 "uiDataSource": null,
16 "doActionOnChangeValue": true,
17 "onAfterChangeValueConditionalActions": null,
18 "onAfterChangeValueByClientConditionalActions": null,
19 "rebuildDependentsObjectOnChange": false,
20 "enableRuleIds": [],
21 "visibleRuleIds": [],
22 "access": null,
23 "isValueChanged": false,
24 "expressionId": null,
25 "discriminator": "ButtonSubmitSourceEntry"
26 }
2. Кнопка Сохранить будет сохранять введенное в строку значение в источник - справочник id=3.
1 {
2 "dictionaryId": 47,
3 "hierarchyId": null,
4 "filter": null,
5 "sortingOptions": null,
6 "groupingOptions": null,
7 "dictionaryAttributes": null,
8 "defaultValue": [],
9 "defaultValueExpressionId": null,
10 "parameterId": null,
11 "dictionarySourceSelectionMode": "None",
12 "dataSourceAttributesAdditionsSettings": [],
13 "externalFileStorageUrl": null,
14 "filePrefix": null,
15 "defaultNewElementSettings": null,
16 "id": 3,
17 "name": "Список контрагентов",
18 "isReadOnly": false,
19 "dataEditRuleIds": [],
20 "beforeSaveDataActions": [],
21 "afterSaveDataActions": [],
22 "discriminator": "DictionaryDataSource"
23
24 }
Здесь два контрола - кнопка Сохранить и строка для ввода нового наименования.
Источник один - справочник в который записываются новые данные, важно, что его свойство isReadOnly имеет значение false, поэтому кнопка типа ButtonSubmitSourceEntry автоматически записывает все введенные данные.
CustomButtonEntry
Кнопка CustomButtonEntry требует добавить действие, которое сохраняет добавленный элемент в источнике данных.
1 {
2 "id": 1,
3 "caption": "Сохранить",
4 "nullable": true,
5 "enable": true,
6 "visible": true,
7 "hint": null,
8 "nullable": true
9 "uiDataSource": null,
10 "doActionOnChangeValue": true,
11 "onAfterChangeValueConditionalActions": null,
12 "onAfterChangeValueActions": null,
13 "onAfterChangeValueByClientConditionalActions": null,
14 "onAfterChangeValueByClientActions": null,
15 "rebuildDependentsObjectOnChange": true,
16 "enableExpressionIds": [],
17 "visibleExpressionIds": [],
18 "isValueChanged" boolean
19 "expressionId": [],
20 "controlsValueCalculateRulesIds"[],
21 "actions" [ 51, 50]
22 "onBeforeClickConditionalActions": [],
23 "onBeforeClickActions": [],
24 "submitRuleIds": [],
25 "discriminator": CustomButtonEntry,
26 }
Пример
Кейс: Внести данные об отпуске сотрудника - ФИО и период, при нажатии кнопки "Сохранить" произойдет вычисление количества дней отпуска, после этого данные сохранятся.