Навеяно предыдущей записью. Не все ещё места хранения файлов исследованы. Например, вполне возможно хранить Excel-файлы в так называемом Business Workplace (транзакция SBWP, доступная всем с главного экрана).

Сохранённый файл можно прочитать из программы примерно таким кодом: (more…)

Есть много неочевидных способов хранить файлы. Вот ещё один из примерно двадцати семи.

Есть такой cпособ представления двоичного контента в виде текста: Base64.

Следовательно, любой файл можно представить в виде длинной константы типа string.  Чем больше файл, тем длиннее будет строка символов.

DATA lv_base64 TYPE string.
DATA lv_xstring TYPE xstring.

lv_base64 =
'UEsDBBQABgAIAAAAIQCM6YyMfgEAAIwFAAAnRlbnRfVHlwZXNdLnhtbCCi2AEooAAC' &&
'pBt1eSERI0lZjxXtYhzuGcOmA2ewCAP4pLyBjBtNgBRNezkvNb5oz1lDRh8jHtvaZk' &&
'8vZ9godfsKJKolUyquedZFFJdp5+yEHvH3ODG9fzke6typd7qeda5EIcqi5GKd27dL' &&
'9tclyNNJxbnjLu/4a58p/Oa/jFhQWPqE+gYwMEFAAGAAgAAAAhANZUUvOrAQAAQQMA' &&
'iv7jxP56s/Zu87L95Ts5q6ihwqQw1avwiyIj/hnjnGJ+4AtVn63DdqG7gYMZvhhPUU' &&
'zne1zRqIaLwr2HSSswyc9qVxm4Jdrz+evWMfaA7Fy+fiWW0QeIZACzFOGwYFuiMOcc' &&
'Z3MvcHJpbnRlclNldHRpbmdzMS5iaW5QSwEAAAACEAycnEUkoBAAB1AgAAEQAAAAAA' &&
'AAAAAAAAAACFHAAAZG9jUHJvcHMvY29yZS5QAUAAYACAAAACEANbpi6akBAAAzAwAA' &&
'EAAAAAAAAAAAAAAAAAAGHwAAZG9jUHJvcHMFBLBQYAAAAADQANAGwDAADlIQAAAAA='.

lv_xstring = cl_http_utility=>decode_x_base64( encoded = lv_base64 ).

Вот только файл размером 10кб займёт примерно 200 строк текста.

Когда такое может пригодиться?

Например: для юнит-тестов с небольшим исходным файлом.  Тестовый класс получается более самодостаточным, переносимым и независимым от внешних обстоятельств.

В моём случае инсайт пришёл при работе с Excel-файлом в моём предыдущем посте “Ещё один способ прочитать содержимое Excel-файла”. Не всегда есть смысл изобретать какое-то особое место хранения файла, если можно положить файл напрямую в код.

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

Есть в целом типичная задача – прочитать содержимое Excel-файла. И есть примерно двадцать семь способов её решить. В моём недавнем случае были ограничения: должно работать не только в SAP-GUI, должно уметь работать с несколькими листами, не должно требовать установки отдельных громоздких библиотек. Это отсекло большинство моих предыдущих подходов, и я отправился на поиски новых велосипедов.

И найденный велосипед имеет имя CL_FDT_XL_SPREADSHEET. Работать с ним проще простого: (more…)

Cтолкнулся с новым фреймворком Test Double. В чём же основной смысл и назначение этого фреймворка, с чем его едят?

Дано: Основной класс ZCL_ACTION

CLASS zcl_action DEFINITION.
  PUBLIC SECTION.
    METHODS constructor IMPORTING actor TYPE REF TO zcl_actor.
    METHODS who_am_i RETURNING VALUE(rv_name) TYPE string.

  PRIVATE SECTION.
    DATA: mo_actor TYPE REF TO zcl_actor.
ENDCLASS.

CLASS zcl_action IMPLEMENTATION.
  METHOD constructor.
    mo_actor = actor.
  ENDMETHOD.

  METHOD who_am_i.
    rv_name = mo_actor->get_name( ).
  ENDMETHOD.
ENDCLASS.

И реализация класса ZCL_ACTOR при этом следующая:

CLASS zcl_actor DEFINITION .
  PUBLIC SECTION.
    METHODS: get_name RETURNING VALUE(rv_name) TYPE string.

ENDCLASS.

CLASS zcl_actor IMPLEMENTATION.
  METHOD get_name.
    rv_name = 'Real value'.
  ENDMETHOD.
ENDCLASS.

Требуется: написать юнит-тест для класса ZCL_ACTION.

(more…)