ABAPA實現二維碼打印

以前做的二維碼要麼是在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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章