Платформа 3V/Формы/Компоненты/Основные/Кнопка/Кнопка 'Сохранить'

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

Кнопку "Сохранить" можно реализовать двумя способами:

1. Кнопка Сохранить (ButtonSubmitSourceEntryDto),
2. Пользовательская кнопка (CustomButtonEntry).

Кнопка Сохранить (ButtonSubmitSourceEntryDto) сохраняет данные автоматически в источники, у которых свойство readOnly = false.
Пользовательской кнопке (CustomButtonEntry) необходимо прописать действие, которое сохраняет добавленный элемент в источнике данных.
Обе кнопки могут содержать дополнительные действия помимо сохранения.
Основным отличием является порядок выполнения действий - в кнопке ButtonSubmitSourceEntryDto нельзя управлять порядком сохранения.

Сравнение кнопок

Свойство / Тип кнопки ButtonSubmitSourceEntryDto CustomButtonEntry
Actions Может быть пустым Обязательно должно содержать действие,
которое сохраняет добавленный элемент в источнике данных
Управлять порядком выполнения действий Нельзя Можно


ButtonSubmitSourceEntryDto

Примерный алгоритм:
1. В раздел uiSources добавляем элемент управления (строка в данном примере), значения которого будет записывать кнопка.

 1   "uiSources": [
 2     {...},
 3     {
 4       ...
 5 
 6       "id": 1,
 7       "uiDataSource": {
 8         "attribute": {
 9           "id": 2,
10           "discriminator": "OwnAttributeDefinitionDto"
11         },
12         "attributeId": null,
13         "sourceId": 1,
14         "discriminator": "UiDataSourceDictionary"
15       },
16        ... 
17 
18       "discriminator": "StringSourceEntry"
19     }
20 ]

2. В раздел uiSources добавляем элементы управления кнопка ButtonSubmitSourceEntry. Свойство Actions в данном примере пустое, дополнительных действий нет.

 1 "uiSources": [
 2      {
 3       "actionConfirmation": { ... },
 4       "Actions": [],
 5       "onBeforeClickConditionalActions": [],
 6       "submitRuleIds": [],
 7       "id": 100,
 8       "caption": "Сохранить",
 9 
10       ... 
11 
12       "discriminator": "ButtonSubmitSourceEntry"
13     },
14     {...}
15 ]

3. В раздел entryDataSources добавляем источник (справочник в данном примере), в который записываются данные.
Важно, чтобы свойство "isReadOnly" источника (источников), куда записываются данные, принимало значение false.

 1 "entryDataSources": [
 2     {
 3       "dictionaryId": 47,
 4 
 5       ... 
 6 
 7       "id": 1,
 8       "name": "Список контрагентов",
 9       "isReadOnly": false,
10 
11       ...
12 
13       "discriminator": "DictionaryDataSource"
14     }
15   ],

Кнопка сохранит все введенные данные автоматически.

Пример

Кейс: Добавление нового элемента справочника.

Screenshot 2021-06-18 at 11.37.46.png








Screenshot 2021-06-18 at 11.41.09.png










Кнопка Сохранить (контрол id=100) сохрает введенное в строку значение в справочник (источник id=3).

JSON серверной карточки

CustomButtonEntry

Пользовательская кнопка CustomButtonEntry требует добавить действие, которое сохраняет добавленный элемент в источнике данных. Действия, "повешанные" на кнопку, будут выполняться последовательно.
Примерный алгоритм:
1. В раздел uiSources добавляем элементы управления. В приведенном примере - дата начала периода, дата окончания периода и строка, которая заполнится рассчитанной длительностью периода.

 1  
 2 "uiSources": [
 3     {...},
 4     {
 5       "id": 222,
 6       "caption": "Длительность периода",
 7       "uiDataSource": {
 8         "attribute": {
 9           "id": 20,
10           "discriminator": "OwnAttributeDefinitionDto"
11         },
12         "attributeId": null,
13         "sourceId": 1,
14         "discriminator": "UiDataSourceDictionary"
15       },
16       "discriminator": "StringSourceEntry",
17       ...
18     },
19     {
20       "id": 21,
21       "caption": "Дата начала периода",
22        ...,
23       "discriminator": "DateTimeSourceEntry"
24     },
25     {
26      
27       "id": 22,
28       "caption": "Дата конца периода",
29       ...,
30       "discriminator": "DateTimeSourceEntry"
31     },
32 
33     {...}
34 ]

2. В раздел uiSources добавляем элементы управления пользовательская кнопка CustomButtonEntry. В Actions в данном примере два действия, сначала рассчитается длинна периода, отобразится в строке и только потом сохранится это значение.

 1 "uiSources": [  
 2     {
 3       ...,
 4 
 5       "Actions": [
 6         222,
 7         111
 8       ],
 9       "id": 200,
10       "caption": "Сохранить",
11 
12       ...
13 
14       "discriminator": "CustomButtonEntry"
15     },
16 
17     {...}
18 ]

3. В раздел entryDataSources добавляем источник (справочник в данном примере), в который записываются данные.

 1 "entryDataSources": [
 2     {
 3       "dictionaryId": 316,
 4       ...,
 5       "name": "Длительность отпусков",
 6       "isReadOnly": false,
 7       "dataEditRuleIds": [],
 8       "beforeSaveDataActions": [],
 9       "afterSaveDataActions": [],
10        "discriminator": "DictionaryDataSource"
11     },
12     {...}
13 ]

Пример

Кейс: Внести данные об отпуске сотрудника - ФИО и период. При нажатии кнопки "Сохранить" выполняться три действия: сначала произойдет вычисление количества дней отпуска, затем данные сохранятся и, наконец, обновится пивот.

Внесение данных












Вычисление и запись результата
















JSON серверной карточки