Skip to Content
Author's profile photo Jerry Wang

用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用途,没有加对应的出错处理)

 

Assigned tags

      14 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo 建华 周
      建华 周

      where download zcl_http_tool .
       

      Author's profile photo Jerry Wang
      Jerry Wang
      Blog Post Author

      It seems that after community transfers to this new platform, attachment of this blog is lost 🙁

      Author's profile photo 建华 周
      建华 周

      Could you send it to me?
      my emil address is  jianhua.zhou@hand-china.com
      or give me url download?
      thank you very much.

      Author's profile photo Jerry Wang
      Jerry Wang
      Blog Post Author

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

      Author's profile photo 建华 周
      建华 周

      i042416这是你工号吧,你在lab工作的吗?找不到就算了,我自己看下。zcl_http_tool 你封装了那个类啊。 cl_http_client吗?

      Author's profile photo 建华 周
      建华 周

      cl_http_client是封装了這个类吗?你在sap lab工作的吗?

      Author's profile photo Jerry Wang
      Jerry Wang
      Blog Post Author

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

      Author's profile photo 建华 周
      建华 周

      我自己弄下试试。谢谢了,我之前也在上海
      lbas工作过,好地方啊。可惜在也回去了吧。

      Author's profile photo Jerry Wang
      Jerry Wang
      Blog Post Author

      这么巧,我07年的时候认识上海BYD output management部门的Zhou, Andy. 看你的名字,难道你就是Andy?

      Author's profile photo 建华 周
      建华 周

      不是,我是c-user就干了一段时间而已。不提也罢。

      Author's profile photo 建华 周
      建华 周

      XML 可以转 DOM 处理,這个htlm也可以吗?

      Author's profile photo 建华 周
      建华 周


      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 w3param-cont_len,
      blob_type TYPE w3param-cont_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 w3param-cont_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 sy-subrc 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 sy-subrc 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 sy-ucomm 'BACK'.

      LEAVE TO SCREEN 0.

      ENDIF.

      ENDMODULE.                 " USER_COMMAND_9000  INPUT



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

      Author's profile photo 建华 周
      建华 周

      已经搞出来了

      Author's profile photo Former Member
      Former Member

      请问下,你研究出来的项目代码还在吗?能分享一份吗?邮箱 282407805@qq.com