SAP ABAP - Get QR Code from Google API
Updated: Aug 29, 2022
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_QR_TEXT) TYPE CHAR50
*" REFERENCE(I_WIDTH) TYPE CHAR3 DEFAULT '50'
*" REFERENCE(I_HEIGHT) TYPE CHAR3 DEFAULT '50'
*" REFERENCE(I_WNAME) TYPE CHAR40 DEFAULT 'ZZQRCODE'
*" EXPORTING
*" reference(e_w_name) TYPE char40
*"----------------------------------------------------------------------
check i_qr_text is not initial and i_wname is not initial.
PERFORM f_clear.
gv_text = i_qr_text.
gv_width = i_width.
gv_height = i_height.
gv_w_name = i_wname.
PERFORM download_qrcode USING i_qr_text i_width i_height.
PERFORM convert_image.
e_w_name = i_wname. " se78 bmap
*&---------------------------------------------------------------------* *& TOP
*&---------------------------------------------------------------------*
DATA : bds_description LIKE bapisignat-prop_value,
* bds handlingconstants:
c_bds_classname TYPE sbdst_classname VALUE 'DEVC_STXD_BITMAP',
c_bds_classtype TYPE sbdst_classtype VALUE 'OT',
" others
c_bds_mimetype TYPE bds_mimetp VALUE 'application/octet-stream',
c_bds_original TYPE sbdst_doc_var_tg VALUE 'OR',
* Graphic handling constants:
c_stdtext LIKE thead-tdobject VALUE 'TEXT',
c_graphics LIKE thead-tdobject VALUE 'GRAPHICS',
c_bmon LIKE thead-tdid VALUE 'BMON',
c_bcol LIKE thead-tdid VALUE 'BCOL'.
DATA: gi_filename TYPE rlgrap-filename,
gi_name TYPE stxbitmaps-tdname,
gi_object TYPE stxbitmaps-tdobject,
gi_id TYPE stxbitmaps-tdid,
gi_btype TYPE stxbitmaps-tdbtype,
gi_resident TYPE stxbitmaps-resident,
gi_autoheight TYPE stxbitmaps-autoheight,
gi_bmcomp TYPE stxbitmaps-bmcomp,
gi_resolution TYPE stxbitmaps-resolution,
l_extension TYPE rlgrap-filename,
l_docid TYPE stxbitmaps-docid.
"Picture Control
DATA: picture_container TYPE REF TO cl_gui_custom_container,
picture_control TYPE REF TO cl_gui_picture.
DATA: l_img_url TYPE w3url.
DATA :l_img_subtype TYPE w3param-cont_type.
DATA : l_str_length TYPE i.
DATA : url TYPE string.
DATA : l_content_length TYPE i.
DATA : mime TYPE w3mimetabtype.
DATA: blob TYPE w3mimetabtype,
blob_size TYPE w3param-cont_len,
blob_type TYPE w3param-cont_type.
DATA : i_igs_image_converter TYPE REF TO cl_igs_image_converter.
DATA: content TYPE xstring.
DATA : http_client TYPE REF TO if_http_client.
TYPES : BEGIN OF ty_binary,
binary_field(1000) TYPE c,
END OF ty_binary.
DATA : hex_tab1 TYPE TABLE OF ty_binary WITH HEADER LINE .
DATA: gv_text(50),
gv_width TYPE int3,
gv_height TYPE int3,
gv_w_name(40). " se78 bmap name
*&---------------------------------------------------------------------*
*& Form F_CLEAR
*&---------------------------------------------------------------------*
FORM f_clear .
CLEAR: gv_text ,
gv_width,
gv_height,
gv_w_name ,
gi_filename,
gi_name,
gi_object ,
gi_id,gi_btype,
gi_resident,
gi_autoheight ,
gi_bmcomp,
gi_resolution,
l_extension ,
l_docid,
l_img_url,
l_img_subtype,
l_str_length ,
url,
l_content_length,mime[] ,
blob[],
blob_size,
blob_type,
i_igs_image_converter,
content ,
http_client,
hex_tab1[].
ENDFORM. " F_CLEAR
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_QRCODE
*&---------------------------------------------------------------------*
FORM download_qrcode USING p_text p_width p_height.
CONDENSE p_width NO-GAPS.
CONDENSE p_height NO-GAPS.
CONCATENATE 'http://chart.apis.google.com/chart?chs='
p_width
'x'
p_height
'&cht=qr&chld=|1&chl='
p_text "'/chart.png'
INTO url.
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = url
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc = 0 .
http_client->send( ).
http_client->receive( ).
content = http_client->response->get_data( ).
http_client->close( ).
l_str_length = xstrlen( content ).
CALL FUNCTION 'RSFO_XSTRING_TO_MIME'
EXPORTING
c_xstring = content
i_length = l_str_length
TABLES
c_t_mime = mime.
ENDIF.
ENDFORM. " DOWNLOAD_QRCODE
*&---------------------------------------------------------------------*
*& Form CONVERT_IMAGE
*&------------------