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

news2025/1/12 1:07:13

文章目录

  • 前言
  • 一、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数据的,后续介绍如何在后端解析数据

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

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

相关文章

IP地址定位技术的应用及其重要性

随着网络技术的快速发展&#xff0c;网络安全问题日益凸显&#xff0c;IP地址定位技术在网络安全领域的应用也越来越广泛。本文将介绍IP地址定位技术在网络安全领域的应用及其重要性。 一、IP地址定位技术概述 IP地址定位技术是指通过一定的技术手段&#xff0c;将虚拟网络中的…

这些软件测试面试题你都会,那offer还不手拿把掐

问&#xff1a;你在测试中发现了一个 bug &#xff0c;但是开发经理认为这不是一个 bug &#xff0c;你应该怎样解决。 首先&#xff0c;将问题提交到缺陷管理库里面进行备案然后&#xff0c;要获取判断的依据和标准&#xff1a;根据需求说明书、产品说明、设计文档等&#xf…

Git(2):Git环境的安装

本教程里的git命令例子都是在Git Bash中演示的&#xff0c;会用到一些基本的linux命令&#xff0c;在此为大家提前列举&#xff1a; ls/ll 查看当前目录cat 查看文件内容touch 创建文件vi vi编辑器&#xff08;使用vi编辑器是为了方便展示效果&#xff0c;学员可以记事本、edi…

一个H3C交换机周期性断网并自动恢复的排查案例

一个朋友发我一个H3C日志&#xff0c;这个交换机是汇聚层交换机&#xff0c;1和2口是trunk口&#xff0c;其它接口是access接口&#xff0c;17-21口据说接的都是监控、终端。日志里面看到大量的拓朴改变&#xff0c;好几个网口up、down的日志&#xff0c;怀疑是环路&#xff0c…

Pycharm打包程序为exe文件

Pycharm打包程序为exe文件 【一】导入模块pyinstaller 【1】图片说明 【2】文字说明 根据图片顺序执行 首先点击file进入settings界面&#xff0c;在setting界面找到Project下面的Python Interpretor&#xff0c;点击号进行模块的添加在搜索框中输入pyinstaller&#xff0c;…

计算机毕业设计 SpringBoot的中小型制造企业质量管理系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

java基于vue的音乐播放器的设计与实现论文

摘 要 当下&#xff0c;如果还依然使用纸质文档来记录并且管理相关信息&#xff0c;可能会出现很多问题&#xff0c;比如原始文件的丢失&#xff0c;因为采用纸质文档&#xff0c;很容易受潮或者怕火&#xff0c;不容易备份&#xff0c;需要花费大量的人员和资金来管理用纸质文…

启动 Mac 时显示闪烁的问号

启动 Mac 时显示闪烁的问号 如果启动时在 Mac 屏幕上看到闪烁的问号&#xff0c;这意味着你的 Mac 无法找到自身的系统软件。 如果 Mac 启动时出现闪烁的问号且无法继续启动&#xff0c;请尝试以下步骤。 1.通过按住其电源按钮几秒钟来关闭 Mac。 2.按一下电源按钮&#xf…

spring boot 2升级为spring boot 3中数据库连接池druid的问题

目录 ConfigurationClassPostProcessor ConfigurationClassBeanDefinitionReader MybatisPlusAutoConfiguration ConditionEvaluator OnBeanCondition 总结 近期给了一个任务&#xff0c;要求是对现有的 spring boot 2.x 项目进行升级&#xff0c;由于 spring boot 2.x 版…

计算机环境安全

操作系统安全----比如windows,linux 安全标识--实体唯一性 windows---主体&#xff1a;账户&#xff0c;计算机&#xff0c;服务 安全标识符SID-Security Identifier 普通用户SID是1000&#xff0c;管理用SID是500 linux---主体&#xff1a;用户&#xff0c;用户组&#xf…

华为面经总结

为了帮助大家更好的应对面试&#xff0c;我整理了往年华为校招面试的题目&#xff0c;供大家参考~ 面经1 技术一面 自我介绍说下项目中的难点volatile和synchronized的区别&#xff0c; 问的比较细大顶堆小顶堆怎么删除根节点CSRF攻击是什么&#xff0c;怎么预防线程通信方式…

C++ STL set用法详解

目录 1.set的创建。 具体例子&#xff1a; set初始化&#xff1a; 2.set的特性。 3.set元素遍历&#xff1a; 迭代器创建&#xff1a; 4.set的基本函数。 4.1.insert() 4.2 clear() 4.3 find() 4.4 erase() 4.5 count() 4.6 size() 4.7 empty 4.8 lower_boun…

NGUI基础-三大基础组件之Event System(Uicameras)

目录 主要作用 相关参数 (建议&#xff1a;红色是重点&#xff0c;黑色的了解即可&#xff09; Event Type Events go to Process Events in Event Mask​编辑 Debug Command Click Allow Multi Touch Auto Hide Cursor Sticky ToolTip/Long press ToolTip/ToolTip…

【漏洞挖掘】挖掘CNVD证书

文章目录 一、CNVD介绍事件型漏洞通用型漏洞 二、挖掘思路1. 黑盒测试资产搜集fofa API筛选脚本 2. 白盒测试代码审计 3. google hack注意事项 一、CNVD介绍 国家信息安全漏洞共享平台&#xff08;简称CNVD&#xff09;&#xff0c;对于白帽子来说&#xff0c;挖掘的漏洞提交后…

【Docker】创建,查看,进入容器

目录 方式一&#xff1a; 创建 查看 ​编辑 方式二&#xff1a; 创建 查看 进入容器 方式一&#xff1a; 首先查看有什么镜像 创建 docker run -i -t --namefreedom centos:7 /bin - i 表示容器一直运行着&#xff0c;容器如果没有客户端连接就会关闭&#xff0c;加了…

python中抓取小米应用商城xpath实例

页面源码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>手机游戏应用商店_软件商店app下载-小米应用商店</title> <…

nvidia-smi 完整查看显卡型号

当我们在使用nvidia-smi查看显卡的型号的时候&#xff0c;会发现出现如下问题&#xff1a; 可以看到我们此时无法看到显卡的准确型号&#xff0c;只能看到NVIDIA GeForce ... 解决方法&#xff1a;使用如下命令即可完整显示显卡型号 nvidia-smi -L 如下所示&#xff1a;

嵌入式代码经常产生bug的五大原因

在嵌入式开发软件中查找和消除潜在的错误是一项艰巨的任务。 通常需要英勇的努力和昂贵的工具才能从观察到的崩溃&#xff0c;死机或其他计划外的运行时行为追溯到根本原因。 在最坏的情况下&#xff0c;根本原因会破坏代码或数据&#xff0c;使系统看起来仍然可以正常工作或…

Transformer模型中前置Norm与后置Norm的区别

主要介绍原始Transformer和Vision Transformer中的Norm层不同位置的区别。 文章目录 前言 不同位置的作用 总结 前言 在讨论Transformer模型和Vision Transformer (ViT)模型中归一化层位置的不同&#xff0c;我们首先需要理解归一化层&#xff08;Normalization&#xff09;在…

java数据结构与算法刷题-----LeetCode63. 不同路径 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…