Skip to Content

用ABAP 生成二维码

除了使用这篇blog里提到的使用ABAP webdynpro生成二维码之外,也可以通过使用二维码在线生成网站提供的service来生成二维码:

二维码在线生成网站:

http://www.makepic.com/qrcode.php

在网页上输入要生成的二维码数据源,校验级别和图片大小,点生成即可看到生成的二维码图片:

/wp-content/uploads/2014/02/clipboard1_395274.png

下面是用ABAP code 利用上述service生成二维码的代码:

DATA:ls_form   type zcl_http_tool=>ty_name_pair,
     lt_header type zcl_http_tool=>tt_name_pair,
     lt_form   type zcl_http_tool=>tt_name_pair,
     lv_code   type xstring.
ls_form = value #( name = 'data' value = 'testforQRCode' ).
APPEND ls_form TO lt_form.
ls_form = value #( name = 'level' value = 'M' ).
APPEND ls_form TO lt_form.
ls_form = value #( name = 'size' value = '6' ).
APPEND ls_form TO lt_form.
zcl_http_tool=>send_request( iv_url      = 'http://www.makepic.com/qrcode.php'
                              iv_req_type = if_http_request=>co_request_method_post
                             it_form      = lt_form ).
ls_form = value #( name = 'Referer' value = 'http://www.makepic.com/qrcode.php' ).
APPEND ls_form TO lt_header.
zcl_http_tool=>send_request( EXPORTING  iv_url      = 'http://www.makepic.com/mkqr.php?data=testforQRCode&level=M&size=6'
                                        iv_req_type = if_http_request=>co_request_method_get
                                        it_header   = lt_header
IMPORTING  ev_response = lv_code ).

testforQRCode对应生成的二维码:

/wp-content/uploads/2014/02/clipboard2_395275.png

用手机上的二维码扫描应用能够成功扫描出来:

/wp-content/uploads/2014/02/2c0e3e5ff0c6eded33e3f498631b0c95_395276.jpg

zcl_http_tool的代码在我的github上(因为用于demo用途,没有加对应的出错处理)

 

