Русский
Русский
English
Статистика
Реклама

Abap

Что за X? Что за ABAP? Древние языки, про которые интересно слушать, но не дай бог на них писать

19.11.2020 18:06:36 | Автор: admin

Большая разработка дело коллективное, и это хорошо. Что бы ни взбесило тебя в условных Go или JS, точно найдется сотня-другая разрабов с такой же болью. Преодолевать ее вместе легче и когда ломаешь голову над рабочей задачей, и когда просто собираешься с товарищами поныть, как все плохо.

Но почти в каждой компании в этот момент найдется человек со взглядом на сотню ярдов в пустоту, который будет вспоминать, как 10 лет назад в своем НИИ ШМИИ ИПИАН Меловой период его заставляли переписывать гигантскую систему с Лиспа на Си. И у всех в этот момент пробежит холодок по спине потому что никто не застрахован от рефакторинга чего-нибудь древнего и страшного.

Слушать про эти языки, похожие на рыб-монстров из океанских впадин, все равно что смотреть ужастики. Любопытно, волнующе но не дай бог оказаться на месте рассказчика.

Здесь мы собрали вместе людей, которые писали на Prolog, Forth, ABAP и X++, и дали им выговориться.


Что это за языки

Вагиф, Prolog

В незапамятные времена с 1985 по 1990 год я пользовался языком Prolog.

Я учился в МИЭМе (ныне часть ВШЭ), и ходил на группу прикладной логики. Там заинтересовался символьными вычислениями, попробовал Lisp, но Prolog особенно привлек меня своей декларативностью описываешь правила предметной области, а дальше все идет как бы само.

Тогда был большой интерес к искусственному интеллекту, все говорили о японском проекте компьютеров пятого поколения, которые должны были решать задачи научных вычислений и сверхбольших баз знаний. Помню еще старались отделять базы данных от баз знаний мол, что ты мне базу данных подсовываешь, dBase какой-то, мы знания обрабатываем!

Тогда не было осознания, насколько огромных вычислительных ресурсов требуют такие задачи а главное, что к ним не всегда применимы обычные логические умозаключения. Казалось (мне по крайней мере), что задекларировав достаточное количество правил предметной области, получишь возможность пропускать все это через мощные компьютеры, которые тебе и диагнозы поставят, и теоремы докажут.

Тогда казалось, что мы решим все задачи.

Лиза, ABAP

Я SAP-разработчик и пишу на ABAP. Это проприетарный язык, по синтаксису тот же COBOL. Он используется собственно в SAP SE и компаниях, занимающихся разработкой и консалтингом для бизнес-приложений и промежуточного ПО SAP. Конкретно я пишу модули SAP ERP, их расширения и все такое.

Фил, X++

У меня был Язык X++. Это внутренний ЯП Microsoft, который они сделали специально для своего ERP-проекта Axapta, потому что нужен был язык, в котором можно было писать SQL-запросы прямо в коде, с компайл-тайм чеками и полной поддержкой синтаксиса и фич базы. Язык, конечно, достаточно отсталый. При этом он работает на .NET, а туллинг ему сделали почти как у C#.

До работы с этим языком я был классическим джуниор-шарпистом не умел работать с базами данных, знал только один язык программирования, и вообще плохо себе представлял, во что вляпался.

Василий, Forth

Я начинал работать в конторе, которая занималась всякой автоматизацией на микроконтроллерах. Местные деды (в самом лучшем значении этого слова люди зарабатывали внедрением своих разработок на заводах по всей стране) начинали кодить на древних МК, еще когда их делал Intel, и происходило все это на ассемблере. Им чем-то не угодил C, и они очень вдохновились идеей Форта. Поэтому я и угодил в разработку на этом языке.


Каково на них писать

Лиза, ABAP: У нас просто древнейшие тулзы. Я начинала работу с платформы SAP NetWeaver, очень не хватало всех этих подсветочек и прочих свистелок из более популярных IDE, вроде той же Intellij IDEA. Пока не привыкла, казалось, что пишешь в блокноте.

Интерфейс тоже древний. Есть новые темы, но они не очень удобные, поэтому я обхожусь без них. В целом, SAP GUI причина боли меня как маковода, но всё же одно из самых удобных мест для разработки под SAP, пусть и умирающее. Модные ребята сейчас переходят на VS Code, адекватные на Eclipse, я до сих пор сижу в чём начинала.

Главное удобство языка нативная поддержка SQL, хотя и было бы странно ее отсутствие.

