Всё под контролем – очередь транспортных запросов

Есть у меня один повод для переживаний – это запросы, которые не доехали до продакшена.

Они всё время норовят где-то затеряться и забыться.

Я-то сделал, отдал в тест. А дальше дело ответственного консультанта, мяч уже на его стороне. 

Дано:

  • Проект поддержки системы ERP
  • Обычный ландшафт DEV-QAS-PRD
  • Сторонняя система управления задачами
  • Куча мелких задач на доработку

При этом стоит в обязательном порядке связывать создаваемый запрос с задачей/инцидентом.

Раз-два и вот прототип маленькой помогалки готов:

Обзор транспортных запросов

Номер запроса, дата, владелец, описание, привязка к задаче и куча зеленых галочек.

Всё понятно – один сложный запрос ещё варится, два запроса уехали в прод, четвёртый на тесте.

Как же я люблю когда много зеленых галочек. Успокаивает. Что ещё нужно?

А некоторые солидные господа используют для этого Solution Manager ChaRM. Но, мне почему-то кажется, что там не будет такой кучи зеленых галочек. Это фатальный недостаток.

Важные слова не важны

В процессе написания кода по заданной спецификации неожижанно обнаружил для себя, что ключевые слова ABAP не являюся зарезервированными.
Поэтому нижеследующий код компилируется и даже выполняется:

Даже если так писать и можно, то этого делать всё-таки не следует:

  • Усложняет восприятие, хотя есть и подсветка кода и uppercase/lowercase
  • Name-conventions
  • Ограничения при работе с БД
  • Это не смешно

Зато есть служебная таблица TRESE, в которой перечисляются разные наименования полей, которые нельзя создавать из-за ограниченний в разных БД.

Some thoughts about services

I have a fresh new SAP ERP installation and one of the common tasks is automatically created jobs EU_INIT, EU_PUT, EU_REORG.

Here is my real-live shot.

EU_INIT job

1 500 000 seconds is equal to 416 hours!

Let’s look at the job log:

EU_INIT Job Log

I hope someday the job will be finally completed.

But what am I talking about?

In my experience there is a widespread practice to use small frequent jobs. So sometimes I have to go to SM37 transaction and make sure that all is fine. For example, I would have 3-7 jobs recurring every five minutes (send mail, checks, post-processing tasks, receive data from external system, post data to external system and so on).

In this case daily view of SM37 is flooded with thousands of jobs that do nothing. BTW: Write logs to SLG1 is more practical solution than write to job log or spool.

Recurring short job can be converted into one big job with infinite loop inside:
do some work + wait five minutes + work again + sleep + work + … etc.

And here we come to general idea of services or daemons. I would like to implement this concept sometimes somewhere.

Error handling when calling other system using RFC

Preparation

You have configured outbound connection and started to write code.

Iteration 1

CALL FUNCTION ‘RFC_PING’ DESTINATION ‘DUMMY’.

Looks fine enough. But if you make mistake or connection is temporarily down or happens something else, you will get short dumps CALL_FUNCTION_REMOTE_ERROR,  CALL_FUNCTION_NO_DEST or CALL_FUNCTION_OPEN_ERROR etc.

You should always avoid short dumps in common environment.

(далее…)

Как побороть WSAECONNRESET: Connection reset by peer в SAP GUI

На некоторых видах прямых соединений из дома на нужные мне сервера NetWeaver я часто сталкиваюсь с ошибкой:

WSAECONNRESET: Connection reset by peer

Она возникает примерно через минуту, если ничего не делать в SAP GUI. Все окна вылетают, блокировки не снимаются, несохранённый результат теряется. Это может быть очень неприятно и обидно.

Кто виноват и что делать? (далее…)

В погоне за большой кнопкой

«Самый лучший гуй — одна большая кнопка
в центре экрана с надписью «Сделай мне хорошо!»
(с) Опытный дизайнер

«Самый лучший гуй — одна большая надпись
в центре экрана «Тебе уже хорошо!»
(с) Опытный программист

Цитата #437964
Неудобства: При работе с программой
приходится нажимать на различные кнопки
(с) bash.org.ru

 

