AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Blogs
NAV
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.11.2016, 01:31   #1  
Александр Ермаков is offline
Александр Ермаков
Участник
Аватар для Александр Ермаков
Most Valuable Professional
 
43 / 35 (2) +++
Регистрация: 25.11.2016
Адрес: Россия
Post Расширения (Extensions) для Microsoft Dynamics NAV 2017 «на пальцах», или один из немногих оставшихся вариантов разработки в Dynamics NAV в будущем
С выходом облачной версии системы Microsoft Dynamics NAV 365 Business наступил тот момент, которого так боялись все разработчики, последние 20 лет считающие, что основное преимущество Dynamics NAV как платформы – возможность её быстрой и простой модификации. Потому что уже совсем скоро модифицировать стандартный функционал будет нельзя, во всяком случае, в привычном понимании – и все изменения вносить в систему будет можно только посредством дополнительных инструментов, например, так называемых Расширений (Extensions).

Сейчас в сообществе активно обсуждается будущее разработчика Dynamics NAV – многие опасаются, что эта профессия находится под угрозой. Я так не считаю. Возможно, значимость разработчика NAV несколько снизится, потому что более востребованным станет хороший консультант, который сможет рассказать, как стандартный функционал натянуть на бизнес-процесс клиента. Однако, без модификаций всё равно не обойтись, и разработчику будет необходимо перестроить свой подход, своё мышление под новую архитектуру разработки. Несмотря на то, что версия on-premise существует – буквально пару недель назад стала доступна для скачивания новая версия Dynamics NAV 2017 – и в road-map Майкрософта версия on-premise всё ещё присутствует – вот несмотря на это вот всё настоятельно рекомендуется уже сейчас, на ваших текущих on-premise версиях, применять модификации посредством Extensions, или хотя бы задумываться, а как вашу модификацию сделать посредством этой новой разработческой архитектуры. Иначе, ваша профессия действительно перестанет быть востребованной.

В этой статье я постараюсь максимально простым языком рассказать о том, что такое Расширения и как теперь работает архитектура системы с точки зрения разработчика. Чтобы не изобретать велосипед, я позаимствовал структуру изложения у Eric Wauters (Waldo), который очень доходчиво рассказывал по теме на недавно прошедшем Directions EMEA 2016 в Праге.

Итак, Расширения (Extensions) – это дополнительные объекты функциональности, устанавливаемые в стандартную систему Microsoft Dynamics NAV, распространяемые в виде преднастроенного пакета (.navx файл), и созданные таким образом, что они не изменяют непосредственно стандартный функционал.

Ранее вы создавали кастомизации в разработческой среде, модифицируя непосредственно сами объекты, и выгружали эти модифицированные объекты. Далее, вы загружали эти объекты в рабочую базу и разрешали конфликты мёрджа при импорте объектов. Сейчас процесс немного изменился – необходимо выгружать разницу (delta) между старыми и новыми объектами, и это как раз и будет являться пакетом Расширений, который «легко и непринуждённо» можно будет далее загрузить.

Пакет Расширений может содержать один или несколько объектов (txt), дополнения к текущим объектам, т.е. дельта (delta, разница) между новыми и старыми объектами, и наборы разрешений (permission sets). Пакет может быть подписан, и обычно (если вы всё делаете правильно) содержит манифест с описанием, автором и номером версии. Встраиваться в стандартный код можно будет через События (Events), - поэтому сейчас главная задача сообщества вытребовать от Майкрософт как можно больше правильных и нужных Событий, доступных для разработчиков.

Наверное, вас сейчас мучает вопрос, а для чего вообще это всё было сделано. В основном, вот для чего:
  • Чтобы иметь стандартную облачную коробку и предоставлять её клиентам на условиях SaaS без модификаций основного функционала, но с возможностью дорабатывать её «сбоку» под конкретного клиента. Это - repeatability, о которой много говорит Майкрософт.
  • Чтобы легко распространять кастомизации. Поскольку Расширения – это самодостаточные контейнеры, описывающие разницу между объектами, их использование исключает конфликты при мёрдже.
  • Просто производить апгрейды и накатывать кумулятивные обновления, потому что Расширения лежат «сбоку» и не требуют дополнительных анализов объектов для мёрджа.
  • Использование событий (Events) позволяет изменять поведение функционала без изменения исходного кода.
  • Расширения можно использовать в разрезе тенантов (per tenant), разрабатывая разную функциональность под разные требования клиентов.

