Как выучиться на ABAPера?
Привет, Хабр!
Начну с главного — ABAP-разработчики нужны. А для тех кто сомневается — только за последние полтора месяца на HH появилось свыше 100 вакансий, в том числе от ведущих российских и мировых брендов.
ABAP возник в 80-е годы двадцатого века и продолжает развиваться. За три десятка лет он вобрал в себя множество парадигм программирования — тут и процедурное, и событийно-ориентированное и объектно-ориентированное — все это в рамках структурного программирования в стиле Дэйкстры (с непременными ENDIF, ENDCASE, разными другими ENDЧТОТОТАМ и даже ENDSELECT, непривычным для знатоков SQL). Обилие парадигм значительно расширяет кругозор, но немного усложняет изучение языка.
В принципе, если среди вас есть энтузиасты, они могут учить его и по стандартной документации. Хотя это не так просто: нужно писать свои программы, требуется система, которая встанет не на любое железо и не забываем про лицензии, но самое печальное, что это долго. Документации много, и не от сырости — язык за три десятка лет вобрал в себя многое, а выкинуть старое не легко: есть такая «священная корова» — совместимость версий. Для изучения ABAP SAP была разработана специальная программа курсов, охват тем которой с одной стороны несколько превосходит Академию для консультантов TAW10/TAW20, с другой успешное усвоение достаточно для сертификации Associate development consultant. Какие курсы нужны и зачем? Постараюсь ответить на эти вопросы, кратко опишу, через что и, главное, в каком порядке, придется пройти новичкам, ну и, конечно, готов ответить на вопросы. С вами я — ABAP-тренер, since 1998.
Итак, начнем! Если вы не знакомы с устройством SAP платформы в целом, то начинать нужно с букваря. Курс под кодовом названием «SAPTECE. Введение в архитектуру SAP NetWeaver» нужен, чтобы понимать, как SAP работает. Он дает общие сведения об архитектуре технологической платформе SAP NetWeaver: что такое инстанция сервера приложений, чем она занимается, что такое рабочий процесс, какие они бывают и почему так много, что такое разработка, мандант, системный ландшафт, транспортная система и что она делает, самые общие сведения об интеграционных возможностях.
Следующий этап это «BC400E. ABAP инструментальные средства: основы» . Учим матчасть! ABAPером после этого курса, к сожалению, пока не станешь, но простенькие программки писать уже можно: вычисления, обращения к базе данных, несложные диалоги. Курс дает введение в инструментарий разработчика и общие сведения о языке ABAP, о декларировании данных, об основных операторах, о модуляризации (а в ABAP существует пять категорий процессинговых блоков, две из них не могут быть вызваны из-под ABAP), а также первоначальные сведения о работе с базой данных, программировании интерфейсов пользователя и самые начальные сведения о технологиях расширения системы. По ходу курса пишется около четверти сотни программ: например, арифметический калькулятор (не бойтесь, не кнопочный) пишется много раз и всё по-разному, создается несколько диалоговых транзакций, например, вот такая, двухэкранная:
На месте выясняем, что такое транзакция в понимании ABAP (думаете atomicity, consistency, isolation, and durability? …ммм, отнюдь), и какие они бывают, кроме диалоговых. Курс предназначен для разработчиков, но в целом подойдет для будущих администраторов и будет полезен тем, кто планирует специализироваться в области интеграционных технологий и тем, кому по роду своей деятельности приходится объясняться с ABAPерами.
Конечно, простые отчеты можно писать и в процедурном или событийно-ориентированном стилях. Однако объектно-ориентированное программирование используется в новых SAP разработках повсеместно. В частности, создано много классов, осуществляющих элегантное предъявление данных. Гораздо проще использовать эти готовые классы, чем каждый раз изобретать велосипед. Кроме того, новые технологии расширений широко используют объектно-ориентированное программирование. Да и вообще это теперь магистральное направление в ABAP, так что хочешь — не хочешь, а знать придется. Курс «BC401E. ABAP объекты» освещает особенности объектно-ориентированного программировании на ABAP: рассматриваются синтаксические конструкции, инструменты и некоторые направления использования. Объектно-ориентированный ABAP не имеет множественного наследования, вместо чего применяются интерфейсы, так что это курс будет более понятен java-разработчикам. Вот так, например, выглядит классовая диаграмма финального упражнения:
Легко догадаться, что гораздо проще определить нужные типы данных с подходящими к ним интерактивностями централизовано, на уровне создания описаний, чем каждый раз программировать. SAP системы содержат центральное место, где описаны различные типы данных и часто используемые интерактивные службы — Словарь. Его декларации многократно упрощают дальнейшее программирование. Если уж на чем-то экономить, то не на изучении словаря, поскольку императивные языки программирования все-таки более или менее схожи, а Словарь — это отдельная «изюминка». На курсе «BC430E. Словарь-справочник данных» рассматриваются определения доменов, элементов данных, структур, табличных типов, таблиц в базе данных, ракурсов базы и ведения, кластеров ведения, поисковых механизмов и механизмов обеспечения целостности данных: фиксированных значений доменов и внешних ключей.
Медленно, но верно мы движемся к цели — подобрались к курсу «BC402E. Углубленное ABAP программирование» о том, как писать не очень плохие программы. Здесь поднимаются тонкие вопросы, важные для написания эффективных программ: устройство памяти, вызов программ, декларирование и передача данных и параметров, динамические конструкции программирования, динамическое определение типов и динамическое же создание данных, также приводится дополнительные сведения по операторам Open SQL и некоторые другие вкусности.
Зачем же нужен динамизм? Ну вот есть такая таблица, BSEG, она содержит позиции финансовых документов. В ней, к примеру, около 340 полей. Понятно, что обычному пользователю нужны значения далеко не всех полей. Можно получить данные во внутреннюю таблицу полной структуры, но такая структура будет избыточной, ведь пользователю нужны не все данные, а хранить пустое место — это слишком расточительно по памяти. Можно было бы определить заранее несколько структур, комбинирующих нужные поля в нужном порядке. Но таких комбинаций (количество подмножеств множества из 340 элементов) будет 2^(340–1) — 1 ~ 10^(329). Это очень большое число. Для сравнения, число атомов в наблюдаемой вселенной оценивается как ~ 10^(81). То есть заранее создать все возможные описания практически невозможно. Вот в таком случае и придется для экономного расходования памяти динамически создавать тип данных нужный именно под эту выборку.
Движемся далее. Классические экраны составляют основу визуального интерфейса SAP-систем. Существует несколько способов создать различные способы их преобразования в html. Но до сих пор основа стандартных диалогов именно они. Да и вообще надо знать, как создаются диалоги. Курс «ВС410. Разработка диалоговых программ» освещает технологию стандартных диалоговых экранов Dynpro. Этот курс нужен всем тем, кто будет создавать диалоги. Среди прочего будет рассмотрено программирование подэкранов, картотечных блоков и экранных таблиц, программирование реакции на ошибки. Всю неделю будет писаться одна одноэкранная диалоговая транзакция. Примерно вот с таким экраном.
Что-то подобное уже было в курсе BC400E? Там был грид, навигация по которому обрабатывается локально на клиентском рабочем месте, стало быть сервер приложений (и исполняемая на нем ABAP-программа) ничего не знает про навигацию. Здесь же экранная таблица, навигация по которой обрабатывается на сервере приложений. Соответственно транзакции, использующие экранные таблицы могут быть пригодны для пакетного ввода. Плюс программирование картотечных блоков, проверок корректности ввода, да и другие прибамбасы.
Конечно, у владельцев SAP-систем есть возможность и право модифицировать программы в соответствии со специфическими требования своего бизнеса. А вот когда от SAP придет новая версия программного обеспечения, тут начинается корректировка модификаций (modification adjustment). Принять решение требуется по каждой из модификаций. SAP предусмотрел набор технологий, позволяющий так изменять работу стандартного программного обеспечения, что корректировка модификаций не потребуется. Это и называется расширением. Курс «BC425E. Расширения и модификации» рассматривает классические технологии расширений: расширения словарных определений, кастомер-экзиты и BAdI. Кроме расширения программ, рассматриваются расширения меню и экранов, также рассматриваются модификации, в том числе юзер-экзиты. Курс нужен всем, кто будет обогащать стандарт собственными расширениями.
Для доступа к стандартной функциональности SAP, использующей классические экраны, описанные в курсе BC410E требуется специальное клиентское программное обеспечение — SAP GUI. Такое ПО устанавливается на рабочих местах сотрудников. Но трудно ожидать, что любой клиент, желающий просмотреть, например, прайс-лист компании, будет устанавливать у себя этот самый SAP GUI. А вот Web браузеры — вещь, распространенная практически повсеместно. Интерфейс Web Dynpro позволяет осуществлять доступ к функциональности SAP непосредственно из web-браузера. Так вот курс «NET310E. Основы ABAP Web Dynpro» дает начальные сведения о технологии и учит создавать довольно развитые приложения. Рассматриваются следующие темы: компоненты архитектуры, определение внешнего формата, программирование контроллеров, модуляризация Web Dynpro, динамическая модификация, конфигурация, персонализация, расширения. Вот пример Web Dynpro приложения с этого курса:
В целом, я описал основные курсы по ABAP, все они входя в программу «ABAP2 Сертифицированный ABAPер». Есть и другие тренинги по более узким и наоборот широким вопросам с дистанционным обучением.
Успехов!