UI5与后端的文件交互(四)

文章目录

  • 前言
  • 一、后端开发
    • 1. 新建管理模板表格
    • 2. 新建Function,动态创建文档
  • 二、修改UI5项目
    • 1.Table里添加下载证明列
    • 2. 实现onClickDown事件
  • 三、测试
  • 四、附


前言

这系列文章详细记录在Fiori应用中如何在前端和后端之间使用文件进行交互。
这篇的主要内容有:

  1. 后端RAP的开发(S4HANA On-Premise)
    • 新建表格及CDS,管理模板文件
    • 新建Function(动态创建Excel文档并返回文件流)
  2. 前端(UI5)
    • 提交请求并下载文档(例:在职证明)

一、后端开发

1. 新建管理模板表格

@EndUserText.label : 'Form Template Table'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #ALLOWED
define table ymoon_t000 {key client   : abap.clnt not null;key uuid     : sysuuid_x16 not null;attachment   : abap.string(0);attachment_x : abap.rawstring(0);filename     : abap.char(200);erdat        : erdat;erzet        : erzet;}
  • 附上数据
    在这里插入图片描述

工作模式和之前里的内容是一样的。就是把文件流保存到表格里。 额外一点就是把XString类型的数据也一并保存。这里不再熬述

  • Method实现
  method upload_template."获取UI5传送的parameterdata(attachment) = keys[ 1 ]-%param-attachment.data(filename_full) = keys[ 1 ]-%param-filename."split filename_full at `.` into data(lv_filename) data(lv_filetype)."拆分数据,只保留excel内容 - lv_datasplit attachment at `;` into data(lv_dummy) data(lv_data).split lv_data at `,` into data(lv_format) lv_data.data:lv_excel_data type xstring."将base64的String转换为xstringcall function 'SCMS_BASE64_DECODE_STR'exportinginput  = lv_dataimportingoutput = lv_excel_dataexceptionsfailed = 1others = 2."更新模板文件data:ls_t000 type ymoon_t000.select single uuid from ymoon_t000 into @data(uuid_00) where filename = @filename_full.if uuid_00 is not initial.ls_t000-uuid = uuid_00.else.ls_t000-uuid = cl_system_uuid=>create_uuid_x16_static( ).endif.ls_t000-attachment = attachment.ls_t000-attachment_x = lv_excel_data.ls_t000-filename = filename_full.ls_t000-erdat = sy-datum.ls_t000-erzet = sy-uzeit.modify ymoon_t000 from ls_t000.endmethod.

2. 新建Function,动态创建文档

  • BEDF 添加Function
static function download_form parameter ymoon_s012 result [1] ymoon_s013;
  • Method实现(使用abap2xlsx插入数据并返回base64值)
  method download_form.types: begin of t_sheet1,name          type c length 60,bdate(200),id(20),sdate(200),position(100),salary(20),nyear(4),nmonth(2),nday(2),end of t_sheet1.data: gs_sheet1 type t_sheet1.data: ls_ymoon_s013 type ymoon_s013,ls_t000       type ymoon_t000.data: lo_excel  type ref to zcl_excel, "엑셀lo_reader type ref to zif_excel_reader,lo_root   type ref to cx_root. "异常类"excel worksheet类对象data:lo_worksheet type ref to zcl_excel_worksheet."excel超链接data:lo_hyperlink type ref to zcl_excel_hyperlink."style类data:lo_style type ref to zcl_excel_style."style的guiddata:lv_style_guid type zexcel_cell_style.data:lo_column    type ref to zcl_excel_column.data: lo_data type ref to zcl_excel_template_data.data:lv_line  type sy-tabix,lv_line2 type sy-tabix,lv_line3 type sy-tabix.data(uuid) = keys[ 1 ]-%param-uuid."动态获取内容select single name from ymoon_t010 into @data(lv_uname) where uuid = @uuid."测试数据gs_sheet1-name     = lv_uname.gs_sheet1-bdate    = '1990年1月1日'.gs_sheet1-id       = '11101019900101XXXX'.gs_sheet1-sdate    = '2020年10月20日'.gs_sheet1-position = '技术总监'.gs_sheet1-salary   = '20,000'.gs_sheet1-nyear    = sy-datum+0(4).gs_sheet1-nmonth   = sy-datum+4(2).gs_sheet1-nday     = sy-datum+6(2).select single attachment_x from ymoon_t000 into @data(lv_attachment_x).try.