Для Расширений:
  • Следующие типы объектов могут использоваться: ◦Таблицы (Tables)
  • Страницы (Pages)
  • Отчёты (Reports)
  • XML-порты (XML Ports)
  • Запросы (Queries)
  • Шаблоны отчётов (Custom Reports Templates)
  • Поддержка Веб-сервисов (Web Services)
  • Бэкапирование и восстановление данных:
  • NAVAPP.RESTOREARCHIVEDATA
  • NAVAPP.DELETEARCHIVEDATA
  • Обновлённый PowerShell для загрузки Расширений, в т.ч. загрузка в базу SQL на Azure
  • Поддержка .NET Framework Add-Ins
  • Мультиязыковые кэпшены (Multilanguage captions)

Как это работает:
  • Разработчик разрабатывает новую функциональность в отдельной "песочнице"
  • Разработчик выгружает пакет Расширений
  • Администратор базы публикует этот пакет Расширений
  • Администратор базы инсталлирует этот пакет Расширений

Основные команды (CmdLets) PowerShell для Расширений:
  • Get-NAVAppInfo – Получить информацию о NAV App на основании указанного файла пакета или указанного Microsoft Dynamics NAV Server Instance
  • Get-NAVAppTenant – Позволяет получить информацию о тенанте, на котором NAV App установлен
  • Install-NAVApp – Установить опубликованный NAV App для тенанта
  • Publish-NAVApp – Опубликовать NAV App для каталога приложений, указанных для Microsoft Dynamics NAV Server Instance
  • Repair-NAVApp – Попытка исправить NAV App путём рекомпилирования в текущем приложении
  • Uninstall-NAVApp – де-инсталлирует NAV App для тенанта
  • Unpublish-NAVApp – отмена публикования NAV App для каталога приложений, указанных для Microsoft Dynamics NAV Server Instance
  • Export-NAVAppPermissionSet – Выгрузить указанный набор разрешений из базы данных в файл
  • Get-NAVAppManifest – Получить манифест для NAV App из внешнего источника
  • New-NAVAppManifest – Создать новый виртуальный (in-memory) объект манифеста с указанными метаданными NAV App
  • New-NAVAppManifestFile – Создать файл с метаданными для пакета NAV App
  • New-NAVAppPackage – Создать файл .navx пакета Расширений по указанному пути и с указанным манифестом
  • Set-NAVAppManifest – Установить одно или несколько свойств на виртуальный (in-memory) манифест

