Перейти до вмісту

Released ABAP класи

У ABAP for Cloud Development доступні тільки released API — класи, інтерфейси, CDS-обʼєкти, явно зарелізені SAP як безпечні для upgrades. Цей довідник — мапа найуживаніших released класів: що брати у ABAP Cloud замість старих утиліт.

Перевірити статус конкретного обʼєкта можна в ADT (F2 → Release Status) або через CDS view I_ApiReleaseStateOfObject. Якщо клас не released — у ABAP Cloud його просто не буде видно компілятору.

Запуск і вивід у консоль ADT

Section titled “Запуск і вивід у консоль ADT”

Для швидких прикладів реалізуй інтерфейс if_oo_adt_classrun — отримаєш main( out ) з консольним виводом:

CLASS zcl_demo DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS zcl_demo IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
out->write( `Привіт` ).
out->write( data = sy-datum name = `today` ).
ENDMETHOD.
ENDCLASS.

F9 у ADT — запускає клас і показує вивід у Console.

" 32-символьний UUID
DATA(uuid_x16) = cl_system_uuid=>create_uuid_x16_static( ).
DATA(uuid_c32) = cl_system_uuid=>create_uuid_c32_static( ).
DATA(uuid_c36) = cl_system_uuid=>create_uuid_c36_static( ).

Інший спосіб — через XCO:

DATA(uuid) = xco_cp=>uuid( )->value.

XCO — сучасне API для системних даних

Section titled “XCO — сучасне API для системних даних”

xco_cp — фасад над значною частиною утилітарних API. Обʼєкти доступні через ланцюжки методів:

" Системні поля
DATA(user) = xco_cp=>sy->user( )->name.
DATA(client) = xco_cp=>sy->client( )->value.
" Дата/час
DATA(today) = xco_cp=>sy->date( )->as( xco_cp_time=>format->iso_8601_extended )->value.
DATA(now) = xco_cp=>sy->moment( ).
" Рядки
DATA(padded) = xco_cp=>string( `abc` )->prefix( `00` )->to_upper_case( )->value.
" JSON
DATA(json) = xco_cp_json=>data->from_abap( some_struct )->to_string( ).
DATA(obj) = xco_cp_json=>data->from_string( json_str ).
" Базові операції
DATA(len) = strlen( s ).
DATA(upper) = to_upper( s ).
DATA(trimmed) = condense( val = s del = ` ` ).
DATA(sub) = substring( val = s off = 0 len = 5 ).
" Пошук і заміна
FIND REGEX `\d+` IN s MATCH COUNT DATA(cnt).
REPLACE ALL OCCURRENCES OF REGEX `\s+` IN s WITH ` `.
" String templates
DATA(msg) = |ID: { id ALPHA = OUT } at { sy-datum DATE = USER }|.

Клас cl_abap_string_utilities — допоміжні функції для перетворень між char і string, робота з CR/LF.

Сучасний API — cl_abap_regex і cl_abap_matcher:

DATA(regex) = cl_abap_regex=>create_pcre( pattern = `(\d+)-(\d+)` ).
DATA(matcher) = regex->create_matcher( text = `123-456` ).
IF matcher->match( ).
DATA(g1) = matcher->get_submatch( 1 ). " "123"
DATA(g2) = matcher->get_submatch( 2 ). " "456"
ENDIF.

PCRE — повноцінні Perl-сумісні регекси. Старий flavor POSIX — для сумісності, не для нового коду.

" Timestamp: коротка (sec) і довга (μs)
GET TIME STAMP FIELD DATA(ts). " TYPE TIMESTAMP
GET TIME STAMP FIELD DATA(tsl). " TYPE TIMESTAMPL (якщо так оголошена)
" Конвертації через cl_abap_tstmp — у ABAP Cloud доступні обмежено
" XCO — сучасний шлях
DATA(m) = xco_cp=>sy->moment( ).
DATA(iso) = m->as( xco_cp_time=>format->iso_8601_extended )->value.
DATA(epoch) = m->as( xco_cp_time=>format->unix )->value.
" Календар
DATA(cal) = cl_abap_context_info=>get_system_date( ).
DATA(tz) = cl_abap_context_info=>get_user_time_zone( ).

Ті самі CL_ABAP_TYPEDESCR / CL_ABAP_STRUCTDESCR / CL_ABAP_TABLEDESCR — released і працюють у ABAP Cloud. Див. сторінку про динамічне програмування.

