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

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

  • 1、业务背景
  • 2、实现效果
  • 3、开发代码
    • 3.1、拼接html
    • 3.2、显示html
    • 3.3、ALV导出Excel

1、业务背景

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

2、实现效果

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

ALV列表:
在这里插入图片描述
双击行详情:
在这里插入图片描述
超链接支持右键下载:
在这里插入图片描述

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_tablestypes: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_rowp_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'IMPORTINGev_html = lv_html_strTABLESit_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'EXPORTINGFILENAME                 =  'C:\hello.html'TABLESDATA_TAB                 = T_HTMLEXCEPTIONSFILE_WRITE_ERROR         =  1NO_BATCH                 =  2GUI_REFUSE_FILETRANSFER  =  3INVALID_TYPE             =  4NO_AUTHORITY             =  5UNKNOWN_ERROR            =  6HEADER_NOT_ALLOWED       =  7SEPARATOR_NOT_ALLOWED    =  8FILESIZE_NOT_ALLOWED     =  9HEADER_TOO_LONG          =  10DP_ERROR_CREATE          =  11DP_ERROR_SEND            =  12DP_ERROR_WRITE           =  13UNKNOWN_DP_ERROR         =  14ACCESS_DENIED            =  15DP_OUT_OF_MEMORY         =  16DISK_FULL                =  17DP_TIMEOUT               =  18FILE_NOT_FOUND           =  19DATAPROVIDER_EXCEPTION   =  20CONTROL_FLUSH_ERROR      =  21OTHERS                   =  22 .IF SY -SUBRC <>  0 .MESSAGE  ID SY -MSGID  TYPE SY -MSGTY  NUMBER SY -MSGNOWITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .ENDIF .CALL  FUNCTION  'GUI_RUN'EXPORTINGCOMMAND  =  '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(EXPORTINGio_alv        = gr_tableit_table      = lt_vbak_po[]i_row_int     = 1i_column_int  = 1).CATCH zcx_excel.ENDTRY."选择文件保存路径TRY.DATA:filepath TYPE string VALUE 'D:'.cl_gui_frontend_services=>directory_browse(EXPORTINGwindow_title         = 'Select path to download EXCEL-file'initial_folder       = filepathCHANGINGselected_folder      = filepathEXCEPTIONScntl_error           = 1error_no_gui         = 2not_supported_by_gui = 3OTHERS               = 4).ENDTRY.CHECK sy-subrc IS INITIAL AND filepath IS NOT INITIAL."调用write_file方法导出excello_converter->write_file( i_path = |{ filepath && '\' }销售订单生产备注-{ sy-datum }.xlsx| ).ENDFORM.

原创文章,转载请注明来源-X档案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/13237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7安装jenkins

一、安装相关依赖 sudo yum install -y wget sudo yum install -y fontconfig java-11-openjdk二、安装Jenkins 可以查看官网的安装方式 安装官网步骤 先导入jenkins yum 源 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo…

索引的数据结构

索引的数据结构 部分资料来自B站尚硅谷-宋红康老师 1. 为什么使用索引 使用索引是为了加快数据库的查询速度和提高数据库的性能。索引是数据库表中的一种数据结构&#xff0c;它可以帮助数据库快速定位并检索所需的数据。 当数据库表中的数据量较大时&#xff0c;如果没有索…

ELK + Fliebeat + Kafka日志系统

参考&#xff1a; ELKFilebeatKafka分布式日志管理平台搭建_51CTO博客_elk 搭建 ELK 日志分析系统概述及部署&#xff08;上&#xff09;-阿里云开发者社区 ELK是三个开源软件的缩写&#xff0c;分别表示&#xff1a;Elasticsearch , Logstash, Kibana , 它们都是开源软件。…

Verilog语法学习——LV6_多功能数据处理器

LV6_多功能数据处理器 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 描述 根据指示信号select的不同&#xff0c;对输入信号a,b实现不同的运算。输入信号a…

解决使用@Field注解配置分词器失效问题(Spring Data Elasticsearch)

问题复现&#xff1a;插入数据时&#xff0c;实体类配置的Field注解没有生效 实体类&#xff1a; package cn.aopmin.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.Id; import…

浅谈深度神经网络

Deep neural networks are completely flexible by design, and there really are no fixed rules when it comes to model architecture. -- David Foster 前言 神经网络 (neural network) 受到人脑的启发&#xff0c;可模仿生物神经元相互传递信号。神经网络就是由神经元组成…

docker配置文件挂载(容器数据管理)

目录 数据卷&#xff08;容器数据管理&#xff09;什么是数据卷数据集操作命令创建和查看数据卷挂载数据卷案例案例-给nginx挂载数据卷案例-给MySQL挂载本地目录 总结 数据卷&#xff08;容器数据管理&#xff09; 在之前的nginx案例中&#xff0c;修改nginx的html页面时&#…

如何利用Requestly提升前端开发与测试的效率