Что происходит на стороне разработчика:
(https://msdn.microsoft.com/en-us/lib...v=nav.90).aspx)
Получение / Создание / Модификация Манифеста (Get/Create/Update Manifest):
  • New-NAVAppManifest
  • Set-NAVAppManifest
  • Get-NAVAppManifest
  • New-NAVAppManifestFile
  • Get-NAVAppInfo
Выгрузка метаданных приложения (NAVApp Metadata Export):
  • Export-NAVAppPermissionSet
  • Export-NAVAppReportLayout
  • Export-NAVAppTableData
  • Export-NAVAppTenantWebService
Создание пакета Расширений .navx:
  • New-NAVAppPackage

Что происходит на стороне администратора:
(https://msdn.microsoft.com/en-us/lib...v=nav.90).aspx)
Публикация пакета Расширений:
  • Publish-NAVApp
  • Unpublish-NAVApp
Установка пакета Расширений:
  • Install-NAVApp
  • Uninstall-NAVApp
Управление пакетом Расширений:
  • Get-NAVAppInfo
  • Get-NAVAppTenant
  • Repair-NAVApp

Что содержится в Манифесте:
(https://msdn.microsoft.com/en-us/lib...v=nav.90).aspx)
Элемент Приложения (App Element):
  • AppID
  • Name
  • Publisher
  • Description
  • Version (Major.Minor.Build.Revision)
  • CompatibilityID (Major.Minor.Build.Revision)
Элемент Возможностей (Capabilities Element):
  • UIChanges / UIAdds / SchemaChanges / SchemaAdds / CodeAdds / PermissionSets)
Элемент Условия (Prerequisites Element)
  • Опционально; IDшники специфических объектов
Элемент Зависимости (Dependences Element)
  • Другие NAV Apps

Когда пакет Расширений публикуется (Publish-NAVApp), происходит примерно следующее:
  • Читается файл .navx
  • Проверяются Условия (Prerequisites) и Зависимости (Dependences) (объекты и другие Расширения)
  • Создаётся «песочница» (Sandbox) – копирование приложения во временную новую базу:
  • Установка объектов на основании дельты в пакете Расширений в базу «песочницы»
  • Компилирование изменённых объектов
  • Копирование изменённых объектов обратно в базу приложения
  • Удаление «песочницы»
  • Добавляются записи с информацией о манифесте и содержанием файла .navx в таблицу, содержащую информацию о Расширениях


Когда пакет Расширений устанавливается (Install-NAVApp), происходит примерно следующее:
  • Искомое Расширение находится в таблице, хранящей информацию о расширении
  • Производится проверка на то, что все зависимости (dependences) установлены для этого тенанта
  • Добавляется запись с этим NAV App в тенант приложения
  • Добавляется запись с этим NAV App в установленное приложение
  • Пересинхронизируется схема базы данных при необходимости
  • Вызывается процедура апгрейда/инициализации кода внутри самого приложения:
  • OnNAVAppUpgradePerDatabase
  • OnNavAppUpgradePerCompany

Если Вы хотите изменить Расширение, которое уже было установлено, Вам нужно сначала удалить ранее загруженное Расширение, а потом – установить новую редакцию:
  • Де-инсталляция:
  • Удаление Расширения
  • Удаление объектов, таблиц
  • Сохранение _данных_ в архив (!)
  • Новая установка:
  • Выполнение установки пакета Расширений
  • Восстановление сохранённых данных из архива (!)


Вот коротко, что будет происходить с разработкой в будущем. Я настоятельно рекомендую прямо сейчас это попробовать, потому что, хотим мы того или нет, это будет одним из тех немногих вариантов, которые нам останутся. Awara IT Solutions уже распробовали :-)
Старый 29.11.2016, 16:54   #2  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Регистрация: 28.05.2010
Интересно, как/чем обеспечивается совместимость расширений, особенно независимых производителей. И чья по мнению МС будет ответственность в случае неожиданного поведения системы.
Старый 29.11.2016, 18:28   #3  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
и как дела с лицензированием? можно ли создавать новые поля в таблицах и протягивать их через юнит учета? можно ли в юнитах учета вставлять дополнительные проверки? можно ли создавать новые таблицы, а для них пейджи, и сколько? и расширения будут платными (с учетом новых таблиц) или бесплатными? а если бесплатными, а таблицы не докуплены, то как?
можно ли будет накатить "чужие" расширения?
можно ли будет создавать "платные" расширения и выкладывать их в общий доступ?
можно ли будет модифицировать чужие расширения?

p.s. а вообще идея хорошая, но конфликтов будет мама дорогая, когда расширения пойдут пакетами...
Старый 29.11.2016, 19:32   #4  
Captain is offline
Captain
Участник
Лучший по профессии 2017
 
300 / 81 (3) ++++
Регистрация: 28.02.2003
Я полагаю, что с учетом последних публикаций от МС текущая версия Extentions является переходной и в дальнейшем - добро пожаловать в VS Code (IMHO). http://mibuso.com/downloads/nav-tech...017-extensions
__________________
---------------------------------------------------------------------------------------------
"Собрать стадо из баранов легко, трудно собрать стадо из кошек" Профессор Сергей Капица
Старый 01.12.2016, 00:39   #5  
Александр Ермаков is offline
Александр Ермаков
Участник
Аватар для Александр Ермаков
Most Valuable Professional
 
43 / 35 (2) +++
Регистрация: 25.11.2016
Адрес: Россия
Цитата:
Сообщение от imir Посмотреть сообщение
Интересно, как/чем обеспечивается совместимость расширений, особенно независимых производителей. И чья по мнению МС будет ответственность в случае неожиданного поведения системы.
В целом, как и раньше - это на совести самих разработчиков. Если два партнёра сейчас сделали свои разработки в одинаковом диапазоне, у клиента, который их будет ставить их обе, будут проблемы с конфликтами. Если партнёры будут официально регистрировать свои разработки как add-on'ы, им выделится официальный диапазон, который только для них.

С Расширениями видимо будет так же - их можно будет публиковать в официальном Магазине расширений, и тут кто первый успел, того и тапки, видимо. А внутри своей "песочницы" вы можете какие угодно вещи вытворять )).
Старый 01.12.2016, 00:50   #6  
Александр Ермаков is offline
Александр Ермаков
Участник
Аватар для Александр Ермаков
Most Valuable Professional
 
43 / 35 (2) +++
Регистрация: 25.11.2016
Адрес: Россия
Цитата:
Сообщение от Sancho Посмотреть сообщение
и как дела с лицензированием? можно ли создавать новые поля в таблицах и протягивать их через юнит учета? можно ли в юнитах учета вставлять дополнительные проверки? можно ли создавать новые таблицы, а для них пейджи, и сколько? и расширения будут платными (с учетом новых таблиц) или бесплатными? а если бесплатными, а таблицы не докуплены, то как?
можно ли будет накатить "чужие" расширения?
можно ли будет создавать "платные" расширения и выкладывать их в общий доступ?
можно ли будет модифицировать чужие расширения?

p.s. а вообще идея хорошая, но конфликтов будет мама дорогая, когда расширения пойдут пакетами...
В целом, всё будет как и раньше, только по-другому. И пэйджи, и таблицы можно использовать и добавлять. Стандартный код изменять нельзя, но можно в него встраиваться и изменять его поведение посредством использования Событий (Events), т.е. это такие "крючки", за которые можно будет дёргать стандартный код. Более подробно можно почитать здесь: https://msdn.microsoft.com/en-us/lib...v=nav.90).aspx , русскоязычного материала пока мало, но работаем над этим.

