Платформа 3V/Формы/Компоненты/Основные/Кнопка/Кнопка 'Сохранить': различия между версиями

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
 
(не показано 19 промежуточных версий 2 участников)
Строка 1: Строка 1:
=!!!СТРАНИЦА НАХОДИТСЯ В СТАДИИ РАЗРАБОТКИ!!!=
 
 
 
Кнопку "Сохранить" можно реализовать двумя способами: <br><br>
 
Кнопку "Сохранить" можно реализовать двумя способами: <br><br>
1. Кнопка ButtonSubmitSourceEntryDto, <br>
+
1. Кнопка Сохранить (ButtonSubmitSourceEntryDto), <br>
2. Кнопка CustomButtonEntry.  <br>
+
2. Пользовательская кнопка (CustomButtonEntry).  <br>
 
<br>
 
<br>
  
Обе кнопки могут содержать дополнительные действия помимо сохранения.  
+
Кнопка Сохранить (ButtonSubmitSourceEntryDto) сохраняет данные автоматически в источники, у которых свойство readOnly = false. <br>
Основным отличием является порядок сохранения данных -  в кнопке ButtonSubmitSourceEntryDto нельзя управлять порядком сохранения. <br>
+
Пользовательской кнопке (CustomButtonEntry) необходимо прописать действие, которое сохраняет добавленный элемент в источнике данных. <br>
 +
Обе кнопки могут содержать дополнительные действия помимо сохранения. <br>
 +
Основным отличием является порядок выполнения действий -  в кнопке ButtonSubmitSourceEntryDto нельзя управлять порядком сохранения. <br>
  
 
== Сравнение кнопок  ==
 
== Сравнение кнопок  ==
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Свойство!! ButtonSubmitSourceEntryDto !! CustomButtonEntry
+
! Свойство / Тип кнопки !! ButtonSubmitSourceEntryDto !! CustomButtonEntry
 
|-
 
|-
| Actions || Может быть пустым || Обязательно должно содержать [[Платформа_3V/Формы/Действия/Сохранение источников|'''действие, которое сохраняет добавленный элемент в источнике данных''']]
+
| Actions || Может быть пустым || Обязательно должно содержать [[Платформа_3V/Формы/Действия/Сохранение источников|'''действие, <br> которое сохраняет добавленный элемент в источнике данных''']]
 
|-
 
|-
| Порядок выполнения действий || Параллельно || Последовательно
+
| Управлять порядком выполнения действий || Нельзя  || Можно
  
 
|}
 
|}
  
Кнопка ButtonSubmitSourceEntryDto сохраняет данные автоматически и не требует добавлять действие, которое сохранит данные, то есть раздел Actions у нее может быть пустой.
 
 
Обе кнопки могут содержать дополнительные действия помимо сохранения.
 
 
Основным отличием является порядок сохранения данных -  в кнопке ButtonSubmitSourceEntryDto нельзя управлять порядком сохранения. <br>
 
  
 
==ButtonSubmitSourceEntryDto==
 
==ButtonSubmitSourceEntryDto==
 +
Примерный алгоритм: <br>
 
1. В раздел uiSources добавляем элемент управления (строка в данном примере), значения которого будет записывать кнопка.
 
1. В раздел uiSources добавляем элемент управления (строка в данном примере), значения которого будет записывать кнопка.
 
<syntaxhighlight lang="JSON" line>
 
<syntaxhighlight lang="JSON" line>
Строка 53: Строка 49:
 
</div></div>
 
</div></div>
  
2. В раздел uiSources добавляем элементы управления кнопка ButtonSubmitSourceEntry:
+
2. В раздел uiSources добавляем элементы управления кнопка ButtonSubmitSourceEntry. Свойство Actions в данном примере пустое, дополнительных действий нет.
  
 
<syntaxhighlight lang="JSON" line>
 
<syntaxhighlight lang="JSON" line>
Строка 76: Строка 72:
 
</div></div>
 
</div></div>
  
3. В раздел entryDataSourcesисточники добавляем источник (справочник в данном примере), в который записываются данные.  <br>
+
3. В раздел entryDataSources добавляем источник (справочник в данном примере), в который записываются данные.  <br>
 
Важно, чтобы свойство "isReadOnly" [[Платформа_3V/Формы/Источники_данных|'''источника (источников)''']], куда записываются данные, принимало значение false.
 
Важно, чтобы свойство "isReadOnly" [[Платформа_3V/Формы/Источники_данных|'''источника (источников)''']], куда записываются данные, принимало значение false.
  
Строка 100: Строка 96:
 
</div></div>
 
</div></div>
  
Кнопка сохраняет все введенные данные автоматически. <br>
+
Кнопка сохранит все введенные данные автоматически. <br>  
 
 
 
 
 
 
<syntaxhighlight lang="JSON" line>
 
{
 
      "actionConfirmation": {
 
        "message": null,
 
        "conditionId": null
 
      },
 
      "controlsValueCalculateRulesIds": [],
 
      "Actions": [],
 
      "onBeforeClickConditionalActions": [],
 
      "submitRuleIds": [],
 
      "id": 100,
 
      "caption": "Сохранить",
 
      "enable": true,
 
      "visible": true,
 
      "hint": null,
 
      "uiDataSource": null,
 
      "doActionOnChangeValue": true,
 
      "onAfterChangeValueConditionalActions": null,
 
      "onAfterChangeValueByClientConditionalActions": null,
 
      "rebuildDependentsObjectOnChange": false,
 
      "enableRuleIds": [],
 
      "visibleRuleIds": [],
 
      "access": null,
 
      "isValueChanged": false,
 
      "expressionId": null,
 
      "discriminator": "ButtonSubmitSourceEntry"
 
    }
 
 
 