Фил, X++: Первое что бросилось в глаза невероятно уродский синтаксис и кодстайл. Это было в 2015-ом, а они там на полном серьезе фигачили всякие префиксы в стиле field-db-name. X++ был во многом похож на C#, только огромного количества привычных фич просто не было, а вещи, которые в том же C# автоматизируются на раз-два, здесь приходилось топить в тоннах бойлерплейта.

Для меня было большой проблемой, что этот язык приходилось прямо учить. Вот казалось бы, фич кот наплакал. А вот так сесть и начать кодить не вышло, приходилось тратить многие часы на чтение спецификации. На английском, конечно, который я знал достаточно плохо.

Василий, Forth: В Форте смысл в том, что ты пишешь примитивную форт-машину и минимальный словарь для сетевого обмена, заливаешь на контроллер и все: у тебя там аналог операционки с компилятором и расширяемой стандартной библиотекой, и ты все это программируешь и дебажишь через терминал на языке высокого уровня. Динамически. Прямо на камне. На своей, лично написанной форт-машине. Вот она, видите, в стеке байтике перекладывает.

А при миграции на другую архитектуру достаточно переписать только базовый минимум. И все ваши любовно наработанные годами библиотеки (словари в реальности Форта) остаются с вами. Можно даже сделать свой процессор на FPGA с личной системой команд и запустить на нем Форт. Некоторые пункты и по современным меркам звучат неплохо.

Вагиф, Prolog: Хорошая иллюстрация программирования на Прологе вычисление производной в символьном виде. Математики говорят, что, в отличие от интегрирования, дифференцировать можно научить даже лошадь. Лошадь может и можно научить, но попробуйте написать программу символьного дифференцирования на Си. На Прологе такая программа занимает столько же строк, сколько есть правил дифференцирования, т.е. укладывается в одну страницу. Это все выглядело многообещающе, и мы другом и коллегой всерьез занялись идеей написания медицинской экспертной системы на Прологе. У нас несколько лет был небольшой кабинет в институте эндокринологии там мы писали базу знаний, собирая эти знания у местных врачей. Врачи толком не понимали, что из этого может получиться, но заражались нашим энтузиазмом и полагались на нас. Так к 1990 году родилась экспертная система Эндокрин, приказавшая долго жить, когда ее создатели уехали работать в другую страну.


Худший опыт, который стал уроком

Василий, Forth: Для обучения Форту нам показали пару примеров и дали в руки книгу Броуди по основам языка. Она запомнилась мне картинкой про swap эта психотравма навсегда со мной:

Потом потребовалось написать приложение мониторинга под Винду, и почему-то так получилось, что надо писать под WinAPI что тогда было нормально, но не на Форте.

Мне еще повезло, я писал что-то вроде простенького UI-фреймворка, а коллеги делали утилиты с графиками, кучей контролов, отображением состояния конечных автоматов. Те преимущества, которые Форт давал для разработки под embedded, не работали под десктоп. Ну или их надо было специфически готовить, и был ли бы от этого профит неизвестно. Точно не в скорости разработки.

Кончилось все, когда мой приятель психанул, переписал за неделю свою часть на C++, а на Форте писать зарекся. Мне же дали новый ARM-контроллер, я установил нормальную IDE с дебаггером и тоже ушел писать на C++.

Вагиф, Prolog: О причинах заката Пролога многое написано, они примерно те же, что и причины неудачи японского проекта пятого поколения. Вычислительные ресурсы переоценили, символьные вычисления переоценили.

Вместе с тем язык обладал очень интересным подходом к поиску решений по правилам, пробегаясь по множеству возможных решений вперед и назад (так называемый backtracking). К нему по-прежнему возвращаются, есть нынешние версии думаю, в основном для исследовательских целей. Есть SWI-Prolog, я читал об использовании его для анализа человеческой речи. Есть разработанный в Австралии язык Mercury под .NET, фактически на базе Пролога. Для ранних версий дотнета (под Моно) разрабатывался язык P# Пролог, транслируемый в C#.

Я считаю, что владение Прологом меня очень развило как разработчика, подготовило к восприятию разных парадигм программирования. То, что я сейчас работаю на F#, отчасти можно списать на это я довольно рано осознал, что надо стремиться выходить за пределы мейнстримных языков. Тогда, даже оставаясь на них, начинаешь писать по-другому.

Лиза, ABAP: Сложно найти язык, который решает поставленные задачи лучше, чем созданный специально для этих задач. На пафосных питонах и джаваскриптах очень геморройно работать с бухгалтерией (отчеты, формы, внутренние структуры и прочее).

