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

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
Строка 1: Строка 1:
 
== Описание ==
 
== Описание ==
  
Для того, чтобы при открытии формы сразу создавался элемент справочника, необходимо в источнике данных ([[Платформа_3V/Формы/Источники_данных/Справочник |'''DictionaryDataSource ''']]) прописать '''defaultNewElementSettings''' :
+
Новый элемент справочника можно создавать с помощью Action ([[Платформа 3V/Формы/Действия/Создание_нового_элемента_справочника |'''CreateNewElementInDictionaryAction''']]), но если выполнение этого Action запускается при открытии формы, то происходит следующее:
 +
1. Запрашиваются все источники, которые используются в форме;
 +
2. Выполняются Действия, установленные на открытии формы (ConditionActionIdsOnOpen), в т.ч. создается новый элемент справочника;
 +
3. Перестраиваются источники, которые зависят от этого элемента.
 +
Если все источники зависят от одного главного справочника, то это, по сути, приводит к двойному построению формы. Метод '''defaultNewElementSettings''' срабатывает еще по первого построения источников и позволяет уйти от двойного запроса одних и тех же справочников и пивотов.
 +
 
 +
Для того, чтобы при открытии формы сразу создавался элемент справочника, необходимо в источнике данных ([[Платформа_3V/Формы/Источники_данных/Справочник |'''DictionaryDataSource ''']]) прописать '''defaultNewElementSettings''':
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! "view": {}
+
! "entryDataSources": {}
 
|-
 
|-
 
| <syntaxhighlight lang="JSON" line>
 
| <syntaxhighlight lang="JSON" line>
Строка 39: Строка 45:
  
 
|}
 
|}
 +
 +
 +
<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": 1,
 +
  "name": "Создание элемента справочника",
 +
  "description": null,
 +
  "ConditionActionIdsOnOpen": [],
 +
  "uiSources": [
 +
    {
 +
      "defaultValue": null,
 +
      "value": null,
 +
      "id": 105,
 +
      "hasMultipleValue": false,
 +
      "caption": "Справочник",
 +
      "enable": true,
 +
      "visible": true,
 +
      "dataSourceId": 105,
 +
      "hint": null,
 +
      "uiDataSource": {
 +
        "attributeId": 1,
 +
        "sourceId": 105,
 +
        "discriminator": "UiDataSourceDictionary"
 +
      },
 +
      "doActionOnChangeValue": true,
 +
      "onAfterChangeValueConditionalActions": null,
 +
      "onAfterChangeValueByClientConditionalActions": [],
 +
      "enableRuleIds": [],
 +
      "visibleRuleIds": [],
 +
      "access": {
 +
        "read": {
 +
          "roles": [],
 +
          "inversion": false,
 +
          "default": true
 +
        },
 +
        "edit": {
 +
          "roles": [],
 +
          "inversion": false,
 +
          "default": true
 +
        }
 +
      },
 +
      "isValueChanged": false,
 +
      "expressionId": null,
 +
      "discriminator": "DictionarySourceEntry"
 +
    }
 +
  ],
 +
  "entryDataSources": [
 +
    {
 +
      "discriminator": "DictionaryDataSource",
 +
      "dictionaryId": 105,
 +
      "filter": null,
 +
      "dictionarySourceSelectionMode": "None",
 +
      "id": 105,
 +
      "name": "Справочник",
 +
      "isReadOnly": false,
 +
      "defaultNewElementSettings": {
 +
        "createElementConditionId": 111100,
 +
        "defaultValues": [
 +
          {
 +
            "attributeId": 2,
 +
            "value": "Новый объект1",
 +
            "expressionId": null
 +
          },
 +
          {
 +
            "attributeId": 21,
 +
            "value": null,
 +
            "expressionId": 3001
 +
          }
 +
        ],
 +
        "saveElementOnInitialize": true
 +
      }
 +
    }
 +
  ],
 +
  "parameters": [
 +
    {
 +
      "id": 1,
 +
      "name": "Элемент справочника",
 +
      "defaultValue": []
 +
    }
 +
  ],
 +
  "binaryConditionsRules": [
 +
    {
 +
      "id": 111100,
 +
      "binaryCondition": {
 +
        "expressionId": 111100,
 +
        "value": null,
 +
        "conditionType": "ValueIsNotNull",
 +
        "inversion": true,
 +
        "discriminator": "BinaryConditionExpressionOperand"
 +
      }
 +
    }
 +
  ],
 +
  "SubmitValidateRules": [],
 +
  "expressions": [
 +
    {
 +
      "id": 3001,
 +
      "expression": "Now()",
 +
      "returnFirstParameterValue": true,
 +
      "parameters": [],
 +
      "comment": "Текущая дата"
 +
    },
 +
    {
 +
      "id": 111100,
 +
      "expression": null,
 +
      "returnFirstParameterValue": true,
 +
      "parameters": [
 +
        {
 +
          "parameterId": 1,
 +
          "id": 0,
 +
          "allowMultipleValues": false,
 +
          "discriminator": "EntryExpressionCardParameterDto"
 +
        }
 +
      ],
 +
      "comment": "Возвращает значение параметр карточки [1]"
 +
    }
 +
  ],
 +
  "actions": [],
 +
  "conditionalActions": [],
 +
  "selectionSets": []
 +
}
 +
</syntaxhighlight>
 +
</div></div>
 +
 +
== Особенности использования ==
 +
