【SAP Abap】记录一次SAP长文本内容通过Web页面完整显示的应用

这篇具有很好参考价值的文章主要介绍了【SAP Abap】记录一次SAP长文本内容通过Web页面完整显示的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、业务背景

业务在销售订单中,通过长文本描述,记录了一些生产备注信息,如生产标准、客户要求等等。要求开发一个报表,能够方便查看和导出长文本信息。

2、实现效果

由于ALV列表长文本显示不友好,且长度有限制,仅能显示128位,故考虑双击展示长文本详细内容,最终实现效果如下:

ALV列表:
【SAP Abap】记录一次SAP长文本内容通过Web页面完整显示的应用,SAP Abap,Web,前端,开发语言
双击行详情:
【SAP Abap】记录一次SAP长文本内容通过Web页面完整显示的应用,SAP Abap,Web,前端,开发语言
超链接支持右键下载:
【SAP Abap】记录一次SAP长文本内容通过Web页面完整显示的应用,SAP Abap,Web,前端,开发语言

3、开发代码

3.1、拼接html

FUNCTION zmmfm056h.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  EXPORTING
*"     REFERENCE(EV_HTML) TYPE  STRING
*"  TABLES
*"      IT_DATA STRUCTURE  ZSMM114
*"----------------------------------------------------------------------

  "说明:Web页面调试工具:https://www.runoob.com/try/try.php?filename=tryhtml_tables
  types:begin of ty_str,
    str(1000),
    END OF ty_str.
  TYPES: BEGIN OF ty_url,
           name TYPE string,
           url  TYPE string,
         END OF ty_url.

  DATA: lt_str TYPE TABLE OF ty_str,
        lt_url TYPE TABLE OF ty_url WITH HEADER LINE.

  IF it_data[] IS INITIAL.
    ev_html = |<!DOCTYPE html><html><head><title>abap show html</title></head><body><p>请输入要展示的数据</p></body></html>|.
    RETURN.
  ENDIF.

  SORT it_data[] BY vbeln posnr.

  ev_html = |<!DOCTYPE html><html><head><title>明细数据</title></head><body link="#0563C1" vlink="#954F72" style="word-wrap:break-word">|
         && |<h1 style="text-align:center;">销售订单生产备注信息</h1>|
         && |<h4 style="text-align:center;">导出人:{ sy-uname }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;导出日期:{ sy-datum }</h4>|.

  LOOP AT it_data[] ASSIGNING FIELD-SYMBOL(<fs_data>).
    AT NEW vbeln.
      ev_html = ev_html
             && |<h3 style="text-align:left;">序号:{ sy-index }</h3>|
             && |<table border=1 width=800 style='border-collapse:collapse;table-layout:fixed;'>|
             && | <tr style='font-family:arial;color:black;font-weight:bold;font-size:16px;text-align:center'>|
             && |  <td width=160>计划编号</td><td width=160>客户参考</td><td width=160>CRM下单人员</td><td width=160>销售订单类型</td><td width=160>销售订单号</td></tr>|
             && | <tr style='text-align:center'><td>{ <fs_data>-bstkd_e }</td><td>{ <fs_data>-bstnk }</td>|
             && |  <td>{ <fs_data>-zzxdry }</td><td>{ <fs_data>-auart }</td><td>{ <fs_data>-vbeln }</td></tr>|
             && | <tr><td style='font-family:arial;color:black;font-weight:bold;font-size:16px;text-align:center'>抬头生产备注</td><td colspan=4>{ <fs_data>-zscbz1 }</td></tr>|
             && | <tr><td style='font-family:arial;color:black;font-weight:bold;font-size:16px;text-align:center'>环保技术要求</td><td colspan=4>{ <fs_data>-zhbjsyq }</td></tr>|
             .
            
      IF <fs_data>-zfiles IS INITIAL.
        ev_html = ev_html && | <tr><td style='font-family:arial;color:black;font-weight:bold;font-size:17px;text-align:center'>附件名称及链接</td>|
                          && | <td colspan=4>[无附件]</td></tr>|.
      ELSE.
        SPLIT <fs_data>-zfiles AT '||' INTO TABLE lt_str.
        IF lt_str[] IS INITIAL.
          ev_html = ev_html && | <tr><td style='font-family:arial;color:black;font-weight:bold;font-size:17px;text-align:center'>附件名称及链接</td>|
                             && | <td colspan=4>{ <fs_data>-zfiles }</td></tr>|.
        ELSE.
          ev_html = ev_html && | <tr><td rowspan={ lines( lt_str[] ) } style='font-family:arial;color:black;font-weight:bold;font-size:17px;text-align:center'>附件名称及链接</td>|.
          LOOP AT lt_str ASSIGNING FIELD-SYMBOL(<fs_str>).
            split <fs_str>-str at '|' into data(lstr1) DATA(lstr2).
            AT FIRST.
              ev_html = ev_html
                    && | <td colspan=4><a href="{ lstr2 }" target="_blank" rel="noopener noreferrer">{ lstr1 }</a></td></tr>|.
              CONTINUE.
            ENDAT.
            ev_html = ev_html
                  && | <tr><td colspan=4><a href="{ lstr2 }" target="_blank" rel="noopener noreferrer">{ lstr1 }</a></td></tr>|.
          ENDLOOP.
        ENDIF.
      ENDIF.
      ev_html = ev_html && | </table>|.
    ENDAT.
    SHIFT <fs_data>-posnr LEFT DELETING LEADING '0'.
    ev_html = ev_html
           && |<table border=1 width=800 style='border-collapse:collapse;table-layout:fixed;'>|
           && | <tr style='font-family:arial;color:black;font-weight:bold;font-size:16px;text-align:center'>|
           && |  <td rowspan=5 width=60>{ <fs_data>-posnr }</td><td width=130>是否按单</td><td width=115>物料号</td><td width=160>物料描述</td>|
           && | <td width=70>订单数量</td><td width=70>销售单位</td><td width=70>生产工厂</td><td width=120>供应链转储订单</td></tr>|
           && | <tr style='text-align:center'><td>{ <fs_data>-ismto }</td><td>{ <fs_data>-matnr ALPHA = out }</td><td>{ <fs_data>-arktx }</td>|
           && | <td>{ <fs_data>-kwmeng }</td><td>{ <fs_data>-vrkme }</td><td>{ <fs_data>-reswk }</td><td>{ <fs_data>-ebeln }</td></tr>|
           && | <tr><td style='font-family:arial;color:black;font-weight:bold;font-size:16px;text-align:center'>物料长文本</td><td colspan=6>{ <fs_data>-ltext }</td></tr>|
           && | <tr><td style='font-family:arial;color:black;font-weight:bold;font-size:16px;text-align:center'>行项目生产备注</td><td colspan=6>{ <fs_data>-zscbz2 }</td></tr>|
           && | <tr><td style='font-family:arial;color:black;font-weight:bold;font-size:16px;text-align:center'>客户标准号</td><td colspan=6>{ <fs_data>-zkhbzh }</td></tr>|
           && |</table>|.

  ENDLOOP.

  ev_html = ev_html && |</body></html>|.