* prepare datacreate object lo_data.lo_data->add( iv_sheet = 'Sheet1' iv_data = gs_sheet1 ).* create readercreate object lo_reader type zcl_excel_reader_2007.* load templatelo_excel = lo_reader->load( i_excel2007 = lv_attachment_x ).* merge data with templatelo_excel->fill_template( lo_data ).lo_worksheet = lo_excel->get_active_worksheet( ).*      lo_worksheet->set_cell( ip_column = 'C' ip_row = 4 ip_value = '테스트' ).
*lo_worksheet->calculate_column_widths( ).*** Create outputdata cl_writer type ref to zif_excel_writer.create object cl_writer type zcl_excel_writer_2007.data: xdata     type xstring,             " Will be used for sending as emailt_rawdata type solix_tab,           " Will be used for downloading or open directlybytecount type i.                   " Will be used for downloading or open directlyxdata = cl_writer->write_file( lo_excel ).data:lv_base64  type string.call function 'SCMS_BASE64_ENCODE_STR'exportinginput  = xdataimportingoutput = lv_base64.ls_ymoon_s013-attachment = lv_base64.ls_ymoon_s013-filename = '在职证明-' && lv_uname && '.xlsx'."返回base64append value #( %param = ls_ymoon_s013 ) to result .catch cx_root into lo_root.endtry.endmethod.

二、修改UI5项目

1.Table里添加下载证明列

<Button text="下载证明" press="onClickDown" type="Neutral"></Button>

2. 实现onClickDown事件

这里需要注意的是BDEF里定义的function是GET方法

