使用 SAPUI5 中的内置 ODataModel 类创建 Web 应用, 以实时反映红移数据的更改。
在本文中, 我们将演示如何使用 CData api 服务器和 ADO.NET 提供程序来红移 (或任何120多个 ADO.NET 提供程序) 编写利用红移 api 功能的 SAPUI5 应用程序, 而无需写入后端数据库。API 服务器是在您的服务器上运行并生成红移数据的 OData 源的轻量级 web 应用程序。OData 是 web 上实时数据访问的标准, 在 SAPUI5 和 OpenUI5 中具有内置支持。
设置 API 服务器
按照以下步骤开始生产安全红移 OData 服务:
部署
API 服务器在您自己的服务器上运行。在 Windows 上, 可以使用单机服务器或 IIS 进行部署。在 Java servlet 容器中, 删除 API 服务器 WAR 文件。有关详细信息和操作方法, 请参阅帮助文档。
API 服务器在Microsoft Azure、 Amazon EC2和Heroku上也很容易部署。
连接红移
在为红移部署 API 服务器和ADO.NET 提供程序后, 通过单击 “设置” > “连接” 并在 API 服务器中添加新连接, 提供连接到红移所需的身份验证值和其他连接属性管理控制台。
要连接到红移, 请设置以下内容:
- 服务器: 将其设置为托管要连接到的数据库的群集的主机名或 IP 地址。
- 端口: 将其设置为群集的端口。
- 数据库: 将其设置为数据库的名称。或者, 保留此空白以使用经过身份验证的用户的默认数据库。
- 用户: 将此设置为要用于向服务器进行身份验证的用户名。
- 密码: 将此设置为要用于向服务器进行身份验证的密码。
您可以在 AWS 管理控制台中获取服务器和端口值:
- 打开亚马逊红移控制台 (http://console.aws.amazon.com/redshift)。
- 在 “群集” 页上, 单击群集的名称。
- 在群集的 “配置” 选项卡上, 从显示的连接字符串复制群集 URL。
然后, 您可以通过单击 “设置” > “资源” 来选择要允许 API 服务器访问的红移实体。本文使用订单作为示例。
授权 API 服务器用户
确定要生成的 OData 服务后, 通过单击 “设置” > “用户” 授权用户。API 服务器使用基于不出所料的身份验证, 并支持主要的身份验证方案。您可以对与 SSL 的连接进行身份验证和加密。访问也可以通过 IP 地址来限制;默认情况下, 访问仅限于本地计算机。
创建视图
在本文中, 用户通过 SAPUI5 表控件查看和与红移数据进行交互。将从 api 服务器 api 终结点检索的元数据中自动检测表列。我们在单独的 View.view.xml 文件中定义下表:
<mvc:View
controllerName="sap.ui.table.sample.OData2.Controller"
xmlns="sap.ui.table"
xmlns:mvc="sap.ui.core.mvc"
xmlns:u="sap.ui.unified"
xmlns:c="sap.ui.core"
xmlns:m="sap.m">
<m:Page
showHeader="false"
enableScrolling="false"
class="sapUiContentPadding">
<m:content>
<Table
id="table"
selectionMode="MultiToggle"
visibleRowCount="10"
enableSelectAll="false"
rows="{/Orders}"
threshold="15"
enableBusyIndicator="true"
columns="{
path: 'meta>/dataServices/schema/[${namespace}===\'CData\']/entityType/[${name}===\'Orders\']/property',
factory: '
然后, api 服务器将查询转换为红移 API 调用。
控制器处理用户输入, 并通过视图向用户表示信息。在新文件中定义控制器, Controller.controller.js。在函数中实例化模型 onInit
-您需要将 URL 的占位符值替换为 api 服务器、允许访问 api 服务器的 OData 终结点的用户以及用户的不出所料。
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/odata/v2/ODataModel",
"sap/ui/model/json/JSONModel",
"sap/ui/table/Column",
"sap/m/Text",
], function(Controller, ODataModel, JSONModel, Column, Text ) {
"use strict";
return Controller.extend("sap.ui.table.sample.OData2.Controller", {
onInit : function () {
var oView = this.getView();
var oDataModel = new ODataModel("http://myserver/api.rsc/",{user: "MyUser", password: "MyAuthToken"});
oDataModel.getMetaModel().loaded().then(function(){
oView.setModel(oDataModel.getMetaModel(), "meta");
});
oView.setModel(oDataModel);
var oTable = oView.byId("table");
var oBinding = oTable.getBinding("rows");
var oBusyIndicator = oTable.getNoData();
oBinding.attachDataRequested(function(){
oTable.setNoData(oBusyIndicator);
});
oBinding.attachDataReceived(function(){
oTable.setNoData(null); //use default again ("no data" in case no data is available)
});
},
onExit : function () {
},
columnFactory : function(sId, oContext) {
var oModel = this.getView().getModel();
var sName = oContext.getProperty("name");
var sType = oContext.getProperty("type");
var iLen = oContext.getProperty("maxLength");
iLen = iLen ? parseInt(iLen, 10) : 10;
return new Column(sId, {
sortProperty: sName,
filterProperty: sName,
width: (iLen > 9 ? (iLen > 50 ? 15 : 10) : 5) + "rem",
label: new sap.m.Label({text: "{/#Orders/" + sName + "/@name}"}),
hAlign: sType && sType.indexOf("Decimal") >= 0 ? "End" : "Begin",
template: new Text({text: {path: sName}})
});
}
});
});
描述应用程序逻辑
创建包含应用程序资源的组件。在组件. js 中定义以下内容:
sap.ui.define([
'sap/ui/core/UIComponent'
], function(UIComponent) {
"use strict";
return UIComponent.extend("sap.ui.table.sample.OData2.Component", {
metadata : {
rootView : "sap.ui.table.sample.OData2.View",
dependencies : {
libs : [
"sap.ui.table",
"sap.ui.unified",
"sap.m"
]
},
config : {
sample : {
stretch : true,
files : [
"View.view.xml",
"Controller.controller.js"
]
}
}
}
});
});
引导 OpenUI5 和启动
要完成 MVC 应用程序, 只需添加引导和初始化代码即可。将这些直接添加到索引. html:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta charset="utf-8">
<title>Redshift Orders</title>
<script id="sap-ui-bootstrap"
src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
data-sap-ui-libs="sap.m"
data-sap-ui-theme="sap_bluecrystal"
data-sap-ui-xx-bindingSyntax="complex"
data-sap-ui-preload="async"
data-sap-ui-compatVersion="edge"
data-sap-ui-resourceroots='{"sap.ui.table.sample.OData2": "./", "sap.ui.demo.mock": "mockdata"}'>
</script>
<!-- application launch configuration -->
<script>
sap.ui.getCore().attachInit(function() {
new sap.m.App ({
pages: [
new sap.m.Page({
title: "Redshift Orders",
enableScrolling : false,
content: [ new sap
核心. ComponentContainer ({高度: “100%”, 名称: “sap.ui.table.sample.OData2”})]})]}). 碰上 (“内容”);
});
</脚本 > </头 > <!–UI 内容-> < 正文类 = “sapUiBody” id = “内容” 角色 = “应用程序” > </身体 > </html >
生成的 SAPUI5 表控件反映对远程红移数据中表的任何更改。现在, 您可以浏览和搜索当前的红移数据。