0% found this document useful (0 votes)
7 views4 pages

SAP REST API Labels Integration

The document outlines the implementation of a REST API for managing union labels, including methods for handling requests and responses. It defines various data types and structures for processing order information, serial numbers, and metadata. The API supports multiple endpoints for retrieving label data and metadata based on specified parameters.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views4 pages

SAP REST API Labels Integration

The document outlines the implementation of a REST API for managing union labels, including methods for handling requests and responses. It defines various data types and structures for processing order information, serial numbers, and metadata. The API supports multiple endpoints for retrieving label data and metadata based on specified parameters.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

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

You might also like