Skip to Content

除了使用这篇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的代码见附件(因为用于demo用途,没有加对应的出错处理)

 

To report this post you need to login first.

14 Comments

You must be Logged on to comment or reply to a post.

        1. Jerry Wang Post author

          我在我们N多个internal系统里找了半天也没找到,不知道是被谁删了,还是我忘了在哪个系统创建了。。。我部分ABAP 代码放在这里的,但是没找到: https://github.com/i042416/jerryslide/tree/master/ABAP

          (0) 
            1. Jerry Wang Post author

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

              (0) 
              1. 建华 周


                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格式的把
                需要解析出来?

                (0) 

Leave a Reply