I’m on week three of course Learning How to Learn at (Coursera).
I recommend this course to everyone. In whatever area people work, they always need to learn.
Here are my current lessons. (далее…)
против Энтропии
I’m on week three of course Learning How to Learn at (Coursera).
I recommend this course to everyone. In whatever area people work, they always need to learn.
Here are my current lessons. (далее…)
Без предисловий, сразу код в начальной итерации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
DATA: lv_template TYPE string VALUE 'ZR_CA001.DOCX'. DATA: lv_file TYPE xstring. DATA: lt_data TYPE STANDARD TABLE OF tbl1024. DATA: lv_len TYPE i. zcl_text_tools=>read_mimeobject( EXPORTING iv_mimeobject = conv #( lv_template ) IMPORTING ev_bin = lv_file ). * ... some magic happens here ... lv_len = xstrlen( lv_file ). CALL METHOD cl_bcs_convert=>xstring_to_xtab EXPORTING iv_xstring = lv_file IMPORTING et_xtab = lt_data[]. cl_gui_frontend_services=>show_document( EXPORTING document_name = lv_template mime_type = '' data_length = lv_len CHANGING document_data = lt_data[] EXCEPTIONS OTHERS = 1 ). |
А теперь можно его покритиковать. (далее…)
Иногда так получается, что в одном глобальном расширении внутри одного большого куска ABAP-кода скапливается много маленьких кусочков, делающие совершенно разные вещи для совершенно разных людей/модулей/пакетов.
Вот для примера типичный код из события OpenFI BTE 1120 (замещения перед сохранением бухгалтерской проводки):
Вот такой компот, бывает что и на тысячи строк тянется эта простыня.
Почему так получается? Это скорее следствие скупости, лени, спешки плюс недостаток фантазии.
Работать – работает, больших проблем не доставляет. Открыл – всё видно. Можно даже копипастить подходы, использовать общие переменные.
Особая проблема с таким подходом возникает только в ситуации конкурентных правок. Но если такие ситуации всплывают раз в год, то проще перебороть и запинать, чем вылечить проблему в корне.
Хорошая идея – категорический запрет на решение разных задач в рамках одного ABAP фрагмента (инклюда, функции, метода). Совсем уж общего решения предложить нельзя, так как есть нюансы, да и многое дело вкуса.
Приступим к первой итерации.
Вполне бытовая задача при разработке ERP-системы — настройка оповещений посредством электронной почты.
Соответственно сразу возникает несколько идей, куда ложить текст шаблона:
… хотя можно встретить и более экзотические варианты.
Задача может стать чуть более изощренной, если потребуется в письмо добавить красоты в виде HTML. В первом приближении HTML — это простой текст со специальной разметкой в виде тегов. Поэтому можно не отказываться от старых вариантов и мириться с неудобствами в виде редактирования plain-text и отсутствия проверок.
1 2 3 4 5 6 7 |
<html> <body> <H3>Тревога, тревога:</H3> <p>Волк унёс зайчат!</p> <p>Последнее местоположение зайчат: [LGORT]</p> </body> <html> |
Однако задача может стать еще сложнее, если появляется динамичный контент в виде таблиц. И тут появляется развилка:
И как вы уже поняли из заголовка статьи — далее речь пойдёт о втором варианте в подробностях. (далее…)
Есть у меня один повод для переживаний – это запросы, которые не доехали до продакшена.
Они всё время норовят где-то затеряться и забыться.
Я-то сделал, отдал в тест. А дальше дело ответственного консультанта, мяч уже на его стороне.
Дано:
При этом стоит в обязательном порядке связывать создаваемый запрос с задачей/инцидентом.
Раз-два и вот прототип маленькой помогалки готов:
Номер запроса, дата, владелец, описание, привязка к задаче и куча зеленых галочек.
Всё понятно – один сложный запрос ещё варится, два запроса уехали в прод, четвёртый на тесте.
Как же я люблю когда много зеленых галочек. Успокаивает. Что ещё нужно?
А некоторые солидные господа используют для этого Solution Manager ChaRM. Но, мне почему-то кажется, что там не будет такой кучи зеленых галочек. Это фатальный недостаток.
…равен двум пожарам!
Развлечения ради переехал на другой сервер, а заодно и дизайн обновил.
В процессе написания кода по заданной спецификации неожижанно обнаружил для себя, что ключевые слова ABAP не являюся зарезервированными.
Поэтому нижеследующий код компилируется и даже выполняется:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
TYPES TYPE. DATA USING TYPE TYPE. PERFORM FORM USING USING USING USING. FORM FORM USING USING TYPE TYPE DATA LIKE USING TYPE TYPE TYPE. DATA = TYPE. DATA TO TYPE I. DATA ADD LIKE TO. ADD ADD TO TO. DATA IF. DATA EQ. DATA ENDIF. IF IF EQ EQ. MOVE TO TO ENDIF. ENDIF. ENDFORM. |
Даже если так писать и можно, то этого делать всё-таки не следует:
Зато есть служебная таблица TRESE, в которой перечисляются разные наименования полей, которые нельзя создавать из-за ограниченний в разных БД.