ENDFUNCTION.

3.2、显示html

(1)方式一:ABAP对话框显示html(本例使用,查看不用授权)

FORM frm_double_click  USING    p_row TYPE salv_de_row
                                p_column TYPE salv_de_column.
  DATA: lt_data TYPE TABLE OF zsmm114 WITH HEADER LINE.

  READ TABLE gt_vbak_po INTO DATA(ls_wa) INDEX p_row."读当前行
  CLEAR: lt_data,lt_data[].
  IF p_column EQ 'VBELN'.   "按订单查询
    LOOP AT gt_vbak_po ASSIGNING FIELD-SYMBOL(<fs_vbak>) WHERE vbeln = ls_wa-vbeln.
      lt_data = CORRESPONDING #( <fs_vbak> ).
      APPEND lt_data.
      CLEAR lt_data.
    ENDLOOP.
  ELSE.                     "按订单行查询
    lt_data = CORRESPONDING #( ls_wa ).
    APPEND lt_data.
    CLEAR lt_data.
  ENDIF.

  CHECK lt_data[] IS NOT INITIAL.
  DATA: lv_html_str TYPE string.
  CALL FUNCTION 'ZMMFM056H'
    IMPORTING
      ev_html = lv_html_str
    TABLES
      it_data = lt_data[].

  "lv_html_str = |<!DOCTYPE html><html><head><title>abap show html</title></head><body><p>Hello  world </p></body></html>|.
  cl_abap_browser=>show_html( html_string = lv_html_str context_menu = 'X' printing = 'X' title = '销售订单生产备注信息').
  
