diff --git a/_data/sidebars/flexberry-ember-3_sidebar.yml b/_data/sidebars/flexberry-ember-3_sidebar.yml
index c3f910168..078c4f3ae 100644
--- a/_data/sidebars/flexberry-ember-3_sidebar.yml
+++ b/_data/sidebars/flexberry-ember-3_sidebar.yml
@@ -25,11 +25,26 @@ entries:
output: web, pdf
folderitems:
+ - title: Generation of Flexberry Ember Application
+ title_ru: Генерация приложений
+ url: /efd3_app-generation.html
+ output: web, pdf
+
- title: Structure of Flexberry Ember Application
title_ru: Обзор структуры сгенерированных приложений
url: /efd3_generated-app-structure.html
output: web, pdf
+ - title: Start of Flexberry Ember Application
+ title_ru: Запуск сгенерированных приложений
+ url: /efd3_generated-app-start.html
+ output: web, pdf
+
+ - title: Regeneration of Flexberry Ember Application
+ title_ru: Перегенерация приложений
+ url: /efd3_generated-app-regeneration.html
+ output: web, pdf
+
- title: Forms and routing
title_ru: Формы и роутинг
output: web, pdf
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-plugin.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-plugin.png
new file mode 100644
index 000000000..bba8ca74c
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-plugin.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-backend-choise.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-backend-choise.png
new file mode 100644
index 000000000..3747f24b7
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-backend-choise.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-backend.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-backend.png
new file mode 100644
index 000000000..85c6b2b6e
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-backend.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-frontend-full.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-frontend-full.png
new file mode 100644
index 000000000..09f88e004
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-frontend-full.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-frontend.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-frontend.png
new file mode 100644
index 000000000..041943ec1
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FE-regenerate-frontend.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-addexistingproject.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-addexistingproject.png
new file mode 100644
index 000000000..ae6517491
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-addexistingproject.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-addodataconfig.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-addodataconfig.png
new file mode 100644
index 000000000..29fabae6c
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-addodataconfig.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-addprojectreference.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-addprojectreference.png
new file mode 100644
index 000000000..50b070da2
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-addprojectreference.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-chooseprojecttype.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-chooseprojecttype.png
new file mode 100644
index 000000000..71b84cf10
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-chooseprojecttype.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-createproject.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-createproject.png
new file mode 100644
index 000000000..3b342d529
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-createproject.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-forbidden.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-forbidden.png
new file mode 100644
index 000000000..6df3c918a
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-forbidden.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-installedflexberry.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-installedflexberry.png
new file mode 100644
index 000000000..c8ae40d3d
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-installedflexberry.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-installedunity.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-installedunity.png
new file mode 100644
index 000000000..7b8b73672
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-installedunity.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-removeextras.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-removeextras.png
new file mode 100644
index 000000000..67fd04dcb
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-removeextras.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-removeoracle.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-removeoracle.png
new file mode 100644
index 000000000..f11d0931c
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-removeoracle.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-viewodata.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-viewodata.png
new file mode 100644
index 000000000..b6f46fa68
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-viewodata.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-webapi.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-webapi.png
new file mode 100644
index 000000000..aedfe3197
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/FEOdata-webapi.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/backend-API.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/backend-API.png
new file mode 100644
index 000000000..0a5f47456
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/backend-API.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-build-success.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-build-success.png
new file mode 100644
index 000000000..a8a8940e9
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-build-success.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-editform-with-details.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-editform-with-details.png
new file mode 100644
index 000000000..cef3bc33e
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-editform-with-details.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-editform-with-enum.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-editform-with-enum.png
new file mode 100644
index 000000000..8061a2681
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-editform-with-enum.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-empty-listform.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-empty-listform.png
new file mode 100644
index 000000000..f9136c6d5
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-empty-listform.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-menu.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-menu.png
new file mode 100644
index 000000000..b71227686
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-menu.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-saved-master.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-saved-master.png
new file mode 100644
index 000000000..bfaadb92e
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-saved-master.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-saved-masters.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-saved-masters.png
new file mode 100644
index 000000000..42211e273
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-saved-masters.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-start-terminal.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-start-terminal.png
new file mode 100644
index 000000000..a626e64cd
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-start-terminal.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-started.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-started.png
new file mode 100644
index 000000000..61a4bf7f6
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-started.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-validation.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-validation.png
new file mode 100644
index 000000000..850e5be16
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/frontend-validation.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/generated-backend-cors-enabling.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/generated-backend-cors-enabling.png
new file mode 100644
index 000000000..ae5012930
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/generated-backend-cors-enabling.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/generated-backend-url-changing.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/generated-backend-url-changing.png
new file mode 100644
index 000000000..d9d2bf768
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/generated-backend-url-changing.png differ
diff --git a/images/pages/products/flexberry-ember/ember-flexberry/generation/generated-frontend-config.png b/images/pages/products/flexberry-ember/ember-flexberry/generation/generated-frontend-config.png
new file mode 100644
index 000000000..99fb03c12
Binary files /dev/null and b/images/pages/products/flexberry-ember/ember-flexberry/generation/generated-frontend-config.png differ
diff --git a/pages/products/flexberry-ember/3.x/app-generation/efd3_app-generation.md b/pages/products/flexberry-ember/3.x/app-generation/efd3_app-generation.md
new file mode 100644
index 000000000..8aca5a287
--- /dev/null
+++ b/pages/products/flexberry-ember/3.x/app-generation/efd3_app-generation.md
@@ -0,0 +1,687 @@
+---
+title: Генерация приложений
+sidebar: flexberry-ember-3_sidebar
+keywords: Flexberry Ember
+toc: true
+permalink: ru/efd3_app-generation.html
+lang: ru
+summary: Настройка и генерация метаданных приложения, генерация разными способами фронтенда и бакэнда.
+---
+
+## Подготовка к генерации
+
+Для того, чтобы сгенерировать приложение Flexberry Ember, необходимо во [Flexberry Designer](fd_flexberry-designer.html) представить предметную область в виде [диаграммы классов](gpg_class-diagram.html).
+
+{% include note.html content="[Построение других UML-диаграмм](gpg_practical-guides-uml.html) также необходимо для глубокого анализа и проработки предметной области, однако непосредственно генерация производится по [диаграмме классов](gpg_class-diagram.html)." %}
+
+{% include important.html content="При разработке приложений на Flexberry Ember [рекомендовано использовать английский язык](gpg_setting-language-and-structure.html) для именования тех элементов модели, с которыми работает разработчик." %}
+
+В [диаграмме классов](gpg_class-diagram.html) должны быть [сгенерированы](gpg_create-and-configure-application-structure.html) или созданы вручную [представления и формы](gpg_create-and-configure-application-structure.html), [настроены контейнеры](gpg_create-and-configure-application-structure.html) (впоследствии на основании настроек контейнеров в [контроллер](https://guides.emberjs.com/v3.1.0/controllers/) "application" [после генерации будет добавлена структура](efd3_generated-app-structure.html), соответствующая сайтмапу приложения Flexberry Ember).
+
+## Плагин генерации для Flexberry Ember во Flexberry Designer
+
+Для корректной работы плагина генерации для Flexberry Ember во [Flexberry Designer](fd_flexberry-designer.html) требуется проверить, что на компьютере установлено [необходимое программное обеспечение](gpg_ember-application-generation.html).
+
+Далее наобходимо [установить плагин](fd_flexberry-plugins.html) Flexberry Ember CasePlugin в папку [Flexberry Designer](fd_flexberry-designer.html) (или удостовериться, что он уже установлен).
+
+В конфигурационном файле [Flexberry Designer](fd_flexberry-designer.html) нужно добавить настройку, которая отвечает за версию устанавливаемого ember-аддона:
+
+```xml
+
+
+ ...
+
+ ...
+
+
+ ...
+
+```
+
+Или при желании можно указать прямо ссылку на [git-репозиторий](https://github.com/Flexberry/ember-flexberry):
+
+```xml
+
+```
+
+Вызов плагина происходит из стадии во [Flexberry Designer](fd_flexberry-designer.html), где после вызова контекстного меню стадии нужно выбрать пункт "Ember".
+
+### Меню плагина генерации
+
+Плагин генерации для Flexberry Ember во [Flexberry Designer](fd_flexberry-designer.html) предоставляет следующие возможности посредством меню:
+
+
+
+* `Свойства модели` - основные настройки генерации: расположение генерируемого кода, название продукта, общепроектные настройки, [карта типов](fd_types-map.html).
+
+В процессе генерации типы .NET из карты типов будут автоматически заменены на соответствующие типы Javascript согласно этой таблицы:
+
+| Типы .NET | Типы Javascript
+|-----------|----------------
+| bool, bool? | boolean
+| decimal, decimal?, double, double?, short, short?, int, int?, long, long?, float, float?, ushort, ushort?, uint, uint?, ulong, ulong?, NullableInt, NullableDecimal | number
+| DateTime, DateTime?, NullableDateTime | date
+| Все остальные типы | number
+
+* `Создать представления, формы и приложение` - создание быстрого прототипа на базе реализованной [диаграммы классов](gpg_class-diagram.html) (часть созданных элементов может потребоваться [донастроить вручную](gpg_create-and-configure-application-structure.html)).
+
+* `Frontend` - подменю, связанное с генерацией фронтенда.
+ * `EmberJS` - генерация фронтенда на EmberJS
+ * `Генерировать всё` - генерация
+ * `Генерировать метаданные` - генерация метаданных, об этом ниже.
+ * `Компилировать` - сборка сгенерированного приложения (в общем случае это приводит к запуску команды [Ember CLI](https://cli.emberjs.com/release/) [`ember build -e development`](https://cli.emberjs.com/release/basic-use/cli-commands/)).
+ * `Запустить сервер` - запуск сгенерированного приложения (в общем случае это приводит к запуску команды [Ember CLI](https://cli.emberjs.com/release/) [`ember serve`](https://cli.emberjs.com/release/basic-use/cli-commands/)).
+ * `Открыть каталог` - открытие папки со сгенерированным кодом.
+ * `Apache Cordova` - генерация фронтенда на Apache Cordova
+ * `Генерировать проект Apache Cordova`
+ * `Собрать мобильное приложение`
+
+* `Backend` - подменю, связанное с генерацией бакенда.
+ * `ASP.NET` - генерация бакенда для [ASP.NET](https://dotnet.microsoft.com/apps/aspnet).
+ * `Генерировать`
+ * `Открыть каталог`
+ * `Открыть в Visual Studio...`
+ * `ASP.NET Core 3.1` - генерация бакенда для [ASP.NET Core 3.1](https://dotnet.microsoft.com/learn/aspnet/what-is-aspnet-core).
+ * `Генерировать`
+ * `Открыть каталог`
+ * `Открыть в Visual Studio...`
+ * `JAVA` - в настоящий момент данный пункт меню находится в разработке.
+ * `PHP` - в настоящий момент данный пункт меню находится в разработке.
+
+* `Docker` - работа с [Docker](gbt_deployment_docker.html).
+ * `Создать Dockerfile`
+ * `Создать Dockerfile для автоматической сборки`
+ * `Создать скрипт сборки образов`
+ * `Создать Swarn-конфигурацию и скрипт запуска Swarn-конфигурации`
+ * `Запустить Swarn-конфигурацию`
+
+* `Storage` - подменю, связанное с генерацией скриптов для приложения для разных СУБД (пункты меню у разных СУБД аналогичны, поэтому указаны только для Postgre SQL).
+ * `Microsoft SQL server` - настройки и генерация скриптов для [Microsoft SQL server](https://ru.wikipedia.org/wiki/Microsoft_SQL_Server).
+ * `Postgre SQL` - настройки и генерация скриптов для [Postgre SQL](https://www.postgresql.org/).
+ * `Настройка БД`
+ * `Привести БД в соответствие с моделью`
+ * `Сгенерировать SQL`
+ * `Полномочия`
+ * `Создать полномочия`
+ * `Создать пользователя по умолчанию`
+ * `ClickHouse` - настройки и генерация скриптов для [ClickHouse](https://clickhouse.tech/docs/ru/).
+ * `Oracle` - настройки и генерация скриптов для [Oracle](https://www.oracle.com/ru/index.html).
+ * `Microsoft Access` - настройки и генерация БД для [Microsoft Access](https://ru.wikipedia.org/wiki/Microsoft_Access).
+
+* `Утилиты` - [вспомогательные утилиты](fo_orm-case-plugin.html) для работы со стадией.
+ * `Менеджер классов`
+ * `Менеджер ассоциаций`
+ * `Менеджер наследований`
+ * `Менеджер представлений`
+ * `Менеджер запусков генерации`
+ * `Обновить представления`
+ * `Найти ошибки в модели`
+ * `Экспорт стадии`
+ * `Сохранить диаграммы в формате wmf`
+ * `Генерация документации по диаграммам`
+ * `Переместить...`
+ * `История изменений стадии`
+ * `Создать бекап`
+
+* `Информация о лицензии`
+
+## Генерация метаданных приложения
+
+Генерация приложений Flexberry Ember основана на [технологии Blueprints](https://ember-cli.com/api/classes/blueprint), встроенной в EmberJS, для чего требуются специального вида метаданные. Под метаданными понимаются файлы определённого формата, содержащие некоторое описание моделей, перечислений, форм и т.д. Генерация приложений Flexberry Ember выполняется итеративно, т.е. предполагается, что в первую очередь изменяются метаданные и именно в них содержится правильное описание структуры приложения. После изменения метаданных выполняется повторная генерация приложения.
+
+Метаданные могут быть получены при помощи плагина генерации для Flexberry Ember во [Flexberry Designer](fd_flexberry-designer.html). Сгенерированнае с помощью плагина метаданные располагаются в папке `vendor/flexberry/`. После генерации структура метаданных следующая:
+
+* application
+ * sitemap.json
+* edit-forms
+ * "название формы редактирования".json
+ * ...
+* enums
+ * "название перечислимого типа".json
+ * ...
+* list-forms
+ * "название списковой формы".json
+ * ...
+* models
+ * "название модели".json
+ * ...
+* objects
+
+### Метаданные уровня приложения
+
+На уровне приложения к метаданным относится описание навигационного меню (`sitemap.json`), основанное на [настройках контейнеров во Flexberry Designer](gpg_create-and-configure-application-structure.html). Пример такого сайтмапа:
+
+```json
+{
+ "applicationCaption": "Проверка генерации",
+ "applicationTitle": "Ember3 gen",
+ "items": [
+ {
+ "link": null,
+ "menuName": "базовая-часть",
+ "caption": "Базовая часть",
+ "title": "Базовая часть",
+ "children": [
+ {
+ "link": "neo-platform-gen-test-child1-l",
+ "menuName": null,
+ "caption": "Первый потомок",
+ "title": "",
+ "children": null
+ },
+ ...
+ ]
+ },
+ ...
+ ],
+ "mobile": true
+}
+```
+
+### Метаданные форм редактирования
+
+Для каждой формы редактирования в приложении создаётся свой файл метаданных. Имя файла с метаданными должно соответствовать имени [будущей формы в приложении](efd3_editform.html). Пример метаданных формы редактирования:
+
+```json
+{
+ "propertyLookup": [ // Описание ссылок из класса на мастера и детейлы.
+ { // Описание мастеровых ссылок.
+ "master": null,
+ "displayAttributeName": null,
+ "required": false,
+ "relationName": "MasterForAgregator",
+ "projection": "MasterForAgregatorL",
+ "detailModelName": null
+ },
+ ...
+ { // Описание детейловых ссылок.
+ "master": "masterForAgregator",
+ "displayAttributeName": "enum2Field",
+ "required": true,
+ "relationName": "DetailForAgregator.MasterForAgregator",
+ "projection": "MasterForAgregatorL",
+ "detailModelName": "neo-platform-gen-test-detail-for-agregator"
+ },
+ ...
+ ],
+ // Непосредственно описание формы.
+ "external": false,
+ "caption": "Агрегатор",
+ "name": "NeoPlatformGenTestAgregatorClassE",
+ "className": "AgregatorClassE",
+ "attrs": [],
+ "projections": [
+ {
+ "modelName": "neo-platform-gen-test-agregator-class",
+ "modelProjection": "AgregatorClassE"
+ }
+ ]
+}
+```
+
+### Метаданные перечислений
+
+Пример метаданных для перечислимого типа:
+
+```json
+{
+ "nameSpace": "NeoPlatform.GenTest",
+ "className": "Enum1Type",
+ "enumObjects": {
+ "FirstValue": "Первый",
+ "SecondValue": "Второй",
+ "ThirdValue": "Третий"
+ }
+}
+```
+
+### Метаданные списковых форм
+
+Для каждой списковой формы в приложении создаётся свой файл метаданных. Имя файла с метаданными должно соответствовать имени [будущей формы в приложении](efd3_listform.html). Пример метаданных списковой формы:
+
+```json
+{
+ "newForm": "neo-platform-gen-test-master-for-agregator-e",
+ "editForm": "neo-platform-gen-test-master-for-agregator-e",
+ "external": false,
+ "caption": "Мастера агрегаторов",
+ "name": "NeoPlatformGenTestMasterForAgregatorL",
+ "className": "MasterForAgregatorL",
+ "attrs": [],
+ "projections": [
+ {
+ "modelName": "neo-platform-gen-test-master-for-agregator",
+ "modelProjection": "MasterForAgregatorL"
+ }
+ ]
+}
+```
+
+### Метаданные моделей
+
+Метаданные [моделей](efd3_model.html) располагаются в каталоге `models`. Пример метаданных модели:
+
+```json
+{
+ "name": "NeoPlatformGenTestAgregatorClass", // Полное название класса в CASE-инструментарии.
+ "modelName": "neo-platform-gen-test-agregator-class", // Название модели в ember-приложении.
+ "className": "AgregatorClass", // Краткое название класса в CASE-инструментарии.
+ "nameSpace": "NeoPlatform.GenTest", // Пространство имён в CASE-инструментарии.
+ "parentModelName": null, // Название родительской модели.
+ "parentClassName": null, // Название родительского класса в CASE-инструментарии.
+ "attrs": [ // Описание атрибутов модели.
+ {
+ "name": "enum1Field", // Название атрибута.
+ "type": "neo-platform-gen-test-enum1-type", // Тип атрибута (в данном случае это перечисление).
+ "flexberryType": "Enum1Type", // Тип атрибута в CASE-инструментарии.
+ "notNull": true, // Допустимы ли null-значения.
+ "defaultValue": "FirstValue", // Значение атрибута по умолчанию.
+ "stored": true, // Хранимый ли атрибут.
+ "ordered": false // Является ли данный атрибут order-атрибутом.
+ }
+ ],
+ "belongsTo": [ // belongsTo связи (мастера).
+ {
+ "polymorphic": false,
+ "presence": true,
+ "name": "masterForAgregator", //
+ "relatedTo": "neo-platform-gen-test-master-for-agregator",
+ "inverse": null
+ },
+ ...
+ ],
+ "hasMany": [ // hasMany связи (детейлы).
+ {
+ "name": "detailForAgregator",
+ "relatedTo": "neo-platform-gen-test-detail-for-agregator",
+ "inverse": "myAgregator"
+ }
+ ],
+ "projections": [ // Описание проекций (представлений).
+ {
+ "name": "AgregatorClassE",
+ "modelName": "neo-platform-gen-test-agregator-class",
+ "attrs": [
+ {
+ "name": "enum1Field",
+ "caption": "Перечисление 1",
+ "hidden": false,
+ "index": 0
+ }
+ ],
+ "belongsTo": [
+ {
+ "lookupValue": "DateTimeField",
+ "lookupValueField": "dateTimeField",
+ "relationName": "Child2",
+ "belongsTo": [],
+ "hidden": false,
+ "attrs": [
+ {
+ "name": "dateTimeField",
+ "caption": "~",
+ "hidden": true,
+ "index": 2
+ }
+ ],
+ "index": 1,
+ "type": "standard",
+ "caption": "Мастер потомок",
+ "name": "child2",
+ "relatedTo": "neo-platform-gen-test-child2",
+ "inverse": null
+ },
+ ...
+ ],
+ "hasMany": [
+ {
+ "projectionName": "DetailForAgregatorE",
+ "caption": "Детейл агрегатора",
+ "name": "detailForAgregator",
+ "relatedTo": "neo-platform-gen-test-detail-for-agregator",
+ "inverse": null
+ }
+ ]
+ },
+ ...
+ ],
+ "stored": true,
+ "offline": true,
+ "external": false
+}
+```
+
+## Генерация фронтенда. Блюпринты для генерации. Дефолтные блюпринты
+
+Как уже отмечалось, генерация приложений Flexberry Ember основана на [технологии Blueprints](https://ember-cli.com/api/classes/blueprint), встроенной в EmberJS, для чего требуются специального вида метаданные. Блюпринты - это по сути инструмент для кодогенерации в Ember, также его можно использовать для внесения изменений в код при установке [ember-аддонов](https://cli.emberjs.com/release/writing-addons) и доустановки нужных пакетов.
+
+Список реализованных блюпринтов для технологии Flexberry Ember можно посмотреть [в исходном коде](https://github.com/Flexberry/ember-flexberry/tree/develop/blueprints).
+
+[Блюпринт `ember-flexberry`](https://github.com/Flexberry/ember-flexberry/tree/develop/blueprints/ember-flexberry) - это [стандартный блюпринт аддона](https://cli.emberjs.com/release/writing-addons/addon-blueprints/), который вызывается при установке этого аддона в приложение командой. Данный блюпринт вставляет в некоторые файлы код для настройки аддона `ember-flexberry` и устанавливает зависимости аддона.
+
+```git
+ember install ember-flexberry
+```
+
+Вызов [других блюпринтов для генерации](https://github.com/Flexberry/ember-flexberry/tree/develop/blueprints) рассмотрен ниже.
+
+### Генерация форм, унаследованных от базового класса
+
+Если приложение требует генерации форм, унаследованных от их базовых классов, необходимо в папке `vendor/flexberry/` создать директорию с именем `custom-generator-options` и создать в ней файл `generator-options.json` следующего вида:
+
+```JSON
+{
+ "editForms": {
+ "defaultForm": {
+ "baseRoute": {
+ "name": "EditFormRoute",
+ "path": "ember-flexberry/routes/edit-form"
+ },
+ "baseController": {
+ "name": "EditFormController",
+ "path": "ember-flexberry/controllers/edit-form"
+ }
+ }
+ },
+ "listForms": {
+ "defaultForm": {
+ "baseRoute": {
+ "name": "ListFormRoute",
+ "path": "ember-flexberry/routes/list-form"
+ },
+ "baseController": {
+ "name": "ListFormController",
+ "path": "ember-flexberry/controllers/list-form"
+ }
+ }
+ }
+}
+```
+
+Файл `generator-options.json` определяет имена и расположения файлов, от которых будут наследоваться списковые формы и формы редактирования.
+
+## Генерация клиентского приложения из командной строки
+
+Для генерации клиентского приложения из командной строки доступны следующие команды:
+
+{% include important.html content="В зависимости от используемой операционной системы может потребоваться в командах ниже заменить обратный косой слеш ('\\') на косой слеш ('/')." %}
+
+* Команды для генерации приложения по метаданным
+
+```git
+ember g flexberry-application app --metadata-dir=vendor\flexberry
+```
+
+`vendor\flexberry` - это путь до папки с метаданными и может быть иным в конкретном случае.
+
+Доступные флаги:
+
+* `--dummy` - генерация [форм](efd3_form.html) и [моделей](efd3_model.html) в аддон (в дамми-приложение).
+* `--new-theme=true` - генерация приложения с новой темой оформления (ghost) (доступно, начиная с ember-flexberry@3.4.0).
+* `--skip-confirmation` - пропуск запросов на подтверждение перезаписи файлов в случае, когда блюпринт пытается добавить уже существующий файл.
+
+Алгоритм генерации нового Flexberry Ember приложения из командной строки:
+
+1.Создать новую папку
+2.Выполнить в ней команду [`ember init`](https://cli.emberjs.com/release/advanced-use/cli-commands-reference/#emberinit).
+
+Если нужно сгенерировать приложение на версии ember, отличной от той, которая установлена глобально, то можно после создания новой папки для приложения сначала установить в нее ember нужной версии (`npm install ember-cli@версия` или `yarn add ember-cli@версия`), а потом уже вызывать [`ember init`](https://cli.emberjs.com/release/advanced-use/cli-commands-reference/#emberinit).
+
+4.Сгенерировать в эту папку только метаданные из [Flexberry Designer](fd_flexberry-designer.html)
+5.Выполнить в этой папке команду:
+
+```git
+ember g flexberry-application app --metadata-dir=<относительный путь к папке с метаданными> --skip-confirmation
+```
+
+* Генерация навигационного меню (сайтмапа) для приложения
+
+```git
+ember g flexberry-core sitemap --metadata-dir=vendor\flexberry --file=sitemap.json
+```
+
+* Генерация [модели](efd3_model.html) ([модель](efd3_model.html) и [сериалайзеры](efd3_serializer.html)):
+
+```git
+ember g flexberry-model ${modelName} --metadata-dir=vendor\flexberry --file=${modelName}.json
+ember g flexberry-model-init ${modelName} --metadata-dir=vendor\flexberry --file=${modelName}.json
+ember g flexberry-serializer-init ${modelName} --metadata-dir=vendor\flexberry --file=${modelName}.json
+```
+
+В сгенерированно приложении [модели](efd3_model.html) и [сериалайзеры](efd3_serializer.html) [состоят из двух частей](efd3_generated-app-structure.html): одна часть в соответствующей папке (`app/models` или `app/serializers`), а вторая - вынесена в [миксин](https://api.emberjs.com/ember/3.1/classes/Mixin) (`app/mixins/regenerated/models` или `app/mixins/regenerated/serializers`).
+
+Блюпринт `flexberry-model` генерирует ту часть [моделей](efd3_model.html) и [сериалайзеров](efd3_serializer.html), которые находятся в папке `app/mixins/regenerated/models` и `app/mixins/regenerated/serializers` и постоянно подвергаются [перегенерации](efd3_generated-app-regeneration.html).
+Блюпринт `flexberry-model-init` - часть [модели](efd3_model.html) из `app/models`.
+Блюпринт `flexberry-serializer-init` - часть [сериалайзера](efd3_model.html) из `app/serializers`.
+
+* Генерация [списковых форм](efd3_listform.html) (форма и тесты):
+
+```git
+ember g flexberry-list-form ${modelName}-l --metadata-dir=vendor\flexberry --file=${modelName}-l.json
+ember g controller-test ${modelName}-l --metadata-dir=vendor\flexberry --file=${modelName}-l.json
+ember g route-test ${modelName}-l --metadata-dir=vendor\flexberry --file=${modelName}-l.json
+```
+
+6.Генерация [форм редактирования](efd3_editform.html) (форма и тесты):
+
+```git
+ember g flexberry-edit-form ${modelName}-e --metadata-dir=vendor\flexberry --file=${modelName}-e.json
+ember g controller-test ${modelName}-e --metadata-dir=vendor\flexberry --file=${modelName}-e.json
+ember g route-test ${modelName}-e --metadata-dir=vendor\flexberry --file=${modelName}-e.json
+```
+
+Везде выше в командах `${modelName}` - это имя модели из метаданных.
+Например, если модель называется "customer", то последняя команда из списка будет выглядеть так:
+
+```git
+ember g route-test customer-e --metadata-dir=vendor\flexberry --file=customer-e.json
+```
+
+> В случае, если пользователь изменил названия форм во [Flexberry Designer](fd_flexberry-designer.html) или создал их вручную, то имена форм будут отличаться от ${modelName}-l и ${modelName}-e.
+
+## Генерация бакенда
+
+Для генерации бакенда можно воспользоваться меню плагина генерации для Flexberry Ember во [Flexberry Designer](fd_flexberry-designer.html): "вызов контекстного меню стадии -> `Backend` -> `ASP.NET`", при этом будет сгенерирован как проект с объектами данных, так и проект с [ODataService](fo_orm-odata-service.html) на базе ASP.NET Web API (перед генерацией дополнительно нужно проверить, что была настроена [карта типов для бакенда](fd_types-map.html)).
+
+Чтобы открыть каталог со [сгенерированным проектом](efd3_generated-app-structure.html), нужно в меню выбрать: "вызов контекстного меню стадии -> `Backend` -> `Открыть каталог`" (каталог для генерации определяется, исходя из настроек [Flexberry Designer](fd_flexberry-designer.html) (задаётся общая папка для генерации) и [настроек стадии](fd_project-customization.html) (чаще задаётся относительный путь от общей папки)).
+
+Можно проект сразу открыть в Visual Studio, для этого: "вызов контекстного меню стадии -> `Backend` -> `Открыть в Visual Studio...`".
+
+> После открытия [сгенерированного из Flexberry Designer проекта с бакендом](efd3_generated-app-structure.html) может оказаться, что в качестве проекта для запуска настроен проект с объектами данных. Эту настройку следует изменить: найти проект с OData -> вызов контекстного меню проекта -> `Set as startup project`. Также могут потребоваться [другие настройки окружения](efd3_generated-app-start.html), чтобы [запустить бакенд](efd3_generated-app-start.html). Основные особенности настройки ODataService указаны в [этой статье](fo_orm-odata-service.html).
+
+## Установка пакета ODataService «вручную» в приложение ASP.NET Web API
+
+Существует возможность [установить пакет ODataService «вручную»](fo_orm-odata-service.html) в приложение ASP.NET Web API (и таким образом получить Flexberry Ember бакенд). Ниже будет рассмотрен пример, когда сгенерированный по диаграмме классов проект с объектами данных будет подключён к приложению ASP.NET Web API и будет настроена работа через OData, чтобы клиентское Flexberry Ember-приложение могло получать с него данные.
+
+Для этого требуется сделать следующее:
+
+* Создать приложение ASP.NET Web API.
+
+
+
+* Задать название проекта.
+
+
+
+{% include important.html content="Поскольку проект с объектами данных сгенерирован для .Net Framework 4.5, то и у создаваемого проекта следует выбрать такой же фреймворк." %}
+
+* Выбрать тип проекта Web API.
+
+
+
+* Добавить в созданный Solution проект с объектами данных.
+
+
+
+* Добавить проектную ссылку из проекта ASP.NET Web API на добавленный проект с объектами данных.
+
+
+
+* Установить необходимые [Flexberry Nuget-пакеты](flexberry-nuget-packages.html). Это можно сделать, например, через менеджер пакетов в студии (версии пакетов должны соответствовать используемым в проекте с объектами).
+ * [NewPlatform.Flexberry.AspNet.WebApi.Cors](https://www.nuget.org/packages/NewPlatform.Flexberry.AspNet.WebApi.Cors/)
+ * [NewPlatform.Flexberry.LockService](https://www.nuget.org/packages/NewPlatform.Flexberry.LockService)
+ * [NewPlatform.Flexberry.LogService](fo_log-service-log4net.html)
+ * [NewPlatform.Flexberry.LogService.Objects](https://www.nuget.org/packages/NewPlatform.Flexberry.LogService.Objects)
+ * [NewPlatform.Flexberry.ORM](fo_flexberry-orm.html)
+ * [NewPlatform.Flexberry.ORM.ODataService](fo_orm-odata-service.html)
+ * [NewPlatform.Flexberry.UserSettingsService](https://www.nuget.org/packages/NewPlatform.Flexberry.UserSettingsService)
+
+
+
+* Установить при необходимости проект Unity.AspNet.WebApi.
+
+
+
+* Удалить лишние автосгенерированные элементы в проекте.
+
+
+
+* Добавить в проект ODataConfig.
+
+
+
+```cs
+namespace ManualOdataAddingTest
+{
+ using System;
+ using System.Reflection;
+ using System.Web.Http;
+
+ using ICSSoft.STORMNET;
+ using ICSSoft.Services;
+ using IIS.Caseberry.Logging.Objects;
+
+ using NewPlatform.Flexberry;
+ using NewPlatform.Flexberry.AspNet.WebApi.Cors;
+ using NewPlatform.Flexberry.ORM.ODataService;
+ using NewPlatform.Flexberry.ORM.ODataService.Extensions;
+ using NewPlatform.Flexberry.ORM.ODataService.Functions;
+ using NewPlatform.Flexberry.ORM.ODataService.Model;
+ using NewPlatform.Flexberry.Services;
+
+ using Unity;
+ using Unity.AspNet.WebApi;
+
+ internal static class ODataConfig
+ {
+ public static void Configure(HttpConfiguration config, IUnityContainer container, HttpServer httpServer)
+ {
+ if (config == null)
+ {
+ throw new ArgumentNullException("config");
+ }
+
+ if (container == null)
+ {
+ throw new ArgumentNullException("container");
+ }
+
+ config.EnableCors(new DynamicCorsPolicyProvider());
+ config.DependencyResolver = new UnityDependencyResolver(container);
+ var assemblies = new[]
+ {
+ Assembly.Load("GenTest.Objects"),
+ typeof(ApplicationLog).Assembly,
+ typeof(UserSetting).Assembly,
+ typeof(FlexberryUserSetting).Assembly,
+ typeof(Lock).Assembly
+ };
+
+ var builder = new DefaultDataObjectEdmModelBuilder(assemblies);
+ var token = config.MapODataServiceDataObjectRoute(builder, httpServer);
+ token.Functions.Register(new Func(Test));
+ token.Events.CallbackAfterCreate = CallbackAfterCreate;
+ }
+
+ private static void CallbackAfterCreate(DataObject dataObject)
+ {
+ }
+
+ private static string Test(QueryParameters queryParameters)
+ {
+ return "Hello world!";
+ }
+ }
+}
+```
+
+`Assembly.Load("GenTest.Objects")` - загрузка сборки с объектами из подключенного проекта.
+
+* Изменить содержимое Global.asax.cs
+
+```cs
+namespace ManualOdataAddingTest
+{
+ using System;
+ using System.Web;
+ using System.Web.Http;
+
+ using ICSSoft.STORMNET.Business;
+
+ using Microsoft.Practices.Unity.Configuration;
+ using Unity;
+
+ public class Global : HttpApplication
+ {
+ protected void Application_Start(object sender, EventArgs e)
+ {
+ IUnityContainer container = new UnityContainer();
+ container.LoadConfiguration();
+ container.RegisterInstance(DataServiceProvider.DataService);
+ GlobalConfiguration.Configure(configuration => ODataConfig.Configure(configuration, container, GlobalConfiguration.DefaultServer));
+ }
+ }
+}
+
+```
+
+* Изменить содержимое представления Global.asax
+
+```cs
+<%@ Application Codebehind="Global.asax.cs" Inherits="ManualOdataAddingTest.Global" Language="C#" %>
+```
+
+* Удалить из файла конфигурации Web.config настройки, связанные с Oracle.
+
+
+
+* Заменить в файле конфигурации Web.config секцию `appSettings` и добавить секцию `connectionStrings` (в случае, если используется БД, отличная от Postgres, то значения настроек будут несколько отличаться).
+
+```xml
+{% raw %}
+
+
+
+
+
+
+
+{% endraw %}
+```
+
+* Заменить в файле конфигурации Web.config секцию `unity` (в случае, если используется БД, отличная от Postgres, то значения настроек будут несколько отличаться).
+
+```xml
+{% raw %}
+
+
+
+
+
+
+
+
+{% endraw %}
+```
+
+* Запустить проект, который после запуска вернёт сообщение "403" (адрес запуска проекта [можно изменить](efd3_generated-app-start)).
+
+
+
+* Перейти по адресу `/odata` и удостовериться, что [OData API](efd3_generated-app-start) функционирует.
+
+
+
+> При настройке проекта вручную нужно соблюдть согласованность версий .Net Framework, Nuget-пакетов и прочего. При генерации проекта эти заботы на себя берёт [Flexberry Designer](fd_flexberry-designer.html).
diff --git a/pages/products/flexberry-ember/3.x/app-generation/efd3_generated-app-regeneration.ru.md b/pages/products/flexberry-ember/3.x/app-generation/efd3_generated-app-regeneration.ru.md
new file mode 100644
index 000000000..2a33aedbb
--- /dev/null
+++ b/pages/products/flexberry-ember/3.x/app-generation/efd3_generated-app-regeneration.ru.md
@@ -0,0 +1,54 @@
+---
+title: Перегенерация приложений
+sidebar: flexberry-ember-3_sidebar
+keywords: Flexberry Ember
+toc: true
+permalink: ru/efd3_generated-app-regeneration.html
+lang: ru
+summary: Обзор возможностей перегенерации сгенерированных приложений
+---
+
+> Изменять настройки объектов данных (представления, названия полей, новые классы, связи и прочее), форм и всего приложения настоятельно рекомендуется во [Flexberry Designer](fd_flexberry-designer.html), эти изменения при перегенерации могут идти как в клиентское, так и серверное приложение. Однако изменения средствами [Flexberry Designer](fd_flexberry-designer.html) способны затереть пользовательский код.
+
+## Правила перегенерации серверного приложения
+
+Серверное приложение состоит из объектов данных и непосредственно OData-бакенда.
+Весь пользовательский код в объектах данных следует располагать в [скобки программиста](fo_programmer-brackets.html), чтобы он не был затёрт при перегенерации. Для OData-бакенда такого механизма не предусмотрено.
+
+Для перегенерации серверного приложения из меню стадии следует выбрать `Ember -> Backend -> ASP.Net -> Генерировать`.
+
+
+
+В настоящее время не существует способа перегенерации отдельных классов на бэкенде, поэтому она запускается целиком для всех классов. Однако можно запустить перегенерацию не всего серверного приложения, а исключительно объектов данных или непосредственно OData-бакенда.
+
+
+
+## Правила перегенерации клиентского приложения
+
+Нужно всегда четко понимать, какие файлы затрагивает перегенерация того или иного класса.
+
+При перегенерации модели перезаписываются метаданные в папке `vendor/flexberry` сгенерированного Ember-приложения, [модель](efd3_model.html) и [сериализатор](efd3_serializer.html) в папке `mixins/regererated`, а также [модель](efd3_model.html) в папке `app/models`.
+
+При перегенерации формы изменяются метаданные в папке `vendor/flexberry` сгенерированного Ember-приложения, а также соответствующие [контроллер, роут, шаблон и файлы локализации](efd3_form.html).
+
+Любые способы перегенерации могут повредить пользовательские изменения в исходном коде. Не рекомендуется производить перегенерацию, особенно, перегенерацию приложения целиком, непосредственно в папку проекта: рекомендуется сгенерировать приложение в стороннюю папку и оттуда перенести нужные изменения в проект, или генерировать только метаданные, а по ним при помощи соответствующих команд генерации из командной строки изменять требуемые файлы приложения.
+
+> Не запускать перегенерацию клиентского приложения без уверенности, что это не затрет сделанные ранее изменения в исходном коде. В случае, если нужный пользовательский код всё-таки был затерт при перегенерации, рекомендуется откатить соответствующие изменения средствами системы контроля версий и выполнить повторную перегенерацию согласно изложенным инструкциям.
+
+Для выполнения полной перегенерации клиентского приложения из [Flexberry Designer](fd_flexberry-designer.html), можно воспользоваться контекстным меню стадии `Ember -> Frontend -> EmberJS -> Генерировать всё` (либо выполнить команду `Генерировать метаданные`, после чего [перегенерировать приложение из командной строки](efd3_app_generation.html)).
+
+
+
+### Перегенерация отдельных моделей и форм
+
+Средствами [Flexberry Designer](fd_flexberry-designer.html) доступна перегенерация отдельных моделей и форм, для этого у соответствующего элемента на диаграмме трубуется выбрать в контекстном меню пункт `Генерировать frontend`.
+
+
+
+> Из-за особенностей отображения проекций в [моделях](efd3_model.html) если, например, во [Flexberry Designer](fd_flexberry-designer.html) было изменено представление детейла, то требуется перегенерация как детейлового класса, так и класса-агрегатора.
+
+Также перегенерация отдельных моделей и форм возможна посредством специальных команд командной строки.
+
+### Использование дополнительных команд командной строки для перегенерации нескольких моделей и форм
+
+В настоящий момент, помимо [возможности генерации из командной строки](efd3_app-generation.html), ведётся доработка дополнительных команд командной строки для перегенерации нескольких [моделей](efd3_model.html) и [форм](efd3_form.html) одновременно.
diff --git a/pages/products/flexberry-ember/3.x/app-generation/efd3_generated-app-start.ru.md b/pages/products/flexberry-ember/3.x/app-generation/efd3_generated-app-start.ru.md
new file mode 100644
index 000000000..2e7603958
--- /dev/null
+++ b/pages/products/flexberry-ember/3.x/app-generation/efd3_generated-app-start.ru.md
@@ -0,0 +1,420 @@
+---
+title: Запуск сгенерированных приложений
+sidebar: flexberry-ember-3_sidebar
+keywords: Flexberry Ember
+toc: true
+permalink: ru/efd3_generated-app-start.html
+lang: ru
+summary: Обзор особенностей настройки и запуска сгенерированных приложений.
+---
+
+## Настройка Flexberry Ember-приложений
+Для запуска сгенерированных приложений может потребоваться дополнительная настройка.
+
+### Настройка OData-бакенда
+Для того, чтобы запустить бакенд, нужно открыть сгенерированный файл с расширением `sln`, который находится в папке со сгенерированным из [Flexberry Designer](fd_flexberry-designer.html) решением, в среде разработки Visual Studio. По умолчанию проектом для запуска в сгенерированном решении может являться проект с объектами данных. Чтобы приложение запустилось, требуется назначить проектом для запуска `ODataBackend`.
+
+Далее в файле `ODataConfig` требуется раскомментировать строчку
+
+```csharp
+config.EnableCors(new DynamicCorsPolicyProvider());
+```
+
+
+
+По умолчанию проект запустится по адресу `http://localhost:6500/`. Изменить эту настройку можно в свойствах проекта (правая кнопка мыши на проекте `ODataBackend` -> Properties -> Вкладка `Web` -> Раздел `Servers`).
+
+
+
+После генерации OData-бакенд содержит файл конфигурации `Web.config` со следующими настройками, которые можно при необходимости менять
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ...
+
+
+ ...
+
+
+
+
+ ...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+{% include important.html content="Более сложные варианты настройки OdataService указаны в [этой статье](fo_orm-odata-service.html)." %}
+
+### Настройка клиентского приложения
+Открыть `фронтенд`-часть приложения можно в `Visual Studio Code`, для этого нужно открыть папку `ember-app` внутри папки со сгенерированным из `Flexberry Designer` приложением (можно это сделать, выбрав пункт меню `File` → `Open folder`).
+
+После генерации клиентское приложение содержит файл конфигурации `environment.js`.
+
+
+
+``` js
+'use strict';
+
+module.exports = function(environment) {
+ // Адрес OData-бакенда.
+ var backendUrl = 'http://localhost:6500';
+
+ // Возможна работа с локальной БД, тогда для запуска следует использовать `ember s -e development-loc`.
+ if (environment === 'development-loc') {
+ // Адрес OData-бакенда при работе с локальной БД.
+ backendUrl = 'http://localhost:6500';
+ }
+
+ // Настройки приложения, аналогичны настройкам Ember.
+ let ENV = {
+ modulePrefix: 'ember-app',
+ environment,
+ rootURL: '/',
+ locationType: 'auto',
+ EmberENV: ...
+ },
+
+ APP: {
+ // Имя приложения, используется сервисом пользовательских настроек.
+ name: 'ember-app',
+
+ // Адрес OData-бакенда.
+ backendUrl: backendUrl,
+
+ // Адрес OData-бакенда, через который непосредственно делаются запросы.
+ backendUrls: {
+ root: backendUrl,
+ api: backendUrl + '/odata'
+ },
+
+ // Настройки логирования.
+ log: { ... },
+
+ // Настройки сервиса оценки скорости рендеринга компонент.
+ perf: { ... },
+
+ // Настройки сервиса блокировок.
+ lock: { ... },
+
+ // Флаг, использовать ли сервис пользовательских настроек.
+ useUserSettingsService: true,
+
+ // Флаг, использовать ли сервис задания ограничений.
+ useAdvLimitService: true,
+
+ // Настройки для работы в офлайн-режиме.
+ offline: { ... },
+
+ // Настройки работы некоторых Flexberry Ember-компонент.
+ components: { ... },
+ }
+ };
+
+ // Настройки CSP:
+ // http://www.ember-cli.com/#content-security-policy
+ // https://github.com/rwjblue/ember-cli-content-security-policy
+ // http://content-security-policy.com
+ ENV.contentSecurityPolicy = { ... };
+
+ // Настройки ember-i18n: https://github.com/jamesarosen/ember-i18n.
+ ENV.i18n = {
+ // Локализация по умолчанию.
+ defaultLocale: 'ru'
+ };
+
+ // Настройки ember-moment: https://github.com/stefanpenner/ember-moment.
+ ENV.moment = {
+ outputFormat: 'L'
+ };
+
+ // Настройки для режима разработки.
+ if (environment === 'development') { ... }
+
+ // Настройки для режима тестирования.
+ if (environment === 'test') { ... }
+
+ // Настройки для режима работы развёрнутого для пользователей приложения.
+ if (environment === 'production') { ... }
+
+ return ENV;
+};
+```
+
+* `ENV.locationType` - [режим формирования URL для приложения](efd3_router.html).
+* `ENV.APP.log` - настройки [сервиса логирования](efd3_log-service.html).
+* `ENV.APP.lock` - настройки [сервиса пессимистических блокировок](efd3_editform.html).
+* `ENV.APP.offline` - настройки для работы [в офлайн-режиме]().
+* `ENV.APP.useUserSettingsService` - флаг, определяющий работу [сервиса пользовательских настроек]().
+* `ENV.APP.useAdvLimitService` - флаг, определяющий работу [сервиса задания ограничений]().
+
+Файл конфигурации `targets.js` полностью идентичен генерируемому `Ember` файлу, в нём указаны настройки для [транспилятора Babel](https://babeljs.io/).
+
+Настройку хоста и порта для запуска приложения можно осуществить, как прописав соответствующие опции в файл `.ember-cli`, так и указав их непосредственно в командной строке (доступные опции можно узнать, выполнив команду `ember s --help` в командной строке).
+
+## Запуск приложений
+OData-бакенд и клиентское Ember-приложение можно запускать в произвольном порядке, однако предпочтительнее сначала запустить OData-бакенд, после чего в браузере открывать клиентское приложение.
+
+### Запуск OData-бакенда
+Для запуска настроенного OData-бакенда в `Visual studio` нужно нажать `Ctrl+F5` или выбрать пункт меню `Debug` → `Start Without Debugging`. При успешном запуске приложения в браузере, назначенном по умолчанию в `Visual Studio`, откроется страница с кодом 403.14 - Forbidden.
+
+Для проверки, что сгенерированный API доступен, можно добавить к URL `/odata`.
+
+
+
+### Запуск клиентского приложения
+Можно запустить сгенерированное настроенное клиентское приложение в `Visual Studio Code`. Для этого следует открыть терминал `Terminal` -> `New terminal`.
+
+
+
+В запущенном терминале следует выполнить команду `ember server`.
+
+Если сборка приложения завершилась успешно, то в терминале появится соответствующее сообщение, а также ссылка, по которой можно открыть запущенное приложение.
+
+
+
+После открытия ссылки можно увидеть примерно следующее:
+
+
+
+## Обзор функционала клиентского приложения
+Сгенерированное клиентское приложение предоставляет следующие возможности.
+
+* Меню клиентского приложения соответствует структуре, заданной во [Flexberry Designer](fd_flexberry-designer.html) в классе со стереотипом `application`.
+
+
+
+* Доступны [списки объектов данных](efd3_listform.html), куда есть возможность добавлять новые записи (во [Flexberry Designer](fd_flexberry-designer.html) спискам соответствуют классы со стереотипом `listform`).
+
+
+
+* При [добавлении или редактировании новой записи](efd3_editform.html) (это происходит на форме, соответствующей классу со стереотипом `editform` во [Flexberry Designer](fd_flexberry-designer.html)) для разных типов данных используются соответствующие компоненты.
+
+
+
+
+
+* На [формах создания и редактирования](efd3_editform.html) работают встроенные типичные правила [валидации данных](efd3_model-validation.html)
+
+
+
+* При добавлении новой записи происходит переадресация [с формы создания на форму редактирования]((efd3_editform.html))
+
+
+
+* Добавленные записи отображаются на соответствующей [списковой форме](efd3_listform.html)
+
+
+
+## Обзор функционала OData API
+
+После запуска OData-бакенда по адресу `http://localhost:6500/odata/` отображается доступный API (адрес может быть изменён в настройках).
+
+### Получение всех записей
+
+Для отображения всех записей, например, типа `IISGenTestMasterForAgregator`, можно в браузере ввести
+`http://localhost:6500/odata/IISGenTestMasterForAgregators` (при этом в конце имени типа следует добавить символ `s`), тогда придёт ответ:
+
+```json
+{
+ "@odata.context":"http://localhost:6500/odata/$metadata#IISGenTestMasterForAgregators","value":[
+ {
+ "Enum2Field":"ValueSecond","__PrimaryKey":"6213c156-b061-4287-8275-b8533d9ecf7a"
+ },{
+ "Enum2Field":"ValueFirst","__PrimaryKey":"2ea43483-19db-4474-b523-426fec183aed"
+ },{
+ "Enum2Field":"ValueThird","__PrimaryKey":"fa621409-c381-41a1-b1ae-6767e404a99f"
+ }
+ ]
+}
+```
+
+### Получение данных списковой формы
+
+Для получения данных для [списковой формы](efd3_listform.html) на OData-бакенд идёт запрос вида
+
+```
+http://localhost:6500/odata/IISGenTestChild2s?
+ $count=true
+ &$select=__PrimaryKey,DateTimeField,ParentField
+ &$skip=0
+ &$top=5
+```
+
+```json
+{
+ "@odata.context":"http://localhost:6500/odata/$metadata#IISGenTestChild2s(__PrimaryKey,DateTimeField,ParentField)","@odata.count":1,"value":[
+ {
+ "__PrimaryKey":"fe3325bf-c633-4661-ad6f-bba7eb24b46d","DateTimeField":"2020-09-30T19:30:55.112+05:00","ParentField":23
+ }
+ ]
+}
+```
+
+* `http://localhost:6500/odata/IISGenTestChild2s` - указание запрашиваемого типа,
+* `$count=true` - указание, что следует вернуть метаданные о количестве возвращённых записей (в ответе: `"@odata.count":1`),
+* `$select=__PrimaryKey,DateTimeField,ParentField` - указание, что требуется вернуть поля `__PrimaryKey`, `DateTimeField` и `ParentField` (в ответе: `"@odata.context":"http://localhost:6500/odata/$metadata#IISGenTestChild2s(__PrimaryKey,DateTimeField,ParentField)"`),
+* `$skip=0` - указание, что записи следует возвращать, начиная с нулевой (фактически, пропускаем 0 записей с начала),
+* `$top=5` - указание, что следует вернуть 5 записей.
+
+Если на [списковой форме](efd3_listform.html) отображаются поля мастера, то запрос будет иметь вид
+
+```
+http://localhost:6500/odata/IISGenTestChild1s?
+ $count=true
+ &$expand=MyMaster($select=__PrimaryKey,IntField)
+ &$select=__PrimaryKey,DoubleField,StringField,ParentField,MyMaster
+ &$skip=0
+ &$top=5
+```
+
+```json
+{
+ "@odata.context":"http://localhost:6500/odata/$metadata#IISGenTestChild1s(__PrimaryKey,DoubleField,StringField,ParentField,MyMaster,MyMaster(__PrimaryKey,IntField))","@odata.count":1,"value":[
+ {
+ "__PrimaryKey":"aa447992-c783-41d3-80f0-c78ae200a881","DoubleField":1.0,"StringField":"\u0421\u0442\u0440\u043e\u043a\u0430","ParentField":33,"MyMaster":{
+ "__PrimaryKey":"3235b1d9-66a9-4ee2-9698-faaa7465b1d0","IntField":12
+ }
+ }
+ ]
+}
+```
+
+В отличие от предыдущего примера здесь через `$expand` запрашиваются поля `__PrimaryKey` и `IntField` связанной по связи `MyMaster` сущности (`$expand=MyMaster($select=__PrimaryKey,IntField)`).
+
+### Получение данных формы редактирования
+
+Для получения данных для [формы редактирования](efd3_editform.html) на OData-бакенд идёт запрос вида
+
+```
+http://localhost:6500/odata/IISGenTestChild2s?
+ $filter=__PrimaryKey%20eq%20fe3325bf-c633-4661-ad6f-bba7eb24b46d
+ &$select=__PrimaryKey,DateTimeField,ParentField
+```
+
+Для отображения только требуемой записи накладывается фильтр, что [первичный ключ](efd3_model.html) должен иметь заданное значение (`filter=__PrimaryKey%20eq%20fe3325bf-c633-4661-ad6f-bba7eb24b46d`).
+
+```json
+{
+ "@odata.context":"http://localhost:6500/odata/$metadata#IISGenTestChild2s(__PrimaryKey,DateTimeField,ParentField)","value":[
+ {
+ "__PrimaryKey":"fe3325bf-c633-4661-ad6f-bba7eb24b46d","DateTimeField":"2020-09-30T19:30:55.112+05:00","ParentField":23
+ }
+ ]
+}
+```
+
+Если у записи требуется получить как мастера, так и детейлы, то запрос будет иметь вид
+
+```
+http://localhost:6500/odata/IISGenTestChild1s?
+ $expand=MyMaster($select=__PrimaryKey,IntField),
+ Detail1ForChild1($select=__PrimaryKey,IntFieldWithValue1),
+ Detail2ForChild1($select=__PrimaryKey,IntFieldWithValue)
+ &$filter=__PrimaryKey%20eq%20aa447992-c783-41d3-80f0-c78ae200a881
+ &$select=__PrimaryKey,DoubleField,StringField,ParentField,MyMaster,Detail1ForChild1,Detail2ForChild1
+```
+
+Через `$expand` запрашиваются поля связанных по связям `MyMaster` (мастеровая связь), `Detail1ForChild1` (детейловая связь), `Detail2ForChild1` (детейловая связь) сущностей (`$expand=MyMaster($select=__PrimaryKey,IntField),Detail1ForChild1($select=__PrimaryKey,IntFieldWithValue1),Detail2ForChild1($select=__PrimaryKey,IntFieldWithValue)`).
+
+```json
+{
+ "@odata.context":"http://localhost:6500/odata/$metadata#IISGenTestChild1s(__PrimaryKey,DoubleField,StringField,ParentField,MyMaster,Detail1ForChild1,Detail2ForChild1,MyMaster(__PrimaryKey,IntField),Detail1ForChild1(__PrimaryKey,IntFieldWithValue1),Detail2ForChild1(__PrimaryKey,IntFieldWithValue))","value":[
+ {
+ "__PrimaryKey":"aa447992-c783-41d3-80f0-c78ae200a881","DoubleField":1.0,"StringField":"\u0421\u0442\u0440\u043e\u043a\u0430","ParentField":33,"MyMaster":{
+ "__PrimaryKey":"3235b1d9-66a9-4ee2-9698-faaa7465b1d0","IntField":12
+ },"Detail1ForChild1":[
+ {
+ "__PrimaryKey":"7f6dc423-2e43-4d55-8b6f-0468eddc4ba2","IntFieldWithValue1":1
+ },{
+ "__PrimaryKey":"706dc254-ac6f-4321-8d17-b253a4435c11","IntFieldWithValue1":11
+ }
+ ],"Detail2ForChild1":[
+ {
+ "__PrimaryKey":"35436532-ace0-4723-b043-0e8c52d1cb84","IntFieldWithValue":2
+ }
+ ]
+ }
+ ]
+}
+```
+
+Если у записи два мастера (`Child2`, `MasterForAgregator`), а детейл (`DetailForAgregator`) также имеет мастеровую связь (`MasterForAgregator`), то запрос происходит полностью аналогично с увеличением уровня вложенности
+
+```
+http://localhost:6500/odata/IISGenTestAgregatorClasss?
+ $expand=Child2($select=__PrimaryKey,DateTimeField),
+ MasterForAgregator($select=__PrimaryKey,Enum2Field),
+ DetailForAgregator($select=__PrimaryKey,DetailIntField,MasterForAgregator;
+ $expand=MasterForAgregator($select=__PrimaryKey,Enum2Field))
+ &$filter=__PrimaryKey%20eq%200ca7f760-2b1d-4be1-9659-be0bf6ab7faa
+ &$select=__PrimaryKey,Enum1Field,Child2,MasterForAgregator,DetailForAgregator
+```
+
+```json
+{
+ "@odata.context":"http://localhost:6500/odata/$metadata#IISGenTestAgregatorClasss(__PrimaryKey,Enum1Field,Child2,MasterForAgregator,DetailForAgregator,Child2(__PrimaryKey,DateTimeField),MasterForAgregator(__PrimaryKey,Enum2Field),DetailForAgregator(__PrimaryKey,DetailIntField,MasterForAgregator,MasterForAgregator(__PrimaryKey,Enum2Field)))","value":[
+ {
+ "__PrimaryKey":"0ca7f760-2b1d-4be1-9659-be0bf6ab7faa","Enum1Field":"FirstValue","Child2":{
+ "__PrimaryKey":"fe3325bf-c633-4661-ad6f-bba7eb24b46d","DateTimeField":"2020-09-30T19:30:55.112+05:00"
+ },"MasterForAgregator":{
+ "__PrimaryKey":"6213c156-b061-4287-8275-b8533d9ecf7a","Enum2Field":"ValueSecond"
+ },"DetailForAgregator":[
+ {
+ "__PrimaryKey":"22f03fc5-6e6c-4350-84aa-b0c97299956c","DetailIntField":2,"MasterForAgregator":{
+ "__PrimaryKey":"6213c156-b061-4287-8275-b8533d9ecf7a","Enum2Field":"ValueSecond"
+ }
+ }
+ ]
+ }
+ ]
+}
+```
+
+{% include note.html content="При обновлении соответствующий запрос на форме создания и редактирования [зависит от изменённых данных](efd3_editform.html)." %}
\ No newline at end of file
diff --git a/pages/products/flexberry-ember/3.x/app-generation/efd3_generated-app-structure.ru.md b/pages/products/flexberry-ember/3.x/app-generation/efd3_generated-app-structure.ru.md
index ee42d67da..f6bec212e 100644
--- a/pages/products/flexberry-ember/3.x/app-generation/efd3_generated-app-structure.ru.md
+++ b/pages/products/flexberry-ember/3.x/app-generation/efd3_generated-app-structure.ru.md
@@ -10,30 +10,30 @@ summary: Обзор структуры сгенерированных клиен
В этом разделе рассматривается пример структуры сгенерированного приложения для следующей диаграммы классов:
-.
+
## Структура сгенерированного клиентского приложения
-Структура сгенерированного `Flexberry Ember`-приложения по сути расширяет структуру ["чистого" Ember-приложения](https://guides.emberjs.com/v3.1.0/getting-started/core-concepts/). При генерации `Flexberry Ember`-приложения сначала происходит генерация "чистого" `Ember`-приложения, а затем генерируются дополнительные элементы приложения на осове метаданных, соответствующих спроектированной модели предметной области во [Flexberry Designer](fd_flexberry-designer.html). На скриншоте ниже слева представлена структура "чистого" `Ember`-приложения, полученная при генерации с использованием [инструментов командной строки Ember](https://cli.emberjs.com/), справа - с помощью генерации кода клиентского приложения из [Flexberry Designer](fd_flexberry-designer.html). Как можно заметить, в варианте структуры справа уже установлены bower- и node-модули (из-за установки соответствующих дополнительных пакетов, помимо прочего, генерация из [Flexberry Designer](fd_flexberry-designer.html) может занимать длительное время), а также добавлен файл `theme.config` для осуществления настройки [темы оформления](efd3_themes-structure.html) конкретного приложения.
+Структура сгенерированного `Flexberry Ember`-приложения по сути расширяет структуру ["чистого" Ember-приложения](https://guides.emberjs.com/v3.1.0/getting-started/core-concepts/). При генерации `Flexberry Ember`-приложения сначала происходит генерация "чистого" `Ember`-приложения, а затем генерируются дополнительные элементы приложения на основе метаданных, соответствующих спроектированной модели предметной области во [Flexberry Designer](fd_flexberry-designer.html). На скриншоте ниже слева представлена структура "чистого" `Ember`-приложения, полученная при генерации с использованием [инструментов командной строки Ember](https://cli.emberjs.com/), справа - с помощью генерации кода клиентского приложения из [Flexberry Designer](fd_flexberry-designer.html). Как можно заметить, в варианте структуры справа уже установлены bower- и node-модули (из-за установки соответствующих дополнительных пакетов, помимо прочего, генерация из [Flexberry Designer](fd_flexberry-designer.html) может занимать длительное время), а также добавлен файл `theme.config` для осуществления настройки [темы оформления]() конкретного приложения.
-.
+
При сравнении структуры папки `app` (на скриншоте ниже слева представлено "чистое" `Ember`-приложение, справа - `Flexberry Ember`-приложение) также очевидно, что `Flexberry Ember`-приложение содержит дополнительные элементы.
-.
+
-Далее мы подробнее рассмотрим те элементы `Ember`-приложения, которые генерируются из [Flexberry Designer](fd_flexberry-designer.html).
+Далее подробнее будут рассмотрим те элементы `Ember`-приложения, которые генерируются из [Flexberry Designer](fd_flexberry-designer.html).
### Сгенерированные модели
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [модели](efd3_model.html) (папка `models`):
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [модели](https://guides.emberjs.com/v3.1.0/models/) (папка `models`):
.
-На скриншоте выделены модели, соответствующие [объектам данных](fo_data-object.html) (бизнес-объекты приложения), структура этих моделей описана в [отдельной статье](efd3_model.html).
+На скриншоте выделены модели, соответствующие [объектам данных](fo_data-object.html) (бизнес-объекты приложения), структура этих моделей описана в [отдельной статье](efd3_model.html)
{% include note.html content="Модели генерируются в папку `models` и именуются следующим образом: если соответствующий C#-класс на [OData-бэкенде](fo_orm-odata-service.html) называется `NewPlatform.Someproject.Somemodel`, то файл с моделью в клиентском приложении должен называться `new-platform-someproject-somemodel`. Если на [OData-бэкенде](fo_orm-odata-service.html) используется атрибут [PublishName](fo_metadata-for-client.html) для упрощения именования моделей, то наименование пространства имен в этом случае в клиентской модели может отсутствовать (имя клиентской модели будет формироваться соответственно имени в EDM-модели на OData-бакенде)" %}
-Помимо самих моделей также генерируется файл `custom-inflector-rules.js`, где посредством [Ember Inflector](https://github.com/emberjs/ember-inflector) задаётся соответствие имён моделей в единственном и множественном числе - соответствующие преобразования имен автоматически осуществляются при формировании запросов к серверу (если присмотреться, то можно заметить, что в правилах преобразования указаны последние слова в именах моделей, соответствующих [классам данных](fo_data-object.html)).
+Помимо самих моделей также генерируется файл `custom-inflector-rules.js`, где посредством [Ember Inflector](https://github.com/emberjs/ember-inflector) задаётся соответствие имён моделей в единственном и множественном числе - соответствующие преобразования имен автоматически осуществляются при [формировании запросов к серверу](efd3_generated-app-start.html) (если присмотреться, то можно заметить, что в правилах преобразования указаны последние слова в именах моделей, соответствующих [классам данных](fo_data-object.html)).
```javascript
import Inflector from 'ember-inflector';
@@ -49,96 +49,96 @@ export default {};
```
### Сгенерированные сериализаторы
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [сериализаторы](efd3_serializer.html) (папка `serializers`):
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [сериализаторы](https://guides.emberjs.com/v3.1.0/models/customizing-serializers/) (папка `serializers`):
-.
+
-Каждой модели соответствует свой [сериализатор](efd3_serializer.html). Для каждой модели также генерируются [офлайн-сериализаторы](efd3_offline-serializer.html) для работы с офлайн-хранилищем.
+Каждой модели соответствует свой сериализатор; [в технологии Flexberry Ember сериализаторы имеют свою специфику](efd3_serializer.html). Для каждой модели также генерируются [офлайн-сериализаторы]() для работы с офлайн-хранилищем.
### Сгенерированные миксины
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [миксины](efd3_mixin.html) (папка `mixins`):
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [миксины](https://api.emberjs.com/ember/3.1/classes/Mixin) (папка `mixins`):
-.
+
-Миксины при генерации добавляются во вложенную папку `regenerated`. При каждом запуске перегенерации из [Flexberry Designer](fd_flexberry-designer.html) данные миксины будут обновлены, что нужно учитывать, чтобы новый программный код не был утерян. В миксины вынесены как части [моделей](efd3_model.html), так и [сериализаторов](efd3_serializer.html), в том числе [офлайн-сериализаторов](efd3_offline-serializer.html).
+Миксины при генерации добавляются во вложенную папку `regenerated`. При каждом запуске перегенерации из [Flexberry Designer](fd_flexberry-designer.html) данные миксины будут обновлены, что нужно учитывать, чтобы новый программный код не был утерян. В миксины вынесены как части [моделей](efd3_model.html), так и [сериализаторов](efd3_serializer.html), в том числе [офлайн-сериализаторов]().
### Сгенерированные адаптеры
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [адаптеры](efd3_application-adapter.html) (папка `adapters`), в том числе [адаптер для работы в офлайн-режиме](efd3_application-adapter-ofline.html):
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [адаптеры](https://guides.emberjs.com/v3.1.0/models/customizing-adapters/) (папка `adapters`), в том числе [адаптер для работы в офлайн-режиме]():
-.
+
### Сгенерированные сервисы
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляется переопределенный [сервис store](efd3_store-service.html) (папка `services`), который позволяет приложению работать как в онлайн-режиме, так и в офлайн-режиме.
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляется [переопределенный сервис store](efd3_service.html) ([папка `services`](https://guides.emberjs.com/v3.1.0/applications/services/#toc_defining-services)), который позволяет приложению работать как в онлайн-режиме, так и в [офлайн-режиме]().
-.
+
### Сгенерированные перечисления и трансформации
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [перечисления](efd3_enum.html) (папка `enums`):
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [перечисления]() (папка `enums`):
.
-Перечисления соответствуют заданным на диаграмме классов сущностям со стереотипом `enumeration`. Поскольку перечисления не поддерживаются в `Ember`-приложениях "из коробки", то для каждого перечисления генерируется также соответствующая [трансформация](efd3_transform.html) (папка `transforms`):
+Перечисления соответствуют заданным на диаграмме классов сущностям со стереотипом `enumeration`. Поскольку перечисление [не является поддерживаемым типом данных в `Ember`-приложениях "из коробки"](https://guides.emberjs.com/v3.1.0/models/defining-models/#toc_transforms), то для каждого перечисления генерируется также соответствующая [трансформация]() (папка `transforms`):
-.
+
### Сгенерированные контроллеры
-При генерации в клиентское приложение добавляются следующие [контроллеры](efd3_controller.html) (папка `controllers`):
+При генерации в клиентское приложение добавляются следующие [контроллеры](https://guides.emberjs.com/v3.1.0/controllers/) (папка `controllers`):
-.
+
-Контроллеры генерируются для форм и приложений, заданных на соответствующей диаграмме классов во [Flexberry Designer](fd_flexberry-designer.html). Также для форм создания записей отдельно генерируется контроллер `new` в папку с именем соответствующей формы редактирования.
+Контроллеры генерируются для [форм](efd3_form.html) и приложений, заданных на соответствующей диаграмме классов во [Flexberry Designer](fd_flexberry-designer.html). Также для [форм создания записей](efd3_editform.html) отдельно генерируется контроллер `new` в папку с именем соответствующей [формы редактирования](efd3_editform.html).
-.
+
-В контроллер `application` сгенерирован код для работы с меню (в нем определяется структура меню, заданная во [Flexberry Designer](fd_flexberry-designer.html)), а также необходимый для смены локализации код.
+В контроллер `application` сгенерирован код для работы с меню (в нем определяется структура меню, заданная во [Flexberry Designer](fd_flexberry-designer.html)), а также необходимый для [смены локализации]() код.
### Сгенерированные роуты
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [роуты](efd3_route.html) (папка `routes`):
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [роуты](https://guides.emberjs.com/v3.1.0/routing/) (папка `routes`):
.
-Роуты генерируются для списковых форм, форм редактирования, заданных на соответствующей диаграмме классов во [Flexberry Designer](fd_flexberry-designer.html) (эту диаграмму мы рассматривали ранее, когда говорили о сгенерированных контроллерах). Для форм создания записей по аналогии с генерацией контроллеров отдельно генерируется роут `new` в папку с именем соответствующей формы редактирования.
+Роуты генерируются для [списковых форм](efd3_listform.html), [форм редактирования](efd3_editform.html), заданных на соответствующей диаграмме классов во [Flexberry Designer](fd_flexberry-designer.html) (эту диаграмма была рассмотрена ранее). Для [форм создания записей](efd3_editform.html) по аналогии с генерацией контроллеров отдельно генерируется роут `new` в папку с именем соответствующей [формы редактирования](efd3_editform.html).
### Сгенерированные шаблоны
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [шаблоны](efd3_template.html) (папка `templates`):
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [шаблоны](https://guides.emberjs.com/v3.1.0/templates/handlebars-basics/) (папка `templates`):
-.
+
-Шаблоны генерируются для списковых форм и форм редактирования, заданных на соответствующей диаграмме класов во [Flexberry Designer](fd_flexberry-designer.html) (эту диаграмму мы рассматривали ранее, когда говорили о сгенерированных контроллерах).
+Шаблоны генерируются для [списковых форм](efd3_listform.html) и [форм редактирования](efd3_editform.html), заданных на соответствующей диаграмме класов во [Flexberry Designer](fd_flexberry-designer.html) (эту диаграмма была рассмотрена ранее).
-Для списковых форм отдельно генерируется также шаблон `loading` в папку с именем соответствующей списковой формы, этот шаблон отображается в процессе перехода на соответствующий роут (этот шаблон генерируется также и на уровень всего приложения).
+Для [списковых форм](efd3_listform.html) отдельно генерируется шаблон `loading` в папку с именем соответствующей списковой формы, этот шаблон отображается [в процессе перехода на соответствующий роут](https://guides.emberjs.com/v3.1.0/routing/loading-and-error-substates/) (этот шаблон генерируется также и на уровень всего приложения).
-Также генерируется шаблон для отображения сообщения об ошибках (шаблон `error`). Этот шаблон генерируется только на уровень всего приложения.
+Также генерируется шаблон [для отображения сообщения об ошибках (шаблон `error`)](https://guides.emberjs.com/v3.1.0/routing/loading-and-error-substates/). Этот шаблон генерируется только на уровень всего приложения.
-Стандартый для "чистого" `Ember`-приложения шаблон `application` также заменяется на шаблон, разметка которого используется в [темах оформления](efd3_themes-structure.html) `Flexberry Ember`-приложений. Кроме того, генерируется также вариант шаблона `application`, который будет использоваться при запуске приложения на мобильных устройствах (генерация осуществляется в папку `mobile`; по аналогии во вложенных папках `mobile` могут быть созданы и другие элементы приложения, если их работу требуется переопределить при запуске приложения на мобильных устройствах).
+Стандартый для "чистого" `Ember`-приложения шаблон `application` заменяется на шаблон, разметка которого используется в [темах оформления]() `Flexberry Ember`-приложений. Кроме того, генерируется вариант шаблона `application`, который будет использоваться [при запуске приложения на мобильных устройствах]() (генерация осуществляется в папку `mobile`; по аналогии во вложенных папках `mobile` могут быть созданы и другие элементы приложения, если их работу требуется переопределить при запуске приложения на мобильных устройствах).
По сравнению с рассмотренной структурой папки `templates` в "чистом" `Ember`-приложении присутствует только шаблон `application` со стандартной разметкой "из коробки".
### Сгенерированные файлы локализации
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [файлы локализации](efd3_locale.html) (папка `locales`):
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [файлы локализации]() (папка `locales`):
-.
+
Генерируются файлы локализации для русского и английского языков для форм (папка `forms`) и моделей (папка `models`), а также для приложения в целом (`translations.js`).
### Сгенерированные стили
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [стили](efd3_style.html) (папка `styles`):
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение добавляются следующие [стили]() (папка `styles`):
-.
+
В "чистом" `Ember`-приложении "из коробки" присутствует только пустой файл `app.css`.
### Сгенерированные компоненты
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение не добавляются новые [компоненты](efd3_component.html) (папка `components`). Однако на сгенерированных формах используются компоненты, которые определены в аддоне [ember-flexberry](https://github.com/Flexberry/ember-flexberry).
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение не добавляются новые [компоненты](https://api.emberjs.com/ember/3.1/classes/Component) (папка `components`). На [сгенерированных формах](efd3_form.html) используются [компоненты, которые определены в технологии Flexberry Ember]().
### Сгенерированные хэлперы
-При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение не добавляются [хэлперы](efd3_helper.html) (папка `helpers`). Однако в шаблонах сгенерированных форм используются хелперы, которые определены в аддоне [ember-flexberry](https://github.com/Flexberry/ember-flexberry).
+При генерации приложения из [Flexberry Designer](fd_flexberry-designer.html) в клиентское приложение не добавляются [хэлперы](https://api.emberjs.com/ember/3.1/classes/Helper) (папка `helpers`). В шаблонах [сгенерированных формах](efd3_form.html) используются хелперы, которые определены в технологии Flexberry Ember.
## Структура сгенерированного серверного приложения
Сгенерированное решение для бэкенда состоит из двух основных проектов. Первый - это проект с [объектами данных](fo_data-object.html), соответствующих сущностям модели предметной области во [Flexberry Designer](fd_flexberry-designer.html) (то есть классам на диаграммах классов). Второй - это непосредственно Web API-приложение с [OData-сервисом](fo_orm-odata-service.html), которое предоставляет серверный API для клиентского приложения.
-.
+
## Правила написания кода
К внесениям изменений в прикладной код необходимо подходить ответственно, поскольку он может быть утерян при последующих перегенерациях.