" ABAP → JSON
DATA(json) = /ui2/cl_json=>serialize( data = obj
pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).
" У ABAP Cloud — XCO
DATA(json2) = xco_cp_json=>data->from_abap( obj )->to_string( ).
" JSON → ABAP
DATA target TYPE ty_struct.
xco_cp_json=>data->from_string( json )->write_to( REF #( target ) ).

Для створення/парсингу XML — cl_ixml_core (released). Для трансформацій — XSLT через CALL TRANSFORMATION:

CALL TRANSFORMATION id SOURCE data = some_struct
RESULT XML DATA(xml).

Всі ABAP-винятки спадкуються від cx_root:

  • cx_root
    • cx_static_check — перевіряється при компіляції; має бути у RAISING
    • cx_dynamic_check — runtime-check; не вимагає декларації
    • cx_no_check — системні, не треба оголошувати

Див. сторінку Винятки.

Автентифікація / користувач

Section titled “Автентифікація / користувач”
" Імʼя користувача (без sy-uname у cloud)
DATA(user) = cl_abap_context_info=>get_user_alias( ).
DATA(name) = cl_abap_context_info=>get_user_formatted_name( ).
" Дата/час сесії
DATA(date) = cl_abap_context_info=>get_system_date( ).
DATA(time) = cl_abap_context_info=>get_system_time( ).

sy-uname у ABAP Cloud недоступне напряму — треба cl_abap_context_info.

У ABAP Cloud — через RAP locks або через cl_abap_lock_object_factory:

DATA(factory) = cl_abap_lock_object_factory=>get_instance( iv_name = 'EZ_MY_LOCK' ).
DATA(lock) = factory->create_and_enqueue(
it_parameter = VALUE #( ( name = 'ID' value = REF #( id ) ) ) ).
" ... робота ...
lock->dequeue( ).
DATA(mail) = cl_bcs_mail_message=>create_instance( ).
mail->set_sender( `sender@example.com` ).
mail->add_recipient( `rcpt@example.com` ).
mail->set_subject( `Hello` ).
mail->set_main( cl_bcs_mail_textpart=>create_instance(
iv_content = `Hi there`
iv_content_type = 'text/plain' ) ).
mail->send( ).
CLASS ltc_calc DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS test_add FOR TESTING.
ENDCLASS.
CLASS ltc_calc IMPLEMENTATION.
METHOD test_add.
DATA(sut) = NEW zcl_calc( ).
cl_abap_unit_assert=>assert_equals(
act = sut->add( a = 2 b = 3 )
exp = 5 ).
ENDMETHOD.
ENDCLASS.

Методи cl_abap_unit_assert: assert_equals, assert_true, assert_bound, assert_initial, assert_table_contains, fail.

  • cl_abap_zip — читання/запис ZIP у памʼяті (released).
  • xco_cp_xlsx — читання/запис XLSX у ABAP Cloud.
" Розпакувати ZIP
DATA(zip) = NEW cl_abap_zip( ).
zip->load( zip_binary ).
LOOP AT zip->files INTO DATA(file).
zip->get( EXPORTING name = file-name IMPORTING content = DATA(content) ).
ENDLOOP.
TRY.
DATA(dest) = cl_http_destination_provider=>create_by_url( `https://api.example.com` ).
DATA(client) = cl_web_http_client_manager=>create_by_http_destination( dest ).
DATA(req) = client->get_http_request( ).
req->set_method( if_web_http_client=>get ).
req->set_uri( `/resource/42` ).
DATA(resp) = client->execute( if_web_http_client=>get ).
DATA(body) = resp->get_text( ).
CATCH cx_http_dest_provider_error cx_web_http_client_error INTO DATA(e).
" обробка
ENDTRY.
DATA(log) = cl_ballog=>create( iv_object = 'ZMY_OBJ'
iv_subobject = 'ZMY_SUBOBJ' ).
log->add_message( iv_msgty = 'I' iv_msgid = 'ZMY' iv_msgno = '001' ).
log->save( ).
" Random
DATA(r) = cl_abap_random_int=>create( seed = cl_abap_random=>seed( )
min = 1 max = 100 ).
DATA(num) = r->get_next( ).
" Floating-point utilities
DATA(rounded) = cl_abap_math=>round( val = 3.14159 dec = 2 ).
  • cl_abap_char_utilities — спецсимволи (horizontal_tab, cr_lf, newline).
  • cl_abap_builtin_functions — формально недоступний як виклик; abs, lines, strlen тощо — це builtin (функції мови).
  1. У ADT: Project Explorer → Released APIs показує дерево за категоріями.
  2. CDS view I_ApiReleaseStateOfObject — SQL-запит за статусом.
  3. ABAP Doc теги: <released>API</released> у JavaDoc-коментарі класу.
  4. Pattern: більшість released класів для Cloud починаються з XCO_CP_..., CL_ABAP_..., CL_WEB_..., IF_OO_ADT_....

Адаптовано з 22_Released_ABAP_Classes.md (Apache 2.0). Повний перелік нюансів — в оригіналі.