Function Module QR Code
Function Module QR Code
QR CODE
https://belajarabap.wordpress.com/
Function Module
FUNCTION ZFM_QRCODE.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(FI_URL) TYPE STRING OPTIONAL
*" VALUE(FI_QRCODE) TYPE ZDE_QRCOD OPTIONAL
*" VALUE(FI_WIDTH) TYPE I OPTIONAL
*" VALUE(FI_HEIGHT) TYPE I OPTIONAL
*" VALUE(FI_IMAGENAME) TYPE TDOBNAME OPTIONAL
*" EXPORTING
*" VALUE(FE_STATS) TYPE CHAR1
*" VALUE(FE_MESSG) TYPE STRING
*" EXCEPTIONS
*" ENQUEUE_FAILED
*"----------------------------------------------------------------------
DATA: ld_content LIKE d_xstring,
ld_strlen TYPE i,
ld_blob TYPE w3mimetabtype,
ld_object TYPE stxbitmaps-tdobject,
ld_id TYPE stxbitmaps-tdid,
ld_btype TYPE stxbitmaps-tdbtype,
ld_resident TYPE stxbitmaps-resident, https://belajarabap.wordpress.com
ld_autoheight TYPE stxbitmaps-autoheight,
ld_bmcomp TYPE stxbitmaps-bmcomp,
ld_resolution TYPE stxbitmaps-resolution,
ld_extension TYPE rlgrap-filename,
ld_docid TYPE stxbitmaps-docid,
ld_data TYPE string,
ld_quote(1) VALUE '"'.
CONCATENATE '{' ld_quote 'url' ld_quote ':' ld_quote fi_qrcode ld_quote '}'
INTO ld_data.
1
PERFORM f_get_qrcode_from_url USING fi_url
ld_data
CHANGING ld_content
ld_strlen
fe_stats
fe_messg.
ld_object = 'GRAPHICS'.
ld_id = 'BMAP'.
ld_btype = 'BCOL'. "If u want black and white pass BMON
ld_resident = ' '.
ld_autoheight = 'X'.
ld_bmcomp = 'X'.
ld_extension = 'BMP'.
ENDFUNCTION.
2
Include TOP
type-pools: SBDST.
data: d_xstring TYPE xstring.
Include F01
*&---------------------------------------------------------------------*
*& Form F_GET_QRCODE_FROM_URL
*&---------------------------------------------------------------------*
FORM f_get_qrcode_from_url USING fu_url TYPE string
fu_data TYPE string
CHANGING fc_content LIKE d_xstring
fc_strlen TYPE i
fc_stats
fc_messg TYPE string.
3
* set http_client header parameters
CALL METHOD http_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'POST'.
* send data
CALL METHOD http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_invalid_timeout = 3.
IF sy-subrc NE 0.
fc_stats = 'E'.
CALL METHOD http_client->get_last_error
IMPORTING
message = fc_messg. https://belajarabap.wordpress.com
RETURN.
ENDIF.
* receive data
CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
IF sy-subrc NE 0.
4
fc_stats = 'E'.
CALL METHOD http_client->get_last_error
IMPORTING
message = fc_messg.
RETURN.
ENDIF.
ld_content = http_client->response->get_cdata( ).
fc_strlen = STRLEN( ld_content ).
5
ld_blob_size TYPE w3param-cont_len,
ld_blob_type TYPE w3param-cont_type.
lcl_img_conv->input = 'image/png'.
lcl_img_conv->output = 'image/bmp'.
lcl_img_conv->width = fu_width.
lcl_img_conv->height = fu_height.
IF sy-subrc = 0.
CALL METHOD lcl_img_conv->get_image
IMPORTING
blob = fc_blob
blob_size = ld_blob_size https://belajarabap.wordpress.com
blob_type = ld_blob_type.
ELSE.
fc_stats = 'E'.
fc_messg = 'Error converting image'.
RETURN.
ENDIF.
6
*&---------------------------------------------------------------------*
*& Form F_IMPORT_IMAGE
*&---------------------------------------------------------------------*
FORM f_import_image
USING fu_blob TYPE w3mimetabtype
fu_name TYPE stxbitmaps-tdname
fu_object TYPE stxbitmaps-tdobject
fu_id TYPE stxbitmaps-tdid
fu_btype TYPE stxbitmaps-tdbtype
fu_format TYPE c
fu_title TYPE bds_propva
fu_resident TYPE stxbitmaps-resident
fu_autoheight TYPE stxbitmaps-autoheight
fu_bmcomp TYPE stxbitmaps-bmcomp
CHANGING fc_docid TYPE stxbitmaps-docid
fc_resolution TYPE stxbitmaps-resolution
fc_stats
fc_messg.
* BDS handling
CONSTANTS:
lc_bds_classname TYPE sbdst_classname VALUE 'DEVC_STXD_BITMAP',
lc_bds_classtype TYPE sbdst_classtype VALUE 'OT', "others
lc_bds_mimetype TYPE bds_mimetp VALUE 'application/octet-stream',
7
lc_bds_original TYPE sbdst_doc_var_tg VALUE 'OR'.
* Enqueue
PERFORM enqueue_graphic USING fu_object
fu_name
fu_id
fu_btype
CHANGING fc_stats
fc_messg.
IF fc_stats = 'E'.
RETURN.
ENDIF.
* Bitmap conversion
CALL FUNCTION 'SAPSCRIPT_CONVERT_BITMAP_BDS'
EXPORTING
color = 'X'
format = fu_format
resident = fu_resident
bitmap_bytecount = ld_bytecount
compress_bitmap = fu_bmcomp
IMPORTING
width_tw = ld_width_tw
height_tw = ld_height_tw
width_pix = ld_width_pix
height_pix = ld_height_pix
dpi = fc_resolution
bds_bytecount = ld_bds_bytecount
TABLES
bitmap_file = fu_blob
bitmap_file_bds = lt_bds_content
EXCEPTIONS
format_not_supported = 1
no_bmp_file = 2
bmperr_invalid_format = 3 https://belajarabap.wordpress.com
bmperr_no_colortable = 4
bmperr_unsup_compression = 5
bmperr_corrupt_rle_data = 6
OTHERS = 7.
IF sy-subrc <> 0.
fc_stats = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO fc_messg.
8
PERFORM dequeue_graphic USING fu_object
fu_name
fu_id
fu_btype.
RETURN.
ENDIF.
lx_bds_components-doc_count = '1'.
lx_bds_components-comp_count = '1'.
lx_bds_components-mimetype = lc_bds_mimetype.
lx_bds_components-comp_size = ld_bds_bytecount.
APPEND lx_bds_components TO lt_bds_components.
lx_bds_signature-doc_count = '1'.
APPEND lx_bds_signature TO lt_bds_signature.
IF sy-subrc <> 0.
fc_stats = 'E'. https://belajarabap.wordpress.com
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO fc_messg.
PERFORM dequeue_graphic USING fu_object
fu_name
fu_id
fu_btype.
RETURN.
ENDIF.
9
READ TABLE lt_bds_signature INDEX 1 INTO lx_bds_signature
TRANSPORTING doc_id.
IF sy-subrc = 0.
fc_docid = lx_bds_signature-doc_id.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO fc_messg.
fc_stats = 'E'.
PERFORM dequeue_graphic USING fu_object
fu_name
fu_id
fu_btype.
RETURN.
ENDIF.
IF sy-subrc = 0.
SELECT SINGLE object_key FROM (ld_tabname) INTO ld_object_key
WHERE loio_id = lx_stxbitmaps-docid+10(32)
AND classname = lc_bds_classname https://belajarabap.wordpress.com
AND classtype = lc_bds_classtype.
ENDIF.
10
*read object_key end
CALL METHOD lcl_bds_object->update_with_table
EXPORTING
classname = lc_bds_classname
classtype = lc_bds_classtype
object_key = ld_object_key
doc_id = fc_docid
doc_ver_no = '1'
doc_var_id = '1'
CHANGING
components = lt_bds_components
content = lt_bds_content
EXCEPTIONS
nothing_found = 1
OTHERS = 2.
lx_bds_signature-doc_count = '1'.
APPEND lx_bds_signature TO lt_bds_signature.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno https://belajarabap.wordpress.com
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO fc_messg.
fc_stats = 'E'.
PERFORM dequeue_graphic USING fu_object
fu_name
fu_id
fu_btype.
RETURN.
ENDIF.
11
READ TABLE lt_bds_signature INDEX 1 INTO lx_bds_signature
TRANSPORTING doc_id.
IF sy-subrc = 0.
fc_docid = lx_bds_signature-doc_id.
ELSE.
fc_stats = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO fc_messg.
PERFORM dequeue_graphic USING fu_object
fu_name
fu_id
fu_btype.
RETURN.
ENDIF.
ELSEIF sy-subrc = 2.
fc_stats = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO fc_messg.
PERFORM dequeue_graphic USING fu_object
fu_name
fu_id
fu_btype.
RETURN.
ENDIF.
ENDIF.
12
IF sy-subrc <> 0.
UPDATE stxbitmaps FROM lx_stxbitmaps.
IF sy-subrc <> 0.
fc_stats = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO fc_messg.
RETURN.
ENDIF.
ENDIF.
13
*&---------------------------------------------------------------------*
*& Form enqueue_graphic
*&---------------------------------------------------------------------*
FORM enqueue_graphic USING fu_object
fu_name
fu_id
fu_btype
CHANGING fc_stats
fc_messg.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO fc_messg.
fc_stats = 'E'.
ENDIF.
ENDFORM. "ENQUEUE_GRAPHIC
*&---------------------------------------------------------------------*
*& Form dequeue_graphic
*&---------------------------------------------------------------------*
FORM dequeue_graphic USING fu_object
fu_name
fu_id
fu_btype. https://belajarabap.wordpress.com
ENDFORM. "DEQUEUE_GRAPHIC
14