14 Comments
You must be Logged on to comment or reply to a post.
        • 我在我们N多个internal系统里找了半天也没找到,不知道是被谁删了,还是我忘了在哪个系统创建了。。。我部分ABAP 代码放在这里的,但是没找到: https://github.com/i042416/jerryslide/tree/master/ABAP

          • 对的。我是SAP labs的developer。确实是封装了cl_http_client这个类,具体逻辑也不复杂,你完全可以自己写。因为工作忙,我也没时间重新写一个了。


          • SPAN {
            font-family: “Courier New”;
            font-size: 10pt;
            color: #000000;
            background: #FFFFFF;
            }
            .L0S31 {
            font-style: italic;
            color: #808080;
            }
            .L0S32 {
            color: #3399FF;
            }
            .L0S33 {
            color: #4DA619;
            }
            .L0S52 {
            color: #0000FF;
            }
            .L0S55 {
            color: #800080;
            }
            .L0S70 {
            color: #808080;
            }
            ***HTTP POST 方法
            REPORT  z_barry_http_post LINE-SIZE 1023.

            DATA url TYPE string.

            DATAhttp_client TYPE REF TO if_http_client .
            DATAproxy_host TYPE string VALUE ‘119.9.109.128’ ,
            proxy_port TYPE string VALUE ’80’,
            proxy_user TYPE string ,
            proxy_pass TYPE string .
            DATAlen TYPE i,
            len_str TYPE string  .
            DATApost_string TYPE string.
            DATA:    return_str TYPE string .
            DATAcontent TYPE xstring.

            DATA l_str_length TYPE i.
            DATA :  mime TYPE  w3mimetabtype.
            DATA i_igs_image_converter TYPE REF TO cl_igs_image_converter.
            DATA :  l_content_length TYPE  i.

            DATAblob TYPE w3mimetabtype,
            blob_size TYPE w3paramcont_len,
            blob_type TYPE w3paramcont_type.

            “Picture Control
            DATApicture_container TYPE REF TO cl_gui_custom_container,
            picture_control   TYPE REF TO cl_gui_picture.

            DATA :l_img_subtype TYPE w3paramcont_type.
            DATAl_img_url     TYPE w3url.

            *PARAMETERS: p_code(11) TYPE c OBLIGATORY DEFAULT ‘1381852’.
            *PARAMETERS: p_user(20) TYPE c .

            START-OF-SELECTION .

            *  CONCATENATE ‘mobileCode=’ p_code ‘&userID=’ p_user INTO post_string.
            *  len = STRLEN( post_string ) .
            *  len_str = len .

            CALL METHOD cl_http_client=>create
            EXPORTING
            host          ‘www.makepic.com’
            service       ’80’
            scheme        ‘1’
            proxy_host    proxy_host
            proxy_service proxy_port
            IMPORTING
            client        http_client.

            http_client->propertytype_logon_popup http_client->co_enabled .

            *  CALL METHOD http_client->authenticate
            *    EXPORTING
            *      proxy_authentication = ‘X’
            *      username             = proxy_user
            *      password             = proxy_pass.

            CALL METHOD http_client->request->set_header_field
            EXPORTING
            name  ‘~request_method’
            value ‘POST’.

            *  CALL METHOD http_client->request->set_header_field
            *    EXPORTING
            *      name  = ‘~server_protocol’
            *      value = ‘HTTP/1.1’.

            CALL METHOD http_client->request->set_header_field
            EXPORTING
            name  ‘data’
            value ‘testforQRCode’.

            CALL METHOD http_client->request->set_header_field
            EXPORTING
            name  ‘level’
            value ‘M’.

            CALL METHOD http_client->request->set_header_field
            EXPORTING
            name  ‘size’
            value ‘6’.

            CALL METHOD http_client->request->set_cdata
            EXPORTING
            data   post_string
            offset 0
            length len.

            CALL METHOD http_client->send
            EXCEPTIONS
            http_communication_failure 1
            http_invalid_state         2.

            CALL METHOD http_client->receive
            EXCEPTIONS
            http_communication_failure 1
            http_invalid_state         2
            http_processing_failed     3.

            return_str http_client->response->get_cdata).
            content http_client->response->get_cdata).

            CALL METHOD http_client->close.

            WRITE return_str.

            l_str_length xstrlencontent ).
            *   l_str_length = strlen( return_str ).

            CALL FUNCTION ‘RSFO_XSTRING_TO_MIME’
            EXPORTING
            c_xstring content
            i_length  l_str_length
            TABLES
            c_t_mime  mime.

            CREATE OBJECT i_igs_image_converter .

            i_igs_image_converter->input ‘image/png’.
            i_igs_image_converter->output ‘image/bmp’.
            i_igs_image_converter->width 200.
            i_igs_image_converter->height 200.

            CALL METHOD i_igs_image_converter->set_image
            EXPORTING
            blob      mime
            blob_size l_content_length.

            CALL METHOD i_igs_image_converter->execute
            EXCEPTIONS
            communication_error 1
            internal_error      2
            external_error      3
            OTHERS              4.

            IF sysubrc 0.

            CALL METHOD i_igs_image_converter->get_image
            IMPORTING
            blob      blob
            blob_size blob_size
            blob_type blob_type.

            ENDIF.

            CALL SCREEN ‘9000’.  “Calling the screen for qrcode display
            *&———————————————————————*
            *&      Module  STATUS_9000  OUTPUT
            *&———————————————————————*
            *       text
            *———————————————————————-*

            MODULE status_9000 OUTPUT.

            SET PF-STATUS ‘PF’.

            “Creating the object for the container

            CREATE OBJECT picture_container
            EXPORTING
            container_name ‘PICTURECONTROL’.
            CREATE OBJECT picture_control
            EXPORTING
            parent picture_container.

            “Calling the screen

            PERFORM call_screen.

            ENDMODULE.                 ” STATUS_9000  OUTPUT

            *&———————————————————————*
            *&      Form  CALL_SCREEN
            *&———————————————————————*
            *       text
            *———————————————————————-*
            *  –>  p1        text
            *  <–  p2        text
            *———————————————————————-*

            FORM call_screen .

            “Creating the url of the image for the display in the container in the screen
            SPLIT blob_type AT ‘/’ INTO blob_type l_img_subtype.

            CALL FUNCTION ‘DP_CREATE_URL’
            EXPORTING
            type     blob_type
            subtype  l_img_subtype
            size     blob_size
            lifetime cndp_lifetime_transaction
            TABLES
            data     blob
            CHANGING
            url      l_img_url
            EXCEPTIONS
            OTHERS   1.

            IF sysubrc IS INITIAL.
            CALL METHOD picture_control->load_picture_from_url
            EXPORTING
            url l_img_url.
            ENDIF.

            ENDFORM.                    ” CALL_SCREEN

            *&———————————————————————*
            *&      Module  USER_COMMAND_9000  INPUT
            *&———————————————————————*
            *       text
            *———————————————————————-*
            MODULE user_command_9000 INPUT.

            IF syucomm ‘BACK’.

            LEAVE TO SCREEN 0.

            ENDIF.

            ENDMODULE.                 ” USER_COMMAND_9000  INPUT



            我获得的是string类型的返回值。
            這个是html格式的把
            需要解析出来?