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

文章目录

  • 前言
  • 一、开发Action
    • 1. 创建Structure
    • 2. BEDF添加Action
    • 3. class中实现Action
  • 二、修改UI5 项目
    • 1. 添加一个按钮
    • 2. 定义事件函数
  • 三、测试及解析
    • 1. 测试
    • 2. js中提取到的excel流数据
    • 3. 后端解析


前言

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

1.后端RAP的开发(S4HANA On-Premise)
- 开发Action
2.前端(UI5)读取Excel文件并保存到后端
- 传输文件流,并在ABAP中解析数据


一、开发Action

1. 创建Structure

  • 用于在UI5中把文件流传输到后端
@EndUserText.label : 'File'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
define structure ymoon_s010 {content : abap.string(0);
}

2. BEDF添加Action

managed implementation in class zbp_moon_i_010 unique;
strict ( 2 );define behavior for ymoon_i_010 alias Student
persistent table YMOON_T010
early numbering
lock master
authorization master ( instance )
//etag master <field_name>
{create;update;delete;//Add Actionstatic action upload_file parameter ymoon_s010;}

3. class中实现Action

这里使用abap2xlsx解析excel文件

  method upload_file.types:begin of upload_type,name   type ymoon_t010-name,age    type ymoon_t010-age,gender type ymoon_t010-gender,city   type ymoon_t010-city,end of upload_type.data:ls_upload type upload_type.data:lt_ymoon_t010 type table of ymoon_t010,ls_ymoon_t010 type  ymoon_t010."获取UI5传送的parameterdata(content) = keys[ 1 ]-%param-content."拆分数据,只保留excel内容 - lv_datasplit content 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."ABAP2XLSX生命data: lo_excel  type ref to zcl_excel, "엑셀lo_reader type ref to zif_excel_reader,lo_root   type ref to cx_root. "异常类data: lo_worksheet   type ref to zcl_excel_worksheet,highest_column type zexcel_cell_column,highest_row    type int4,column         type zexcel_cell_column value 1,col_str        type zexcel_cell_column_alpha,row            type int4               value 1,value          type zexcel_cell_value,converted_date type d."创建readercreate object lo_reader type zcl_excel_reader_2007.lo_excel = lo_reader->load( i_excel2007 = lv_excel_data ).lo_worksheet = lo_excel->get_active_worksheet( )."计算行列最大值highest_column = lo_worksheet->get_highest_column( ).highest_row    = lo_worksheet->get_highest_row( ).row += 1.while row <= highest_row.while column <= highest_column.col_str = zcl_excel_common=>convert_column2alpha( column )."读取cell数据lo_worksheet->get_cell(exportingip_column = col_strip_row    = rowimportingep_value = value).assign component column of structure ls_upload to field-symbol(<fs>).<fs> = value.column = column + 1.endwhile.column = 1.clear ls_ymoon_t010.move-corresponding ls_upload to ls_ymoon_t010.ls_ymoon_t010-uuid = cl_system_uuid=>create_uuid_x16_static( ).append ls_ymoon_t010 to lt_ymoon_t010.row = row + 1.endwhile.modify ymoon_t010 from table lt_ymoon_t010.endmethod.

二、修改UI5 项目

1. 添加一个按钮

  • 点击时将触发onUploadStream事件
<Buttonid="_IDGenButton4"press="onUploadStream"icon="sap-icon://upload"text="Upload Stream"type="Success"class="sapUiSmallMarginBegin"
/>

2. 定义事件函数

  • 这里不解析excel里的数据,只把文件流推给后端
onUploadStream:function(){var that = thisvar oModel = this.getView().getModel();var oFileUploader = this.byId("fileUploader");var filename = oFileUploader.getProperty('value')var file = oFileUploader.oFileUpload.files[0];var reader = new FileReader();reader.onload = function (evt) {// 获取base64值var vContent = evt.currentTarget.result;oModel.callFunction("/upload_file",   //BDEF中定义的action名 {method: "POST", // 使用POST urlParameters: {   //定义的参数,首字母必须要大写 "Content": vContent},success: function (odata, response) {//Model RefreshoModel.refresh(true);},error: function (res) {console.log(res)}})}//读取文件reader.readAsDataURL(file);}

三、测试及解析

1. 测试

在这里插入图片描述

2. js中提取到的excel流数据

  • 蓝色框里的是我们需要的Excel数据,需要在后端解析
    在这里插入图片描述

3. 后端解析

  • 使用SCMS_BASE64_DECODE_STR函数,把base64转为xstring
    在这里插入图片描述

  • 再通过zcl_excel_reader_2007对象传入xstring值创建一个zcl_excel对象。 然后使用zcl_excel_worksheet中的get_cell方法提取数据
    在这里插入图片描述

  • 数据库
    在这里插入图片描述

接下来的文章制作一个任意文件的上传和下载

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

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

相关文章

玩转爱斯维尔 LaTeX 模板:定制技巧一网打尽!

简介 关于 LaTeX 小编写过一些推文&#xff1a; 适合撰写课程论文的 LaTeX 模板; LaTeX 常用数学符号汇总; 免费升级 overleaf 高级账户&#xff01;; 如何下载使用期刊的 LaTeX 模板 本文基于常用的 Elsevier 期刊模板&#xff0c;小编分享个人常用的使用技巧&#xff0…

Note: A Woman Doctor Lina

A woman doctor Lina 女医生丽娜 Born in a pigs’ nest, Lina led a poor life in her childhood. 出生在猪圈里&#xff0c;丽娜过着贫穷的童年生活。 led nest She was looked down upon by the children of her generation. 她被她同时代的孩子瞧不起。 generation look…

【Kubernetes】认证授权RBAC (一)

认证授权RBAC 一、k8s安全管理&#xff1a;认证、授权、准入控制概述1.1、简介【1】认证基本介绍【2】授权基本介绍【3】准入控制基本介绍 1.2、认证【1】客户端认证【2】Bearertoken【3】Serviceaccount【4】拓展&#xff1a;kubeconfig文件 1.3、授权【1】什么是RBAC&#xf…

Linux的基本指令(5)

目录 bc指令 uname指令 压缩解压相关的指令 zip指令 unzip指令 tar打包压缩指令 tar解压解包指令 ​编辑​编辑sz&rz 热键 关机命令 安装&#xff1a;yum install -y 指令 bc指令 bc命令可以很方便的进行浮点运算 Linux中的计算器 uname指令 语法&#xff1a;un…

Nginx 访问控制

目录 1. 传输层禁止访问 2. 应用层访问控制 访问控制有两个方式&#xff0c;一种是在OSI模型的四层传输层&#xff0c;一种是在第七层应用层。 主机防火墙就是在四层传输控制&#xff0c;nginx就是在七层应用控制。 1. 传输层禁止访问 在进行访问控制前&#xff0c;先开启防…

外包干了1个月,技术退步一大半。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

钡铼技术2023年年度报告来了

不积跬步&#xff0c;无以至千里&#xff1b; 不积小流&#xff0c;无以成江海。 钡铼的2023年 平凡却又意义深远。 在工业自动化及物联网技术发展的道路上&#xff0c;钡铼技术每一个进步都源于不懈的努力和持续的积累。钡铼技术在过去的一年中&#xff0c;稳扎稳打&#xf…

科研学习|论文解读——超准确性反馈:使用眼动追踪来检测阅读过程中的可理解性和兴趣

摘要&#xff1a; 了解用户想要什么信息是信息科学和技术面临的最大挑战。隐式反馈是解决这一挑战的关键&#xff0c;因为它允许信息系统了解用户的需求和偏好。然而&#xff0c;可用的反馈往往是有限的&#xff0c;而且其解释也很困难。为了应对这一挑战&#xff0c;我们提出了…

TypeScript 从入门到进阶之基础篇(四) symbol类型篇

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇 持续更新中… 文章目录 …

ElasticSearch的DSL查询语法解析

Elasticsearch提供了基于ISON的DSL (Domain Specific Lanquage)来定义查询。 目录 一、常见查询类型 二、DSLQuery基本语法 三、全文检索查询 3.1 match查询&#xff1a;会对用户输入内容分词&#xff0c;常用于搜索框搜索 &#xff0c;语法&#xff1a; 3.2 multi match…

JavaWeb 页面上显示中文乱码解决~

你们好&#xff0c;我是金金金。 场景 我正在学习servlet&#xff0c;通过write()方法向页面上写入中文数据&#xff0c;没想到显示的都是?? 乱码&#xff0c;如图 排查 很明显可以看出来页面上显示的是??&#xff0c;我猜想肯定是字符编码的问题&#xff0c;导致乱码 造成…