В идеале каждая система должна стремиться к минимизации своего интерфейса.

В качестве плохого примера в системе SAP ERP можно вспомнить транзакцию проводки амортизации AFAB:

Стандартный экран проводки амортизации

Первый экран выглядит очень типично для SAP ERP, поэтому и проблемы у этого экрана старые идеологические:

1. Первый экран (экран выбора) не даёт никакой информации о текущем состоянии

2. Все проверки происходят после заполнения всех параметров и запуска процесса

3. Объем задачи большой, заранее не просчитывается, поэтому установлено простое ограничение на тестовый прогон – 1000 записей

4. Формирование фонового задания и отслеживание его статуса – не самая простая пользовательская операция: пять кликов на запуск, пять кликов на просмотр, причём через непростые малознакомые экраны.

5. Нет никакой отчётливой сигнализации об ошибках расчёта

 

Я просто удивляюсь, почему за последние десять лет никто так и не решился переписать междумордие этой важной задачи.

BTW: Вполне вероятно, что в “Пульте управления закрытием” это и сделано, вот только это тема совсем другого разговора.

Приступим?

(далее…)

Джавапокалипсис в отдельно взятой системе

Есть такой эвфемизм: “исторически сложилось”.

Так вот, в моей основной системе исторически так сложилось, что:

  • много пользователей работают через SAP GUI for HTML;
  • практически вся отчетность выгружается в Excel через ZWWW.

 

А это значит что без правильно настроенной связки Браузер+Java жить непросто.

Java нужна для работы с файлами (выгрузить, загрузить). Принципиально веб-приложение должно работать только внутри своего окна и его нельзя подпускать к файловой системе пользователя даже на пушечный выстрел. С файлами должен работать лично браузер удобным ему способом, но это противоречит подходу SAP GUI, который хочет контролировать всё: показ диалога открытия, заголовок окна диалога, список доступных расширений файлов, разрешение множественного выбора, выбор каталога, чтение каталога, считывание содержимого файла или запись. Так как SAP GUI for HTML должен повторять функциональность большого брата, поэтому они там решили не менять подход, а ввести дополнительную прослойку в виде Java-апплета, который бы выполнял эти действия на стороне клиента. ABAP-часть при таком подходе остаётся практически без изменений.

Кроме этого, ZWWW работает через технологию OLE, без вариантов. А веб-приложение нельзя подпускать к OLE-интерфейсам клиентской машины даже в радиусе поражения ракет класса “земля-воздух”. Следовательно, нужна ещё одна прослойка в виде Java-апплета, которая будет проксировать OLE-вызовы и выполнять сопутствующие махинации.

Так как SAP GUI for HTML и сам является прослойкой между ABAP-инстанцией и ITS-сервером, то это всё это сооружение начинает походить на игру Дженга.

И такая игра идёт постоянно. То браузеры начинают отключать старую джаву и требуют обновлений, то джава-апплеты теряют полномочия, то что-то происходит с проверкой подписи апплета, то появляются какие-то черные/белые списки исключений, то вдруг апплет начинает жутко тормозить на какой-то версии JRE, то выходит новая версия офиса, то обновляют ITS/ABAP, то пользователи в другом конце страны не могут что-то настроить, то вдруг кому-то кажется, что низкий уровень безопасности в браузере решает проблему…

Если следить за хронологией, то можно заметить:

 

Скоро останется только старый и не очень добрый IE. Евошний разработчик хоть и обещал поддерживать IE11 в Windows 10, но мы-то с вами знаем …

И вот Джавапокалипсис прилижается.

Рассмотрим варианты.

(далее…)

Аудит в ландшафте разработки ABAP. Часть 9. Диапазоны номеров

Небольшой периодический аудит в системе разработки, как и периодическое медицинское обследование не бывает лишним. Это может понадобиться, если вы:

  • входите на проект с существующим большим историческим слоем разработок;
  • принимаете большой объём разработок от подрядчика/субподрядчика;
  • просто решаетесь на ежегодную генералку или ревизию.

В данной заметке делается обзор в части аудита диапазонов номеров.

(далее…)