如何以 mock server 的方式本地启动 SAP UI5 应用,使它不连接服务器端 OData 服务

简介: 我们在做 SAP UI5 开发时,在视图逻辑没有开发完毕时,往往不希望连接服务器端的 OData 服务进行联调,而仅仅连接本地端的测试数据。本文介绍如果启动本地 mock server,将 SAP UI5 项目工程里提前准备好的测试数据,渲染到 SAP UI5 应用的视图上。本文介绍具体方法。因为不需要直接连接后台 OData 服务,因此 manifest.json 的 dataSources 区域也就无需维护真实的服务器端 OData 服务的 url 了:

我们在做 SAP UI5 开发时,在视图逻辑没有开发完毕时,往往不希望连接服务器端的 OData 服务进行联调,而仅仅连接本地端的测试数据。


本文介绍如果启动本地 mock server,将 SAP UI5 项目工程里提前准备好的测试数据,渲染到 SAP UI5 应用的视图上。


本文介绍具体方法。


因为不需要直接连接后台 OData 服务,因此 manifest.json 的 dataSources 区域也就无需维护真实的服务器端 OData 服务的 url 了:

image.png


sap.ui5 区域里,定义该应用的根视图 (rootView)为 SmartTable:


image.png


SmartTable.view.xml 的源代码:

<mvc:View 
  xmlns="sap.m"
  xmlns:mvc="sap.ui.core.mvc"
  controllerName="sap.ui.demo.smartControls.SmartTable"
  xmlns:smartTable="sap.ui.comp.smarttable">
  <smartTable:SmartTable 
    id="smartTable_ResponsiveTable"
    tableType="ResponsiveTable" 
    editable="false"
    entitySet="Products" 
    header="Products" 
    showRowCount="true"
    useExportToExcel="false" 
    enableAutoBinding="true">
  </smartTable:SmartTable>
</mvc:View>

image.png

controller 什么都不用实现:


image.png


component.js 也不用实现:


image.png


主要的逻辑位于 sap.ui.core 的 Init hook 实现函数里。加载项目工程文件夹 test/service 下面的 server.js, 启动这个 mock server,然后将 sap.ui.demo.smartControls 这个 Component,放置到ComponentContainer,即 Component 容器里渲染成最后的 HTML 源代码:

image.png


主要代码:

sap.ui.getCore().attachInit(function() {
  sap.ui.require([
    "sap/ui/demo/smartControls/test/service/server"
  ], function(server) {
    server.init();
    new sap.ui.core.ComponentContainer({
    name: "sap.ui.demo.smartControls",
    height: "100%"
    }).placeAt("content");
  });
  });


Mock server 的核心逻辑在这个 server.js 里:


image.png


使用的是 SAP UI5 提供的标准 Mock server,位于目录 sap/ui/core/util/MockServer 下面。

sap.ui.define([
  "sap/ui/core/util/MockServer"
], function (MockServer) {
  "use strict";
  return {
  init: function () {
    var oMockServer = new MockServer({
    rootUri: "/here/goes/your/serviceUrl/"
    });
    MockServer.config({
    autoRespond: true, 
    autoRespondAfter: 1000
    });
    var sPath = jQuery.sap.getModulePath("sap.ui.demo.smartControls.test.service");
    oMockServer.simulate(sPath + "/metadata.xml", sPath);
    oMockServer.attachAfter(sap.ui.core.util.MockServer.HTTPMETHOD.GET, function(oEvent) {
    var oXhr = oEvent.getParameter("oXhr");
    var aResultFiltered = [];
    var fGetUriParameter = function(sUri, sKey) {
      var sValue = "";
      var aParams = decodeURIComponent(sUri).replace("?", "&").split("&");
      aParams.some(function(sPairs) {
      if (sKey === sPairs.split("=")[0]) {
        sValue = sPairs.split("=")[1];
        return true;
      }
      });
      return sValue;
    };
    var sSearchText = fGetUriParameter(oXhr.url, "search");
    if (sSearchText) {
      var aResults = oEvent.getParameter("oFilteredData").results;
      aResults.forEach(function(oEntry) {
      if (JSON.stringify(oEntry).indexOf(sSearchText) > -1) {
        aResultFiltered.push(oEntry);
      }
      });
      oEvent.getParameter("oFilteredData").results = aResultFiltered;
    }
    });
    oMockServer.start();
  }
  };
});


为了配合 mock server 工作,本地必须保存一个 metadata.xml:

image.png



同时将本地测试数据,以 json 文件的形式维护在工程里:

image.png



文件名必须为 metadata.xml 里定义的同名 entitySet:

image.png



最后本地读取 mock server 返回的测试数据,应用界面如下:

image.png


image.png

相关文章
|
19天前
|
Linux 网络安全 数据安全/隐私保护
SSH工具连接远程服务器或者本地Linux系统
SSH工具连接远程服务器或者本地Linux系统
18 0
|
3天前
|
安全 Linux Nacos
如何使用公网地址远程访问内网Nacos UI界面查看注册服务
如何使用公网地址远程访问内网Nacos UI界面查看注册服务
15 0
|
3天前
|
运维 数据安全/隐私保护
Finalshell 私钥连接服务器
Finalshell 私钥连接服务器
11 0
|
4天前
|
Web App开发 安全 Unix
Linux 配置FTP服务器 + vsftpd服务安装配置 (Good篇)
Linux 配置FTP服务器 + vsftpd服务安装配置 (Good篇)
|
7天前
|
存储 监控 安全
如何利用服务器为个人和企业提供定制服务?
【5月更文挑战第4天】如何利用服务器为个人和企业提供定制服务?
24 11
|
12天前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用阿里云API或SDK从函数计算调用ECS实例的服务如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
40 4
|
15天前
|
监控 Linux 网络安全
Linux服务器如何查询连接服务器的IP
【4月更文挑战第17天】Linux服务器如何查询连接服务器的IP
15 1
|
19天前
|
消息中间件 数据安全/隐私保护
MQTT微消息队列服务器连接报错:Error: Connection refused: Not authorized
使用MQTTX工具进行测试时,通过AccessKey创建了Client ID的用户名和密码。配置了公网接入点及端口1883,但尝试连接时出现错误。已附上工具截图:![](https://ucc.alicdn.com/pic/developer-ecology/3byii5uar64gg_36327474e991439da422f38c450ef153.png)。确认过用户名、密码和Client ID无误,问题仍未解决,期待回复!
|
21天前
|
网络协议 安全 Linux
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
|
22天前
|
安全 网络安全
代理服务器拒绝连接怎么办
代理服务器拒绝连接怎么办