痛点 B站最牛的Python接口自动化测试进阶教程合集&#xff08;真实企业项目实战&#xff09; 前端测试 在进行前端页面开发或者测试的时候&#xff0c;我们会遇到这一类场景&#xff1a; 在开发阶段&#xff0c;前端想通过调用真实的接口返回响应在开发或者生产阶段需要验证前…

热备盘激活失败导致raid5阵列崩溃的服务器数据恢复案例

服务器数据恢复环境&#xff1a; 一台Linux Redhat操作系统服务器上有一组由5块硬盘组建的raid5阵列&#xff0c;包含一块热备盘。上层部署一个OA系统和Oracle数据库。 服务器故障&#xff1a; raid5阵列中的1块磁盘离线&#xff0c;硬盘离线却没有激活热备盘&#xff0c;直到…

IntelliJ IDEA 2023.2 主要更新了什么?(图文版)

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Spring 6【数据校验Validation、JSR 303 和 Hibernate 实现】(十三)-全面详解(学习总结---从入门到深化)

目录 数据校验Validation 2.JSR 303 和 Hibernate 实现 数据校验Validation 1.数据校验介绍 数据校验分为客户端数据校验和服务端数据校验。都是为了保证数据完整性的。 客户端数据校验直接使用客户端脚本校验即可。例如在B/S模型项目中&#xff0c;可以选择使用JavaScript…

CS144学习笔记(1):Internet and IP

1.网络应用 网络应用可以在世界范围内交换数据&#xff0c;例如你可以通过浏览器读取出版社服务器提供的文章。网络应用的基本模型&#xff1a;两台主机各自在本地运行一个程序&#xff0c;程序通过网络来通信。 最常用的通信模型使用双向可靠字节流&#xff0c;通信的两台主机…

实战:Docker+Jenkins+Gitee构建CICD流水线

文章目录 前言Jenkins部署创建Jenkins docker-compose配置maven源启动Jenkins容器安装插件Gitee ssh公匙配置与测试项目提交 Jenkins创建流水线写在最后 前言 持续集成和持续交付一直是当下流行的开发运维方式&#xff0c;CICD省去了大量的运维时间&#xff0c;也能够提高开发…

ElasticSearch基本使用--ElasticSearch文章一

文章目录 官网学习必要性elasticsearch/kibana安装版本数据结构说明7.x版本说明ElasticSearch kibana工具测试后续我们会一起分析 官网 https://www.elastic.co/cn/ 学习必要性 1、在当前软件行业中&#xff0c;搜索是一个软件系统或平台的基本功能&#xff0c; 学习Elastic…

Git克隆文件不显示绿色勾、红色感叹号等图标

1、问题 Git和TorToiseGit安装后&#xff0c;Git克隆的文件不会显示绿色勾、红色感叹号等图标。 2、检查注册表 2.1、打开注册表 (1)WinR打开运行窗口&#xff0c;输入regedit&#xff0c;点击确定&#xff0c;打开注册表编辑器。 2.2、找如下路径 (1)找到路径 计算机\HKEY_…

VBA技术资料MF34:检查Excel自动筛选是否打开

【分享成果&#xff0c;随喜正能量】聪明人&#xff0c;抬人不抬杠&#xff1b;傻子&#xff0c;抬杠不抬人。聪明人&#xff0c;把别人抬得很高&#xff0c;别人高兴、舒服了&#xff0c;看你顺眼了&#xff0c;自然就愿意帮你&#xff01;而傻人呢&#xff1f;不分青红皂白&a…

Golang之路---01 Golang的安装与配置

Golang之路—01 Golang语言安装与配置 官网上下载Windows环境下的安装包 官网下载地址 双击下载后的文件进行安装&#xff0c;可根据需要自定义选择解压后的文件位置。 接着新创建一个文件夹&#xff0c;保存Golang语言项目。 在里面新建bin,pkg,src三个文件夹。 环境变量…

Verilog语法学习——LV4_移位运算与乘法

LV4_移位运算与乘法 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述&#xff1a; 已知d为一个8位数&#xff0c;请在每个时钟周期分别输出该数乘1/…

Linux:Linux的发展史和作用有哪些?

文章目录 Linux是什么&#xff1f;Linux的开源特征为什么要学习Linux&#xff1f;Linux的应用场景有哪些&#xff1f; Linux是什么&#xff1f; 简单来说&#xff0c;Linux就是操作系统&#xff0c;它和Windows等软件一样&#xff0c;都只是操作系统&#xff0c;并无区别 Linu…

电脑选睡眠、休眠还是关机?

关机 这是大家最熟悉的。关机时&#xff0c;系统首先关闭所有运行中的程序&#xff0c;然后关闭系统后台服务。随后&#xff0c;系统向主板请求关机&#xff0c;主板断开电源的供电使能&#xff0c;让电源切断对绝大多数设备的供电&#xff08;只剩一些内部零件仍会维持电源供应…