Union labels API
Sunday, September 21, 2025 9:55 AM
METHOD if_rest_application~get_root_handler.
*CALL METHOD SUPER->IF_REST_APPLICATION~GET_ROOT_HANDLER
* RECEIVING
* RO_ROOT_HANDLER =
* .
DATA(lo_router) = NEW cl_rest_router( ).
* lo_router->attach( iv_template = '/ZAPI' iv_handler_class = 'ZCL_LABELS_API' ).
* lo_router->attach( iv_template = '/zlabel' iv_handler_class = 'ZCL_LABELS_API' ).
lo_router->attach( iv_template = '/zlabel/metadata' iv_handler_class = 'ZCL_LABELS_API' ).
lo_router->attach( iv_template = '/zlabel/{order}' iv_handler_class = 'ZCL_LABELS_API' ).
lo_router->attach( iv_template = '/zlabel/{order}/{from}/{to}' iv_handler_class = 'ZCL_LABELS_API' ).
ro_root_handler = lo_router.
ENDMETHOD.
SAP intgration Page 1
METHOD if_rest_resource~get.
" API link parameter
* DATA(order) = mo_request->get_uri_query_parameter( iv_name = 'order' ) .
DATA(order) = mo_request->get_uri_attribute( iv_name = 'order' ) .
* DATA(srl_from) = mo_request->get_uri_query_parameter( iv_name = 'from' ) .
DATA(srl_from) = mo_request->get_uri_attribute( iv_name = 'from' ) .
* DATA(srl_to) = mo_request->get_uri_query_parameter( iv_name = 'to' ) .
DATA(srl_to) = mo_request->get_uri_attribute( iv_name = 'to' ) .
DATA(lv_path) = mo_request->get_uri_path( ).
" types ===============================================================
TYPES : ty_rng_sernr TYPE RANGE OF objk-sernr.
TYPES : BEGIN OF ty_srl_nums ,
sernr TYPE equi-sernr,
END OF ty_srl_nums .
TYPES : BEGIN OF ty_zmark ,
zmark TYPE atwtb,
END OF ty_zmark .
TYPES : BEGIN OF ty_zcountry ,
zcountry TYPE atwtb,
END OF ty_zcountry .
TYPES : BEGIN OF ty_afpo ,
matnr TYPE afpo-matnr,
pwerk TYPE afpo-pwerk,
charg TYPE afpo-charg,
END OF ty_afpo .
TYPES : BEGIN OF ty_data ,
ppaufnr TYPE ser05-ppaufnr,
lt_serials TYPE TABLE OF ty_srl_nums WITH EMPTY KEY,
ic TYPE resb-potx1,
aos TYPE resb-potx1,
plnbez TYPE afko-plnbez,
ean11 TYPE mara-ean11,
lt_zmark TYPE TABLE OF ty_zmark WITH EMPTY KEY,
lt_zcountry TYPE TABLE OF ty_zcountry WITH EMPTY KEY,
END OF ty_data .
TYPES: BEGIN OF ty_metadata,
name TYPE string,
description TYPE string,
kind TYPE string,
type TYPE string,
length TYPE i,
END OF ty_metadata.
" Data declaration =============================================================
DATA : lv_json TYPE string,
lv_order TYPE ser05-ppaufnr.
DATA : ls_data TYPE ty_data.
DATA : lt_rng_sernr TYPE ty_rng_sernr,
ls_rng_sernr TYPE LINE OF ty_rng_sernr.
DATA : lt_zlabel TYPE TABLE OF zlabel WITH EMPTY KEY,
ls_zlabel LIKE LINE OF lt_zlabel,
SAP intgration Page 2
ls_zlabel LIKE LINE OF lt_zlabel,
ls_zafpo TYPE ty_afpo,
lt_char_of_batch TYPE TABLE OF clbatch WITH EMPTY KEY.
DATA : lt_serials TYPE TABLE OF ty_srl_nums,
lt_zmark TYPE TABLE OF ty_zmark,
lt_zcountry TYPE TABLE OF ty_zcountry
.
DATA : err_msg TYPE string.
DATA lt_metadata TYPE STANDARD TABLE OF ty_metadata WITH EMPTY KEY.
"metedata =====================================================================
IF lv_path = '/zlabel/metadata'.
APPEND VALUE #( name = 'PPAUFNR'
description = 'Order number'
kind = 'FIELD'
type = 'SER05-PPAUFNR'
length = 12 ) TO lt_metadata.
APPEND VALUE #( name = 'LT_SERIALS'
description = 'Serial numbers'
kind = 'TABLE'
type = 'EQUI-SERNR'
length = 0 ) TO lt_metadata.
APPEND VALUE #( name = 'IC'
description = 'I.C'
kind = 'FIELD'
type = 'RESB-POTX1'
length = 40 ) TO lt_metadata.
APPEND VALUE #( name = 'AOS'
description = 'Aos'
kind = 'FIELD'
type = 'RESB-POTX1'
length = 40 ) TO lt_metadata.
APPEND VALUE #( name = 'PLNBEZ'
description = 'Material code'
kind = 'FIELD'
type = 'AFKO-PLNBEZ'
length = 8 ) TO lt_metadata.
APPEND VALUE #( name = 'EAN11'
description = 'Global item number'
kind = 'FIELD'
type = 'MARA-EAN11'
length = 13 ) TO lt_metadata.
APPEND VALUE #( name = 'LT_ZMARK'
description = 'Mark'
kind = 'TABLE'
type = 'ATWTB'
length = 0 ) TO lt_metadata.
APPEND VALUE #( name = 'LT_ZCOUNTRY'
description = 'Country'
kind = 'TABLE'
type = 'ATWTB'
length = 0 ) TO lt_metadata.
CALL METHOD /ui2/cl_json=>serialize
EXPORTING
data = lt_metadata
RECEIVING
r_json = lv_json.
mo_response->create_entity( )->set_string_data( iv_data = lv_json ) .
mo_response->set_status( cl_rest_status_code=>gc_success_ok ). "200 HTTP response status code
ELSE.
" select data =================================================================
IF order IS NOT INITIAL.
IF srl_to IS NOT INITIAL AND srl_from IS NOT INITIAL.
ls_rng_sernr-high = srl_to .
ls_rng_sernr-low = srl_from .
ls_rng_sernr-sign = 'I'.
ls_rng_sernr-option = 'BT'.
APPEND ls_rng_sernr TO lt_rng_sernr .
ENDIF.
lv_order = order.
SHIFT lv_order RIGHT DELETING TRAILING space.
OVERLAY lv_order WITH '0000000000'.
SELECT COUNT(*) FROM ser05 WHERE ppaufnr = lv_order.
IF sy-subrc = 0.
ls_data-ppaufnr = lv_order.
"jest-objnr
SELECT equi2~sernr FROM ser05
INNER JOIN objk ON objk~obknr = ser05~obknr
INNER JOIN equi ON equi~equnr = objk~equnr
INNER JOIN jest ON jest~objnr = equi~objnr AND ( jest~inact = '' ) AND ( jest~stat = 'I0099' )
LEFT JOIN equi AS equi2 ON jest~objnr = equi2~objnr
INTO CORRESPONDING FIELDS OF TABLE lt_serials
WHERE ser05~ppaufnr = ls_data-ppaufnr AND objk~sernr IN lt_rng_sernr .
ls_data-lt_serials = lt_serials.
SELECT SINGLE potx1 FROM resb INTO ls_data-ic WHERE aufnr = ls_data-ppaufnr AND postp = 'T' AND bdmng = '1'.
SELECT SINGLE potx1 FROM resb INTO ls_data-aos WHERE aufnr = ls_data-ppaufnr AND postp = 'T' AND bdmng = '2'.
SELECT SINGLE plnbez FROM afko INTO ls_data-plnbez WHERE aufnr = ls_data-ppaufnr.
SELECT SINGLE ean11 FROM mara INTO ls_data-ean11 WHERE matnr = ls_data-plnbez.
SAP intgration Page 3
SELECT SINGLE ean11 FROM mara INTO ls_data-ean11 WHERE matnr = ls_data-plnbez.
SELECT SINGLE matnr pwerk charg FROM afpo INTO CORRESPONDING FIELDS OF ls_zafpo WHERE aufnr = ls_data-ppaufnr.
IF ls_zafpo IS NOT INITIAL.
CALL FUNCTION 'VB_BATCH_GET_DETAIL'
EXPORTING
matnr = ls_zafpo-matnr " Reference Material
charg = ls_zafpo-charg
werks = ls_zafpo-pwerk " Reference Plant
get_classification = 'X'
TABLES
char_of_batch = lt_char_of_batch
EXCEPTIONS
no_material = 1
no_batch = 2
no_plant = 3
material_not_found = 4
plant_not_found = 5
no_authority = 6
batch_not_exist = 7
lock_on_batch = 8
OTHERS = 9.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
SELECT * FROM zlabel INTO TABLE lt_zlabel.
IF lt_char_of_batch IS NOT INITIAL.
REFRESH : lt_zmark , lt_zcountry.
LOOP AT lt_zlabel INTO ls_zlabel .
SELECT atwtb AS zmark FROM @lt_char_of_batch AS ret WHERE atnam = @ls_zlabel-zmark APPENDING CORRESPONDING FIELDS OF TABLE @lt_zmark.
SELECT atwtb AS zcountry FROM @lt_char_of_batch AS ret WHERE atnam = @ls_zlabel-zcountry APPENDING CORRESPONDING FIELDS OF TABLE @lt_zcountry.
ENDLOOP.
ls_data-lt_zmark = lt_zmark.
ls_data-lt_zcountry = lt_zcountry.
ENDIF.
ENDIF.
ELSE.
"order not found
CLEAR err_msg.
CONCATENATE 'Order ' order '' 'not found' INTO err_msg SEPARATED BY space .
mo_response->create_entity( )->set_string_data( iv_data = err_msg ) .
* mo_response->set_status( cl_rest_status_code=>gc_success_no_content ). "204 HTTP response status code
mo_response->set_status( cl_rest_status_code=>gc_success_ok ). "200 HTTP response status code
ENDIF.
ELSE.
"empty order number
mo_response->set_status( cl_rest_status_code=>gc_client_error_bad_request ). "400 HTTP response status code
ENDIF.
"add selected data to JSON ====================================================
IF ls_data IS NOT INITIAL.
CALL METHOD /ui2/cl_json=>serialize
EXPORTING
data = ls_data
RECEIVING
r_json = lv_json.
mo_response->create_entity( )->set_string_data( iv_data = lv_json ) .
mo_response->set_status( cl_rest_status_code=>gc_success_ok ). "200 HTTP response status code
ENDIF.
ENDIF.
mo_response->create_entity( )->set_content_type( if_rest_media_type=>gc_appl_json ) .
ENDMETHOD.
Postman collection
[Link]
stman_co...
SAP intgration Page 4