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.mzph.cn/news/597382.shtml

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

相关文章

Leetcode的AC指南 —— 字符串/卡码网:55. 右旋字符串

摘要&#xff1a; Leetcode的AC指南 —— 字符串/卡码网&#xff1a;55. 右旋字符串。题目介绍&#xff1a;字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k&#xff0c;请编写一个函数&#xff0c;将字符串中的后面 k 个字…

灸哥问答:数据结构对软件开发的作用

在软件开发的浩瀚海洋中&#xff0c;数据结构如同一座坚固的灯塔&#xff0c;为开发者指明方向&#xff0c;确保他们在构建复杂系统时不会迷失。数据结构不仅仅是编程的基础&#xff0c;更是高效、稳定、可扩展软件的核心。 一、提升算法效率 数据结构与算法紧密相连&#xf…

Java实战项目三:图书借阅系统

文章目录 一、实战概述二、知识点概览&#xff08;一&#xff09;数据库操作及连接&#xff08;二&#xff09;对象关系映射&#xff08;ORM&#xff09;&#xff08;三&#xff09;业务逻辑处理 三、思路分析&#xff08;一&#xff09;系统架构设计&#xff08;二&#xff09…

antd——a-date-picker——日期的限制功能——js基础积累

antd——a-date-picker——日期的限制功能——js基础积累 禁用日期一、限制只能选明天及之后的日期&#xff08;今天不可选中&#xff09;二、限制只能选今天及之后的日期&#xff08;今天可选中&#xff09;三、限制只能选昨天及之前的日期&#xff08;今天不可选中&#xff0…

Java业务功能并发问题处理

业务场景&#xff1a; 笔者负责的功能需要调用其他系统的进行审批&#xff0c;而接口的调用过程耗时有点长&#xff08;可能长达10秒&#xff09;&#xff0c;一个订单能被多个人提交审批&#xff0c;当订单已提交后会更改为审批中&#xff0c;不能再次审批&#xff08;下游系…

05-微服务-RabbitMQ-概述

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&am…

canvas设置文字阴影

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

实现JavaScript中的数组排序功能

一、引言 在JavaScript中&#xff0c;数组是一种常用的数据结构&#xff0c;而排序是处理数组的常见任务。对于JavaScript中的数组排序&#xff0c;我们可以通过多种方式来实现。本篇博客将详细介绍如何使用JavaScript实现数组排序功能&#xff0c;并分享一些感悟。 二、实现…

SQL的一些基本语句

SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系型数据库的语言。下面是一些常用的SQL基本语句&#xff1a; 创建表格&#xff1a; CREATE TABLE table_name (column1 datatype,column2 datatype,column3 datatype,... );插入数据&#xff1a; INSERT…

详解C语言入门程序:HelloWorld.c

#include <stdio.h> // 头文件&#xff0c;使用<>编译系统会在系统头文件目录搜索在C语言中&#xff0c;#include 是预处理指令&#xff0c;用于将指定的头文件内容插入到当前源文件中。这里的 <stdio.h> 是一个标准库头文件&#xff0c;其中包含了与输入输出…

MySQL之CRUD、常见函数及union查询

目录 一. CRUD 1.1 什么是crud 1.2 SELECT(查询) 1.3 INSERT(新增) 1.4 UPDATE(修改) 1.5 DELETE(删除) 二. 函数 2.1 常见函数 2.2 流程控制函数 2.3 聚合函数 三. union与union all 3.1 union 3.2 union all 3.3 具体不同 3.4 结论 四. 思维导图 一. CRUD 1.1 什么是crud…

解析:Eureka的工作原理

Eureka是Netflix开源的一个基于REST的的服务发现注册框架&#xff0c;它遵循了REST协议&#xff0c;提供了一套简单的API来完成服务的注册和发现。Eureka能够帮助分布式系统中的服务提供者自动将自身注册到注册中心&#xff0c;同时也能够让服务消费者从注册中心发现服务提供者…

【愚公系列】2023年12月 HarmonyOS应用开发者高级认证(完美答案)

&#x1f3c6; 作者简介&#xff0c;愚公搬代码 &#x1f3c6;《头衔》&#xff1a;华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xf…

express框架搭建后台服务

express 1. 使用express创建web服务器&#xff1a;2. 中间件中间件分类&#xff1a; 3.解决跨域问题&#xff1a;1. CORS2.JSONP 1. 使用express创建web服务器&#xff1a; 1. 导入express2. 创建web服务器3. 启动web服务器// 1. 导入express const express require(express)/…

6. Mybatis 缓存

6. Mybatis 缓存 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率MyBatis系统中默认定义了两级缓存 一级缓存二级缓存 默认情况下&#xff0c;只有一级缓存&#xff08;SqlSession级别的缓存&#xff0c;也称为本地缓存&…

Transforer逐模块讲解

本文将按照transformer的结构图依次对各个模块进行讲解&#xff1a; 可以看一下模型的大致结构&#xff1a;主要有encode和decode两大部分组成&#xff0c;数据经过词embedding以及位置embedding得到encode的时输入数据 输入部分 embedding就是从原始数据中提取出单词或位置&…

ubuntu22.04配置双网卡绑定提升带宽

这里写自定义目录标题 Bonding简介配置验证参考链接 Bonding简介 bonding(绑定)是一种linux系统下的网卡绑定技术&#xff0c;可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡&#xff0c;能够提升网络吞吐量、实现网络冗余、负载均衡等功能&#xff0c;有很…

软件设计师考试的知识点

这里先总结一下考试的知识点。 上午的考试考题中只有单选题&#xff0c;涉及范围很广&#xff0c;但是考查不深。 上午的考试知识点以及分数比重&#xff1a; 知识点 分数 说明 比例 软件工程基础知识 13 开发方法与开发模型、数据流图与数据字典、结构化设计、测试方法…

2023年工作初体验

23年终于正式入职&#xff0c;参与了正式上线的电商平台、crm平台等项目的研发&#xff0c;公司规模较小&#xff0c;气氛融洽&#xff0c;没有任何勾心斗角、末位淘汰&#xff0c;几乎没什么压力。虽然是我的第一家公司&#xff0c;但实际是个适合养老的公司&#xff08;笑 总…

双击shutdown.bat关闭Tomcat报错:未设置关闭端口~

你们好&#xff0c;我是金金金。 场景 当我startup.bat启动tomcat之后&#xff0c;然后双击shutdown.bat关闭&#xff0c;结果报错了~ 排查 看报错信息很明显了&#xff0c;未配置关闭端口&#xff0c;突然想起来了我在安装的时候都选的是默认的配置&#xff0c;我还记得有这…