Конечно, язык с очень узкой сферой применения не может тягаться с мультитулами вроде C# или Java, поэтому количество ярых фанатов ABAP стремится к нулю. Но умрет он только со смертью платформы, а платформа слишком много где используется и тесно вплетена в процессы корпораций вроде Johnson & Johnson, Mercedes-Benz и им подобных, переходить на что-то новое очень дорого и пока нецелесообразно.

Вообще, ABAP мне позволил заглянуть во внутренние процессы компаний-гигантов пощупать, что у них и как, это интересно. Плюс опыт работы с коллегами вдвое (иногда втрое) старше тебя или заказчиками, которые могут целиком купить твой город.

Фил, X++: Я работал с истинными фанатами этой технологии такие, знаете, старички, для которых вся молодежь формошлепы, которые только либы дергать умеют. Дай им волю, они переписали бы все свои проекты на хранимки. Для меня было странно, что они так хорошо разбираются в перформансе, но при этом не могут писать нормальный код такой, который смог бы понять обычный разраб, а не такой задрот как они. У меня неплохо получалось закрывать задачи, но я чувствовал, что учусь вещам, которые нигде не буду применять и быстро свалил.

Заодно с тех пор зарекся работать на очень старых проектах это камни, которые никогда не оживут.


Спасибо за помощь со статьей пацанам из Мы обречены, посмотрите их подкаст.

Подробнее..

OpenSAP или чему можно учиться бесплатно в мире SAP

18.04.2021 08:20:15 | Автор: admin

В мире SAP эта платформа MOOC хорошо известна. Как они сейчас пишут на своём баннере: "5 millions course enrollments". Это если сложить все курсы, можно проверить, но это тема другого разговора.

Например: из недавнего был очень хороший курс Building Apps with the ABAP RESTful Application Programming Model. 25000 зачисленных это много, средний курс на платформе собирает примерно 5000-10000 зачисленных. Это в целом немного, а если с Coursera сравнивать - то эти цифры унизительно малы, впрочем миллионы регистраций на Coursera есть на курсах широкой специализации (типа Python), а тут у нас язык даже не из первой двадцатки TIOBE. В этом рейтинге ABAP сейчас находится на 35 месте с долей 0.35%. Совпадение чисел - действительно совпадение.

Кстати, давайте посчитаем если у Python 11,03% против 0,35% у ABAP, то это означает 30-кратную разницу. Значит 25000 регистраций ABAP сравнимо было бы с 750000 регистраций у Python. Очень достойный результат.

Большое отличие платформы OpenSAP - курсы полностью бесплатные только в момент запуска. По завершении курса бесплатная карета превращается в бесплатную тыкву, примерно такую же как Аудит у Coursera. То есть: нет тестов и сертификата, можно только "смотреть видосики в интернете".

Для меня режим "аудит" часто не подходит, так как отсутствие кнута(тестов) и пряника(сертификата) существенно снижает мотивацию и концентрацию на материале.

Есть один интересный курс на Writing Testable Code for ABAP, я его пропустил в своё время. А за реактивацию (превращение тыквы обратно в карету) они обычно просят $59, с редкой 50% скидкой по праздникам. В прошлом году в честь сами-знаете-чего-когда-все-стали-сидеть-дома OpenSAP открывали обратно за бесплатно многие свежие курсы, но этот конкретный курс под акцию не попал.

Если вам жалко столько денег, то есть метод получить один курс бесплатно на выбор.

Для этого надо пройти курс SAPs Integrated Intelligent Suite, вполне годный обзорный курс. Этот курс надо завершить и запостить об этом запись в твиттере с правильными хештегами (подробности в описании самого курса). Для этого даже завёл себе аккаунт в твиттере: я способен и на такие непотребства, если это сэкономит мне целых $59. И вот примерно через месяц пришло письмо счастья с кодом для реактивации, который я знаю куда применить.

Следите за обновлениями на OpenSAP, ловите интересные курсы, пока они бесплатные.

Например: буквально завтра уже запускается курс Efficient DevOps with SAP. Налетай!

Краткое содержание:

  • Week 1: Introduction to DevOps

  • Week 2: CI/CD with ABAP (On-Premise)

  • Week 3: Delivery of Cloud Applications

  • Week 4: Hybrid Change and Test Management

  • Week 5: Operation of Your Solution and Summary

  • Week 6: Final Exam

Подробнее..
Категории: Devops , Erp-системы , Abap , Opensap

Из песочницы Зачем в ABAP нужен оператор SET UPDATE TASK LOCAL

12.08.2020 14:11:32 | Автор: admin
И что делать, если после вызова стандартного BAPI оператор COMMIT WORK AND WAIT не дожидается выполнения всех V1-модулей обновления.

Проблема синхронизации модулей обновления