ENDFORM.

(2)方法二:调用外部浏览器显示html
需要先下载,再访问,保存文件的时候需要授权。

   CALL  FUNCTION  'GUI_DOWNLOAD'
     EXPORTING
      FILENAME                 =  'C:\hello.html'
     TABLES
      DATA_TAB                 = T_HTML
     EXCEPTIONS
      FILE_WRITE_ERROR         =  1
      NO_BATCH                 =  2
      GUI_REFUSE_FILETRANSFER  =  3
      INVALID_TYPE             =  4
      NO_AUTHORITY             =  5
      UNKNOWN_ERROR            =  6
      HEADER_NOT_ALLOWED       =  7
      SEPARATOR_NOT_ALLOWED    =  8
      FILESIZE_NOT_ALLOWED     =  9
      HEADER_TOO_LONG          =  10
      DP_ERROR_CREATE          =  11
      DP_ERROR_SEND            =  12
      DP_ERROR_WRITE           =  13
      UNKNOWN_DP_ERROR         =  14
      ACCESS_DENIED            =  15
      DP_OUT_OF_MEMORY         =  16
      DISK_FULL                =  17
      DP_TIMEOUT               =  18
      FILE_NOT_FOUND           =  19
      DATAPROVIDER_EXCEPTION   =  20
      CONTROL_FLUSH_ERROR      =  21
       OTHERS                   =  22 .
   IF SY -SUBRC <>  0 .
     MESSAGE  ID SY -MSGID  TYPE SY -MSGTY  NUMBER SY -MSGNO
     WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
   ENDIF .
 
   CALL  FUNCTION  'GUI_RUN'
     EXPORTING
      COMMAND  =  'C:\hello.html'
*     PARAMETER        =
*     CD      =
*   IMPORTING
*     RETURNCODE       =

3.3、ALV导出Excel

