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

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
 
(не показаны 43 промежуточные версии 2 участников)
Строка 1: Строка 1:
=!!!СТРАНИЦА НАХОДИТСЯ В СТАДИИ РАЗРАБОТКИ!!!=
+
Кнопку "Сохранить" можно реализовать двумя способами: <br><br>
 +
1. Кнопка Сохранить (ButtonSubmitSourceEntryDto), <br>
 +
2. Пользовательская кнопка (CustomButtonEntry).  <br>
 +
<br>
 +
 
 +
Кнопка Сохранить (ButtonSubmitSourceEntryDto) сохраняет данные автоматически в источники, у которых свойство readOnly = false. <br>
 +
Пользовательской кнопке (CustomButtonEntry) необходимо прописать действие, которое сохраняет добавленный элемент в источнике данных. <br>
 +
Обе кнопки могут содержать дополнительные действия помимо сохранения.  <br>
 +
Основным отличием является порядок выполнения действий -  в кнопке ButtonSubmitSourceEntryDto нельзя управлять порядком сохранения. <br>
 +
 
 +
== Сравнение кнопок  ==
 +
{| class="wikitable"
 +
|-
 +
! Свойство / Тип кнопки !! ButtonSubmitSourceEntryDto !! CustomButtonEntry
 +
|-
 +
| Actions || Может быть пустым || Обязательно должно содержать [[Платформа_3V/Формы/Действия/Сохранение источников|'''действие, <br> которое сохраняет добавленный элемент в источнике данных''']]
 +
|-
 +
| Управлять порядком выполнения действий ||  Нельзя  ||  Можно
 +
 
 +
|}
  
Кнопку "Сохранить" можно реализовать двумя способами: <br>
 
1. кнопка ButtonSubmitSourceEntryDto, <br>
 
2. кнопка CustomButtonEntry.  <br>
 
<br>
 
Обе кнопки могут содержать дополнительные действия помимо сохранения. Основным отличием является порядок сохранения данных -  в кнопке ButtonSubmitSourceEntryDto нельзя управлять порядком сохранения. <br>
 
  
 
==ButtonSubmitSourceEntryDto==
 
==ButtonSubmitSourceEntryDto==
 +
Примерный алгоритм: <br>
 +
1. В раздел uiSources добавляем элемент управления (строка в данном примере), значения которого будет записывать кнопка.
 +
<syntaxhighlight lang="JSON" line>
 +
  "uiSources": [
 +
    {...},
 +
    {
 +
      ...
 +
 +
      "id": 1,
 +
      "uiDataSource": {
 +
        "attribute": {
 +
          "id": 2,
 +
          "discriminator": "OwnAttributeDefinitionDto"
 +
        },
 +
        "attributeId": null,
 +
        "sourceId": 1,
 +
        "discriminator": "UiDataSourceDictionary"
 +
      },
 +
      ...
  
===Пример===
+
      "discriminator": "StringSourceEntry"
Имеется справочник контрагентов, ниже представлена серверная карточка для добавления наименования нового контрагента.<br>
+
    }
1. Добавлен контрол кнопка Сохранить id=100. <br>
+
]
Этот вид кнопки сохраняет все введенные данные автоматически, при условии, что источник (источники), куда записываются данные имеет свойство "isReadOnly": false.
+
 
 +
</syntaxhighlight>
 +
</div></div>
 +
 
 +
2. В раздел uiSources добавляем элементы управления кнопка ButtonSubmitSourceEntry. Свойство Actions в данном примере пустое, дополнительных действий нет.
  
 
<syntaxhighlight lang="JSON" line>
 
<syntaxhighlight lang="JSON" line>
{
+
 
      "actionConfirmation": {
+
"uiSources": [
        "message": null,
+
    {
        "conditionId": null
+
      "actionConfirmation": { ... },
      },
+
       "Actions": [],
       "controlsValueCalculateRulesIds": [],
 
      "conditionalActions": [],
 
 
       "onBeforeClickConditionalActions": [],
 
       "onBeforeClickConditionalActions": [],
 
       "submitRuleIds": [],
 
       "submitRuleIds": [],
 
       "id": 100,
 
       "id": 100,
 
       "caption": "Сохранить",
 
       "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"
 
       "discriminator": "ButtonSubmitSourceEntry"
     }
+
     },
 +
    {...}
 +
]
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</div></div>
 