В системе SAP R/3 для транзакционного сохранения дополнительных данных, связанных с основными, используются модули обновления. Более подробно об этом можно почитать, например, здесь.

Для консистентности данных после сохранения необходимо дождаться выполнения модулей типа V1. В общем случае это достигается выполнением команды COMMIT WORK AND WAIT.
В тексте некоторых стандартных функциональных модулей BAPI вызывается COMMIT WORK. После выполнения такого ФМ-а вы не сможете убедиться в завершенности процесса сохранения никакими простыми командами. Некоторые программисты для решения этой проблемы пишут какие-то сложные запросы к таблице VB или ждут ничем не обоснованные n секунд. Все намного проще.

SET UPDATE TASK LOCAL приходит на помощь


Если кратко он запускает локальный режим выполнения для V1-модулей обновления. Режим активируется для V1-модулей обновления, зарегистрированных с момента вызова оператора и до момента завершения текущего DB LUW-а. При этом V1-модули:

  • сохраняются в ABAP-memory, а не в таблицу обновлений VB;
  • выполняются в текущем процессе, а не в параллельном;
  • синхронизируются оператором COMMIT WORK.

То есть при вызове COMMIT WORK программа будет ждать, пока выполнятся модули обновления типа V1, зарегистрированные локально. Разница показана на рисунке:



Итого SET UPDATE TASK LOCAL пригодится, если вы не можете управлять оператором COMMIT WORK и хотите дождаться выполнения всех V1-модулей для какого-то процесса.
Подробнее..
Категории: Erp-системы , Abap , Abap sap

Из песочницы Реализация MVVM в ABAP

22.08.2020 16:14:02 | Автор: admin
После окончания университета я несколько лет работал программистом C#. Я разрабатывал приложения на WPF с использованием шаблона проектирования MVVM. Затем перешел на ABAP. К большому удивлению обнаружил что ABAP является скорее процедурным языком чем объектно-ориентированным, хотя SAP прилагает большие усилия для продвижения ОО-парадигмы. Для разделения бизнес-логики от GUI как правило используют архитектурный шаблон MVC. Пытаясь реализовать MVC шаблон я каждый раз сталкивался с определенными сложностями, которые делают поддержку программы еще более сложной чем если бы она была написана на процедурах. Не смотря на то, что реализация MVC подробно и с примерами описана в книге Design Patterns in ABAP Objects и на специализированных ресурсах (sapland.ru, blogs.sap.com и др.), проблемы с разделением логики остаются. В реализации MVC на ABAP независимой частью остается Model, а View и Controller тесно связаны между собой. Сильное сопряжение между View и Controller затрудняет поддержку и масштабируемость. Ниже описано почему так происходит и что с этим делать.

Шаблоны MVC и MVVM


Подробно описывать принцип работы шаблонов MVC и MVVM в данной статье я не буду. Приведу лишь основные моменты, которые понадобятся нам в дальнейшем.

Основное отличие MVC от MVVM в том, что в первой Controller знает как View, так и Model, также допускается что View будет знать о Model.

image

В MVVM шаблоне связь между слоями более слабая. View знает только ViewModel, а ViewModel только Model. View получает данные от ViewModel через ссылку на DataContex.

image

Шаблон MVVM предназначен для разработки в WPF на языке C#. Но его идею можно применять и в ABAP.

Проблемы MVC в ABAP


При реализации MVC, как правило, классы Model выносят в глобальное определение, а классы View и Controller в локальное. Использование локальных классов обусловлено необходимостью взаимодействия с GUI элементами. Дело в том, что на ABAP-классах нельзя построить полноценный GUI. В классах View можно использовать функционал для формирования GUI (CL_SALV_TABLE, REUSE_ALV_GRID_DISPLAY и т.п.), но этого не достаточно. Создать GUI-статусы, заголовки, экраны, PBO, PAI в классе невозможно.

Локальные View и Controller, имеют ряд недостатков:

  1. View и Controller имеют доступ ко всем глобальным переменным и параметрам экрана выбора.
  2. Обработка PBO и PAI в Controller требует получения состояния View (например получение выделенных строк ALV) или обновление View (например обновление таблицы ALV). В качестве решения данной проблемы нередко можно увидеть публичные атрибуты View, на которые воздействует Controller, или когда View имеет ссылку на Controller. Оба решения плохие, т.к. в первом случае нарушается инкапсуляция, а во втором Low Coupling.

MVVM в ABAP или MVA


Желая использовать преимущества MVVM в ABAP и сделать слои более независимыми я определил для себя следующий шаблон разработки.

image

