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

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
Строка 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 автоматически записывает все введенные данные.

Screenshot 2021-06-18 at 11.37.46.png








Screenshot 2021-06-18 at 11.41.09.png










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

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 }

Пример

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

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