</div></div>
2. Кнопка Сохранить будет сохранять введенное в строку значение в источник - справочник  id=3.
 
  
<syntaxhighlight lang="JSON" line>
+
3. В раздел entryDataSources добавляем источник (справочник в данном примере), в который записываются данные.  <br>
{
+
Важно, чтобы свойство "isReadOnly" [[Платформа_3V/Формы/Источники_данных|'''источника (источников)''']], куда записываются данные, принимало значение false.
 +
 
 +
<syntaxhighlight lang="JSON" line>
 +
 
 +
"entryDataSources": [
 +
    {
 
       "dictionaryId": 47,
 
       "dictionaryId": 47,
      "hierarchyId": null,
+
 
      "filter": null,
+
       ...
      "sortingOptions": null,
+
 
      "groupingOptions": null,
+
       "id": 1,
      "dictionaryAttributes": null,
 
      "defaultValue": [],
 
       "defaultValueExpressionId": null,
 
      "parameterId": null,
 
      "dictionarySourceSelectionMode": "None",
 
      "dataSourceAttributesAdditionsSettings": [],
 
      "externalFileStorageUrl": null,
 
      "filePrefix": null,
 
      "defaultNewElementSettings": null,
 
       "id": 3,
 
 
       "name": "Список контрагентов",
 
       "name": "Список контрагентов",
 
       "isReadOnly": false,
 
       "isReadOnly": false,
      "dataEditRuleIds": [],
+
 
       "beforeSaveDataActions": [],
+
       ...
      "afterSaveDataActions": [],
+
 
 
       "discriminator": "DictionaryDataSource"
 
       "discriminator": "DictionaryDataSource"
      
+
     }
}
+
  ],
 +
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</div></div>
 
</div></div>
  
Здесь два контрола - кнопка Сохранить и строка для ввода нового наименования. <br>
+
Кнопка сохранит все введенные данные автоматически. <br>  
Источник один - справочник в который записываются новые данные, важно, что его свойство isReadOnly имеет значение false, поэтому кнопка типа ButtonSubmitSourceEntry автоматически записывает все введенные данные.<br>
+
 
 +
===Пример===
 +
 
 +
Кейс: Добавление нового элемента справочника.<br>
  
 
[[Файл:Screenshot 2021-06-18 at 11.37.46.png|мини|слева]]
 
[[Файл:Screenshot 2021-06-18 at 11.37.46.png|мини|слева]]
Строка 82: Строка 107:
 
[[Файл:Screenshot 2021-06-18 at 11.41.09.png|мини|слева]]
 
[[Файл:Screenshot 2021-06-18 at 11.41.09.png|мини|слева]]
 
<br><br><br><br><br><br><br><br><br>
 
<br><br><br><br><br><br><br><br><br>
 +
 +