onClickDown: function (e) {var that = thisvar oModel = this.getView().getModel();var uuid = e.getSource().getBindingContext().getProperty("Uuid");oModel.callFunction("/download_form",{method: "GET",urlParameters: {   //参数,首字母大写 "Uuid": uuid},success: function (odata, response) {//Model Refresh// debuggervar vContent = response.data.download_form;var file = vContent.Filename.split(".")var blob = that.base64toBlob(vContent.Attachment, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');File.save(blob, file[0], file[1], 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');},error: function (res) {console.log(res)}})},

三、测试

在这里插入图片描述

四、附

  • 此外,如果是OP的话,可以使用smw0管理模板文件。具体load方法可以参考如下代码。
//io_reader  type ref to zif_excel_reader
//ro_excel   type ref to zcl_excells_key-relid = 'MI'.ls_key-objid = iv_w3objid .  //对象名称" 读取SMW0文件call function 'WWWDATA_IMPORT'exportingkey    = ls_keytablesmime   = lt_mimeexceptionsothers = 1.if sy-subrc <> 0.lv_errormessage = 'A problem occured when reading the MIME object'(004).zcx_excel=>raise_text( lv_errormessage ).endif." 读取 filesize call function 'WWWPARAMS_READ'exportingrelid = ls_key-relidobjid = ls_key-objidname  = 'filesize'importingvalue = lv_filesizec.* XSTRING转换lv_filesize = lv_filesizec.call function 'SCMS_BINARY_TO_XSTRING'exportinginput_length = lv_filesizeimportingbuffer       = lv_excel_datatablesbinary_tab   = lt_mimeexceptionsfailed       = 1others       = 2.*--------------------------------------------------------------------*
* Parse Excel data into ZCL_EXCEL object from binary string
*--------------------------------------------------------------------*ro_excel = io_reader->load( i_excel2007 = lv_excel_data ).

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

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

相关文章

Unity 打包AB 场景烘培信息丢失

场景打包成 AB 资源的时候&#xff0c;Unity 不会打包一些自带相关的资源 解决办法&#xff1a;在 Project settings > Graphics下设置&#xff08;Automatic 修改成 Custom&#xff09;

selenium对于页面改变的定位元素处理办法

在学习selenimu中&#xff0c;总是发现元素定位不到&#xff0c;想了各种办法&#xff0c;最后总结大致有两个原因。 1.等待时间不够&#xff0c;页面还没有完全渲染就进行操作&#xff0c;使用time模块进行等待。 2.换了页面后&#xff0c;发现定位不到元素&#xff0c;因为…

HTML5和JS实现明媚月色效果

HTML5和JS实现明媚月色效果 先给出效果图&#xff1a; 源码如下&#xff1a; <!DOCTYPE html> <html> <head><title>明媚月光效果</title><style>body {margin: 0;overflow: hidden;background-color: #000; /* 添加一个深色背景以便看到…

安全与认证Week3

目录 Key Management 密钥管理 密钥交换、证书 密钥的类别 密钥管理方面 密钥分发问题 密钥分发方案 混合密钥分发 公钥分发 公钥证书 X.509 理解X.509 X.509证书包含 X.509使用过程 X.509身份验证服务 X.509版本3 取消 由X.509引申关于CA 用户认证、身份管理…

外延炉及其相关的小知识

外延炉是一种用于生产半导体材料的设备&#xff0c;其工作原理是在高温高压环境下将半导体材料沉积在衬底上。 硅外延生长&#xff0c;是在具有一定晶向的硅单晶衬底上&#xff0c;生长一层具有和衬底相同晶向的电阻率且厚度不同的晶格结构完整性好的晶体。 外延生长的特点&am…

Pycharm恢复默认设置

window 系统 找到下方目录-->删除. 再重新打开Pycharm C:\Users\Administrator\.PyCharm2023.3 你的不一定和我名称一样 只要是.PyCharm*因为版本不同后缀可能不一样 mac 系统 请根据需要删除下方目录 # Configuration rm -rf ~/Library/Preferences/PyCharm* # Caches …

LVGL的List控件的触摸按键和实体按键的处理

在LVGL的List控件使用过程中&#xff0c;虽然通过触摸按键选择item&#xff0c;但是有些场景需要实体按键选取item&#xff0c;但是LVGL 的V8.3中没有像Emwin那样有函数选择list item的函数。LVGL中List引入了Group的概念&#xff0c;把列表项都添加到同一个group中。然后通过更…

基于机器视觉的车牌检测-边缘检测因子的选择

车牌检测概述 车牌识别在检测报警、汽车出入登记、交通违法违章以及移动电子警察方面应用广泛。车牌识别过程为&#xff1a;首先通过摄像头获取包含车牌的彩色图像&#xff1b;然后进行车牌边缘检测&#xff0c;先粗略定位到车牌位置&#xff0c;再精细定位&#xff1b;最后根…

不同像平面坐标系下的Brown畸变系数互转

不同像平面坐标系下Brown畸变系数转换 记 u , v u,v u,v为像素为单位的坐标&#xff0c;f为焦距&#xff0c;单位也是像素。 记 x , y x,y x,y为理想坐标。本文推导两种情况下的Brown畸变系数转换关系&#xff1a; 相同坐标系定义、不同的坐标单位&#xff08;像素坐标与归一…

云消息队列 Kafka 版生态谈第一期:无代码转储能力介绍

作者&#xff1a;娜米 云消息队列 Kafka 版为什么需要做无代码转储 云消息队列 Kafka 版本身是一个分布式流处理平台&#xff0c;具有高吞吐量、低延迟和可扩展性等特性。它被广泛应用于实时数据处理和流式数据传输的场景。然而&#xff0c;为了将云消息队列 Kafka 版与其他数…

Gin 项目引入热加载

Gin 项目引入热加载 文章目录 Gin 项目引入热加载一、什么是热加载二、Air2.1 介绍2.2 特性特性&#xff1a;2.3 相关文档2.4 安装推荐使用 install.sh使用 go install 2.5 配置环境变量2.6 使用 三、Fresh3.1 介绍3.2 相关文档3.3 安装与使用 四、bee4.1 介绍4.2 相关文档4.3 …

K8S--持久卷(PersistentVolume)的用法

原文网址&#xff1a;K8S--持久卷(PersistentVolume)的用法-CSDN博客 简介 本文介绍K8S的持久卷(PersistentVolume)的用法。 目标&#xff1a;用持久卷的方式将主机的磁盘与容器磁盘映射&#xff0c;安装nginx并运行。 --------------------------------------------------…

高通开发系列 - toolchain交叉编译器编译kernel以及生成boot镜像

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 背景概述分析过程generate_defconfig.sh脚本环境准备合并其他几个配置文件开始编译生成dtb镜像

Python笔记07-异常、模块和包

文章目录 异常及捕获方法python模块python包安装第三方包 异常及捕获方法 当检测到一个错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的“异常”, 也就是我们常说的BUG 例如&#xff1a;以r方式打开一个不存在的…

ssm基于Vue的戏剧推广网站论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统戏剧推广信息管理难度大&#xff0c;容错率低&#xff0c…

TypeScript接口、对象

目录 1、TypeScript 接口 1.1、实例 1.2、联合类型和接口 1.3、接口和数组 1.4、接口和继承 1.5、单继承实例 1.6、多继承实例 2、TypeScript 对象 2.2、对象实例 2.3、TypeScript类型模板 2.4、鸭子类型&#xff08;Duck typing&#xff09; 1、TypeScript 接口 接口…

提升图像分割精度:学习UNet++算法

文章目录 一、UNet 算法简介1.1 什么是 UNet 算法1.2 UNet 的优缺点1.3 UNet 在图像分割领域的应用 二、准备工作2.1 Python 环境配置2.2 相关库的安装 三、数据处理3.1 数据的获取与预处理3.2 数据的可视化与分析 四、网络结构4.1 UNet 的网络结构4.2 UNet 各层的作用 五、训练…

10本审稿及出版效率均较好的科普期刊参数分享!

医、药、护、技及医学工程等相关的人员&#xff0c;进行卫生高级职称评审时&#xff0c;需要在专业期刊上公开发表本专业学术论文&#xff0c;论文的方向、内容质量以及发表的刊物都至关重要。今天常笑医学给大家整理了10本审稿及出版效率均较好的科普期刊&#xff01;参数分享…

java 音乐会售票平台系统Myeclipse开发mysql数据库struts2结构java编程计算机网页项目

一、源码特点 java 音乐会售票平台系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助struts2框架开发mvc模式&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发 环境为TOCAT7.0,Myeclipse8.5开发&#xff0c;数据…

深入了解鸿鹄电子招投标系统:Java版企业电子招标采购系统的核心功能

随着市场竞争的加剧和企业规模的扩大&#xff0c;招采管理逐渐成为企业核心竞争力的重要组成部分。为了提高招采工作的效率和质量&#xff0c;我们提出了一种基于电子化平台的解决方案。该方案旨在通过电子化招投标&#xff0c;使得招标采购的质量更高、速度更快&#xff0c;同…