ABAPA实现二维码打印

7 篇文章 1 订阅

以前做的二维码要么是在SMARTFORM里面打印,要SE73设置条码格式;要么是调用第三方生成二维码字符串(比如微信收款二维码),今天接到需求是在SAP屏幕上显示二维码供通银联POS机扫码收款。

通过http+js实现

主要代码是:
    

显示二维码的屏幕:

CALL SCREEN 9001 STARTING AT 20 5 ENDING AT 50 15. 

在屏幕PBO:

  PERFORM frm_genearte_html.

  PERFORM frm_html_container.

*&---------------------------------------------------------------------*
*&      Form  FRM_GENEARTE_HTML
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_genearte_html .
  CLEAR:e_data.
  FREE ts_data.


gv_qrcode = '{\"BUSINESS_ID\":\"100100003\",\"AMOUNT\": \"000000000001\",\"ORDER_NO\": \"23456783456\"}'.


  "CONCATENATE '<html><head> Dear:' sy-uname INTO e_data-dataset SEPARATED BY space.

*  e_data-dataset = '<html><head>'.
*  APPEND e_data TO ts_data.
*
*  e_data-dataset = '</head><body><meta http-equiv="Content-Type" content="text/html; charset=gb2312" />'.
  e_data-dataset = '<html><body><meta http-equiv="Content-Type" content="text/html; charset=gb2312" />'.
  APPEND e_data TO ts_data.
  e_data-dataset = '<style type="text/css">'.
  APPEND e_data TO ts_data.
  e_data-dataset = '.div-c{ width:200px; margin:0px;line-hight:10px;}'.
  APPEND e_data TO ts_data.
  e_data-dataset = '.div-a{ float:left;  width:50px; border:1px solid #999; height:60px;margin:20px;line-hight:10px;}'.
  APPEND e_data TO ts_data.
  e_data-dataset = '.div-b{ float:right; width:120px; border:1px solid #999; height:60px;margin:20px;line-hight:10px;}'.
  APPEND e_data TO ts_data.
  e_data-dataset = '</style>'.
  APPEND e_data TO ts_data.
  "e_data-dataset = '<br><span style="font-size:500px">字体</span></br>'.  append e_data to ts_data.

  e_data-dataset = '<br><h3>收款金额:' && gv_amount && '元'.
  APPEND e_data TO ts_data.

  e_data-dataset = '<script type="text/javascript" src="http://static.hdslb.com/js/jquery.min.js""></script>'.
  APPEND e_data TO ts_data.
  e_data-dataset = '<script type="text/javascript" src="http://static.hdslb.com/js/jquery.qrcode.min.js"></script>'.
  APPEND e_data TO ts_data.
  e_data-dataset = '<div id="code"></div>'.
  APPEND e_data TO ts_data.
  "unicode中文 由UTF-16转换为UTF-8
  e_data-dataset = '<script type="text/javascript">'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'function utf16to8(str) {'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'var out, i, len, c;'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'out = "";'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'len = str.length;'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'for(i = 0; i < len; i++) {'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'c = str.charCodeAt(i);'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'if ((c >= 0x0001) && (c <= 0x007F)) {'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'out += str.charAt(i);'.
  APPEND e_data TO ts_data.
  e_data-dataset = '} else if (c > 0x07FF) {'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));'.
  APPEND e_data TO ts_data.
  e_data-dataset = '} else {'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));'.
  APPEND e_data TO ts_data.
  e_data-dataset = '}'.
  APPEND e_data TO ts_data.
  e_data-dataset = '}'.
  APPEND e_data TO ts_data.
  e_data-dataset = 'return out;'.
  APPEND e_data TO ts_data.
  e_data-dataset = '}'.
  APPEND e_data TO ts_data.
  e_data-dataset = '</script>'.
  APPEND e_data TO ts_data.

  e_data-dataset = '<script>$("#code").qrcode({ '.
  APPEND e_data TO ts_data.
  e_data-dataset = '    render: "table", '.
  APPEND e_data TO ts_data.
  e_data-dataset = '    width: 150, '.
  APPEND e_data TO ts_data.
  e_data-dataset = '    height:150, '.
  APPEND e_data TO ts_data.
  CONCATENATE '    text: utf16to8("' gv_qrcode '") ' INTO e_data-dataset.
  APPEND e_data TO ts_data.
  e_data-dataset = '}); </script>'.
  APPEND e_data TO ts_data.

  e_data-dataset = '</h3><br>'.
  APPEND e_data TO ts_data.

  e_data-dataset = '</body></html>'.
  APPEND e_data TO ts_data.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_HTML_CONTAINER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_html_container .

  IF NOT ref_html IS INITIAL.

    CLEAR:w_url.

  ENDIF.

  IF ref_cont IS INITIAL.
    CREATE OBJECT ref_cont
      EXPORTING
        container_name              = 'HTMLCONT'
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.
    IF sy-subrc <> 0.
    ENDIF.
  ENDIF.

  IF ref_html IS INITIAL.

    ui_flag = cl_gui_html_viewer=>uiflag_no3dborder.

    CREATE OBJECT ref_html
      EXPORTING
        parent             = ref_cont
        saphtmlp           = 'X'
        uiflag             = ui_flag
        lifetime           = cl_gui_html_viewer=>lifetime_dynpro
      EXCEPTIONS
        cntl_error         = 1
        cntl_install_error = 2
        dp_install_error   = 3
        dp_error           = 4
        OTHERS             = 5.
    IF sy-subrc <> 0.
    ENDIF.


    myevent-eventid = ref_html->m_id_sapevent.
    myevent-appl_event = 'X'.
    APPEND myevent TO myevent_tab.
    CALL METHOD ref_html->set_registered_events
      EXPORTING
        events = myevent_tab.

    "CREATE OBJECT evt_receiver.

    "SET HANDLER evt_receiver->on_sapevent FOR ref_html.

  ENDIF.

  CALL METHOD ref_html->load_data
    EXPORTING
      type                 = 'text'
      subtype              = 'html'
    IMPORTING
      assigned_url         = w_url
    CHANGING
      data_table           = ts_data
    EXCEPTIONS
      dp_invalid_parameter = 1
      dp_error_general     = 2
      cntl_error           = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
  ENDIF.

  CALL METHOD ref_html->show_url
    EXPORTING
      url                    = w_url
    EXCEPTIONS
      cntl_error             = 1
      cnht_error_not_allowed = 2
      cnht_error_parameter   = 3
      dp_error_general       = 4
      OTHERS                 = 5.
  IF sy-subrc <> 0.
  ENDIF.

ENDFORM.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值