FORM frm_export_xls.
  DATA: lt_vbak_po LIKE gt_vbak_po.
  CLEAR: lt_vbak_po, lt_vbak_po[].
  lt_vbak_po[] = CORRESPONDING #( gt_vbak_po[] ).
  LOOP AT lt_vbak_po[] ASSIGNING FIELD-SYMBOL(<fs_lt_po>).
    REPLACE ALL OCCURRENCES OF '||' IN <fs_lt_po>-zfiles WITH cl_abap_char_utilities=>cr_lf.
  ENDLOOP.

  DATA: lo_converter TYPE REF TO zcl_excel_converter.
  "创建zcl_excel_converter类
  CREATE OBJECT lo_converter.
  TRY .
      lo_converter->convert(
        EXPORTING
          io_alv        = gr_table
          it_table      = lt_vbak_po[]
          i_row_int     = 1
          i_column_int  = 1
          ).
    CATCH zcx_excel.
  ENDTRY.

  "选择文件保存路径
  TRY.
      DATA:filepath TYPE string VALUE 'D:'.
      cl_gui_frontend_services=>directory_browse(
          EXPORTING
            window_title         = 'Select path to download EXCEL-file'
            initial_folder       = filepath
          CHANGING
            selected_folder      = filepath
          EXCEPTIONS
            cntl_error           = 1
            error_no_gui         = 2
            not_supported_by_gui = 3
            OTHERS               = 4
        ).
  ENDTRY.
  CHECK sy-subrc IS INITIAL AND filepath IS NOT INITIAL.

  "调用write_file方法导出excel
  lo_converter->write_file( i_path = |{ filepath && '\' }销售订单生产备注-{ sy-datum }.xlsx| ).

ENDFORM.

4、小甜点

以下函数拿来即可用,支持单个或多个长文本内容的显示

FUNCTION zbcfm003.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IV_TITLE) TYPE  CHAR255
*"     REFERENCE(IV_CONTEXT_MENU) TYPE  XFELD OPTIONAL
*"     REFERENCE(IV_PRINTING) TYPE  XFELD OPTIONAL
*"  TABLES
*"      IT_DATA STRUCTURE  ZSBC009 OPTIONAL
*"----------------------------------------------------------------------

  DATA lv_html_str TYPE string.
  lv_html_str = |<!DOCTYPE html><html><head><meta charset="utf-8">|
             && |<title>{ iv_title }</title></head><body>|.

  IF it_data[] IS INITIAL.
    lv_html_str = |{ lv_html_str }<p>{ COND #( WHEN sy-langu EQ 1 THEN '空空如也' ELSE 'Nothing to display') }</p>|.
  ELSE.
    LOOP AT it_data[] ASSIGNING FIELD-SYMBOL(<fs_data>).
      IF <fs_data> IS INITIAL.
        CONTINUE.
      ENDIF.
      lv_html_str = |{ lv_html_str }{ COND #( WHEN <fs_data>-h1 IS NOT INITIAL THEN '<h1>' && <fs_data>-h1 && '</h1>' ELSE '' ) }|.
      lv_html_str = |{ lv_html_str }{ COND #( WHEN <fs_data>-h2 IS NOT INITIAL THEN '<h2>' && <fs_data>-h2 && '</h2>' ELSE '' ) }|.
      lv_html_str = |{ lv_html_str }{ COND #( WHEN <fs_data>-h3 IS NOT INITIAL THEN '<h3>' && <fs_data>-h3 && '</h3>' ELSE '' ) }|.
      lv_html_str = |{ lv_html_str }{ COND #( WHEN <fs_data>-h4 IS NOT INITIAL THEN '<h4>' && <fs_data>-h4 && '</h4>' ELSE '' ) }|.
      lv_html_str = |{ lv_html_str }{ COND #( WHEN <fs_data>-h5 IS NOT INITIAL THEN '<h5>' && <fs_data>-h5 && '</h5>' ELSE '' ) }|.
      lv_html_str = |{ lv_html_str }{ COND #( WHEN <fs_data>-h6 IS NOT INITIAL THEN '<h6>' && <fs_data>-h6 && '</h6>' ELSE '' ) }|.
      lv_html_str = |{ lv_html_str }{ COND #( WHEN <fs_data>-div IS NOT INITIAL THEN '<div>' && <fs_data>-div && '</div>' ELSE '' ) }|.
      lv_html_str = |{ lv_html_str }<div>&nbsp;</div>|.
    ENDLOOP.
  ENDIF.

  lv_html_str = |{ lv_html_str }</body></html>|.

  cl_abap_browser=>show_html( html_string = lv_html_str
                              context_menu = iv_context_menu
                              printing = iv_printing
                              title = iv_title ).

ENDFUNCTION.

展示效果如下图:
【SAP Abap】记录一次SAP长文本内容通过Web页面完整显示的应用,SAP Abap,Web,前端,开发语言
附入参结构
【SAP Abap】记录一次SAP长文本内容通过Web页面完整显示的应用,SAP Abap,Web,前端,开发语言

原创文章,转载请注明来源-X档案文章来源地址https://www.toymoban.com/news/detail-616108.html

到了这里,关于【SAP Abap】记录一次SAP长文本内容通过Web页面完整显示的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【PDFBox】PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档

    这篇文章,主要介绍PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档。 目录 一、PDFBox操作文本 1.1、读取所有页面文本内容 1.2、读取指定页面文本内容 1.3、写入文本内容 1.4、替换文本内容 (1)自定义PDTextStripper类 (2)创建Key

    2024年02月16日
    浏览(61)
  • SAP ABAP技术文章合集_微信公众号:ABAP猿

    序号 文章标题 01 ABAP OOALV-基本显示 02 ABAP OOALV-排序、过滤 03 ABAP OOALV-合计、小计 04 ABAP OOALV-选择模式、触发事件 05 ABAP OOALV-隐藏列、修改列标题、添加图标列、调整列位置 06 ABAP OOALV-固定列、鼠标悬停文本 07 ABAP OOALV-颜色(列、行、单元格) 08 ABAP OOALV-样式(列、行、单元格

    2024年02月03日
    浏览(47)
  • SAP ABAP 基础语法超详细

    1.表声明 当你声明了一个数据表的同时,系统也同时自动生成了一个和数据表同名的结构,结构的变量集等于数据表里面的字段。 2.定义变量 v1 是变量名。 (l) 是变量的长度。 t 是数据类型。 d 是小数位。 ‘xxx’ 是缺省值。 如:data num(10) type p decimals 3 value ‘1.12’. 数据

    2024年02月15日
    浏览(59)
  • SAP ABAP 用户状态锁定案例

    一、前言 项目需求是根据当天及前两天的离职员工信息(假设这是一个定时器任务每天下午5点执行程序,计算前两天的员工工号是为了将5点之后办理离职的员工工号找出来),将这些员工在用户表 USR02 中的锁定状态设置为 “64”,以保证离职员工无法继续使用系统账号。

    2024年02月15日
    浏览(42)
  • SAP,ABAP:ALV变式复制

    应用场景:程序优化,需要新开一个程序优化,优化完成后原程序ALV变式无法带到新的程序, ALV变式是很好用的功能 REPORT zbsc. 事务代码:ZBSC-ALV变式复制 程序名称:ZBSC-ALV变式复制 程序目的: ZBSC-ALV变式复制 开发人员: *(修改日志)----------------------------------------------------

    2024年02月09日
    浏览(43)
  • SAP ABAP ChatGPT 初体验 我会失业吗?

    简介: ChatGPT 最近很火,听说我可能要失业!就在今天我历经千辛万苦,终于把 ChatGPT 注册好了。话不多说,我先问两个 ABAP 开发问题压压惊。 : SAP ABAP ChatGPT OpenAI 失业 下面是我在 ChatGPT 的聊天截图, 我对这个回答满意度 90% ,此时我内心还不慌,虽然内容很完整逻

    2023年04月15日
    浏览(41)
  • sap abap,forms,smartforms 导出pdf

    4种方法: 1.安装pdf程序,Foxit Reader,先敲回车 自动带出,如下图: 直接打印就会弹出保存pdf文档路径,点保存。这种方式是最简单的,可 forms 和 smartforms 。 2. forms 和 smartforms 打印到spool 中,首先要设置个人参数文件  输出设备 ,默认输出设备LP01    。 T-CODE: SP02 或如下图

    2024年02月12日
    浏览(82)
  • SAP ABAP调用Http/Https方式实例

    注意: 1.url必须带\\\"http://\\\"或者“https://”。 2. http_client-propertytype_redirect = http_client-co_disabled .这一行是设置是否允许重定向,是为“co_enabled”,否为“co_disabled”。 3. 可能出现的错误 404 Hostname Unknow,是因为服务器未配置该url的dns 4. 可能出现的错误 401 refused,可能是被防火墙

    2024年02月07日
    浏览(55)
  • SAP ABAP增强 BADI的增强全解析

            BADI的全称是Business Add-in,它的主要技术是基于ABAP的对象来实现增强。SAP中BADI的维护事务代码是SE18和SE19,SE18主要是创建及维护BADI对象,而SE19用于维护BADI的实例,即如何来实现BADI对象的功能。         SAP的BADI因系统版本的差别可能会有不同,R/3中的BADI被称为Cl

    2023年04月23日
    浏览(36)
  • SAP ABAP中的数据类型 Data Types

    简单来说分两种: 数据字典里定义的 在ABAP程序里定义的 1.1 数字型的 用在数学计算里的,表达式里的,表序号里的。 Interger整数型 : INT1 : 1字节整数,0-255 (2的8次方-1) INT2 : 2字节整数,-32768-32767(2的15次方-1,有一位是符号位) INT4 : 4字节整数,-2147483648-2147483647(

    2024年02月03日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包