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-символьний UUIDDATA(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.
" JSONDATA(json) = xco_cp_json=>data->from_abap( some_struct )->to_string( ).DATA(obj) = xco_cp_json=>data->from_string( json_str ).Обробка рядків
Section titled “Обробка рядків”" Базові операції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 templatesDATA(msg) = |ID: { id ALPHA = OUT } at { sy-datum DATE = USER }|.Клас cl_abap_string_utilities — допоміжні функції для перетворень між char і string, робота з CR/LF.
Регулярні вирази
Section titled “Регулярні вирази”Сучасний 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 — для сумісності, не для нового коду.
Дата і час
Section titled “Дата і час”" Timestamp: коротка (sec) і довга (μs)GET TIME STAMP FIELD DATA(ts). " TYPE TIMESTAMPGET 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( ).RTTS — через released класи
Section titled “RTTS — через released класи”Ті самі CL_ABAP_TYPEDESCR / CL_ABAP_STRUCTDESCR / CL_ABAP_TABLEDESCR — released і працюють у ABAP Cloud. Див. сторінку про динамічне програмування.
" ABAP → JSONDATA(json) = /ui2/cl_json=>serialize( data = obj pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).
" У ABAP Cloud — XCODATA(json2) = xco_cp_json=>data->from_abap( obj )->to_string( ).
" JSON → ABAPDATA 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).Винятки — ієрархія
Section titled “Винятки — ієрархія”Всі ABAP-винятки спадкуються від cx_root:
cx_rootcx_static_check— перевіряється при компіляції; має бути уRAISINGcx_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.
Локінг (блокування)
Section titled “Локінг (блокування)”У 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( ).ABAP Unit
Section titled “ABAP Unit”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.
ZIP / XLSX
Section titled “ZIP / XLSX”cl_abap_zip— читання/запис ZIP у памʼяті (released).xco_cp_xlsx— читання/запис XLSX у ABAP Cloud.
" Розпакувати ZIPDATA(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.Виклик HTTP-сервісу
Section titled “Виклик HTTP-сервісу”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.Application Log
Section titled “Application Log”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( ).Числа і обчислення
Section titled “Числа і обчислення”" RandomDATA(r) = cl_abap_random_int=>create( seed = cl_abap_random=>seed( ) min = 1 max = 100 ).DATA(num) = r->get_next( ).
" Floating-point utilitiesDATA(rounded) = cl_abap_math=>round( val = 3.14159 dec = 2 ).Коди помилок / утиліти
Section titled “Коди помилок / утиліти”cl_abap_char_utilities— спецсимволи (horizontal_tab,cr_lf,newline).cl_abap_builtin_functions— формально недоступний як виклик;abs,lines,strlenтощо — це builtin (функції мови).
Як знаходити released API
Section titled “Як знаходити released API”- У ADT: Project Explorer → Released APIs показує дерево за категоріями.
- CDS view
I_ApiReleaseStateOfObject— SQL-запит за статусом. - ABAP Doc теги:
<released>API</released>у JavaDoc-коментарі класу. - Pattern: більшість released класів для Cloud починаються з
XCO_CP_...,CL_ABAP_...,CL_WEB_...,IF_OO_ADT_....
Адаптовано з 22_Released_ABAP_Classes.md (Apache 2.0). Повний перелік нюансів — в оригіналі.