Так как в чистом виде MVVM реализовать на ABAP нельзя, то ViewModel использовать не совсем корректно. Поэтому вместо ViewModel и Controller я использую Application.

Принцип разделения логики аналогичен принципу MVVM. View передает команды пользователя в Application, а Application воздействует на модель. Обратная связь при этом отсутствует.
Особенностью ABAP приложений является то, то представление может обновиться только после действий пользователя. Даже если какой-нибудь асинхронный процесс поменяет модель, то инициировать обновление представление он не сможет. Данная особенность позволяет ослабить связь модель-представление и делегировать функцию обновления представления самому представлению. Иными словами, представление само должно решать, когда надо обновить себя, а когда нет.

Концепция MVA


Реализация MVA основана на объектно-ориентированном подходе, где на каждый слой архитектуры будет реализован один или несколько классов. Каждый из слоев обладает рядом свойств.

Представление (View и IView):

  • MVA работает с абстракцией представления IView. Все классы View должны содержать реализацию IView.
  • IView содержит события, которые требуют взаимодействия с моделью
  • IView содержит контекст ссылка на данные модели, которые необходимо отобразить пользователю
  • View может содержать бизнес-логику, которая не требует взаимодействия с моделью. Например, если требуется реализовать из ALV проваливание в карточку контрагента, то данная логика будет относиться к представлению.
  • View содержит GUI элементы в группе функций, которая связана с классом View.

Приложение (Application):

  • Выполняет роль связки представления и модели и является точкой входа в приложение.
  • Имеет критерии запуска набор параметров, которые определяют с какими параметрами необходимо запустить приложение. Обычно это параметры селекционного экрана.
  • Критерии приложения состоят из критериев модели и представления. Например, если на селекционном экране требуется ввести дату проводки и указать флаг вывода отчета PDF или ALV, то дата проводки будет относиться к критериям модели, а флаг PDF и ALV к критериям представления.
  • В конструктор приложения передаются критерии запуска. Приложение создает модель и представление, подписывается на события представления, связывает контекст представления с моделью.

Модель (Model):

  • Содержит публичные атрибуты, которые необходимы представлению.
  • Содержит критерии расчета модели и метод инициализации.

Реализация MVA


Рассмотрим реализацию MVA на примере отчета по движению материалов. В качестве взаимодействия с моделью будет кнопка обновления данных.

Диаграмма классов будет выглядеть следующим образом.



Model. Конструктор модели будет принимать на входи критерии выбора данных. Класс будет иметь методы инициализации и обновления данных, а также атрибут с данными для отображения.







IView. Интерфейс представления содержит методы установки контекста, отображения представления, события и определение типов контекста.







IView содержит в себе описание структуры контекста, причем поля структуры должны быть ссылочными



View. Представление реализует интерфейс IView. Причем все события пользователя регистрирует класс View и вызывает только те события, которые нужно обработать приложению. В параметрах событий необходимо передать все данные, которые нужны от View (например, выделенные строки ALV).

Реализация класса View в ALV представлении



В данной реализации нам необходимо определение GUI статуса, для этого создадим ФМ и свяжем его с экземпляром CL_SALV_TABLE



Важно что все UI события принимает View (в данном случае через ON_USER_COMMAND) и при необходимости View делает RAISE EVENT для Application. Этот подход делает View и Application более независимыми.

Application. Конструктор приложения принимает на вход критерии приложения (параметры экрана выбора) и создает экземпляры Model и View, подписывается на события View и связывает контекст View с Model. Конструктор это единственное место где приложение знает о View. Application содержит метод RUN, который запускает программу. Запуск приложения можно сравнить с запуском транзакции с заранее определенными параметрами экрана. Это позволяет использовать ее из других программ без SUBMIT.



Запуск Application. Теперь делаем программу, которая будет запускать приложение.



Все, приложение готово. Можно смотреть результат.



Бизнес-логика на стороне View. Обработку событий, которые не требуют обращения к модели и контроллеру, можно делать в самой View.

Например, если требуется реализовать открытие MM03 при двойном клике на MATNR, то обработку данной логики можно сделать на стороне View.



На уровень View данная логика вынесена исходя из соображений: к модели не требуется обращаться за дополнительными данными; логика относится только к ALV, т.е. если бы была реализация View в виде Excel или PDF, то данное событие невозможно было бы обработать.

Литература

Design Patterns in ABAP Objects
Паттерны для новичков: MVC vs MVP vs MVVM
Архитектурные шаблоны в ABAP: MVC, MVP, MVVM, MVA
Подробнее..
Категории: Erp-системы , Mvvm , Sap , Mvc , Abap , Mva

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru