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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、RAP的开发
    • 1. 创建表格
    • 2. 创建CDS Entity
    • 3. 创建BDEF
    • 4. 创建implementation class
    • 5. 创建Service Definition和Binding
    • 6. 测试API
  • 二、创建UI5 Project
    • 1. 使用Basic模板创建
    • 2. 创建View
    • 3. 测试页面及绑定的oData数据是否正确
    • 4. 创建Controller
    • 5. 导入外部包(重要)
    • 6. 测试


前言

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

  1. 后端RAP的开发(S4HANA On-Premise)
  2. 前端(UI5)读取Excel文件并保存到后端

一、RAP的开发

1. 创建表格

@EndUserText.label : 'Student List'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table ymoon_t010 {
  key client : abap.clnt not null;
  key uuid   : sysuuid_x16 not null;
  name       : abap.char(40);
  age        : abap.int1;
  gender     : abap.char(10);
  city       : abap.char(40);

}

2. 创建CDS Entity

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Student List CSD'
define root view entity ymoon_i_010
  as select from ymoon_t010
{
  key uuid   as Uuid,
      name   as Name,
      age    as Age,
      gender as Gender,
      city   as City
}

3. 创建BDEF

这里使用managed 类型减少二次开发

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;

}

4. 创建implementation class

因为使用了early numbering,所以在类中实现具体的方法

class lhc_student definition inheriting from cl_abap_behavior_handler.
  private section.

    methods get_instance_authorizations for instance authorization
      importing keys request requested_authorizations for student result result.

    methods earlynumbering_create for numbering
      importing entities for create student.

endclass.

class lhc_student implementation.

  method get_instance_authorizations.
  endmethod.

  method earlynumbering_create.
    loop at entities into data(entity).

      data(uuid) = cl_system_uuid=>create_uuid_x16_static( ).

      append value #(
          %cid      = entity-%cid
          %key      = entity-%key
          uuid     = uuid
        ) to mapped-student .
    endloop.

  endmethod.

endclass.

5. 创建Service Definition和Binding

@EndUserText.label: 'Student List SD'
define service YMOON_SD_010 {
  expose ymoon_i_010 as Student;
}

在这里插入图片描述

6. 测试API

在这里插入图片描述


二、创建UI5 Project

1. 使用Basic模板创建

Service选择我们刚才创建的API
在这里插入图片描述

2. 创建View

我们使用Table和FileUploader组件创建页面

  • 当点击Upload时会触发onUploadButton事件
<mvc:View
    controllerName="ikdproject901.controller.Main"
    xmlns:mvc="sap.ui.core.mvc"
    displayBlock="true"
    xmlns="sap.m"
    xmlns:u="sap.ui.unified"
>
    <Page
        id="page"
        title="{i18n>title}"
    >
        <VBox
            width="auto"
            class="sapUiLargeMargin"
        >
            <Table items="{/Student}">
                <headerToolbar>
                    <OverflowToolbar id="_IDGenOverflowToolbar1">
                        <content>
                            <Title
                                id="salesTableTitle"
                                text="Excel Upload Demo"
                                level="H2"
                            />

                            <ToolbarSpacer id="_IDGenToolbarSpacer1" />
                            <u:FileUploader
                                id="fileUploader"
                                name="myFileUpload"
                                tooltip="Upload your file to the server"
                            />
                            <Button
                                id="_IDGenButton3"
                                press="onUploadButton"
                                icon="sap-icon://create"
                                text="Upload"
                                type="Emphasized"
                                class="sapUiLargeMarginBegin"
                            />
                        </content>
                    </OverflowToolbar>
                </headerToolbar>
                <columns>
                    <Column>
                        <Text text="姓名" />
                    </Column>
                    <Column>
                        <Text text="年龄" />
                    </Column>
                    <Column>
                        <Text text="性别" />
                    </Column>
                    <Column>
                        <Text text="城市" />
                    </Column>
                </columns>
                <items>
                    <ColumnListItem>
                        <cells>
                            <Text text="{Name}" />
                            <Text text="{Age}" />
                            <Text text="{Gender}" />
                            <Text text="{City}" />
                        </cells>
                    </ColumnListItem>
                </items>
            </Table>
        </VBox>
    </Page>
</mvc:View>

3. 测试页面及绑定的oData数据是否正确

有一条数据显示,和后端是一致的

  • 页面
    在这里插入图片描述
  • 后端
    在这里插入图片描述

4. 创建Controller

sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "sap/ui/model/json/JSONModel",
    "sap/m/MessageToast",
],
    /**
     * @param {typeof sap.ui.core.mvc.Controller} Controller
     */
    function (Controller, JSONModel, MessageToast) {
        "use strict";

        return Controller.extend("ikdproject901.controller.Main", {
            onInit: function () {

            },
            onUploadButton: function () {
                var that = this
                var oModel = this.getView().getModel();
                var oFileUploader = this.byId("fileUploader");
                var file = oFileUploader.oFileUpload.files[0];
                var reader = new FileReader();

                reader.onload = function (evt) {
                    // get file data
                    var vContent = evt.currentTarget.result;

                    //read xlsx 
                    var workbook = XLSX.read(vContent, {
                        type: 'binary'
                    });
                    workbook.SheetNames.forEach(function (sheetName) {
                        // Here is your object for every sheet in workbook
                        var excelData = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
                        console.log(excelData)
                        // Convert to internal Data
                        var newData = excelData.map(function (entry) {
                            return {
                                "Name": entry["姓名"],
                                "Age": parseInt(entry["年龄"]),
                                "Gender": entry["性别"],
                                "City": entry["城市"]
                            };
                        });
                        //Create Model
                        var lines = 0
                        newData.forEach(function (oData) {
                            oModel.create("/Student", oData,
                                {
                                    success: function (rData, oResponse) {
                                        lines += 1
                                        if (lines === newData.length) {
                                            MessageToast.show(lines + "条数据导入成功");
                                        }
                                    }
                                    , error: function (oError) {
                                        MessageToast.show("数据导入失败");
                                    }
                                }
                            )
                        })
                    });
                }
                reader.readAsBinaryString(file);
            }
        });
    });

5. 导入外部包(重要)

将如下包的导入写在index.html中

    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.10.0/jszip.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.10.0/xlsx.js"></script>

6. 测试

在这里插入图片描述

  • 后端
    在这里插入图片描述

这篇文章是在前端解析excel数据的,后续介绍如何在后端解析数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jsp+ssm+mysql实现的酒店预定管理系统项目----计算机毕业设计

项目介绍 jspssm框架&#xff08;spring、springMVC、mybaits&#xff09;实现的酒店预定管理系统的源码和视频开发教程。本系统分前台和后台管理两部分&#xff0c;前台实现了用户登录注册、查看房型信息、预定房间、提交订单、查看个人订单、修改个人资料等&#xff0c;后台…

打造高效会员卡营销策划方案,提升门店业绩

在激烈的行业竞争中&#xff0c;如何有效提升店铺的业绩&#xff0c;提高客户粘性和消费频次呢&#xff1f;答案可能就在你手中——那就是有效的会员卡营销策略。下面给大家探讨如何设计会员卡营销策划方案&#xff0c;从而增加客户的忠诚度&#xff0c;并推动销售增长。以目前…

亚信安慧AntDB数据库引领数字时代:数字驱动创新峰会主旨演讲深度解析

近日&#xff0c;庄严肃穆的数字驱动创新峰会在中国首都北京隆重召开&#xff0c;聚焦于探讨数据经济的创新前沿。在此次盛会中&#xff0c;备受瞩目的亚信安慧AntDB数据库荣幸受邀参与&#xff0c;该数据库的副总裁张桦以其深刻见解和卓越经验发表了引人瞩目的主旨演讲。 图1&…

2024年个人工作计划怎么写?新年待办计划这样写更方便

元旦的钟声还在耳边回响&#xff0c;2024年的新篇章已经开启。面对新的一年&#xff0c;我深知一个清晰、实用的个人工作计划是多么重要。它不仅是指引我前进的灯塔&#xff0c;更是我实现目标、提升效率的秘密武器。 但如何制定这样一个计划呢&#xff1f;在过去&#xff0c;…

Github 2023-12-31 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-31统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量TypeScript项目3Swift项目1Java项目1HTML项目1Astro项目1Python项目1C项目1Dart项目1Jupyter Notebook项目1C项…

github短视频去除水印项目Douyin_TikTok_Download_API介绍

当下正值短视频盛行的时代。在我们浏览短视频的同时&#xff0c;经常能发现一些精美的图片、引人入胜的文案以及吸引眼球的视频&#xff0c;想要将它们保存到本地。然而&#xff0c;保存下来的图片或视频通常伴随着不太愉悦的水印&#xff0c;这显著降低了使用体验。因此&#…

深度学习|10.2 边缘检测示例 10.3 更多边缘检测

文章目录 如何在编程中实现卷积运算使用卷积实现边缘检测结果矩阵的元素正负性质的意义水平分类器如何构造卷积运算使用的矩阵 原矩阵通过一个过滤器&#xff08;filter&#xff09;/核心&#xff08;kernel&#xff09;来生成一个新的矩阵。 如何在编程中实现卷积运算 使用卷积…

梦百合杯8强/半决赛完赛 党毅飞、李轩豪晋级决赛

2024年1月3日,第五届“MLILY梦百合0压床垫杯”世界围棋公开赛(以下简称:梦百合杯)8强/半决赛滁州圆满落幕,党毅飞2:0胜廖元赫,李轩豪2:0胜刘宇航,两位棋坛老将成功击败两位00后新生代棋手,联袂晋级决赛。决赛计划24年5月份在江苏如皋举行。 于12月29日举办的8强赛中,党毅飞胜辜…

设计模式:简单工厂模式

这里写目录标题 工厂模式简介核心角色&#xff1a;实现 工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 工厂模式提供了一种将对象的实例化过程封…

短视频账号矩阵系统源码/技术交付3年开发源头

账号矩阵3年技术独立开发打造是一个非常有挑战性和前景的项目。以下是一些建议&#xff0c;帮助你成功打造一个成功的短视频账号矩阵&#xff1a; 1. 确定目标受众&#xff1a;首先需要明确你的目标受众是谁&#xff0c;了解他们的兴趣爱好、年龄、性别等&#xff0c;以便为他们…

航芯ACM32G103开发板评测 02-GPIO输入输出

航芯ACM32G103开发板评测 02-GPIO输入输出 航芯ACM32G103开发板评测 GPIO输入输出应用 软硬件平台 ACM32G103 Board开发板 MDK-ARM Keil GPIO输出典型应用——点灯 GPIO输入典型应用——按键 GPIO 功能概述 GPIO 是通用输入/输出&#xff08;General Purpose I/O&#x…

你对自己的努力满意吗?回复10-100分

有的学生备战高考&#xff0c;或者上班&#xff0c;每天能量满满&#xff0c;战气十足。虽然很累&#xff0c;但是很痛快。有些人今天进步很快&#xff0c;工作休息很辛苦&#xff0c;但是却不累。 有的人一直在抑郁寡欢&#xff0c;有的人信心十足&#xff0c;认定一个目标&am…

[足式机器人]Part2 Dr. CAN学习笔记-动态系统建模与分析 Ch02-1+2课程介绍+电路系统建模、基尔霍夫定律

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-动态系统建模与分析 Ch02-12课程介绍电路系统建模、基尔霍夫定律 1. 课程介绍2. 电路系统建模、基尔霍夫定律 1. 课程介绍 2. 电路系统建模、基尔霍夫定律 基本元件&#xff1a; 电量 库伦&…

openGauss学习笔记-183 openGauss 数据库运维-升级-升级操作

文章目录 openGauss学习笔记-183 openGauss 数据库运维-升级-升级操作183.1 就地升级和灰度升级操作步骤 openGauss学习笔记-183 openGauss 数据库运维-升级-升级操作 介绍就地升级、灰度升级和滚动升级的详细操作。 183.1 就地升级和灰度升级操作步骤 以root身份登录节点。 …

clickhouseSQL日期相关

1. 毫秒级时间戳转日期/小时 --13位时间戳转具体时间 toDateTime(report_time / 1000) as _c00 -- 获取时间戳对应的时间点整点(结果&#xff1a;%Y-%m-%d %H:00:00.0) eg&#xff1a;2022-09-28 23:00:00.0 toStartOfHour(toDateTime(report_time / 1000)) AS _10-- 获取时间…

C语言数组习题

1.数组遍历 #include <stdio.h>int main(){int i,a[10];for(i0;i<9;i) //对数组元素a[0]~a[9]赋值 a[i]i;for(i9;i>0;i--) //输出a[9]~a[0]共10个数组元素 printf("%d ",a[i]);printf("\n");return 0;} 运行结果&#xff1a; 2.数组应用&a…

计算机毕业设计------经贸车协小程序

项目介绍 本项目分为三种用户类型&#xff0c;分别是租赁者&#xff0c;车主&#xff0c;管理员用户&#xff1b; 管理员用户包含以下功能&#xff1a; 管理员登录,个人中心,租赁者管理,车主管理,赛事活动管理,车类别管理,租车管理,租车订单管理,车辆出售管理,购买订单管理,…

Java经典框架之SpringBoot

SpringBoot Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. SpringBoot基础 2. Spring…

利用Spring Cloud和Java系统设置优化工程项目管理系统源码的二次开发体验

工程项目管理涉及众多环节和角色&#xff0c;如何实现高效协同和信息共享是关键。本文将介绍一个采用先进技术框架的Java版工程项目管理系统&#xff0c;该系统支持前后端分离&#xff0c;功能全面&#xff0c;可满足不同角色的需求。从项目进度图表到施工地图&#xff0c;再到…

一键转换,轻松将PDF转换为TXT文本!

您是否曾经遇到过需要将大量的PDF文件转换为TXT格式的情况&#xff1f;手动转换不仅耗时&#xff0c;还容易出错。现在&#xff0c;我们为您带来了一款全新的PDF转TXT工具&#xff0c;让您轻松解决这个问题&#xff01; 首先&#xff0c;我们要进入首助编辑高手主页面&#xf…