第一章 服务器端javascript XSJS
按照我们以往开发应用的经验,有客户端开发和服务器端开发。客户端开发在HANA XS应用开发里可以使用SAPUI5,一个完全运行在客户端的JS框架。那么我们也需要开发服务器端逻辑。HANA有SQLScript,但是它没法完全承担起服务器端开发的任务,不然O记也不需要JAVA,所有的应用都用PL/SQL好了。HANA XS应用的服务器端开发语言,依然是javascript。SAP选择了Mozilla SpiderMonkey https://developer.mozilla.org/en/docs/SpiderMonkey 作为服务器端JS的虚拟机。不知道为什么没有选择google的V8。SAP选择SJ作为服务器端编程语言,我觉得主要考虑还是因为它够轻量级。因为本身XS Engine就是一个轻量级的应用服务器,当然也要有一个足够轻量级的编程语言。
HANA XS的服务器端JS API参考手册在http://help.sap.com/hana/jsapi/index.html HANA XS的JS API的底层实现是由C/C++实现然后以JS API的方式暴露,似的开发人员能够用JS这种易用的语言调用。它能够与HANA XS引擎交互、直接访问HANA DB、处理HTTP请求等。
第二章 创建XSJS服务
本章只是让大家体验一下服务器端JS,有一个感性的认识。从HANA Studio,有一个创建选项:XS Javascript source file,这就是创建XS服务器端JS。
本章的示例代码为:
function
performMultiply(){
var
body =
''
;
var
num1 = $.request.parameters.get(
'num1'
);
var
num2 = $.request.parameters.get(
'num2'
);
var
answer;
answer = num1 * num2;
body = answer.toString();
$.response.setBody(body);
$.response.status = $.net.http.OK;
}
var
aCmd = $.request.parameters.get(
'cmd'
);
switch
(aCmd) {
case
"multiply"
:
performMultiply();
break
;
default
:
$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
$.response.setBody(
'Invalid Command: '
+aCmd);
}
我们可以看到,与当年写JAVA Servlet入门程序是很相像的,在服务器端解析http request请求,执行操作,然后构建http response文件。HANA XS JS的API是以美元符号作为前缀的。激活之后就可以打开浏览器运行测试了。
第三章 扩展XSJS服务
本章在上一章基础上演示了一个更复杂一点的XSJS代码。主要的功能是在计算乘法的基础上可以下载excel文件。示例代码如下:
$.import( "sap.hana.democontent.epm.services" , "messages" );
var MESSAGES = $.sap.hana.democontent.epm.services.messages;
function performMultiply(){
var body = '' ;
var num1 = $.request.parameters.get( 'num1' );
var num2 = $.request.parameters.get( 'num2' );
var answer;
answer = num1 * num2;
body = answer.toString();
$.response.setBody(body);
$.response.status = $.net.http.OK;
} function downloadExcel() {
var body = '' ;
try {
var query = 'SELECT TOP 25000 \"PurchaseOrderId\", \"PartnerId\", \"CompanyName\", \"CreatedByLoginName\", \"CreatedAt\", \"GrossAmount\" '
+ 'FROM \"sap.hana.democontent.epm.data::purchaseOrderHeaderExt\" order by \"PurchaseOrderId\"' ;
$.trace.debug(query);
var conn = $.db.getConnection();
var pstmt = conn.prepareStatement(query);
var rs = pstmt.executeQuery();
body = MESSAGES.getMessage( 'SEPM_POWRK' , '002' ) + "\t " + // PurchaseOrder ID
MESSAGES.getMessage('SEPM_POWRK', '003') + " \t " + // Partner ID
MESSAGES.getMessage('SEPM_POWRK', '001') + " \t " + // Company Name
MESSAGES.getMessage('SEPM_POWRK', '004') + " \t " + // Employee Responsible
MESSAGES.getMessage('SEPM_POWRK', '005') + " \t " + // Created At
MESSAGES.getMessage('SEPM_POWRK', '006') + " \n "; // Gross Amount
while (rs.next()) {
body += rs.getNString(1) + " \t " + rs.getNString(2) + " \t "
+ rs.getNString(3) + " \t " + rs.getNString(4) + " \t "
+ rs.getDate(5) + " \t " + rs.getDecimal(6) + " \n ";
}
} catch (e) {
$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
$.response.setBody(e.message);
return;
}
$.response.setBody(body);
$.response.contentType = 'application/vnd.ms-excel; charset=utf-16le';
$.response.headers.set('Content-Disposition',
'attachment; filename=Excel.xls');
$.response.headers.set('access-control-allow-origin', '*');
$.response.status = $.net.http.OK;
} var aCmd = $.request.parameters.get('cmd'); switch (aCmd) { case " multiply ":
performMultiply();
break;
case " Excel":
downloadExcel();
break ;
default :
$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
$.response.setBody(MESSAGES.getMessage( 'SEPM_ADMIN' , '002' , aCmd));
} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
sap.ui.jsview( "sapui5.xsjstest" , {
getControllerName : function () {
return "sapui5.xsjstest" ;
},
createContent : function (oController) {
var multiplyPanel = new sap.ui.commons.Panel().setText( "XS Service Test - Multiplication" );
multiplyPanel.setAreaDesign sap.ui.commons.enums.AreaDesign.Fill);
multiplyPanel.setBorderDesign sap.ui.commons.enums.BorderDesign.Box);
var layoutNew = new sap.ui.commons.layout.MatrixLayout({width: "auto" });
multiplyPanel.addContent(layoutNew);
var oVal1 = new sap.ui.commons.TextField( "val1" ,{tooltip: "Value #1" , editable: true });
var oVal2 = new sap.ui.commons.TextField( "val2" ,{tooltip: "Value #2" , editable: true });
var oResult = new sap.ui.commons.TextView( "result" ,{tooltip: "Results" });
var oEqual = new sap.ui.commons.TextView( "equal" ,{tooltip: "Equals" , text: " = " });
var oMult = new sap.ui.commons.TextView( "mult" ,{tooltip: "Multiply by" , text: " * " });
//Attach a controller event handler to Value 1 Input Field
oVal1.attachEvent( "liveChange" , function (oEvent){
oController.onLiveChangeV1(oEvent,oVal2); });
//Attach a controller event handler to Value 2 Input Field
oVal2.attachEvent( "liveChange" , function (oEvent){
oController.onLiveChangeV2(oEvent,oVal1); });
layoutNew.createRow(oVal1, oMult, oVal2, oEqual, oResult );
return multiplyPanel;
}
}); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
onLiveChangeV1: function (oEvent,oVal2){
//To-Do: Insert Service Call to XSJS Service
var aUrl = '../../../services/Example1.xsjs?cmd=multiply' +
'&num1=' +escape(oEvent.getParameters().liveValue)+
'&num2=' +escape(oVal2.getValue());
jQuery.ajax({
url: aUrl,
method: 'GET' ,
dataType: 'json' ,
success: this .onCompleteMultiply,
error: this .onErrorCall });
},
onLiveChangeV2: function (oEvent,oVal1){
//To-Do: Insert Service Call to XSJS Service
var aUrl = '../../../services/Example1.xsjs?cmd=multiply' +
'&num1=' +escape(oVal1.getValue())+
'&num2=' +escape(oEvent.getParameters().liveValue);
jQuery.ajax({
url: aUrl,
method: 'GET' ,
dataType: 'json' ,
success: this .onCompleteMultiply,
error: this .onErrorCall });
},
onCompleteMultiply: function (myTxt){
var oResult = sap.ui.getCore().byId( "result" );
if (myTxt==undefined){ oResult.setText(0); }
else {
jQuery.sap.require( "sap.ui.core.format.NumberFormat" );
var oNumberFormat = sap.ui.core.format.NumberFormat.getIntegerInstance({
maxFractionDigits: 12,
minFractionDigits: 0,
groupingEnabled: true });
oResult.setText(oNumberFormat.format(myTxt)); }
},
onErrorCall: function (jqXHR, textStatus, errorThrown){
sap.ui.commons.MessageBox.show(jqXHR.responseText,
"ERROR" ,
"Service Call Error" );
return ;
}
|
相关推荐
ERP软件:SAP二次开发_SAP HANA集成开发.docx ERP软件:SAP二次开发_SAPWebDynpro开发.docx ERP软件:SAP二次开发_SAP二次开发中的数据管理.docx ERP软件:SAP二次开发_SAP二次开发最佳实践与案例分析.docx ERP软件...
- 用户设置调整:SAP HANA Cockpit允许你调整用户设置,如语言、主题和通知设置,以适应个人偏好。 - 使用“我的视图”:你可以创建和保存自己的视图,方便快速访问常用的功能或数据。 通过以上内容,SAP HANA...
S/4HANA On-Premise版本是一个基于SAP HANA内存数据库的ERP业务套件,允许企业在私有云或公有云上部署,提供全面的功能和高度的定制性。这种部署方式适合大型企业,它们通常有复杂的业务流程和较高的定制需求,同时...
- **多层架构**:SAP HANA采用的多层架构,包括应用程序服务器层、计算层和持久存储层。 #### 2. 高可用性配置 - **系统复制**:了解如何通过系统复制实现节点之间的数据同步,确保高可用性。 - **热备份节点**:...
5. **安装组件**:SAP HANA Studio包含多个组件,如开发工具、模型工具、数据库连接器等。安装过程中,根据你的需求选择要安装的组件。 6. **连接HANA实例**:安装完成后,需要配置连接到你的SAP HANA数据库实例。...
SAP HANA Studio是SAP公司为开发和管理基于SAP HANA数据库的应用程序而设计的一款集成开发环境(IDE)。这个“SAP-HANA-STUDIO-2.3.37”压缩包文件包含了该版本的SAP HANA Studio安装程序,用于在用户的计算机上部署...
这是一本介绍SAP PPDS组件功能的文档,主要介绍S4 HANA或SCM中关于高级计划管理的相关功能
4. SAP HANA 基于内存创新技术:SAP HANA基于内存创新技术,可以实时处理大量数据,具有高性能和实时分析能力。 5. 华为RH2288H V2服务器、E9000刀片服务器、RH5885H V3服务器和RH8100 V3服务器认证版本SAP HANA...
《SAP HANA 管理指南》是针对SAP HANA平台的详细操作手册,旨在帮助管理员有效地管理和维护SAP HANA数据库系统。本文档适用于SAP HANA Platform 2.0 SPS 04版本,由SAP SE或其关联公司在2019年10月31日发布,所有...
1. **SAP HANA**:SAP HANA(High-Performance Analytic Appliance)是一款基于列存储的内存数据库系统,它将数据存储、处理和分析功能集中在内存中,从而提供极高的数据处理速度。 2. **HANA Studio**:作为SAP ...
String url = "jdbc:sap://your-hana-server:30015/?databaseName=YOURDB"; String user = "your-username"; String password = "your-password"; try { Class.forName("com.sap.db.jdbc.Driver"); ...
SAP HANA ODBC DRIVER(HANA客户端2.0-2.7.21-windows-x64)是一款专为Windows 64位操作系统设计的数据库连接驱动程序,它允许应用程序通过Open Database Connectivity (ODBC)标准与SAP HANA数据库进行通信。...
主要内容包括:SAPHANA的各个特性;SAPHANAStudio;属性视图;分析视图;图形化计算视图;用SQLScript创建计算视图;SAPHANA系统的授权机制;SAPHANA的层级;如何将SAPHANA数据模型部署到3个不同的工具中;如何使用...
根据给定文件的信息,我们可以提炼出关于"SAP S/4HANA 销售中的业务流程"的相关知识点。以下是对这份文档的关键内容进行的详细解读: ### SAP S/4HANA 销售中的业务流程 #### 教程概述 - **教程版本**:12 - **...
SAP HANA HA100 - SAP HANA Introduction(Col99).pdf
Thishandbookisintendedtocomplementtheinstructor-ledpresentationofthis course,andserveasasourceofreference. Itisnotsuitableforself-study
SAP_HANA_Modeling_Guide_en
SAP HANA Studio是一款专为SAP HANA数据库设计的集成开发环境(IDE),它提供了全方位的工具和服务,便于开发者、管理员以及数据分析师对HANA系统进行管理和开发。这款工具在X64平台上运行,其Version 2.3.37确保了...
SAP HANA HA300 - SAP HANA Implementation and Modelling(Col99).pdf
SAP BW/4HANA Content Add-On 是一个基于 SAP HANA 的商业智能解决方案,旨在帮助企业更好地管理其财务和控制流程。该解决方案提供了一系列的内容和工具,旨在帮助企业快速建立财务报表、预测、分析和规划等功能。 ...