</syntaxhighlight>
 
</div></div>
 
  
 
===Пример===
 
===Пример===
Строка 145: Строка 108:
 
<br><br><br><br><br><br><br><br><br>
 
<br><br><br><br><br><br><br><br><br>
  
Кнопка Сохранить(контрол id=100) сохрает введенное в строку значение в справочник (источник id=3).  
+
Кнопка Сохранить (контрол id=100) сохрает введенное в строку значение в справочник (источник id=3).  
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:800px; overflow:auto;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:800px; overflow:auto;">
Строка 256: Строка 219:
  
 
==CustomButtonEntry==
 
==CustomButtonEntry==
Кнопка CustomButtonEntry требует [[Платформа_3V/Формы/Действия/Сохранение источников|'''добавить действие, которое сохраняет добавленный элемент в источнике данных''']]. <br>
+
Пользовательская кнопка CustomButtonEntry требует [[Платформа_3V/Формы/Действия/Сохранение источников|'''добавить действие, которое сохраняет добавленный элемент в источнике данных''']]. Действия, "повешанные" на кнопку, будут выполняться последовательно.<br>
Действия, "повешанные" на кнопку, будут выполняться последовательно.
+
Примерный алгоритм:<br>
 +
1. В раздел uiSources добавляем элементы управления. В приведенном примере - дата начала периода, дата окончания периода и строка, которая заполнится рассчитанной длительностью периода.
 +
 
 
<syntaxhighlight lang="JSON" line>
 
<syntaxhighlight lang="JSON" line>
{
+
  "id": 1,
+
"uiSources": [
  "caption": "Сохранить",
+
    {...},
  "nullable": true,
+
    {
  "enable": true,
+
      "id": 222,
  "visible": true,
+
      "caption": "Длительность периода",
  "hint": null,
+
      "uiDataSource": {
  "nullable": true
+
        "attribute": {
  "uiDataSource": null,
+
          "id": 20,
  "doActionOnChangeValue": true,
+
          "discriminator": "OwnAttributeDefinitionDto"
  "onAfterChangeValueConditionalActions": null,
+
        },
  "onAfterChangeValueActions": null,
+
        "attributeId": null,
  "onAfterChangeValueByClientConditionalActions": null,
+
        "sourceId": 1,
  "onAfterChangeValueByClientActions": null,
+
        "discriminator": "UiDataSourceDictionary"
  "rebuildDependentsObjectOnChange": true,
+
      },
  "enableExpressionIds": [],
+
      "discriminator": "StringSourceEntry",
  "visibleExpressionIds": [],
+
      ...
  "isValueChanged" boolean
+
    },
  "expressionId": [],
+
    {
  "controlsValueCalculateRulesIds"[],
+
      "id": 21,
  "actions[ 51, 50]
+
      "caption": "Дата начала периода",
  "onBeforeClickConditionalActions": [],
+
      ...,
  "onBeforeClickActions": [],
+
      "discriminator": "DateTimeSourceEntry"
  "submitRuleIds": [],
+
    },
  "discriminator": CustomButtonEntry,
+
    {
}
+
   
 +
      "id": 22,
 +
      "caption": "Дата конца периода",
 +
      ...,
 +
      "discriminator": "DateTimeSourceEntry"
 +
    },
 +
 
 +
    {...}
 +
]
 +
</syntaxhighlight>
 +
</div></div>
 +
 
 +
2. В раздел uiSources добавляем элементы управления пользовательская кнопка CustomButtonEntry. В Actions в данном примере два действия, сначала рассчитается длинна периода, отобразится в строке и только потом сохранится это значение.
 +
 
 +
<syntaxhighlight lang="JSON" line>
 +
 
 +
"uiSources": [  
 +
    {
 +
      ...,
 +
 
 +
      "Actions": [
 +
        222,
 +
        111
 +
      ],
 +
      "id": 200,
 +
      "caption": "Сохранить",
 +
 
 +
      ...
 +
 
 +
      "discriminator": "CustomButtonEntry"
 +
    },
 +
 
 +
    {...}
 +
]
 +
 
 +
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
</div></div>
 +
 +
3. В раздел entryDataSources добавляем источник (справочник в данном примере), в который записываются данные.  <br>
 +
 +
<syntaxhighlight lang="JSON" line>
  
 +
"entryDataSources": [
 +
    {
 +
      "dictionaryId": 316,
 +
      ...,
 +
      "name": "Длительность отпусков",
 +
      "isReadOnly": false,
 +
      "dataEditRuleIds": [],
 +
      "beforeSaveDataActions": [],
 +
      "afterSaveDataActions": [],
 +
      "discriminator": "DictionaryDataSource"
 +
    },
 +
    {...}
 +
]
 +
 +
</syntaxhighlight>
 +
</div></div>
 
===Пример===
 
===Пример===
 
Кейс: Внести данные об отпуске сотрудника - ФИО и период.  При нажатии кнопки "Сохранить" выполняться три действия: сначала произойдет вычисление количества дней отпуска, затем данные сохранятся и, наконец, обновится пивот.
 
Кейс: Внести данные об отпуске сотрудника - ФИО и период.  При нажатии кнопки "Сохранить" выполняться три действия: сначала произойдет вычисление количества дней отпуска, затем данные сохранятся и, наконец, обновится пивот.

Текущая версия на 08:43, 17 сентября 2021

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

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 серверной карточки