Посему, нужно в целом полностью менять подход к разработке, по-другому выстраивая процесс кастомизации. Сейчас основная задача сообщества - это активно пытаться делать доработки с помощью Расширений, упираться в невозможность сделать что-то хорошее и требовать от Майкрософта дополнительных Событий, чтобы это хорошее можно было таки делать. Майкрософт обещал не менее активно всех слушать.
Старый 01.12.2016, 00:58   #7  
Александр Ермаков is offline
Александр Ермаков
Участник
Аватар для Александр Ермаков
Most Valuable Professional
 
43 / 35 (2) +++
Регистрация: 25.11.2016
Адрес: Россия
Post
Цитата:
Сообщение от Captain Посмотреть сообщение
Я полагаю, что с учетом последних публикаций от МС текущая версия Extentions является переходной и в дальнейшем - добро пожаловать в VS Code (IMHO). http://mibuso.com/downloads/nav-tech...017-extensions
Релиз VisualStudio будет к чужеродному Рождеству. Как раз по этому поводу всех интересующихся приглашаю посмотреть сюда: https://github.com/Microsoft/AL

Сегодня Freddy Kristiansen - один из идеологов разработки Microsoft NAV в Копенгагене - выложил пример кода Hello, World! на AL. А вы что думаете по поводу такого синтаксиса?
Старый 01.12.2016, 01:16   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
давайте синтаксис обсуждать в отдельной ветке
Первый пример кода на новом языке разработки Dynamics NAV - AL

Здесь тема:
Расширения (Extensions) для Microsoft Dynamics NAV 2017 «на пальцах»
Старый 01.12.2016, 13:46   #9  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Sancho Посмотреть сообщение
и как дела с лицензированием? можно ли будет накатить "чужие" расширения? можно ли будет создавать "платные" расширения и выкладывать их в общий доступ? можно ли будет модифицировать чужие расширения?
Я, может, чего путаю, но вроде бы аналогичный подход работает уже несколько лет в Dynamics AX 2012 и реализуется на базе т.н. моделей. Модель является контейнером для переноса и распространения расширений стандартного приложения, она обычно подписывается электронной подписью издателя, к ней издатель может сгенерить свой лицензионный файл, привязанный к основной лицензии на Dynamics AX, т.е. к идентификатору, названию клиента и сроку истечения лицензии, как они прописаны для Dynamics AX.
Таким образом, можно создавать платные "расширения" и выкладывать их в общий доступ, и даже если одна лицензия "утечет" - ничего страшного, другим клиентам она все равно не подойдет.
Модифицировать чужие расширения в Dynamics AX можно в том смысле, что можно скопировать чужой объект приложения, поправить его и включить в свое расширение, которое накатить поверх чужого. При этом нужно будет разруливать конфликты слияния объектов приложения. Включить подправленные объекты в чужое расширение нельзя, разве что у вас откуда-то есть закрытый ключ электронной подписи стороннего издателя.
В общем, интересующимся про то, как будут работать расширения в NAV, возможно, имеет смысл почитать про то, как это уже несколько лет работает в AX.
Старый 12.04.2017, 14:50   #10  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Вопросы:
1. Сейчас, если я вижу что стандартный код например в 80 кодеюните выполняется неоптимально - я модифицирую кодеюнит. Какова методика в случае Events и Extensions?
2. Проблема с новыми полями и селективностью ключей. Зачастую требуется добавить новый ключ и изменить SetCurrentkey в отчетах или процедурах в обработки в силу специфики данных. Как быть в этом случае? Позволят ли extensions безболезненно это сделать и на каких events? Event OnSetCurrentKey будет? А может быть OnFind ? До чего еще дойдем?
3. Стандартный commit во многих случаях мешает встраивать код в процедуры обработки более высокого уровня. Сейчас это обходится установкой флага SetNoCommit в кодеюнитах и выставлением проверки на неожиданный коммит. Какой event не предложат?
....Еще куча пунктов вертится на языке, отпишу позже
Теги
extensions, nav 2017, расширения

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
waldo: Microsoft Dynamics NAV 2017 – what’s really new? Blog bot NAV: Blogs 0 13.10.2016 05:22
german_nav_developer: Buildnummern-Übersicht Microsoft Dynamics NAV 2013 R2 Blog bot NAV: Blogs 0 15.05.2016 18:12
german_nav_developer: Buildnummern-Übersicht Microsoft Dynamics NAV 2013 Blog bot NAV: Blogs 0 15.05.2016 18:12
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:10.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.