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

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
 
(не показаны 3 промежуточные версии этого же участника)
Строка 1: Строка 1:
 
== Описание ==
 
== Описание ==
Существуют 2 варианта реализации данного функционала:
 
  
1. Новый элемент справочника можно создавать с помощью Action ([[Платформа 3V/Формы/Действия/Создание_нового_элемента_справочника |'''CreateNewElementInDictionaryAction''']]), но если выполнение этого Action запускается при открытии формы, то происходит следующее:
+
Для того, чтобы при открытии формы сразу создавался элемент справочника, необходимо в источнике данных ([[Платформа_3V/Формы/Источники_данных/Справочник |'''DictionaryDataSource ''']]) прописать '''defaultNewElementSettings''', где обязательно указать "saveElementOnInitialize": true и значения для заполнения атрибутов по умолчанию (если необходимо заполнить, например, наименование):
 
 
*Запрашиваются все источники, которые используются в форме;
 
 
 
*Выполняются Действия, установленные на открытии формы (ConditionActionIdsOnOpen), в т.ч. создается новый элемент справочника;
 
 
 
*Перестраиваются источники, которые зависят от этого элемента.
 
 
 
2. Если все источники зависят от одного главного справочника, то это, по сути, приводит к двойному построению формы. Метод '''defaultNewElementSettings''' срабатывает еще по первого построения источников и позволяет уйти от двойного запроса одних и тех же справочников и пивотов.
 
 
 
Для того, чтобы при открытии формы сразу создавался элемент справочника, необходимо в источнике данных ([[Платформа_3V/Формы/Источники_данных/Справочник |'''DictionaryDataSource ''']]) прописать '''defaultNewElementSettings''', где обязательно указать "saveElementOnInitialize": true и значения для заполнения атрибутов по умолчанию:
 
  
 
{| class="wikitable"
 
{| class="wikitable"
Строка 20: Строка 9:
 
| <syntaxhighlight lang="JSON" line>
 
| <syntaxhighlight lang="JSON" line>
 
  "defaultNewElementSettings": {
 
  "defaultNewElementSettings": {
         "createElementConditionId": 111100,
+
         "conditionExpressionId": 111100,
 
         "defaultValues": [
 
         "defaultValues": [
 
           {
 
           {
Строка 43: Строка 32:
 
! Поле !! Описание
 
! Поле !! Описание
 
|-
 
|-
createElementConditionId|| Условие, при выполнении которого необходимо создавать новый элемент ('''binaryConditionsRules''')
+
conditionExpressionId|| Идентификатор [[Платформа_3V/Формы/Выражения | '''выражения''']] с условием, при выполнении которого необходимо создавать новый элемент
 
|-
 
|-
 
|  defaultValues || Значения атрибутов, которые присваиваются новому элементу
 
|  defaultValues || Значения атрибутов, которые присваиваются новому элементу
Строка 50: Строка 39:
  
 
|}
 
|}
 
== Особенности использования ==
 
Новому элементу можно сразу при создании присвоить дефолтые значения атрибутов. Эти значения могут быть константой либо вычислены в expression. Но есть одно ограничение: этот метод не сможет подставить значение из других справочников, т.к. он срабатывает ДО построения источников
 
 
 
<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>
 

Текущая версия на 05:07, 20 мая 2022

Описание

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

"entryDataSources": {}
 1  "defaultNewElementSettings": {
 2         "conditionExpressionId": 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       },
Поле Описание
conditionExpressionId Идентификатор выражения с условием, при выполнении которого необходимо создавать новый элемент
defaultValues Значения атрибутов, которые присваиваются новому элементу
saveElementOnInitialize Сохранять элемент при инициализации формы