Кнопка Сохранить (контрол 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;">
Строка 192: Строка 219:
  
 
==CustomButtonEntry==
 
==CustomButtonEntry==
Кнопка CustomButtonEntry требует [[Платформа_3V/Формы/Действия/Сохранение источников|'''добавить действие, которое сохраняет добавленный элемент в источнике данных''']]. <br>
+
Пользовательская кнопка CustomButtonEntry требует [[Платформа_3V/Формы/Действия/Сохранение источников|'''добавить действие, которое сохраняет добавленный элемент в источнике данных''']]. Действия, "повешанные" на кнопку, будут выполняться последовательно.<br>
 +
Примерный алгоритм:<br>
 +
1. В раздел uiSources добавляем элементы управления. В приведенном примере - дата начала периода, дата окончания периода и строка, которая заполнится рассчитанной длительностью периода.
 +
 
 +
<syntaxhighlight lang="JSON" line>
 +
 +
"uiSources": [
 +
    {...},
 +
    {
 +
      "id": 222,
 +
      "caption": "Длительность периода",
 +
      "uiDataSource": {
 +
        "attribute": {
 +
          "id": 20,
 +
          "discriminator": "OwnAttributeDefinitionDto"
 +
        },
 +
        "attributeId": null,
 +
        "sourceId": 1,
 +
        "discriminator": "UiDataSourceDictionary"
 +
      },
 +
      "discriminator": "StringSourceEntry",
 +
      ...
 +
    },
 +
    {
 +
      "id": 21,
 +
      "caption": "Дата начала периода",
 +
      ...,
 +
      "discriminator": "DateTimeSourceEntry"
 +
    },
 +
    {
 +
   
 +
      "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>
 +
</div></div>
 +
 
 +
3. В раздел entryDataSources добавляем источник (справочник в данном примере), в который записываются данные.  <br>
 +
 
 +
<syntaxhighlight lang="JSON" line>
 +
 
 +
"entryDataSources": [
 +
    {
 +
      "dictionaryId": 316,
 +
      ...,
 +
      "name": "Длительность отпусков",
 +
      "isReadOnly": false,
 +
      "dataEditRuleIds": [],
 +
      "beforeSaveDataActions": [],
 +
      "afterSaveDataActions": [],
 +
      "discriminator": "DictionaryDataSource"
 +
    },
 +
    {...}
 +
]
 +
 
 +
</syntaxhighlight>
 +
</div></div>
 +
===Пример===
 +
Кейс: Внести данные об отпуске сотрудника - ФИО и период.  При нажатии кнопки "Сохранить" выполняться три действия: сначала произойдет вычисление количества дней отпуска, затем данные сохранятся и, наконец, обновится пивот.
 +
 
 +
[[Файл:SubmitButton_1.gif|мини|слева|Внесение данных]]
 +
<br><br><br><br><br><br><br><br><br><br><br>
 +
 
 +
[[Файл:SubmitButton 4.gif|обрамить|слева|Вычисление и запись результата]]
 +
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 +
 
 +
 
 +
<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>
 
<syntaxhighlight lang="JSON" line>
 +
 
{
 
{
   "id": 1,
+
   "id": 356,
   "caption": "Сохранить",
+
   "title": "",
   "nullable": true,
+
   "description": "",
   "enable": true,
+
   "uiSources": [
  "visible": true,
+
    {
  "hint": null,
+
      "submitRuleIds": [],
  "nullable": true
+
      "actionConfirmation": {
  "uiDataSource": null,
+
        "message": null,
  "doActionOnChangeValue": true,
+
        "conditionId": null
  "onAfterChangeValueConditionalActions": null,
+
      },
  "onAfterChangeValueActions": null,
+
      "controlsValueCalculateRulesIds": [],
  "onAfterChangeValueByClientConditionalActions": null,
+
      "Actions": [
  "onAfterChangeValueByClientActions": null,
+
        222,
  "rebuildDependentsObjectOnChange": true,
+
        111,
  "enableExpressionIds": [],
+
        333
  "visibleExpressionIds": [],
+
      ],
  "isValueChanged" boolean
+
      "onBeforeClickConditionalActions": [],
  "expressionId": [],
+
      "id": 200,
   "controlsValueCalculateRulesIds"[],
+
      "caption": "Сохранить",
  "actions" [ 51, 50]
+
      "enable": true,
   "onBeforeClickConditionalActions": [],
+
      "visible": true,
   "onBeforeClickActions": [],
+
      "hint": null,
   "submitRuleIds": [],
+
      "uiDataSource": null,
  "discriminator": CustomButtonEntry,
+
      "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": "Обновление пивота",
 +
      "discriminator": "RebuildSourceInstanceAction"
 +
    }
 +
  ],
 +
  "conditionActionIdsOnOpen": null
 
}
 
}
 +
 
</syntaxhighlight>
 
</syntaxhighlight>

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