Новому элементу можно сразу при создании присвоить дефолтые значения атрибутов. Эти значения могут быть константой либо вычислены в expression. Но есть одно ограничение: этот метод не сможет подставить значение из других справочников, т.к. он срабатывает ДО построения источников

Версия 04:25, 29 апреля 2021

Описание

Новый элемент справочника можно создавать с помощью Action (CreateNewElementInDictionaryAction), но если выполнение этого Action запускается при открытии формы, то происходит следующее: 1. Запрашиваются все источники, которые используются в форме; 2. Выполняются Действия, установленные на открытии формы (ConditionActionIdsOnOpen), в т.ч. создается новый элемент справочника; 3. Перестраиваются источники, которые зависят от этого элемента. Если все источники зависят от одного главного справочника, то это, по сути, приводит к двойному построению формы. Метод defaultNewElementSettings срабатывает еще по первого построения источников и позволяет уйти от двойного запроса одних и тех же справочников и пивотов.

Для того, чтобы при открытии формы сразу создавался элемент справочника, необходимо в источнике данных (DictionaryDataSource ) прописать defaultNewElementSettings:

"entryDataSources": {}
 1  "defaultNewElementSettings": {
 2         "createElementConditionId": 111100,
 3         "defaultValues": [
 4           {
 5             "attributeId": 2,
 6             "value": "Новый объект",
 7             "expressionId": null
 8           },    
 9           {
10             "attributeId": 3,
11             "value": null,
12             "expressionId": 1001
13           }
14         ],
15         "saveElementOnInitialize": true
16       },
Поле Описание
createElementConditionId Условие, при выполнении которого необходимо создавать новый элемент (binaryConditionsRules)
defaultValues Значения атрибутов, которые присваиваются новому элементу
saveElementOnInitialize Сохранять элемент при инициализации формы


JSON серверной карточки
  1 {
  2   "id": 1,
  3   "name": "Создание элемента справочника",
  4   "description": null,
  5   "ConditionActionIdsOnOpen": [],
  6   "uiSources": [
  7     {
  8       "defaultValue": null,
  9       "value": null,
 10       "id": 105,
 11       "hasMultipleValue": false,
 12       "caption": "Справочник",
 13       "enable": true,
 14       "visible": true,
 15       "dataSourceId": 105,
 16       "hint": null,
 17       "uiDataSource": {
 18         "attributeId": 1,
 19         "sourceId": 105,
 20         "discriminator": "UiDataSourceDictionary"
 21       },
 22       "doActionOnChangeValue": true,
 23       "onAfterChangeValueConditionalActions": null,
 24       "onAfterChangeValueByClientConditionalActions": [],
 25       "enableRuleIds": [],
 26       "visibleRuleIds": [],
 27       "access": {
 28         "read": {
 29           "roles": [],
 30           "inversion": false,
 31           "default": true
 32         },
 33         "edit": {
 34           "roles": [],
 35           "inversion": false,
 36           "default": true
 37         }
 38       },
 39       "isValueChanged": false,
 40       "expressionId": null,
 41       "discriminator": "DictionarySourceEntry"
 42     }
 43   ],
 44   "entryDataSources": [
 45     {
 46       "discriminator": "DictionaryDataSource",
 47       "dictionaryId": 105,
 48       "filter": null,
 49       "dictionarySourceSelectionMode": "None",
 50       "id": 105,
 51       "name": "Справочник",
 52       "isReadOnly": false,
 53       "defaultNewElementSettings": {
 54         "createElementConditionId": 111100,
 55         "defaultValues": [
 56           {
 57             "attributeId": 2,
 58             "value": "Новый объект1",
 59             "expressionId": null
 60           },
 61           {
 62             "attributeId": 21,
 63             "value": null,
 64             "expressionId": 3001
 65           }
 66         ],
 67         "saveElementOnInitialize": true
 68       }
 69     }
 70   ],
 71   "parameters": [
 72     {
 73       "id": 1,
 74       "name": "Элемент справочника",
 75       "defaultValue": []
 76     }
 77   ],
 78   "binaryConditionsRules": [
 79     {
 80       "id": 111100,
 81       "binaryCondition": {
 82         "expressionId": 111100,
 83         "value": null,
 84         "conditionType": "ValueIsNotNull",
 85         "inversion": true,
 86         "discriminator": "BinaryConditionExpressionOperand"
 87       }
 88     }
 89   ],
 90   "SubmitValidateRules": [],
 91   "expressions": [
 92     {
 93       "id": 3001,
 94       "expression": "Now()",
 95       "returnFirstParameterValue": true,
 96       "parameters": [],
 97       "comment": "Текущая дата"
 98     },
 99     {
100       "id": 111100,
101       "expression": null,
102       "returnFirstParameterValue": true,
103       "parameters": [
104         {
105           "parameterId": 1,
106           "id": 0,
107           "allowMultipleValues": false,
108           "discriminator": "EntryExpressionCardParameterDto"
109         }
110       ],
111       "comment": "Возвращает значение параметр карточки [1]"
112     }
113   ],
114   "actions": [],
115   "conditionalActions": [],
116   "selectionSets": []
117 }

Особенности использования

Новому элементу можно сразу при создании присвоить дефолтые значения атрибутов. Эти значения могут быть константой либо вычислены в expression. Но есть одно ограничение: этот метод не сможет подставить значение из других справочников, т.к. он срабатывает ДО построения источников