SlideShare a Scribd company logo
1 of 146
Download to read offline
1 
Ā©2014 SAP AG or an SAP affiliate company. All rights reserved. 
SAP HANA SPS 09 - Whatā€™s New? XS Programming Model 
SAP HANA Product Management November, 2014 
(Delta from SPS 08 to SPS 09)
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
2 
Public 
Agenda 
Miscellaneous Improvements 
Security 
ļ‚ŸUser Handling 
Outbound HTTP 
New Database Interface 
Core XSJS APIs 
ļ‚ŸSMTP 
ļ‚ŸZIP 
Job Scheduling 
OData 
Web Dispatcher 
XS Admin 
ļ‚ŸSelf Service 
ļ‚ŸLogon Screen 
HANA Test Tools 
CDS 
ļ‚ŸLifecycle Management 
XSDS 
ļ‚ŸManaged 
ļ‚ŸUnmanaged 
ļ‚ŸProcedures 
Repository REST APIs
Miscellaneous Improvements
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
4 
Public 
HANA XS SPS9: Miscellaneous Improvements 
New Mozilla VM (currently 28) 
Relaxed strict mode settings of the JS VM 
New Thread Model 
OData execution tracking (SP9: GET only) 
Usage Statistics
Security Features
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
6 
Public 
HANA XS SPS9: Misc. Security Features 
Full CORS support (Cross-Origin Resource Sharing) 
Secure http session cookies 
Support for Client Certificates from F5ā€™s BigIP 
Custom Headers/X-Frame 
SAML Single Logout (SLO) 
SAML Authentication in Authorization header 
Support of Virus Scan Interface (VSI) for applications
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
7 
Public 
HANA XS SPS9: Misc. Security Features ā€“ CORS Support 
Full CORS support (Cross-Origin Resource Sharing) 
ā€¢Filtering by origins, headers, and methods
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
8 
Public 
HANA XS SPS9: Misc. Security Features ā€“ Custom Headers/X-Frame 
Custom Headers/X-Frame 
ā€¢Controls if the browser should allow a page to be rendered in a frame, iframe, or object. 
ā€¢Avoids clickjacking attacks by keeping content from being embedded in a malicious site
User Handling
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
10 
Public 
HANA XS SPS9: Recommended User Handling 
Recommended default pattern: no SQL privileges for end-users! 
Named DB users are used for logon and assignment of XS application privileges 
Default connection is used to switch to technical user for all DB access 
ļ‚ŸAccess to name/ID of logged-on user still possible 
ļ‚ŸInstance filtering is still done for the logged-on user 
Improved Support for Close Cooperation with ABAP Applications 
Logon via SAML or SAP Logon Tickets is possible even without named DB User! 
Programmatic alternative (SqlScript) to XS application privileges
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
11 
Public 
User handling in XS Plain DB user 
ā€¢The logon maps to the personal DB user, who is used for checking XS application privileges 
ā€¢SQL connections are opened for the personal DB user, who is thus also used for checking SQL privileges 
ā€¢Instance-filtering is also done with personal DB user 
ā€¢Personal DB user needs SQL privileges which he can abuse via SQL Console/Studio
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
12 
Public 
User handling in XS SQLCC scenario (best practice for stand-alone XS Apps) 
ā€¢The logon maps to the personal DB user 
ā€¢XS privilege checks are done with this user 
ā€¢Package without configured default connection 
ā€¢OData services and plain DB access from XSJS are not recommended, to avoid granting SQL privileges to personal DB users 
ā€¢Controlled navigation to non-exposed packages which have a configured default connection 
ā€¢Packages with configured default connection 
ā€¢All SQL connections (xsjs and OData) are opened for the configured default connection, which is thus used for checking all SQL privilges 
ā€¢Instance-filtering is not possible (planned for SPS09) Personal DB user needs only XS Privileges
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
13 
Public 
User handling in XS Anonymous section scenario 
ā€¢No logon is enforced 
ā€¢XS privilege checks will fail 
ā€¢Package without configured default connection 
ā€¢OData services and plain DB access from XSJS are not possible 
ā€¢navigation to packages with XS privilege check is not possible 
ā€¢Packages with configured default connection 
ā€¢All SQL connections (xsjs and OData) are opened for the configured default connection, which is thus used for checking all SQL privileges 
ā€¢Instance-filtering is not possible
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
14 
Public 
User handling in XS Technical user scenario 
ā€¢The logon is successful without mapping to a personal DB user 
ā€¢XS privilege checks will fail 
ā€¢Package without configured default connection 
ā€¢DB access not possible 
ā€¢Packages with configured default connection 
ā€¢All SQL connections (xsjs and OData) are opened for the configured sqlcc user, which is thus used for checking all SQL privileges 
ā€¢Instance-filtering is done with logon user
Outbound Connectivity
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
16 
Public 
HANA XS SPS9: Additional features for Outbound Connectivity 
Anonymous Outbound SSL supported 
Act as SAML 2.0 ID Provider 
OAuth 2.0 client 
Option to Enforce Proxy for all outgoing communication
New Database Interface
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
18 
Public 
New database interface 
Performance gain 
ā€¢Achieves higher throughput 
ā€¢Better scale out support 
ā€¢Minimal remote traffic 
Usability improvements 
ā€¢Simple and easy to use JavaScript interface 
ā€¢Code reduction 
ā€¢No boilerplate code 
Light-weight architecture 
ā€¢Based upon thin C++ client library 
ā€¢No SQL Processing in XS layer 
ā€¢Uses internal HANA communication protocol
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
19 
Public 
New database interface Examples ā€“ old $.db interface 
var conn = $.db.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item" ā€˜ + ' WHERE "PRODUCT.PRODUCTID" = ? '; var pstmt = conn.prepareStatement(query); pstmt.setString(1, productId); var rs = pstmt.executeQuery(); var body = ''; while (rs.next()) { var gross = rs.getDecimal(6); if(gross >= 500){ body += rs.getNString(1) + "t" + rs.getNString(2) + "t" + rs.getNString(3) + "t" + rs.getDecimal(6) + "n"; } } rs.close(); pstmt.close();
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
20 
Public 
New database interface Examples ā€“ old $.db interface 
var conn = $.db.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item" ā€˜ + ' WHERE "PRODUCT.PRODUCTID" = ? '; var pstmt = conn.prepareStatement(query); pstmt.setString(1, productId); var rs = pstmt.executeQuery(); var body = ''; while (rs.next()) { var gross = rs.getDecimal(6); if(gross >= 500){ body += rs.getNString(1) + "t" + rs.getNString(2) + "t" + rs.getNString(3) + "t" + rs.getDecimal(6) + "n"; } } rs.close(); pstmt.close(); 
Parameters set via separate command ā€“ type specific
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
21 
Public 
New database interface Examples ā€“ old $.db interface 
var conn = $.db.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item" ā€˜ + ' WHERE "PRODUCT.PRODUCTID" = ? '; var pstmt = conn.prepareStatement(query); pstmt.setString(1, productId); var rs = pstmt.executeQuery(); var body = ''; while (rs.next()) { var gross = rs.getDecimal(6); if(gross >= 500){ body += rs.getNString(1) + "t" + rs.getNString(2) + "t" + rs.getNString(3) + "t" + rs.getDecimal(6) + "n"; } } rs.close(); pstmt.close(); 
Returned Record Set ā€“ no random access, one loop sequential
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
22 
Public 
New database interface Examples ā€“ old $.db interface 
var conn = $.db.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item" ā€˜ + ' WHERE "PRODUCT.PRODUCTID" = ? '; var pstmt = conn.prepareStatement(query); pstmt.setString(1, productId); var rs = pstmt.executeQuery(); var body = ''; while (rs.next()) { var gross = rs.getDecimal(6); if(gross >= 500){ body += rs.getNString(1) + "t" + rs.getNString(2) + "t" + rs.getNString(3) + "t" + rs.getDecimal(6) + "n"; } } rs.close(); pstmt.close(); 
Each cell must be read with another type specific function call
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
23 
Public 
New database interface Examples ā€“ new $.hdb interface 
var conn = $.hdb.getConnection(); 
var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item"' + 
' WHERE "PRODUCT.PRODUCTID" = ?'; 
var rs = conn.executeQuery(query,productId); 
var body = ''; 
for(var i = 0; i < rs.length; i++){ 
if(rs[i]["GROSSAMOUNT"] >= 500){ 
body += rs[i]["HEADER.PURCHASEORDERID"] + "t" + rs[i]["PURCHASEORDERITEM"] + "t" + rs[i]["PRODUCT.PRODUCTID"] + "t" + rs[i]["GROSSAMOUNT"] + "n"; 
} 
}
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
24 
Public 
New database interface Examples ā€“ new $.hdb interface 
var conn = $.hdb.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item"' + ' WHERE "PRODUCT.PRODUCTID" = ?'; var rs = conn.executeQuery(query,productId); var body = ''; for(var i = 0; i < rs.length; i++){ if(rs[i]["GROSSAMOUNT"] >= 500){ body += rs[i]["HEADER.PURCHASEORDERID"] + "t" + rs[i]["PURCHASEORDERITEM"] + "t" + rs[i]["PRODUCT.PRODUCTID"] + "t" + rs[i]["GROSSAMOUNT"] + "n"; } } 
Parameters are sent into the execute function directly ā€“ not type specific
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
25 
Public 
New database interface Examples ā€“ new $.hdb interface 
var conn = $.hdb.getConnection(); 
var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item"' + 
' WHERE "PRODUCT.PRODUCTID" = ?'; 
var rs = conn.executeQuery(query,productId); 
var body = ''; 
for(var i = 0; i < rs.length; i++){ 
if(rs[i]["GROSSAMOUNT"] >= 500){ 
body += rs[i]["HEADER.PURCHASEORDERID"] + "t" + rs[i]["PURCHASEORDERITEM"] + "t" + rs[i]["PRODUCT.PRODUCTID"] + "t" + rs[i]["GROSSAMOUNT"] + "n"; 
} 
} 
Returned Record Set is a JSON object ā€“ direct index access or easy looping
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
26 
Public 
New database interface Examples ā€“ new $.hdb interface 
var conn = $.hdb.getConnection(); 
var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item"' + 
' WHERE "PRODUCT.PRODUCTID" = ?'; 
var rs = conn.executeQuery(query,productId); 
var body = ''; 
for(var i = 0; i < rs.length; i++){ 
if(rs[i]["GROSSAMOUNT"] >= 500){ 
body += rs[i]["HEADER.PURCHASEORDERID"] + "t" + rs[i]["PURCHASEORDERITEM"] + "t" + rs[i]["PRODUCT.PRODUCTID"] + "t" + rs[i]["GROSSAMOUNT"] + "n"; 
} 
} 
Record Set object doesnā€™t materialize the data into JavaScript VM
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
27 
Public 
New database interface Examples ā€“ new $.hdb interface 
var conn = $.hdb.getConnection(); 
var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item"' + 
' WHERE "PRODUCT.PRODUCTID" = ?'; 
var rs = conn.executeQuery(query,productId); 
var body = ''; 
for(var i = 0; i < rs.length; i++){ 
if(rs[i]["GROSSAMOUNT"] >= 500){ 
body += rs[i]["HEADER.PURCHASEORDERID"] + "t" + rs[i]["PURCHASEORDERITEM"] + "t" + rs[i]["PRODUCT.PRODUCTID"] + "t" + rs[i]["GROSSAMOUNT"] + "n"; 
} 
} 
Individual Cells accessible by name / not type specific
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
28 
Public 
New database interface Debugging 
New interface makes debugging easier as the result set is JSON and fully accessible in the debugger
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
29 
Public 
New database interface Examples ā€“ new $.hdb interface, JSON RecordSet 
var connection = $.hdb.getConnection(); 
var results = connection.executeQuery( 
'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.MasterData.Employees" ' + 
'WHERE LOGINNAME <> ?', 'EPM_USER'); 
$.response.setBody(JSON.stringify(results)); 
Result Record Set is JSON; ready for output
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
30 
Public 
New database interface Examples ā€“ new $.hdb interface, Stored Procedures 
var connection = $.hdb.getConnection(); 
var partnerRole = $.request.parameters.get("PartnerRole"); 
partnerRole = typeof partnerRole !== 'undefined' ? partnerRole : '01'; 
var getBpAddressesByRole = connection.loadProcedure("SAP_HANA_EPM_NEXT", 
"sap.hana.democontent.epmNext.procedures::get_bp_addresses_by_role"); 
var results = getBpAddressesByRole(partnerRole); 
//Pass output to response 
$.response.status = $.net.http.OK; 
$.response.contentType = "application/json"; 
$.response.setBody(JSON.stringify(results)); 
Procedure has a JavaScript function ā€œproxyā€
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
31 
Public 
New database interface Examples ā€“ new $.hdb interface, Stored Procedures 
var connection = $.hdb.getConnection(); 
var partnerRole = $.request.parameters.get("PartnerRole"); 
partnerRole = typeof partnerRole !== 'undefined' ? partnerRole : '01'; 
var getBpAddressesByRole = connection.loadProcedure("SAP_HANA_EPM_NEXT", 
"sap.hana.democontent.epmNext.procedures::get_bp_addresses_by_role"); 
var results = getBpAddressesByRole(partnerRole); 
//Pass output to response 
$.response.status = $.net.http.OK; 
$.response.contentType = "application/json"; 
$.response.setBody(JSON.stringify(results)); 
JavaScript input parameters / Table parameters as JSON
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
32 
Public 
New database interface Examples ā€“ new $.hdb interface, Stored Procedures 
var connection = $.hdb.getConnection(); 
var partnerRole = $.request.parameters.get("PartnerRole"); 
partnerRole = typeof partnerRole !== 'undefined' ? partnerRole : '01'; 
var getBpAddressesByRole = connection.loadProcedure("SAP_HANA_EPM_NEXT", 
"sap.hana.democontent.epmNext.procedures::get_bp_addresses_by_role"); 
var results = getBpAddressesByRole(partnerRole); 
//Pass output to response 
$.response.status = $.net.http.OK; 
$.response.contentType = "application/json"; 
$.response.setBody(JSON.stringify(results)); 
Result Record Set is also JSON
New Core XSJS APIs
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
34 
Public 
HANA XS SPS9: New XSJS-APIs 
SMTP (sending mails from xsjs application code) 
ZIP and GZIP support (read and write) 
XML parsing support 
Secure Store for applications 
Better Multipart Support 
Asynchronous request completion 
Text Access 
Text Mining 
Management of Scheduled Jobs 
Various utility functions (hash, encrypt) 
AntiVirus for applications
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
35 
Public 
New XSJS-APIs Examples ā€“ SMTP 
var mail = new $.net.Mail({ 
sender: {address: "demo@sap.com"}, 
to: [{ address: "user@sap.com"}], 
subject: "XSJS Email Test", 
parts: [ new $.net.Mail.Part({ 
type: $.net.Mail.Part.TYPE_TEXT, 
text: "The body of the mail.", 
contentType: "text/plain" 
})] 
}); 
var returnValue = mail.send(); 
var response = "MessageId = " + returnValue.messageId + 
", final reply = " + returnValue.finalReply;
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
36 
Public 
New XSJS-APIs Examples ā€“ SMTP with attachment 
var mail = new $.net.Mail({ 
sender: {address: "demo@sap.com"}, 
to: [{ address: "user@sap.com"}], 
subject: "XSJS Email Test", 
parts: [ new $.net.Mail.Part({ 
type: $.net.Mail.Part.TYPE_TEXT, 
text: "Atachement Test", 
contentType: "text/plain" 
})] 
}); 
mail.parts.push(new $.net.Mail.Part({ 
type: $.net.Mail.Part.TYPE_ATTACHMENT, 
data: getImage(), 
contentType: "image/jpg", 
fileName: "myPicture.jpg"})); 
var returnValue = mail.send();
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
37 
Public 
New XSJS-APIs Examples ā€“ SMTP Configuration
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
38 
Public 
New XSJS-APIs Examples ā€“ ZIP 
var zip = new $.util.Zip(); 
zip["folder1/demo1.txt"] = "This is the new ZIP Processing in XSJS"; 
zip["demo2.txt"] = "This is also the new ZIP Processing in XSJS"; 
$.response.status = $.net.http.OK; 
$.response.contentType = "application/zip"; 
$.response.headers.set('Content-Disposition', "attachment; filename = 'ZipExample.zip'"); 
$.response.setBody(zip.asArrayBuffer());
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
39 
Public 
New XSJS-APIs Examples ā€“ ZIP 
var zip = new $.util.Zip(); 
zip["folder1/demo1.txt"] = "This is the new ZIP Processing in XSJS"; 
zip["demo2.txt"] = "This is also the new ZIP Processing in XSJS"; 
$.response.status = $.net.http.OK; 
$.response.contentType = "application/zip"; 
$.response.headers.set('Content-Disposition', "attachment; filename = 'ZipExample.zip'"); 
$.response.setBody(zip.asArrayBuffer()); 
Folder structure in ZIP simply by specify the full path as you create the content
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
40 
Public 
New XSJS-APIs Examples ā€“ ZIP Continued 
Load Zip directly from web request object ā€“ avoid moving content into JavaScript variable 
var zip = new $.util.Zip($.request.body); 
Similar direct access for Record Set result object of a database query 
statement = conn.prepareStatement("select data from EXAMPLETABLE where id=1"); 
var rs = statement.executeQuery(); 
if (rs) { 
while (rs.next()) { 
//Load Zip From ResultSet 
var loadedZip = new $.util.Zip(rs, 1); 
} 
}
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
41 
Public 
New XSJS-APIs Examples ā€“ XML 
var parser = new $.util.SAXParser(); 
//parse XML from String 
var parser = new $.util.SAXParser(); 
var xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>n' + 
'<!-- this is a note -->n'+'<note noteName="NoteName">'+ 
'<to>To</to>'+'<from>From</from>'+'<heading>Note heading</heading>'+ 
'<body>Note body</body>'+'</note>'; 
var startElementHandlerConcat = ""; 
parser.startElementHandler = function(name, atts) { 
startElementHandlerConcat += name; 
if (name === "note") { 
startElementHandlerConcat += " noteName = '" + atts.noteName + "'"; 
} 
startElementHandlerConcat += "n"; 
}; 
parser.parse(xml);
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
42 
Public 
New XSJS-APIs Examples ā€“ Improved Multi-Part 
var i; 
var n = $.request.entities.length; 
var client = new $.net.http.Client(); 
for (i = 0; i < n; ++i) { 
var childRequest = $.request.entities[i].body.asWebRequest(); 
client.request(childRequest, childRequest.headers.get("Host") + childRequest.path); 
var childResponse = client.getResponse(); 
var responseEntity = $.response.entities.create(); 
responseEntity.setBody(childResponse); 
}
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
43 
Public 
New XSJS-APIs Examples ā€“ Response Callback 
$.response.followUp({ 
uri : "playground.sp9.followUp:other.xsjs", 
functionName : "doSomething", 
parameter : { 
a : "b" 
} 
});
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
44 
Public 
New XSJS-APIs Examples ā€“ Text Access 
var textAccess = $.import("sap.hana.xs.i18n","text"); 
var bundle = textAccess.loadBundle("playground.sp9.textAccess","demo1"); 
var singleText = bundle.getText("demo"); 
var replaceText = bundle.getText("demo2",['1001']); 
var oAllTexts = bundle.getTexts();
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
45 
Public 
New XSJS-APIs Examples ā€“ AntiVirus 
try { 
//create a new $.security.AntiVirus object using the default profile 
var av = new $.security.AntiVirus(); 
av.scan($.request.body); 
} catch (e) { 
$.response.setBody(e.toString()); 
} 
ā€¢The scan needs a Virus Scan Adapter (VSA) to be installed on the host 
ā€¢The setup and configuration is available with SAP note 2081108 
ā€¢This class uses the SAP certified interface NW-VSI 2.00 (see SAP note 1883424) 
ā€¢For a list of the AV products supported, see SAP note 1494278
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
46 
Public 
New XSJS-APIs Examples ā€“ Secure Store 
function store() { 
var config = { 
name: "foo", 
value: "bar" 
}; 
var aStore = new $.security.Store("localStore.xssecurestore"); 
aStore.store(config); 
} 
function read() { 
var config = { 
name: "foo" 
}; 
try { 
var store = new $.security.Store("localStore.xssecurestore"); 
var value = store.read(config); 
} 
catch(ex) { 
//do some error handling 
} 
}
Job Scheduling
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
48 
Public 
HANA XS SPS9: Scheduled Jobs 
Robustness 
ļ‚ŸActive jobs will not block DU import anymore 
ļ‚ŸNo hick-up of scheduling, even in case of process crashes 
Enhanced xsjs API for Job Management 
ļ‚ŸEnumerate schedules of a job object (access as e.g. myjob.schedules[19]) 
ļ‚ŸModify schedules via properties (xscron, description, parameter like myjob.schedules[19].xscron = ā€œ* * * * * * *ā€;) 
ļ‚ŸExpose job_log entries of a schedule as a property (like myjob.schedules[19].logs.jobLog) 
Enhanced support for SqlScript parameters 
ļ‚ŸScalar parameters 
ļ‚ŸReferences to tables 
ļ‚ŸCreating local tables by type 
New Management UI (XS Job Dashboard)
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
49 
Public 
HANA XS SPS9: Scheduled Jobs ā€“ New Management UI 
New Management UI (XS Job Dashboard) 
URL: /sap/hana/xs/admin/jobs/
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
50 
Public 
HANA XS SPS9: Scheduled Jobs ā€“ New Management UI Continued 
New Management UI (XS Job Dashboard) 
Drill into details of a single job definition from Job Dashboard or from the XS Admin tool
OData
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
52 
Public 
HANA XS SPS9: OData 
Configurable Cache-settings for Metadata-Document 
E-Tag support 
Automatic parallelization for GET batch requests 
INA Search capabilities integrated into OData
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
53 
Public 
OData Explorer 
SAP River application explorer rebuilt as SAP OData Explorer in SPS09 
ā€¢General OData test and data generation tool which supports XSODATA services 
ā€¢Launches from the SAP Web- based Development Workbench or via URL 
ā€¢/sap/hana/ide/editor/plugin/testtools/odataexplorer/index.html?appName=<xsodata service path>
Web Dispatcher
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
55 
Public 
HANA XS SPS9: Local Web Dispatcher 
Full Integration into HANA Process Management 
ļ‚ŸMonitoring 
ļ‚ŸConfiguration 
ļ‚ŸAdministration
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
56 
Public 
HANA XS SPS9: Local Web Dispatcher 
Full Integration into HANA Process Management 
ļ‚ŸMonitoring
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
57 
Public 
HANA XS SPS9: Local Web Dispatcher 
Full Integration into HANA Process Management 
ļ‚ŸConfiguration
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
58 
Public 
HANA XS SPS9: Local Web Dispatcher 
Full Integration into HANA Process Management 
ļ‚ŸAdministration 
ā€“URL: /sap/hana/xs/wdisp/admin/public/
XS Admin Tool
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
60 
Public 
HANA XS SPS9: HANA XS Admin Tool 
Much improved usability 
User Self Service 
UI of Logon Screen is Customizable
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
61 
Public 
HANA XS SPS9: HANA XS Admin Tool ā€“ new visual design
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
62 
Public 
HANA XS SPS9: HANA XS Admin Tool: Scheduled Jobs ā€“ New Management UI 
New Management UI (XS Job Dashboard) 
URL: /sap/hana/xs/admin/jobs/
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
63 
Public 
HANA XS SPS9: HANA XS Admin Tool: Scheduled Jobs ā€“ New Management UI Continued 
New Management UI (XS Job Dashboard) 
Drill into details of a single job definition from Job Dashboard or from the XS Admin tool
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
64 
Public 
HANA XS SPS9: Customize Login Screen 
Custom background image set via xsengine.ini -> httpserver parameter
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
65 
Public 
HANA XS SPS9: User Self Service 
/sap/hana/xs/selfService/user/resetPassword.html
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
66 
Public 
HANA XS SPS9: User Self Service 
/sap/hana/xs/selfService/user/requestAccount.html
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
67 
Public 
HANA XS SPS9: User Self Service ā€“ Admin 
/sap/hana/xs/selfService/admin/
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
68 
Public 
HANA XS SPS9: User Self Service ā€“ User Profile 
/sap/hana/xs/formLogin/profile/
HANA Test Tools
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
70 
Public 
HANA XS SPS9: Test Framework 
Unit Test Framework 
Mock Framework 
(shipped with HANA, but not pre-installed)
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
71 
Public 
Contents of HANA_TEST_TOOLS Delivery Unit 
ā€¢XS Unit Test Framework and Test Runner (unit.jsaminexs) 
ā€¢XSUnit Test Coverage for XS JavaScript (unit.codecoverage) 
ā€¢Test Isolation Framework (mockstar) 
ā€¢Test Helper (unit.util) 
ā€¢Developer Documentation (doc) 
ā€¢Demos (demo)
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
72 
Public 
How to create an XSUnit Test 
ā€¢One common tool for testing XS JavaScript, database content: SQLScript, Views 
ā€¢Based on open-source library, extended by custom assertions, test utilities 
ā€¢Test code and test data are developed beside your productive code, in the same HANA instance 
ā€¢Tests are implemented in XS JavaScript in HANA Studio or the Web-based Development Workbench
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
73 
Public 
Execute XSUnit Test in the browser 
ā€¢URL: /sap/hana/testtools/unit/jasminexs/TestRunner.xsjs?package=<> 
ā€¢package = the repository package your tests are located
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
74 
Public 
Parameter 
Required 
Description 
Example 
tags 
no 
Comma-separated list of tags to restrict the tests to be executed. 
tags=integration,long_running 
reporter 
no 
Complete path to module providing an implementation of the Jasmine reporter interface. With this parameter a custom reporter can be passed to publish the test results in an application specific format 
reporter=sap.hana.testtools.unit.jasminexs.reporter. db.dbReporter has the same effect like format=db 
profile 
no 
Name of a "profile" defined in the test which filters the tests to be executed on the basis of tags. 
profile=end2end 
Execute XSUnit Test in the browser: URL Parameters
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
75 
Public 
Parameter 
Required 
Description 
Example 
pattern 
no 
Naming pattern that identifies the .xsjslib files that contain the tests. If not specified, the pattern ā€œ*Testā€ is applied. You can use wildcards ā€œ?ā€ and ā€œ*ā€ to match a single and multiple arbitrary characters respectively. 
pattern=Test* would match all xsjslib files beginning with ā€œTestā€; In these files you may then manually import other test files. 
package 
yes 
Package that acts as starting point for discovering the tests. If not otherwise specified by parameter ā€œpatternā€ all .xsjslib files in this package and its sub-packages conforming to the naming pattern ā€œ*Testā€ will be assumed to contain tests and will be executed. 
package=sap.hana.testtools.demo 
Execute XSUnit Test in the browser: URL Parameters (Continued)
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
76 
Public 
Parameter 
Required 
Description 
Example 
format 
no 
Specifies the output format the test runner uses to report test results. By default, the results will be reported as HTML document. This parameter has no effect if a custom reporter is provided via parameter ā€œreporterā€. 
format=html shows results in HTML; format=junit or format=xml outputs XML conforming to schema used by Jenkins; format=json outputs results in JSON format; format=db writes test results to database tables 
Execute XSUnit Test in the browser: URL Parameters (Continued)
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
77 
Public 
Execute XSUnit from SAP Web-based Development Workbench
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
78 
Public 
Analyze Test Coverage
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
79 
Public 
View XSUnit Test Results
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
80 
Public 
Mocking Framework
CDS
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
82 
Public 
HANA XS SPS9: CDS 
Mission Statement 
ļ‚ŸCDS provides an enriched data model 
ļ‚ŸCDS allows for graceful life-cycle management 
ļ‚ŸCDS allows for extending the meta-model 
Features coming with SP9 
ļ‚ŸMulti-File 
ļ‚ŸTable Lifecycle 
ļ‚ŸAssociations 
ļ‚ŸDCL (Instance filtering) 
ļ‚ŸMuch improved editing support in Studio and Web-based Development Workbench
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
83 
Public 
CDS new features 
ā€¢Support for view complex features such as sub-selects 
ā€¢Multi-file support 
ā€¢Calc-view support 
ā€¢Unmanaged Associations 
ā€¢Annotation (enums, array, etc) 
ā€¢Lifecycle management support for data migration 
ā€¢GIS-Types 
ā€¢Core HANA data types 
ā€¢Currency Conversion 
ā€¢Enterprise search via full text index
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
84 
Public 
CDS Lifecycle Management Example 
SQL: 
CREATE TABLE PARTNER(NAME char(30), TYPE char(1)); 
Adding new field: 
ALTER TABLE PARTNER ADD(GROSS int);
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
85 
Public 
CDS Lifecycle Management Example 
CDS: 
entity PARTNER { NAME: String(30); TYPE: String(1); GROSS: Integer; }; 
Simply add the field. The necessary SQL is generated
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
86 
Public 
CDS Lifecycle Management Example 
CDS: 
entity PARTNER { NAME: String(30); TYPE: String(1); GROSS: Integer Integer64; }; 
This Lifecycle Management supports a wide variety of scenarios 
ā€¢Conversion from same named HDBTABLE 
ā€¢Change of key / data type 
ā€¢Removal of columns 
Upon activation data is migrated automatically
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
87 
Public 
CDS Multi-file: File 1 
namespace playground.sp9.cds; @Schema: 'SP9DEMOā€˜ context ContextA { type T1 : Integer; context ContextAI { type T2 : String(20); type T3 { a : Integer; b : String(88); }; }; };
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
88 
Public 
CDS Multi-file: File 2 
namespace playground.sp9.cds; using playground.sp9.cds::ContextA.T1; using playground.sp9.cds::ContextA.ContextAI as ic; using playground.sp9.cds::ContextA.ContextAI.T3 as ict3; @Schema: 'SP9DEMOā€˜ context ContextB { type T10 { a : T1; // Integer b : ic.T2; // String(20) c : ic.T3; // structured d : type of ic.T3.b; // String(88) e : ict3; // structured }; context ContextBI { type T1 : String(7); // hides the T1 coming from the first using declaration type T2 : T1; // String(7) };};
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
89 
Public 
CDS Enumerations 
namespace playground.sp9.cds; @Schema: 'SP9DEMOā€˜ context enumerations { 
type Color : String(10) enum { red = 'FF0000'; g = '00FF00'; b = '0000FF'; }; 
annotation MyAnnotation { a : Integer; b : String(20); c : Color; d : Boolean; };};
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
90 
Public 
CDS New Types 
entity SomeTypes { a : hana.ALPHANUM(10); b : hana.SMALLINT; c : hana.TINYINT; d : hana.SMALLDECIMAL; e : hana.REAL; h : hana.VARCHAR(10); i : hana.CLOB; j : hana.BINARY(10); k : hana.ST_POINT; l : hana.ST_GEOMETRY; };
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
91 
Public 
CDS Views ā€“ OrderBy 
view EmployeesView as select from Employee { orgUnit, salary } order by salary desc;
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
92 
Public 
CDS Views ā€“ Case 
entity MyEntity { key id : Integer; a : Integer; color : String(1); }; view MyView as select from MyEntity { id, case color when 'R' then 'redā€˜ when 'G' then 'greenā€˜ when 'B' then 'blueā€˜ else 'blackā€˜ end as color, case when a < 10 then 'smallā€˜ when 10 <= a and a < 100 then 'mediumā€˜ else 'largeā€˜ end as size };
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
93 
Public 
CDS Unmanaged Associations 
entity Employee { key id : String(256); officeId : Integer; }; entity Room { key id : Integer; inhabitants : Association[*] to Employee on inhabitants.officeId = id; }; 
entity Thing { key id : Integer; parentId : Integer; parent : Association[1] to Thing on parent.id = parentId; children : Association[*] to Thing on children.parentId = id; };
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
94 
Public 
CDS Backlink workaround via Unmanaged Associations 
entity Header { key id : Integer; items : Association[*] to Item on items.headerId = id; description : String(120); }; 
entity Item { key headerId : Integer; key id : Integer; header : Association[1] to Header on header.id = headerId; description : String(120); };
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
95 
Public 
CDS Many to Many relationships 
entity Employee { key id : Integer; name : String(80); projectLinks : Association[*] to E2P on projectLinks.e_id = id; }; 
entity Project { key id : Integer; name : String(80); employeeLinks : Association[*] to E2P on employeeLinks.p_id = id; }; 
entity E2P { key e_id : Integer; key p_id : Integer; projects : Association[*] to Project on projects.id = p_id; employees : Association[*] to Employee on employees.id = e_id; };
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
96 
Public 
CDS Many to Many relationships (continued) 
view EmployeesWithProjects as select from Employee { name as EmployeeName, projectLinks.projects.id as projectId, projectLinks.projects.name as projectName }; 
view ProjectsWithEmployees as select from Project { name as projectName, employeeLinks.employees.id as EmployeeId, employeeLinks.employees.name as EmployeeName };
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
97 
Public 
CDS Full Text Index Annotation 
entity Header { key id : Integer; @SearchIndex.text: { enabled: true } @SearchIndex.fuzzy: { enabled: true } description : String(120); };
Extended Programming Model
Extended Programming Model XSDS
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
100 
Public 
Goals of seamless HDB consumption in XSJS 
General HANA consumption 
ļƒ¼Native JavaScript embedding of HANA database artifacts 
ļƒ¼Structured API calls instead of low-level SQL interface (ODBC) 
ļƒ¼Less boilerplate coding, e.g., result set conversion 
XSDS: Native CDS consumption 
ļƒ¼Import CDS entities as native JavaScript objects 
ļƒ¼Understand CDS metadata for working with JavaScript objects
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
101 
Public 
XS Data Services (XSDS) 
XSDS as Native CDS Client and Query Builder for XSJS 
Succeeds three HANA Consumption projects by Platform Research 
XS ORM 
XS Query Builder 
CDS 
XS Data Services 
XS Relations 
+
Extended Programming Model XSDS ā€“ Data Models
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
103 
Public 
Core Data Services 
CDS is central HANA functionality provided via SQL interface 
Core Data Services (CDS) are a cross-platform set of concepts and tools to define semantically rich data models for SAP HANA applications. A central part of CDS is the object-relational mapping that links semantically meaningful entities to their technical representation as records in the HANA database.
Ā© 2014 SAP SE or an SAP affiliate company. All rights reserved. Public 104 
CDS and XSDS 
XSDS is the native CDS embedding for JavaScript in the XS Engine 
CDS 
XSDS 
HANA 
XS
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
105 
Public 
Sample CDS data model 
namespace sap.hana.xsopen.dbutils.xsds.examples.data; 
context bboard { 
entity user { 
key uid: Integer not null; 
Name: String(63) not null; 
Email: String(63); 
Created: UTCDateTime; }; 
type text { 
Text: String(255); 
Lang: String(2); }; 
entity post { 
key pid: Integer not null; 
Title: String(63) not null; 
Text: text; 
Author: association [1] to user; 
Parent: association [0..1] to post; 
Rating: Integer; 
// Comments: association [0..*] to comment via backlink Parent; 
// Tags: association [0..*] to tag via entity tags_by_post; 
Created: UTCDateTime; }; 
};
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
106 
Public 
Consume CDS model data in XS 
Import and extend CDS entity definitions 
Reads available metadata on types, keys, associations 
Supports extension, projection, renaming of entity definitions 
Already supports CDS via backlink, via entity associations 
Pre-generation of imports moves metadata processing overhead to dev time 
var User = XSDS.$importEntity("demo.bboard", "bboard.user"); 
var Post = XSDS.$importEntity("demo.bboard", "bboard.post", { Comments: { $association: { $entity: Comment, $viaBacklink: "Post" } } });
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
107 
Public 
Import pre-generation 
CDS import costly operation 
XS Engine has no session state 
ļƒ  (Re-)Import of CDS metadata for every single requests 
Pregeneration of imports improves performance 
Serialize result of imports into single library file 
var User = XSDS.$importEntity("demo.bboard", "bboard.user"); 
var UserLib = $.import("demo.bboard", "User"); var User = UserLib.demo.bboard.User.entity;
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
108 
Public 
Main XSDS features 
XS Data Services 
Entity instances and unmanaged values 
Query Builder 
Ad-hoc queries 
Based on CDS QL (WIP) 
Manual consistency 
Full HANA support 
CDS Entities and Types 
HANA 
Entity Manager 
Lightweight ORM 
Navigation to associations 
Data consistency 
Limited query functionality 
+
Extended Programming Model XSDS ā€“ Managed Mode
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
110 
Public 
XSDS managed entities 
Create, retrieve, update, and delete instances of entities 
Result is plain JavaScript object 
Optional lazy retrieval of associated instances to avoid "n+1 problem" 
Optimized JOIN strategy to minimize DB queries (WIP) Write changes to database explicitly 
Manager tracks local changes for minimal updates 
var post = Post.$get({ pid: 101 }); 
if (post.Author.Name === "Alice") post.Rating++; 
post.$save();
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
111 
Public 
Reference: instance manipulation 
Retrieve by key 
Update instance 
Create new instance 
Delete instance 
var post = Post.$get({ pid: 101 }); 
post.Author.Name = "Alice"; 
post.$save(); 
var user = new User({ Name: "Alice", Created: new Date() }); user.$save(); 
post.$discard();
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
112 
Public 
Instance management 
Entity instances are managed 
Instances are singleton objects with "personality" 
Associated instances are stored by reference 
Upside: Runtime guarantees on consistency 
Single consistent view on every instance (enforced by $persist) 
Automatic association management (1:1, 1:n, m:n) 
Downside: Entity cache 
Additional overhead for instance management 
Only limited subset of database functionality for instance retrieval
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
113 
Public 
Consistent instance view 
HANA 
XSJS 
{ uid: 1, Email: "alice@sap.se" } 
{ pid: 103, Title: "Third", Author: } 
{ uid: 2, Email: "bob@sap.ag" } 
pid 
Title 
Author.uid 
101 
First 
1 
103 
Third 
1 
uid 
Email 
1 
alice@sap.ag 
2 
bob@sap.ag 
{ pid: 101, Title: "First", Author: }
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
114 
Public 
Database and transaction handling 
Transparent database and transaction handling 
Minimal XSDS runtime (metadata processing, entity cache, type conversion) 
Exposes/reuses DB functionality as much as possible (e.g., constraints checks) 
XSDS uses single DB connection and single transaction 
Suited for single-threaded, per-request execution model of XS Engine 
Supports auto commit, explicit commits, and rollbacks 
Supports connection configurations (.xssqlcc) 
post1.$save(); 
post2.$save(); 
XSDS.Transaction.$commit();
Extended Programming Model XSDS ā€“ Unmanaged Mode
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
116 
Public 
XS Code 
CDS Metadata Definition 
CDS queries from XSJS: motivation 
ā€žGet the names of authors which commented on their own posts and the text of that commentā€œ 
var rs = conn.prepareStatement(ā€˜ 
SELECT a."Name", c."Text.Text" 
FROM "bboard.post" p 
JOIN "bboard.user" a ON p."Author.uid"=a."uid" 
JOIN "bboard.comment" c ON p."pid"=c."Post.pid" 
JOIN "bboard.user" ca ON c."Author.uid"=ca."uid" 
WHERE a."uid"=ca."uidā€œ').execute(); 
while (rs.next()) { 
rs.getInt(1); rs.getString(2); 
} 
entity post { 
key pid: Integer not null; 
Author: association [1] to user; 
}; 
entity user { 
key uid: Integer not null; 
Name: String(63) not null; 
}; 
entity comment { 
key cid: Integer not null; 
Text: text; 
Author: association[1] to user; 
Post: association[1] to post; //via backlink 
}; 
Leaking Abstraction: 
Column name can only be derived from table definition 
Convenience: 
ā€žString-basedā€œ query interface 
& manual result set processing 
Redundant Code: 
JOINs could be derived from metadata
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
117 
Public 
XSDS queries 
Ad-hoc queries 
Construct general queries in a JavaScript-like way 
Yields plain JavaScript object as unmanaged value, not instance 
Query Language 
Incremental query building 
Operators $project, $where, $matching, ... 
Full support for CDS path navigation 
Expression language based on CDS Query Language using fluent API 
Alternative, more concise JSON-like selection notation for restricted subset 
var query = Post.$query().$where(Post.Author.Name.$eq("Alice")); 
var results = query.$execute();
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
118 
Public 
Demo: XSDS queries - $project 
Projections with CDS navigation expressions 
Result: 
var res = Post.$query().$project({ Author: {Name: true}, 
Comments: {Author: {Name: true}}, Title: "TitleOfPost"}) 
.$execute(); 
[{ Author: { 
Name: "Alice" 
}, 
Comments: { 
Author: { 
Name: "Bob" 
} 
}, 
TitleOfPost: "First Post!" 
}, ...]
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
119 
Public 
Demo: XSDS queries - $where 
Complex where conditions: 
Predefined operators of expression language: 
$eq, $ne, $gt, $lt, $ge, $le, $like, $unlike 
Escape to any SQL operator: 
var selfCommentingPosts = Post.$query().$where(Post.Comments.Author.pid.$eq(Post.Author.pid)) 
.$execute(); 
var somePost = Post.$query() .$where(Post.Rating.$prefixOp('SQRT').$gt(2)).$execute(); 
translated to: 
WHERE SQRT ("t0"."Rating") > 2
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
120 
Public 
Demo: XSDS queries - $matching 
Selection using ā€œtemplateā€ for the result 
Unmanaged version of $find, $findAll, uses same template language 
More concise Less expressive 
var interestingPosts = Post.$query().$matching({ 
Rating: { 
$gt: 2 
}, 
Tags: { 
Name: "+1" 
} 
}).execute(); 
+ 
ā€“
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
121 
Public 
Demo: incremental query construction 
Incremental construction with immutable query objects 
Explicit trigger 
// build query without DB call 
var qBadPosts = Post.$query().$where(Post.Author.pid) .$eq(Post.Comments.Author.pid))); 
// refine query 
var qStarBadPosts = qBadPosts.$where(Post.Rating.$gt(4)); 
// trigger actual DB calls 
var badTitles = qBadPosts.$project( 
{ Title: true, Author: {Name : true}}).$execute(); 
var recentBadTitles = qStarBadPosts.$project({ Title: true }) .$execute();
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
122 
Public 
Reference: JSON expressions 
Simple expressions 
Complex expressions 
JSON Expression Language Operators 
$eq $ne $lt $le $gt $ge $like $unlike $null 
Post.$find({ mandt: "001", pid: 101 }); 
Post.$find({ Title: { $like: "First%" }, 
Rating: { $gt: 1, $lt: 3 }, Created: { $lt: Date.now() ā€“ 3600 } });
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
123 
Public 
Query builder 
Optimized query construction 
Allows for incremental query construction without database roundtrips 
Immutable query objects support sharing of subqueries 
Just-in-time translation into plain SQL, using needed joins 
SELECT "t0.Author"."Name" AS "t0.Author.Name", 
"t0.Author"."Email" AS "t0.Author.Email", 
"t0"."Title" AS "t0.Title" 
FROM "sap.hana.xsopen.xsds.examples::bboard.post" "t0" 
JOIN "sap.hana.xsopen.xsds.examples::bboard.user" "t0.Author" 
ON "t0"."Author.uid"="t0.Author"."uid" 
WHERE ("t0"."Rating" > 2) AND ("t0.Author"."Name" = 'Alice')
Extended Programming Model XSDS - Procedures
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
125 
Public 
XS Procedures Library 
A standard reusable library shipped by SAP to simplify Stored Procedure calls from XSJS and make they ā€œfeelā€ like JavaScript functions
Extended Programming Model Repository REST API
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
127 
Public 
SAP HANA REST API 
ā€¢An implementation of the Orion Server API within HANA 
ā€¢Designed to allow development tools access to HANA capabilities, especially the Repository.
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
128 
Public 
SAP HANA REST API ā€“ server API parts 
ā€¢File API 
ā€¢Workspace API 
ā€¢Transfer API 
ā€¢Metadata API 
ā€¢Change Tracking API 
ā€¢OData Services 
ā€¢Info API
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
129 
Public 
SAP HANA REST API ā€“ File API 
ā€¢File API 
ā€¢Workspace API 
ā€¢Transfer API 
ā€¢Metadata API 
ā€¢Change Tracking API 
ā€¢OData Services 
ā€¢Info API 
ā€¢Enables you to browse and manipulate files and directories via HTTP 
ā€¢Basic HTTP methods GET, PUT, and POST to send requests 
ā€¢JSON is used as the default representation format 
ā€¢Can also retrieve metadata and previous versions of the content
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
130 
Public 
SAP HANA REST API ā€“ Workspace API 
ā€¢File API 
ā€¢Workspace API 
ā€¢Transfer API 
ā€¢Metadata API 
ā€¢Change Tracking API 
ā€¢OData Services 
ā€¢Info API 
ā€¢Enables you to create and manipulate workspaces and projects via HTTP 
ā€¢Workspace and project concepts taken over from Eclipse 
ā€¢Both ORION concepts are technically mapped to the SAP HANA XS package concept 
ā€¢When you create a project, it is an SAP HANA XS sub package in the specified workspace package
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
131 
Public 
SAP HANA REST API ā€“ Transfer API 
ā€¢File API 
ā€¢Workspace API 
ā€¢Transfer API 
ā€¢Metadata API 
ā€¢Change Tracking API 
ā€¢OData Services 
ā€¢Info API 
ā€¢Is used to import and export packages and files 
ā€¢Resumable, chunked uploads of file content 
ā€¢Export not yet implemented. Use the File API for export.
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
132 
Public 
SAP HANA REST API ā€“ Metadata API 
ā€¢File API 
ā€¢Workspace API 
ā€¢Transfer API 
ā€¢Metadata API 
ā€¢Change Tracking API 
ā€¢OData Services 
ā€¢Info API 
ā€¢Provides services to support search and auto completion scenarios 
ā€¢it is possible to retrieve metadata for tables, views, procedures, functions, sequences, and schemas as well as CDS metadata
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
133 
Public 
SAP HANA REST API ā€“ Change Tracking API 
ā€¢File API 
ā€¢Workspace API 
ā€¢Transfer API 
ā€¢Metadata API 
ā€¢Change Tracking API 
ā€¢OData Services 
ā€¢Info API 
ā€¢Enables you to make use of specific lifecycle-management features included with the SAP HANA Repository via HTTP 
ā€¢For example: you can ensure that an export operation includes only the latest approved versions of repository objects
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
134 
Public 
SAP HANA REST API ā€“ OData Services 
ā€¢File API 
ā€¢Workspace API 
ā€¢Transfer API 
ā€¢Metadata API 
ā€¢Change Tracking API 
ā€¢OData Services 
ā€¢Info API 
ā€¢A set of OData services that enable access to configuration data stored in the SAP HANA environment 
ā€¢Includes details on the following: 
ā€¢Delivery Units 
ā€¢INI Configuration files 
ā€¢M_FEATURES
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
135 
Public 
SAP HANA REST API ā€“ Info API 
ā€¢File API 
ā€¢Workspace API 
ā€¢Transfer API 
ā€¢Metadata API 
ā€¢Change Tracking API 
ā€¢OData Services 
ā€¢Info API 
ā€¢Can be used to display information about the current version of the REST API. 
ā€¢Includes a description of the current version of the delivery unit and the number of commands (API entry points) that are currently supported by the REST API
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
136 
Public 
SAP HANA REST API - SapBackPack 
ā€¢SAP specific functionality (like activation) added via the additional parameter - SapBackPack
SAP River
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
138 
Public 
SAP River ā€“ Whatā€™s New in SPS 09? 
The benefits of the SAP River language (RDL) application development environment were validated by partners and early adaptors. However, based on feedback we received, and consistent with our strategic direction of building open and standard environments, SAP has decided to abandon a proprietary language approach, and to reapply and integrate the SAP River assets and principles within a cloud based development environment as part of the HANA Cloud Platform. 
The SAP River language will therefore no longer be available as a stand-alone development environment in SAP HANA.
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
139 
Public 
SAP River assets reused 
SAP River application explorer rebuilt as SAP OData Explorer in SPS09 
General OData test and data generation tool which supports XSODATA services
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
140 
Public 
SAP River concepts realized in alternative ways 
Integrated one-click debugging 
Step from the application server layer logic directly in database layer logic within one debug session
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
141 
Public 
SAP River concepts realized in alternative ways - XSDS 
XSDS: Native CDS consumption 
ļƒ¼Import CDS entities as native JavaScript objects 
ļƒ¼Understand CDS metadata for working with JavaScript objects 
Import and extend CDS entity definitions 
Reads available metadata on types, keys, associations 
Supports extension, projection, renaming of entity definitions 
Already supports CDS via backlink, via entity associations 
var User = XSDS.$importEntity("demo.bboard", "bboard.user"); 
var Post = XSDS.$importEntity("demo.bboard", "bboard.post", { Comments: { $association: { $entity: Comment, $viaBacklink: "Post" }}});
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
142 
Public 
SAP River concepts realized in alternative ways ā€“ XSDS (continued) 
XS Data Services 
Entity instances and unmanaged values 
Query Builder 
Ad-hoc queries 
Based on CDS QL (WIP) 
Manual consistency 
Full HANA support 
CDS 
Entities and Types 
HANA 
Entity Manager 
Lightweight ORM 
Navigation to associations 
Data consistency 
Limited query functionality 
+
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
143 
Public 
Disclaimer 
This presentation outlines our general product direction and should not be relied on in making a purchase decision. This presentation is not subject to your license agreement or any other agreement with SAP. 
SAP has no obligation to pursue any course of business outlined in this presentation or to develop or release any functionality mentioned in this presentation. This presentation and SAPā€™s strategy and possible future developments are subject to change and may be changed by SAP at any time for any reason without notice. 
This document is provided without a warranty of any kind, either express or implied, including but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. SAP assumes no responsibility for errors or omissions in this document, except if such damages were caused by SAP intentionally or grossly negligent.
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
144 
Public 
How to find SAP HANA documentation on this topic? 
ā€¢In addition to this learning material, you can find SAP HANA platform documentation on SAP Help Portal knowledge center at http://help.sap.com/hana_platform. 
ā€¢The knowledge centers are structured according to the product lifecycle: installation, security, administration, development: 
SAP HANA Options 
ļ‚ŸSAP HANA Advanced Data Processing 
ļ‚ŸSAP HANA Dynamic Tiering 
ļ‚ŸSAP HANA Enterprise Information Management 
ļ‚ŸSAP HANA Predictive 
ļ‚ŸSAP HANA Real-Time Replication 
ļ‚ŸSAP HANA Smart Data Streaming 
ļ‚ŸSAP HANA Spatial 
ā€¢Documentation sets for SAP HANA options can be found at http://help.sap.com/hana_options: 
SAP HANA Platform SPS 
ļ‚ŸWhatā€™s New ā€“ Release Notes 
ļ‚ŸInstallation 
ļ‚ŸAdministration 
ļ‚ŸDevelopment 
ļ‚ŸReferences 
ā€¢
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
Thank you 
Contact information 
Thomas Jung 
SAP HANA Product Management 
AskSAPHANA@sap.com
Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 
146 
Public 
Ā© 2014 SAP SE or an SAP affiliate company. All rights reserved. 
No part of this publication may be reproduced or transmitted in any form or for any purpose without the express permission of SAP SE or an SAP affiliate company. 
SAP and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP SE (or an SAP affiliate company) in Germany and other countries. Please see http://global12.sap.com/corporate-en/legal/copyright/index.epx for additional trademark information and notices. 
Some software products marketed by SAP SE and its distributors contain proprietary software components of other software vendors. 
National product specifications may vary. 
These materials are provided by SAP SE or an SAP affiliate company for informational purposes only, without representation or warranty of any kind, and SAP SE or its affiliated companies shall not be liable for errors or omissions with respect to the materials. The only warranties for SAP SE or SAP affiliate company products and services are those that are set forth in the express warranty statements accompanying such products and services, if any. Nothing herein should be construed as constituting an additional warranty. 
In particular, SAP SE or its affiliated companies have no obligation to pursue any course of business outlined in this document or any related presentation, or to develop or release any functionality mentioned therein. This document, or any related presentation, and SAP SEā€™s or its affiliated companiesā€™ strategy and possible future developments, products, and/or platform directions and functionality are all subject to change and may be changed by SAP SE or its affiliated companies at any time for any reason without notice. The information in this document is not a commitment, promise, or legal obligation to deliver any material, code, or functionality. All forward- looking statements are subject to various risks and uncertainties that could cause actual results to differ materially from expectations. Readers are cautioned not to place undue reliance on these forward-looking statements, which speak only as of their dates, and they should not be relied upon in making purchasing decisions.

More Related Content

Similar to HANA XS SPS9: What's New in the XS Programming Model

SAP Integration with Red Hat JBoss Technologies
SAP Integration with Red Hat JBoss TechnologiesSAP Integration with Red Hat JBoss Technologies
SAP Integration with Red Hat JBoss Technologieshwilming
Ā 
Adding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSASAdding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSASsumedha.r
Ā 
C13,C33,A35 ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³é–‹ē™ŗćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ćØ恗恦恮SAP HANA by Makoto Sugishita
C13,C33,A35 ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³é–‹ē™ŗćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ćØ恗恦恮SAP HANA by Makoto SugishitaC13,C33,A35 ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³é–‹ē™ŗćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ćØ恗恦恮SAP HANA by Makoto Sugishita
C13,C33,A35 ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³é–‹ē™ŗćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ćØ恗恦恮SAP HANA by Makoto SugishitaInsight Technology, Inc.
Ā 
HANA SPS07 Extended Application Service
HANA SPS07 Extended Application ServiceHANA SPS07 Extended Application Service
HANA SPS07 Extended Application ServiceSAP Technology
Ā 
Super-NetOps Source of Truth
Super-NetOps Source of TruthSuper-NetOps Source of Truth
Super-NetOps Source of TruthJoel W. King
Ā 
Sap integration with_j_boss_technologies
Sap integration with_j_boss_technologiesSap integration with_j_boss_technologies
Sap integration with_j_boss_technologiesSerge Pagop
Ā 
Preparing for Upgrade to SharePoint 2010 with Joel Oleson Quest Software Webcast
Preparing for Upgrade to SharePoint 2010 with Joel Oleson Quest Software WebcastPreparing for Upgrade to SharePoint 2010 with Joel Oleson Quest Software Webcast
Preparing for Upgrade to SharePoint 2010 with Joel Oleson Quest Software WebcastJoel Oleson
Ā 
Overview and Walkthrough of the Application Programming Model with SAP Cloud ...
Overview and Walkthrough of the Application Programming Model with SAP Cloud ...Overview and Walkthrough of the Application Programming Model with SAP Cloud ...
Overview and Walkthrough of the Application Programming Model with SAP Cloud ...SAP Cloud Platform
Ā 
Mysql user-camp-march-11th-2016
Mysql user-camp-march-11th-2016Mysql user-camp-march-11th-2016
Mysql user-camp-march-11th-2016Harin Vadodaria
Ā 
Spark and scala reference architecture
Spark and scala reference architectureSpark and scala reference architecture
Spark and scala reference architectureAdrian Tanase
Ā 
Full-Stack JavaScript Development on SAP HANA Platform
Full-Stack JavaScript Development on SAP HANA PlatformFull-Stack JavaScript Development on SAP HANA Platform
Full-Stack JavaScript Development on SAP HANA PlatformHP Seitz
Ā 
What's New in SAP HANA SPS 11 DB Control Center (Operations)
What's New in SAP HANA SPS 11 DB Control Center (Operations)What's New in SAP HANA SPS 11 DB Control Center (Operations)
What's New in SAP HANA SPS 11 DB Control Center (Operations)SAP Technology
Ā 
SAP TechEd 2013: CD105: Extending SuccessFactors EmployeeCentral with apps on...
SAP TechEd 2013: CD105: Extending SuccessFactors EmployeeCentral with apps on...SAP TechEd 2013: CD105: Extending SuccessFactors EmployeeCentral with apps on...
SAP TechEd 2013: CD105: Extending SuccessFactors EmployeeCentral with apps on...SAP HANA Cloud Platform
Ā 
Configs, Configs, Everywhere! (Actually, Let's Simplify All Those Configs)
Configs, Configs, Everywhere! (Actually, Let's Simplify All Those Configs)Configs, Configs, Everywhere! (Actually, Let's Simplify All Those Configs)
Configs, Configs, Everywhere! (Actually, Let's Simplify All Those Configs)Akamai Developers & Admins
Ā 
My Profile
My ProfileMy Profile
My ProfileMilan Uddin
Ā 
Dmm212 ā€“ Sap Hana Graph Processing
Dmm212 ā€“ Sap Hana  Graph ProcessingDmm212 ā€“ Sap Hana  Graph Processing
Dmm212 ā€“ Sap Hana Graph ProcessingLuc Vanrobays
Ā 
Using your DB2 SQL Skills with Hadoop and Spark
Using your DB2 SQL Skills with Hadoop and SparkUsing your DB2 SQL Skills with Hadoop and Spark
Using your DB2 SQL Skills with Hadoop and SparkCynthia Saracco
Ā 
SAP HANA SPS10- Extended Application Services (XS) Programming Model
SAP HANA SPS10- Extended Application Services (XS) Programming ModelSAP HANA SPS10- Extended Application Services (XS) Programming Model
SAP HANA SPS10- Extended Application Services (XS) Programming ModelSAP Technology
Ā 

Similar to HANA XS SPS9: What's New in the XS Programming Model (20)

SAP HANA Cloud ā€“ Virtual Bootcamp Securing SAP HANA Cloud Applications
SAP HANA Cloud ā€“ Virtual BootcampSecuring SAP HANA Cloud Applications SAP HANA Cloud ā€“ Virtual BootcampSecuring SAP HANA Cloud Applications
SAP HANA Cloud ā€“ Virtual Bootcamp Securing SAP HANA Cloud Applications
Ā 
SAP Integration with Red Hat JBoss Technologies
SAP Integration with Red Hat JBoss TechnologiesSAP Integration with Red Hat JBoss Technologies
SAP Integration with Red Hat JBoss Technologies
Ā 
Adding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSASAdding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSAS
Ā 
C13,C33,A35 ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³é–‹ē™ŗćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ćØ恗恦恮SAP HANA by Makoto Sugishita
C13,C33,A35 ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³é–‹ē™ŗćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ćØ恗恦恮SAP HANA by Makoto SugishitaC13,C33,A35 ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³é–‹ē™ŗćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ćØ恗恦恮SAP HANA by Makoto Sugishita
C13,C33,A35 ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³é–‹ē™ŗćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ćØ恗恦恮SAP HANA by Makoto Sugishita
Ā 
HANA SPS07 Extended Application Service
HANA SPS07 Extended Application ServiceHANA SPS07 Extended Application Service
HANA SPS07 Extended Application Service
Ā 
Super-NetOps Source of Truth
Super-NetOps Source of TruthSuper-NetOps Source of Truth
Super-NetOps Source of Truth
Ā 
Sap integration with_j_boss_technologies
Sap integration with_j_boss_technologiesSap integration with_j_boss_technologies
Sap integration with_j_boss_technologies
Ā 
Preparing for Upgrade to SharePoint 2010 with Joel Oleson Quest Software Webcast
Preparing for Upgrade to SharePoint 2010 with Joel Oleson Quest Software WebcastPreparing for Upgrade to SharePoint 2010 with Joel Oleson Quest Software Webcast
Preparing for Upgrade to SharePoint 2010 with Joel Oleson Quest Software Webcast
Ā 
Overview and Walkthrough of the Application Programming Model with SAP Cloud ...
Overview and Walkthrough of the Application Programming Model with SAP Cloud ...Overview and Walkthrough of the Application Programming Model with SAP Cloud ...
Overview and Walkthrough of the Application Programming Model with SAP Cloud ...
Ā 
Mysql user-camp-march-11th-2016
Mysql user-camp-march-11th-2016Mysql user-camp-march-11th-2016
Mysql user-camp-march-11th-2016
Ā 
SUSE Technical Webinar: Build HANA Apps in the Framework of the SAP and SUSE ...
SUSE Technical Webinar: Build HANA Apps in the Framework of the SAP and SUSE ...SUSE Technical Webinar: Build HANA Apps in the Framework of the SAP and SUSE ...
SUSE Technical Webinar: Build HANA Apps in the Framework of the SAP and SUSE ...
Ā 
Spark and scala reference architecture
Spark and scala reference architectureSpark and scala reference architecture
Spark and scala reference architecture
Ā 
Full-Stack JavaScript Development on SAP HANA Platform
Full-Stack JavaScript Development on SAP HANA PlatformFull-Stack JavaScript Development on SAP HANA Platform
Full-Stack JavaScript Development on SAP HANA Platform
Ā 
What's New in SAP HANA SPS 11 DB Control Center (Operations)
What's New in SAP HANA SPS 11 DB Control Center (Operations)What's New in SAP HANA SPS 11 DB Control Center (Operations)
What's New in SAP HANA SPS 11 DB Control Center (Operations)
Ā 
SAP TechEd 2013: CD105: Extending SuccessFactors EmployeeCentral with apps on...
SAP TechEd 2013: CD105: Extending SuccessFactors EmployeeCentral with apps on...SAP TechEd 2013: CD105: Extending SuccessFactors EmployeeCentral with apps on...
SAP TechEd 2013: CD105: Extending SuccessFactors EmployeeCentral with apps on...
Ā 
Configs, Configs, Everywhere! (Actually, Let's Simplify All Those Configs)
Configs, Configs, Everywhere! (Actually, Let's Simplify All Those Configs)Configs, Configs, Everywhere! (Actually, Let's Simplify All Those Configs)
Configs, Configs, Everywhere! (Actually, Let's Simplify All Those Configs)
Ā 
My Profile
My ProfileMy Profile
My Profile
Ā 
Dmm212 ā€“ Sap Hana Graph Processing
Dmm212 ā€“ Sap Hana  Graph ProcessingDmm212 ā€“ Sap Hana  Graph Processing
Dmm212 ā€“ Sap Hana Graph Processing
Ā 
Using your DB2 SQL Skills with Hadoop and Spark
Using your DB2 SQL Skills with Hadoop and SparkUsing your DB2 SQL Skills with Hadoop and Spark
Using your DB2 SQL Skills with Hadoop and Spark
Ā 
SAP HANA SPS10- Extended Application Services (XS) Programming Model
SAP HANA SPS10- Extended Application Services (XS) Programming ModelSAP HANA SPS10- Extended Application Services (XS) Programming Model
SAP HANA SPS10- Extended Application Services (XS) Programming Model
Ā 

More from SAP Technology

SAP Integration Suite L1
SAP Integration Suite L1SAP Integration Suite L1
SAP Integration Suite L1SAP Technology
Ā 
Future-Proof Your Business Processes by Automating SAP S/4HANA processes with...
Future-Proof Your Business Processes by Automating SAP S/4HANA processes with...Future-Proof Your Business Processes by Automating SAP S/4HANA processes with...
Future-Proof Your Business Processes by Automating SAP S/4HANA processes with...SAP Technology
Ā 
7 Top Reasons to Automate Processes with SAP Intelligent Robotic Processes Au...
7 Top Reasons to Automate Processes with SAP Intelligent Robotic Processes Au...7 Top Reasons to Automate Processes with SAP Intelligent Robotic Processes Au...
7 Top Reasons to Automate Processes with SAP Intelligent Robotic Processes Au...SAP Technology
Ā 
Extend SAP S/4HANA to deliver real-time intelligent processes
Extend SAP S/4HANA to deliver real-time intelligent processesExtend SAP S/4HANA to deliver real-time intelligent processes
Extend SAP S/4HANA to deliver real-time intelligent processesSAP Technology
Ā 
Process optimization and automation for SAP S/4HANA with SAPā€™s Business Techn...
Process optimization and automation for SAP S/4HANA with SAPā€™s Business Techn...Process optimization and automation for SAP S/4HANA with SAPā€™s Business Techn...
Process optimization and automation for SAP S/4HANA with SAPā€™s Business Techn...SAP Technology
Ā 
Accelerate your journey to SAP S/4HANA with SAPā€™s Business Technology Platform
Accelerate your journey to SAP S/4HANA with SAPā€™s Business Technology PlatformAccelerate your journey to SAP S/4HANA with SAPā€™s Business Technology Platform
Accelerate your journey to SAP S/4HANA with SAPā€™s Business Technology PlatformSAP Technology
Ā 
Accelerate Your Move to an Intelligent Enterprise with SAP Cloud Platform and...
Accelerate Your Move to an Intelligent Enterprise with SAP Cloud Platform and...Accelerate Your Move to an Intelligent Enterprise with SAP Cloud Platform and...
Accelerate Your Move to an Intelligent Enterprise with SAP Cloud Platform and...SAP Technology
Ā 
Transform your business with intelligent insights and SAP S/4HANA
Transform your business with intelligent insights and SAP S/4HANATransform your business with intelligent insights and SAP S/4HANA
Transform your business with intelligent insights and SAP S/4HANASAP Technology
Ā 
SAP Cloud Platform for SAP S/4HANA: Accelerate your move to an Intelligent En...
SAP Cloud Platform for SAP S/4HANA: Accelerate your move to an Intelligent En...SAP Cloud Platform for SAP S/4HANA: Accelerate your move to an Intelligent En...
SAP Cloud Platform for SAP S/4HANA: Accelerate your move to an Intelligent En...SAP Technology
Ā 
Innovate collaborative applications with SAP Jam Collaboration & SAP Cloud Pl...
Innovate collaborative applications with SAP Jam Collaboration & SAP Cloud Pl...Innovate collaborative applications with SAP Jam Collaboration & SAP Cloud Pl...
Innovate collaborative applications with SAP Jam Collaboration & SAP Cloud Pl...SAP Technology
Ā 
The IoT Imperative for Consumer Products
The IoT Imperative for Consumer ProductsThe IoT Imperative for Consumer Products
The IoT Imperative for Consumer ProductsSAP Technology
Ā 
The IoT Imperative for Discrete Manufacturers - Automotive, Aerospace & Defen...
The IoT Imperative for Discrete Manufacturers - Automotive, Aerospace & Defen...The IoT Imperative for Discrete Manufacturers - Automotive, Aerospace & Defen...
The IoT Imperative for Discrete Manufacturers - Automotive, Aerospace & Defen...SAP Technology
Ā 
IoT is Enabling a New Era of Shareholder Value in Energy and Natural Resource...
IoT is Enabling a New Era of Shareholder Value in Energy and Natural Resource...IoT is Enabling a New Era of Shareholder Value in Energy and Natural Resource...
IoT is Enabling a New Era of Shareholder Value in Energy and Natural Resource...SAP Technology
Ā 
The IoT Imperative in Government and Healthcare
The IoT Imperative in Government and HealthcareThe IoT Imperative in Government and Healthcare
The IoT Imperative in Government and HealthcareSAP Technology
Ā 
SAP S/4HANA Finance and the Digital Core
SAP S/4HANA Finance and the Digital CoreSAP S/4HANA Finance and the Digital Core
SAP S/4HANA Finance and the Digital CoreSAP Technology
Ā 
Five Reasons To Skip SAP Suite on HANA and Go Directly to SAP S/4HANA
Five Reasons To Skip SAP Suite on HANA and Go Directly to SAP S/4HANAFive Reasons To Skip SAP Suite on HANA and Go Directly to SAP S/4HANA
Five Reasons To Skip SAP Suite on HANA and Go Directly to SAP S/4HANASAP Technology
Ā 
SAP Helps Reduce Silos Between Business and Spatial Data
SAP Helps Reduce Silos Between Business and Spatial DataSAP Helps Reduce Silos Between Business and Spatial Data
SAP Helps Reduce Silos Between Business and Spatial DataSAP Technology
Ā 
Spotlight on Financial Services with Calypso and SAP ASE
Spotlight on Financial Services with Calypso and SAP ASESpotlight on Financial Services with Calypso and SAP ASE
Spotlight on Financial Services with Calypso and SAP ASESAP Technology
Ā 
SAP ASE 16 SP02 Performance Features
SAP ASE 16 SP02 Performance FeaturesSAP ASE 16 SP02 Performance Features
SAP ASE 16 SP02 Performance FeaturesSAP Technology
Ā 

More from SAP Technology (20)

SAP Integration Suite L1
SAP Integration Suite L1SAP Integration Suite L1
SAP Integration Suite L1
Ā 
Future-Proof Your Business Processes by Automating SAP S/4HANA processes with...
Future-Proof Your Business Processes by Automating SAP S/4HANA processes with...Future-Proof Your Business Processes by Automating SAP S/4HANA processes with...
Future-Proof Your Business Processes by Automating SAP S/4HANA processes with...
Ā 
7 Top Reasons to Automate Processes with SAP Intelligent Robotic Processes Au...
7 Top Reasons to Automate Processes with SAP Intelligent Robotic Processes Au...7 Top Reasons to Automate Processes with SAP Intelligent Robotic Processes Au...
7 Top Reasons to Automate Processes with SAP Intelligent Robotic Processes Au...
Ā 
Extend SAP S/4HANA to deliver real-time intelligent processes
Extend SAP S/4HANA to deliver real-time intelligent processesExtend SAP S/4HANA to deliver real-time intelligent processes
Extend SAP S/4HANA to deliver real-time intelligent processes
Ā 
Process optimization and automation for SAP S/4HANA with SAPā€™s Business Techn...
Process optimization and automation for SAP S/4HANA with SAPā€™s Business Techn...Process optimization and automation for SAP S/4HANA with SAPā€™s Business Techn...
Process optimization and automation for SAP S/4HANA with SAPā€™s Business Techn...
Ā 
Accelerate your journey to SAP S/4HANA with SAPā€™s Business Technology Platform
Accelerate your journey to SAP S/4HANA with SAPā€™s Business Technology PlatformAccelerate your journey to SAP S/4HANA with SAPā€™s Business Technology Platform
Accelerate your journey to SAP S/4HANA with SAPā€™s Business Technology Platform
Ā 
Accelerate Your Move to an Intelligent Enterprise with SAP Cloud Platform and...
Accelerate Your Move to an Intelligent Enterprise with SAP Cloud Platform and...Accelerate Your Move to an Intelligent Enterprise with SAP Cloud Platform and...
Accelerate Your Move to an Intelligent Enterprise with SAP Cloud Platform and...
Ā 
Transform your business with intelligent insights and SAP S/4HANA
Transform your business with intelligent insights and SAP S/4HANATransform your business with intelligent insights and SAP S/4HANA
Transform your business with intelligent insights and SAP S/4HANA
Ā 
SAP Cloud Platform for SAP S/4HANA: Accelerate your move to an Intelligent En...
SAP Cloud Platform for SAP S/4HANA: Accelerate your move to an Intelligent En...SAP Cloud Platform for SAP S/4HANA: Accelerate your move to an Intelligent En...
SAP Cloud Platform for SAP S/4HANA: Accelerate your move to an Intelligent En...
Ā 
Innovate collaborative applications with SAP Jam Collaboration & SAP Cloud Pl...
Innovate collaborative applications with SAP Jam Collaboration & SAP Cloud Pl...Innovate collaborative applications with SAP Jam Collaboration & SAP Cloud Pl...
Innovate collaborative applications with SAP Jam Collaboration & SAP Cloud Pl...
Ā 
The IoT Imperative for Consumer Products
The IoT Imperative for Consumer ProductsThe IoT Imperative for Consumer Products
The IoT Imperative for Consumer Products
Ā 
The IoT Imperative for Discrete Manufacturers - Automotive, Aerospace & Defen...
The IoT Imperative for Discrete Manufacturers - Automotive, Aerospace & Defen...The IoT Imperative for Discrete Manufacturers - Automotive, Aerospace & Defen...
The IoT Imperative for Discrete Manufacturers - Automotive, Aerospace & Defen...
Ā 
IoT is Enabling a New Era of Shareholder Value in Energy and Natural Resource...
IoT is Enabling a New Era of Shareholder Value in Energy and Natural Resource...IoT is Enabling a New Era of Shareholder Value in Energy and Natural Resource...
IoT is Enabling a New Era of Shareholder Value in Energy and Natural Resource...
Ā 
The IoT Imperative in Government and Healthcare
The IoT Imperative in Government and HealthcareThe IoT Imperative in Government and Healthcare
The IoT Imperative in Government and Healthcare
Ā 
SAP S/4HANA Finance and the Digital Core
SAP S/4HANA Finance and the Digital CoreSAP S/4HANA Finance and the Digital Core
SAP S/4HANA Finance and the Digital Core
Ā 
Five Reasons To Skip SAP Suite on HANA and Go Directly to SAP S/4HANA
Five Reasons To Skip SAP Suite on HANA and Go Directly to SAP S/4HANAFive Reasons To Skip SAP Suite on HANA and Go Directly to SAP S/4HANA
Five Reasons To Skip SAP Suite on HANA and Go Directly to SAP S/4HANA
Ā 
SAP Helps Reduce Silos Between Business and Spatial Data
SAP Helps Reduce Silos Between Business and Spatial DataSAP Helps Reduce Silos Between Business and Spatial Data
SAP Helps Reduce Silos Between Business and Spatial Data
Ā 
Why SAP HANA?
Why SAP HANA?Why SAP HANA?
Why SAP HANA?
Ā 
Spotlight on Financial Services with Calypso and SAP ASE
Spotlight on Financial Services with Calypso and SAP ASESpotlight on Financial Services with Calypso and SAP ASE
Spotlight on Financial Services with Calypso and SAP ASE
Ā 
SAP ASE 16 SP02 Performance Features
SAP ASE 16 SP02 Performance FeaturesSAP ASE 16 SP02 Performance Features
SAP ASE 16 SP02 Performance Features
Ā 

Recently uploaded

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
Ā 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
Ā 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo GarcĆ­a Lavilla
Ā 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
Ā 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
Ā 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
Ā 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
Ā 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
Ā 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
Ā 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
Ā 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
Ā 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
Ā 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
Ā 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
Ā 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
Ā 
Anypoint Exchange: Itā€™s Not Just a Repo!
Anypoint Exchange: Itā€™s Not Just a Repo!Anypoint Exchange: Itā€™s Not Just a Repo!
Anypoint Exchange: Itā€™s Not Just a Repo!Manik S Magar
Ā 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
Ā 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
Ā 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
Ā 

Recently uploaded (20)

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
Ā 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
Ā 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
Ā 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
Ā 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
Ā 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Ā 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
Ā 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
Ā 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
Ā 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
Ā 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
Ā 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
Ā 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
Ā 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
Ā 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
Ā 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
Ā 
Anypoint Exchange: Itā€™s Not Just a Repo!
Anypoint Exchange: Itā€™s Not Just a Repo!Anypoint Exchange: Itā€™s Not Just a Repo!
Anypoint Exchange: Itā€™s Not Just a Repo!
Ā 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
Ā 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Ā 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Ā 

HANA XS SPS9: What's New in the XS Programming Model

  • 1. 1 Ā©2014 SAP AG or an SAP affiliate company. All rights reserved. SAP HANA SPS 09 - Whatā€™s New? XS Programming Model SAP HANA Product Management November, 2014 (Delta from SPS 08 to SPS 09)
  • 2. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 2 Public Agenda Miscellaneous Improvements Security ļ‚ŸUser Handling Outbound HTTP New Database Interface Core XSJS APIs ļ‚ŸSMTP ļ‚ŸZIP Job Scheduling OData Web Dispatcher XS Admin ļ‚ŸSelf Service ļ‚ŸLogon Screen HANA Test Tools CDS ļ‚ŸLifecycle Management XSDS ļ‚ŸManaged ļ‚ŸUnmanaged ļ‚ŸProcedures Repository REST APIs
  • 4. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 4 Public HANA XS SPS9: Miscellaneous Improvements New Mozilla VM (currently 28) Relaxed strict mode settings of the JS VM New Thread Model OData execution tracking (SP9: GET only) Usage Statistics
  • 6. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 6 Public HANA XS SPS9: Misc. Security Features Full CORS support (Cross-Origin Resource Sharing) Secure http session cookies Support for Client Certificates from F5ā€™s BigIP Custom Headers/X-Frame SAML Single Logout (SLO) SAML Authentication in Authorization header Support of Virus Scan Interface (VSI) for applications
  • 7. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 7 Public HANA XS SPS9: Misc. Security Features ā€“ CORS Support Full CORS support (Cross-Origin Resource Sharing) ā€¢Filtering by origins, headers, and methods
  • 8. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 8 Public HANA XS SPS9: Misc. Security Features ā€“ Custom Headers/X-Frame Custom Headers/X-Frame ā€¢Controls if the browser should allow a page to be rendered in a frame, iframe, or object. ā€¢Avoids clickjacking attacks by keeping content from being embedded in a malicious site
  • 10. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 10 Public HANA XS SPS9: Recommended User Handling Recommended default pattern: no SQL privileges for end-users! Named DB users are used for logon and assignment of XS application privileges Default connection is used to switch to technical user for all DB access ļ‚ŸAccess to name/ID of logged-on user still possible ļ‚ŸInstance filtering is still done for the logged-on user Improved Support for Close Cooperation with ABAP Applications Logon via SAML or SAP Logon Tickets is possible even without named DB User! Programmatic alternative (SqlScript) to XS application privileges
  • 11. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 11 Public User handling in XS Plain DB user ā€¢The logon maps to the personal DB user, who is used for checking XS application privileges ā€¢SQL connections are opened for the personal DB user, who is thus also used for checking SQL privileges ā€¢Instance-filtering is also done with personal DB user ā€¢Personal DB user needs SQL privileges which he can abuse via SQL Console/Studio
  • 12. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 12 Public User handling in XS SQLCC scenario (best practice for stand-alone XS Apps) ā€¢The logon maps to the personal DB user ā€¢XS privilege checks are done with this user ā€¢Package without configured default connection ā€¢OData services and plain DB access from XSJS are not recommended, to avoid granting SQL privileges to personal DB users ā€¢Controlled navigation to non-exposed packages which have a configured default connection ā€¢Packages with configured default connection ā€¢All SQL connections (xsjs and OData) are opened for the configured default connection, which is thus used for checking all SQL privilges ā€¢Instance-filtering is not possible (planned for SPS09) Personal DB user needs only XS Privileges
  • 13. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 13 Public User handling in XS Anonymous section scenario ā€¢No logon is enforced ā€¢XS privilege checks will fail ā€¢Package without configured default connection ā€¢OData services and plain DB access from XSJS are not possible ā€¢navigation to packages with XS privilege check is not possible ā€¢Packages with configured default connection ā€¢All SQL connections (xsjs and OData) are opened for the configured default connection, which is thus used for checking all SQL privileges ā€¢Instance-filtering is not possible
  • 14. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 14 Public User handling in XS Technical user scenario ā€¢The logon is successful without mapping to a personal DB user ā€¢XS privilege checks will fail ā€¢Package without configured default connection ā€¢DB access not possible ā€¢Packages with configured default connection ā€¢All SQL connections (xsjs and OData) are opened for the configured sqlcc user, which is thus used for checking all SQL privileges ā€¢Instance-filtering is done with logon user
  • 16. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 16 Public HANA XS SPS9: Additional features for Outbound Connectivity Anonymous Outbound SSL supported Act as SAML 2.0 ID Provider OAuth 2.0 client Option to Enforce Proxy for all outgoing communication
  • 18. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 18 Public New database interface Performance gain ā€¢Achieves higher throughput ā€¢Better scale out support ā€¢Minimal remote traffic Usability improvements ā€¢Simple and easy to use JavaScript interface ā€¢Code reduction ā€¢No boilerplate code Light-weight architecture ā€¢Based upon thin C++ client library ā€¢No SQL Processing in XS layer ā€¢Uses internal HANA communication protocol
  • 19. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 19 Public New database interface Examples ā€“ old $.db interface var conn = $.db.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item" ā€˜ + ' WHERE "PRODUCT.PRODUCTID" = ? '; var pstmt = conn.prepareStatement(query); pstmt.setString(1, productId); var rs = pstmt.executeQuery(); var body = ''; while (rs.next()) { var gross = rs.getDecimal(6); if(gross >= 500){ body += rs.getNString(1) + "t" + rs.getNString(2) + "t" + rs.getNString(3) + "t" + rs.getDecimal(6) + "n"; } } rs.close(); pstmt.close();
  • 20. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 20 Public New database interface Examples ā€“ old $.db interface var conn = $.db.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item" ā€˜ + ' WHERE "PRODUCT.PRODUCTID" = ? '; var pstmt = conn.prepareStatement(query); pstmt.setString(1, productId); var rs = pstmt.executeQuery(); var body = ''; while (rs.next()) { var gross = rs.getDecimal(6); if(gross >= 500){ body += rs.getNString(1) + "t" + rs.getNString(2) + "t" + rs.getNString(3) + "t" + rs.getDecimal(6) + "n"; } } rs.close(); pstmt.close(); Parameters set via separate command ā€“ type specific
  • 21. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 21 Public New database interface Examples ā€“ old $.db interface var conn = $.db.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item" ā€˜ + ' WHERE "PRODUCT.PRODUCTID" = ? '; var pstmt = conn.prepareStatement(query); pstmt.setString(1, productId); var rs = pstmt.executeQuery(); var body = ''; while (rs.next()) { var gross = rs.getDecimal(6); if(gross >= 500){ body += rs.getNString(1) + "t" + rs.getNString(2) + "t" + rs.getNString(3) + "t" + rs.getDecimal(6) + "n"; } } rs.close(); pstmt.close(); Returned Record Set ā€“ no random access, one loop sequential
  • 22. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 22 Public New database interface Examples ā€“ old $.db interface var conn = $.db.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item" ā€˜ + ' WHERE "PRODUCT.PRODUCTID" = ? '; var pstmt = conn.prepareStatement(query); pstmt.setString(1, productId); var rs = pstmt.executeQuery(); var body = ''; while (rs.next()) { var gross = rs.getDecimal(6); if(gross >= 500){ body += rs.getNString(1) + "t" + rs.getNString(2) + "t" + rs.getNString(3) + "t" + rs.getDecimal(6) + "n"; } } rs.close(); pstmt.close(); Each cell must be read with another type specific function call
  • 23. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 23 Public New database interface Examples ā€“ new $.hdb interface var conn = $.hdb.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item"' + ' WHERE "PRODUCT.PRODUCTID" = ?'; var rs = conn.executeQuery(query,productId); var body = ''; for(var i = 0; i < rs.length; i++){ if(rs[i]["GROSSAMOUNT"] >= 500){ body += rs[i]["HEADER.PURCHASEORDERID"] + "t" + rs[i]["PURCHASEORDERITEM"] + "t" + rs[i]["PRODUCT.PRODUCTID"] + "t" + rs[i]["GROSSAMOUNT"] + "n"; } }
  • 24. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 24 Public New database interface Examples ā€“ new $.hdb interface var conn = $.hdb.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item"' + ' WHERE "PRODUCT.PRODUCTID" = ?'; var rs = conn.executeQuery(query,productId); var body = ''; for(var i = 0; i < rs.length; i++){ if(rs[i]["GROSSAMOUNT"] >= 500){ body += rs[i]["HEADER.PURCHASEORDERID"] + "t" + rs[i]["PURCHASEORDERITEM"] + "t" + rs[i]["PRODUCT.PRODUCTID"] + "t" + rs[i]["GROSSAMOUNT"] + "n"; } } Parameters are sent into the execute function directly ā€“ not type specific
  • 25. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 25 Public New database interface Examples ā€“ new $.hdb interface var conn = $.hdb.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item"' + ' WHERE "PRODUCT.PRODUCTID" = ?'; var rs = conn.executeQuery(query,productId); var body = ''; for(var i = 0; i < rs.length; i++){ if(rs[i]["GROSSAMOUNT"] >= 500){ body += rs[i]["HEADER.PURCHASEORDERID"] + "t" + rs[i]["PURCHASEORDERITEM"] + "t" + rs[i]["PRODUCT.PRODUCTID"] + "t" + rs[i]["GROSSAMOUNT"] + "n"; } } Returned Record Set is a JSON object ā€“ direct index access or easy looping
  • 26. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 26 Public New database interface Examples ā€“ new $.hdb interface var conn = $.hdb.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item"' + ' WHERE "PRODUCT.PRODUCTID" = ?'; var rs = conn.executeQuery(query,productId); var body = ''; for(var i = 0; i < rs.length; i++){ if(rs[i]["GROSSAMOUNT"] >= 500){ body += rs[i]["HEADER.PURCHASEORDERID"] + "t" + rs[i]["PURCHASEORDERITEM"] + "t" + rs[i]["PRODUCT.PRODUCTID"] + "t" + rs[i]["GROSSAMOUNT"] + "n"; } } Record Set object doesnā€™t materialize the data into JavaScript VM
  • 27. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 27 Public New database interface Examples ā€“ new $.hdb interface var conn = $.hdb.getConnection(); var query = 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.Purchase.Item"' + ' WHERE "PRODUCT.PRODUCTID" = ?'; var rs = conn.executeQuery(query,productId); var body = ''; for(var i = 0; i < rs.length; i++){ if(rs[i]["GROSSAMOUNT"] >= 500){ body += rs[i]["HEADER.PURCHASEORDERID"] + "t" + rs[i]["PURCHASEORDERITEM"] + "t" + rs[i]["PRODUCT.PRODUCTID"] + "t" + rs[i]["GROSSAMOUNT"] + "n"; } } Individual Cells accessible by name / not type specific
  • 28. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 28 Public New database interface Debugging New interface makes debugging easier as the result set is JSON and fully accessible in the debugger
  • 29. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 29 Public New database interface Examples ā€“ new $.hdb interface, JSON RecordSet var connection = $.hdb.getConnection(); var results = connection.executeQuery( 'SELECT * FROM "sap.hana.democontent.epmNext.data::EPM.MasterData.Employees" ' + 'WHERE LOGINNAME <> ?', 'EPM_USER'); $.response.setBody(JSON.stringify(results)); Result Record Set is JSON; ready for output
  • 30. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 30 Public New database interface Examples ā€“ new $.hdb interface, Stored Procedures var connection = $.hdb.getConnection(); var partnerRole = $.request.parameters.get("PartnerRole"); partnerRole = typeof partnerRole !== 'undefined' ? partnerRole : '01'; var getBpAddressesByRole = connection.loadProcedure("SAP_HANA_EPM_NEXT", "sap.hana.democontent.epmNext.procedures::get_bp_addresses_by_role"); var results = getBpAddressesByRole(partnerRole); //Pass output to response $.response.status = $.net.http.OK; $.response.contentType = "application/json"; $.response.setBody(JSON.stringify(results)); Procedure has a JavaScript function ā€œproxyā€
  • 31. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 31 Public New database interface Examples ā€“ new $.hdb interface, Stored Procedures var connection = $.hdb.getConnection(); var partnerRole = $.request.parameters.get("PartnerRole"); partnerRole = typeof partnerRole !== 'undefined' ? partnerRole : '01'; var getBpAddressesByRole = connection.loadProcedure("SAP_HANA_EPM_NEXT", "sap.hana.democontent.epmNext.procedures::get_bp_addresses_by_role"); var results = getBpAddressesByRole(partnerRole); //Pass output to response $.response.status = $.net.http.OK; $.response.contentType = "application/json"; $.response.setBody(JSON.stringify(results)); JavaScript input parameters / Table parameters as JSON
  • 32. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 32 Public New database interface Examples ā€“ new $.hdb interface, Stored Procedures var connection = $.hdb.getConnection(); var partnerRole = $.request.parameters.get("PartnerRole"); partnerRole = typeof partnerRole !== 'undefined' ? partnerRole : '01'; var getBpAddressesByRole = connection.loadProcedure("SAP_HANA_EPM_NEXT", "sap.hana.democontent.epmNext.procedures::get_bp_addresses_by_role"); var results = getBpAddressesByRole(partnerRole); //Pass output to response $.response.status = $.net.http.OK; $.response.contentType = "application/json"; $.response.setBody(JSON.stringify(results)); Result Record Set is also JSON
  • 34. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 34 Public HANA XS SPS9: New XSJS-APIs SMTP (sending mails from xsjs application code) ZIP and GZIP support (read and write) XML parsing support Secure Store for applications Better Multipart Support Asynchronous request completion Text Access Text Mining Management of Scheduled Jobs Various utility functions (hash, encrypt) AntiVirus for applications
  • 35. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 35 Public New XSJS-APIs Examples ā€“ SMTP var mail = new $.net.Mail({ sender: {address: "demo@sap.com"}, to: [{ address: "user@sap.com"}], subject: "XSJS Email Test", parts: [ new $.net.Mail.Part({ type: $.net.Mail.Part.TYPE_TEXT, text: "The body of the mail.", contentType: "text/plain" })] }); var returnValue = mail.send(); var response = "MessageId = " + returnValue.messageId + ", final reply = " + returnValue.finalReply;
  • 36. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 36 Public New XSJS-APIs Examples ā€“ SMTP with attachment var mail = new $.net.Mail({ sender: {address: "demo@sap.com"}, to: [{ address: "user@sap.com"}], subject: "XSJS Email Test", parts: [ new $.net.Mail.Part({ type: $.net.Mail.Part.TYPE_TEXT, text: "Atachement Test", contentType: "text/plain" })] }); mail.parts.push(new $.net.Mail.Part({ type: $.net.Mail.Part.TYPE_ATTACHMENT, data: getImage(), contentType: "image/jpg", fileName: "myPicture.jpg"})); var returnValue = mail.send();
  • 37. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 37 Public New XSJS-APIs Examples ā€“ SMTP Configuration
  • 38. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 38 Public New XSJS-APIs Examples ā€“ ZIP var zip = new $.util.Zip(); zip["folder1/demo1.txt"] = "This is the new ZIP Processing in XSJS"; zip["demo2.txt"] = "This is also the new ZIP Processing in XSJS"; $.response.status = $.net.http.OK; $.response.contentType = "application/zip"; $.response.headers.set('Content-Disposition', "attachment; filename = 'ZipExample.zip'"); $.response.setBody(zip.asArrayBuffer());
  • 39. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 39 Public New XSJS-APIs Examples ā€“ ZIP var zip = new $.util.Zip(); zip["folder1/demo1.txt"] = "This is the new ZIP Processing in XSJS"; zip["demo2.txt"] = "This is also the new ZIP Processing in XSJS"; $.response.status = $.net.http.OK; $.response.contentType = "application/zip"; $.response.headers.set('Content-Disposition', "attachment; filename = 'ZipExample.zip'"); $.response.setBody(zip.asArrayBuffer()); Folder structure in ZIP simply by specify the full path as you create the content
  • 40. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 40 Public New XSJS-APIs Examples ā€“ ZIP Continued Load Zip directly from web request object ā€“ avoid moving content into JavaScript variable var zip = new $.util.Zip($.request.body); Similar direct access for Record Set result object of a database query statement = conn.prepareStatement("select data from EXAMPLETABLE where id=1"); var rs = statement.executeQuery(); if (rs) { while (rs.next()) { //Load Zip From ResultSet var loadedZip = new $.util.Zip(rs, 1); } }
  • 41. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 41 Public New XSJS-APIs Examples ā€“ XML var parser = new $.util.SAXParser(); //parse XML from String var parser = new $.util.SAXParser(); var xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>n' + '<!-- this is a note -->n'+'<note noteName="NoteName">'+ '<to>To</to>'+'<from>From</from>'+'<heading>Note heading</heading>'+ '<body>Note body</body>'+'</note>'; var startElementHandlerConcat = ""; parser.startElementHandler = function(name, atts) { startElementHandlerConcat += name; if (name === "note") { startElementHandlerConcat += " noteName = '" + atts.noteName + "'"; } startElementHandlerConcat += "n"; }; parser.parse(xml);
  • 42. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 42 Public New XSJS-APIs Examples ā€“ Improved Multi-Part var i; var n = $.request.entities.length; var client = new $.net.http.Client(); for (i = 0; i < n; ++i) { var childRequest = $.request.entities[i].body.asWebRequest(); client.request(childRequest, childRequest.headers.get("Host") + childRequest.path); var childResponse = client.getResponse(); var responseEntity = $.response.entities.create(); responseEntity.setBody(childResponse); }
  • 43. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 43 Public New XSJS-APIs Examples ā€“ Response Callback $.response.followUp({ uri : "playground.sp9.followUp:other.xsjs", functionName : "doSomething", parameter : { a : "b" } });
  • 44. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 44 Public New XSJS-APIs Examples ā€“ Text Access var textAccess = $.import("sap.hana.xs.i18n","text"); var bundle = textAccess.loadBundle("playground.sp9.textAccess","demo1"); var singleText = bundle.getText("demo"); var replaceText = bundle.getText("demo2",['1001']); var oAllTexts = bundle.getTexts();
  • 45. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 45 Public New XSJS-APIs Examples ā€“ AntiVirus try { //create a new $.security.AntiVirus object using the default profile var av = new $.security.AntiVirus(); av.scan($.request.body); } catch (e) { $.response.setBody(e.toString()); } ā€¢The scan needs a Virus Scan Adapter (VSA) to be installed on the host ā€¢The setup and configuration is available with SAP note 2081108 ā€¢This class uses the SAP certified interface NW-VSI 2.00 (see SAP note 1883424) ā€¢For a list of the AV products supported, see SAP note 1494278
  • 46. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 46 Public New XSJS-APIs Examples ā€“ Secure Store function store() { var config = { name: "foo", value: "bar" }; var aStore = new $.security.Store("localStore.xssecurestore"); aStore.store(config); } function read() { var config = { name: "foo" }; try { var store = new $.security.Store("localStore.xssecurestore"); var value = store.read(config); } catch(ex) { //do some error handling } }
  • 48. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 48 Public HANA XS SPS9: Scheduled Jobs Robustness ļ‚ŸActive jobs will not block DU import anymore ļ‚ŸNo hick-up of scheduling, even in case of process crashes Enhanced xsjs API for Job Management ļ‚ŸEnumerate schedules of a job object (access as e.g. myjob.schedules[19]) ļ‚ŸModify schedules via properties (xscron, description, parameter like myjob.schedules[19].xscron = ā€œ* * * * * * *ā€;) ļ‚ŸExpose job_log entries of a schedule as a property (like myjob.schedules[19].logs.jobLog) Enhanced support for SqlScript parameters ļ‚ŸScalar parameters ļ‚ŸReferences to tables ļ‚ŸCreating local tables by type New Management UI (XS Job Dashboard)
  • 49. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 49 Public HANA XS SPS9: Scheduled Jobs ā€“ New Management UI New Management UI (XS Job Dashboard) URL: /sap/hana/xs/admin/jobs/
  • 50. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 50 Public HANA XS SPS9: Scheduled Jobs ā€“ New Management UI Continued New Management UI (XS Job Dashboard) Drill into details of a single job definition from Job Dashboard or from the XS Admin tool
  • 51. OData
  • 52. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 52 Public HANA XS SPS9: OData Configurable Cache-settings for Metadata-Document E-Tag support Automatic parallelization for GET batch requests INA Search capabilities integrated into OData
  • 53. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 53 Public OData Explorer SAP River application explorer rebuilt as SAP OData Explorer in SPS09 ā€¢General OData test and data generation tool which supports XSODATA services ā€¢Launches from the SAP Web- based Development Workbench or via URL ā€¢/sap/hana/ide/editor/plugin/testtools/odataexplorer/index.html?appName=<xsodata service path>
  • 55. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 55 Public HANA XS SPS9: Local Web Dispatcher Full Integration into HANA Process Management ļ‚ŸMonitoring ļ‚ŸConfiguration ļ‚ŸAdministration
  • 56. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 56 Public HANA XS SPS9: Local Web Dispatcher Full Integration into HANA Process Management ļ‚ŸMonitoring
  • 57. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 57 Public HANA XS SPS9: Local Web Dispatcher Full Integration into HANA Process Management ļ‚ŸConfiguration
  • 58. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 58 Public HANA XS SPS9: Local Web Dispatcher Full Integration into HANA Process Management ļ‚ŸAdministration ā€“URL: /sap/hana/xs/wdisp/admin/public/
  • 60. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 60 Public HANA XS SPS9: HANA XS Admin Tool Much improved usability User Self Service UI of Logon Screen is Customizable
  • 61. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 61 Public HANA XS SPS9: HANA XS Admin Tool ā€“ new visual design
  • 62. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 62 Public HANA XS SPS9: HANA XS Admin Tool: Scheduled Jobs ā€“ New Management UI New Management UI (XS Job Dashboard) URL: /sap/hana/xs/admin/jobs/
  • 63. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 63 Public HANA XS SPS9: HANA XS Admin Tool: Scheduled Jobs ā€“ New Management UI Continued New Management UI (XS Job Dashboard) Drill into details of a single job definition from Job Dashboard or from the XS Admin tool
  • 64. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 64 Public HANA XS SPS9: Customize Login Screen Custom background image set via xsengine.ini -> httpserver parameter
  • 65. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 65 Public HANA XS SPS9: User Self Service /sap/hana/xs/selfService/user/resetPassword.html
  • 66. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 66 Public HANA XS SPS9: User Self Service /sap/hana/xs/selfService/user/requestAccount.html
  • 67. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 67 Public HANA XS SPS9: User Self Service ā€“ Admin /sap/hana/xs/selfService/admin/
  • 68. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 68 Public HANA XS SPS9: User Self Service ā€“ User Profile /sap/hana/xs/formLogin/profile/
  • 70. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 70 Public HANA XS SPS9: Test Framework Unit Test Framework Mock Framework (shipped with HANA, but not pre-installed)
  • 71. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 71 Public Contents of HANA_TEST_TOOLS Delivery Unit ā€¢XS Unit Test Framework and Test Runner (unit.jsaminexs) ā€¢XSUnit Test Coverage for XS JavaScript (unit.codecoverage) ā€¢Test Isolation Framework (mockstar) ā€¢Test Helper (unit.util) ā€¢Developer Documentation (doc) ā€¢Demos (demo)
  • 72. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 72 Public How to create an XSUnit Test ā€¢One common tool for testing XS JavaScript, database content: SQLScript, Views ā€¢Based on open-source library, extended by custom assertions, test utilities ā€¢Test code and test data are developed beside your productive code, in the same HANA instance ā€¢Tests are implemented in XS JavaScript in HANA Studio or the Web-based Development Workbench
  • 73. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 73 Public Execute XSUnit Test in the browser ā€¢URL: /sap/hana/testtools/unit/jasminexs/TestRunner.xsjs?package=<> ā€¢package = the repository package your tests are located
  • 74. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 74 Public Parameter Required Description Example tags no Comma-separated list of tags to restrict the tests to be executed. tags=integration,long_running reporter no Complete path to module providing an implementation of the Jasmine reporter interface. With this parameter a custom reporter can be passed to publish the test results in an application specific format reporter=sap.hana.testtools.unit.jasminexs.reporter. db.dbReporter has the same effect like format=db profile no Name of a "profile" defined in the test which filters the tests to be executed on the basis of tags. profile=end2end Execute XSUnit Test in the browser: URL Parameters
  • 75. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 75 Public Parameter Required Description Example pattern no Naming pattern that identifies the .xsjslib files that contain the tests. If not specified, the pattern ā€œ*Testā€ is applied. You can use wildcards ā€œ?ā€ and ā€œ*ā€ to match a single and multiple arbitrary characters respectively. pattern=Test* would match all xsjslib files beginning with ā€œTestā€; In these files you may then manually import other test files. package yes Package that acts as starting point for discovering the tests. If not otherwise specified by parameter ā€œpatternā€ all .xsjslib files in this package and its sub-packages conforming to the naming pattern ā€œ*Testā€ will be assumed to contain tests and will be executed. package=sap.hana.testtools.demo Execute XSUnit Test in the browser: URL Parameters (Continued)
  • 76. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 76 Public Parameter Required Description Example format no Specifies the output format the test runner uses to report test results. By default, the results will be reported as HTML document. This parameter has no effect if a custom reporter is provided via parameter ā€œreporterā€. format=html shows results in HTML; format=junit or format=xml outputs XML conforming to schema used by Jenkins; format=json outputs results in JSON format; format=db writes test results to database tables Execute XSUnit Test in the browser: URL Parameters (Continued)
  • 77. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 77 Public Execute XSUnit from SAP Web-based Development Workbench
  • 78. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 78 Public Analyze Test Coverage
  • 79. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 79 Public View XSUnit Test Results
  • 80. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 80 Public Mocking Framework
  • 81. CDS
  • 82. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 82 Public HANA XS SPS9: CDS Mission Statement ļ‚ŸCDS provides an enriched data model ļ‚ŸCDS allows for graceful life-cycle management ļ‚ŸCDS allows for extending the meta-model Features coming with SP9 ļ‚ŸMulti-File ļ‚ŸTable Lifecycle ļ‚ŸAssociations ļ‚ŸDCL (Instance filtering) ļ‚ŸMuch improved editing support in Studio and Web-based Development Workbench
  • 83. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 83 Public CDS new features ā€¢Support for view complex features such as sub-selects ā€¢Multi-file support ā€¢Calc-view support ā€¢Unmanaged Associations ā€¢Annotation (enums, array, etc) ā€¢Lifecycle management support for data migration ā€¢GIS-Types ā€¢Core HANA data types ā€¢Currency Conversion ā€¢Enterprise search via full text index
  • 84. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 84 Public CDS Lifecycle Management Example SQL: CREATE TABLE PARTNER(NAME char(30), TYPE char(1)); Adding new field: ALTER TABLE PARTNER ADD(GROSS int);
  • 85. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 85 Public CDS Lifecycle Management Example CDS: entity PARTNER { NAME: String(30); TYPE: String(1); GROSS: Integer; }; Simply add the field. The necessary SQL is generated
  • 86. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 86 Public CDS Lifecycle Management Example CDS: entity PARTNER { NAME: String(30); TYPE: String(1); GROSS: Integer Integer64; }; This Lifecycle Management supports a wide variety of scenarios ā€¢Conversion from same named HDBTABLE ā€¢Change of key / data type ā€¢Removal of columns Upon activation data is migrated automatically
  • 87. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 87 Public CDS Multi-file: File 1 namespace playground.sp9.cds; @Schema: 'SP9DEMOā€˜ context ContextA { type T1 : Integer; context ContextAI { type T2 : String(20); type T3 { a : Integer; b : String(88); }; }; };
  • 88. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 88 Public CDS Multi-file: File 2 namespace playground.sp9.cds; using playground.sp9.cds::ContextA.T1; using playground.sp9.cds::ContextA.ContextAI as ic; using playground.sp9.cds::ContextA.ContextAI.T3 as ict3; @Schema: 'SP9DEMOā€˜ context ContextB { type T10 { a : T1; // Integer b : ic.T2; // String(20) c : ic.T3; // structured d : type of ic.T3.b; // String(88) e : ict3; // structured }; context ContextBI { type T1 : String(7); // hides the T1 coming from the first using declaration type T2 : T1; // String(7) };};
  • 89. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 89 Public CDS Enumerations namespace playground.sp9.cds; @Schema: 'SP9DEMOā€˜ context enumerations { type Color : String(10) enum { red = 'FF0000'; g = '00FF00'; b = '0000FF'; }; annotation MyAnnotation { a : Integer; b : String(20); c : Color; d : Boolean; };};
  • 90. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 90 Public CDS New Types entity SomeTypes { a : hana.ALPHANUM(10); b : hana.SMALLINT; c : hana.TINYINT; d : hana.SMALLDECIMAL; e : hana.REAL; h : hana.VARCHAR(10); i : hana.CLOB; j : hana.BINARY(10); k : hana.ST_POINT; l : hana.ST_GEOMETRY; };
  • 91. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 91 Public CDS Views ā€“ OrderBy view EmployeesView as select from Employee { orgUnit, salary } order by salary desc;
  • 92. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 92 Public CDS Views ā€“ Case entity MyEntity { key id : Integer; a : Integer; color : String(1); }; view MyView as select from MyEntity { id, case color when 'R' then 'redā€˜ when 'G' then 'greenā€˜ when 'B' then 'blueā€˜ else 'blackā€˜ end as color, case when a < 10 then 'smallā€˜ when 10 <= a and a < 100 then 'mediumā€˜ else 'largeā€˜ end as size };
  • 93. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 93 Public CDS Unmanaged Associations entity Employee { key id : String(256); officeId : Integer; }; entity Room { key id : Integer; inhabitants : Association[*] to Employee on inhabitants.officeId = id; }; entity Thing { key id : Integer; parentId : Integer; parent : Association[1] to Thing on parent.id = parentId; children : Association[*] to Thing on children.parentId = id; };
  • 94. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 94 Public CDS Backlink workaround via Unmanaged Associations entity Header { key id : Integer; items : Association[*] to Item on items.headerId = id; description : String(120); }; entity Item { key headerId : Integer; key id : Integer; header : Association[1] to Header on header.id = headerId; description : String(120); };
  • 95. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 95 Public CDS Many to Many relationships entity Employee { key id : Integer; name : String(80); projectLinks : Association[*] to E2P on projectLinks.e_id = id; }; entity Project { key id : Integer; name : String(80); employeeLinks : Association[*] to E2P on employeeLinks.p_id = id; }; entity E2P { key e_id : Integer; key p_id : Integer; projects : Association[*] to Project on projects.id = p_id; employees : Association[*] to Employee on employees.id = e_id; };
  • 96. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 96 Public CDS Many to Many relationships (continued) view EmployeesWithProjects as select from Employee { name as EmployeeName, projectLinks.projects.id as projectId, projectLinks.projects.name as projectName }; view ProjectsWithEmployees as select from Project { name as projectName, employeeLinks.employees.id as EmployeeId, employeeLinks.employees.name as EmployeeName };
  • 97. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 97 Public CDS Full Text Index Annotation entity Header { key id : Integer; @SearchIndex.text: { enabled: true } @SearchIndex.fuzzy: { enabled: true } description : String(120); };
  • 100. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 100 Public Goals of seamless HDB consumption in XSJS General HANA consumption ļƒ¼Native JavaScript embedding of HANA database artifacts ļƒ¼Structured API calls instead of low-level SQL interface (ODBC) ļƒ¼Less boilerplate coding, e.g., result set conversion XSDS: Native CDS consumption ļƒ¼Import CDS entities as native JavaScript objects ļƒ¼Understand CDS metadata for working with JavaScript objects
  • 101. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 101 Public XS Data Services (XSDS) XSDS as Native CDS Client and Query Builder for XSJS Succeeds three HANA Consumption projects by Platform Research XS ORM XS Query Builder CDS XS Data Services XS Relations +
  • 102. Extended Programming Model XSDS ā€“ Data Models
  • 103. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 103 Public Core Data Services CDS is central HANA functionality provided via SQL interface Core Data Services (CDS) are a cross-platform set of concepts and tools to define semantically rich data models for SAP HANA applications. A central part of CDS is the object-relational mapping that links semantically meaningful entities to their technical representation as records in the HANA database.
  • 104. Ā© 2014 SAP SE or an SAP affiliate company. All rights reserved. Public 104 CDS and XSDS XSDS is the native CDS embedding for JavaScript in the XS Engine CDS XSDS HANA XS
  • 105. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 105 Public Sample CDS data model namespace sap.hana.xsopen.dbutils.xsds.examples.data; context bboard { entity user { key uid: Integer not null; Name: String(63) not null; Email: String(63); Created: UTCDateTime; }; type text { Text: String(255); Lang: String(2); }; entity post { key pid: Integer not null; Title: String(63) not null; Text: text; Author: association [1] to user; Parent: association [0..1] to post; Rating: Integer; // Comments: association [0..*] to comment via backlink Parent; // Tags: association [0..*] to tag via entity tags_by_post; Created: UTCDateTime; }; };
  • 106. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 106 Public Consume CDS model data in XS Import and extend CDS entity definitions Reads available metadata on types, keys, associations Supports extension, projection, renaming of entity definitions Already supports CDS via backlink, via entity associations Pre-generation of imports moves metadata processing overhead to dev time var User = XSDS.$importEntity("demo.bboard", "bboard.user"); var Post = XSDS.$importEntity("demo.bboard", "bboard.post", { Comments: { $association: { $entity: Comment, $viaBacklink: "Post" } } });
  • 107. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 107 Public Import pre-generation CDS import costly operation XS Engine has no session state ļƒ  (Re-)Import of CDS metadata for every single requests Pregeneration of imports improves performance Serialize result of imports into single library file var User = XSDS.$importEntity("demo.bboard", "bboard.user"); var UserLib = $.import("demo.bboard", "User"); var User = UserLib.demo.bboard.User.entity;
  • 108. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 108 Public Main XSDS features XS Data Services Entity instances and unmanaged values Query Builder Ad-hoc queries Based on CDS QL (WIP) Manual consistency Full HANA support CDS Entities and Types HANA Entity Manager Lightweight ORM Navigation to associations Data consistency Limited query functionality +
  • 109. Extended Programming Model XSDS ā€“ Managed Mode
  • 110. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 110 Public XSDS managed entities Create, retrieve, update, and delete instances of entities Result is plain JavaScript object Optional lazy retrieval of associated instances to avoid "n+1 problem" Optimized JOIN strategy to minimize DB queries (WIP) Write changes to database explicitly Manager tracks local changes for minimal updates var post = Post.$get({ pid: 101 }); if (post.Author.Name === "Alice") post.Rating++; post.$save();
  • 111. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 111 Public Reference: instance manipulation Retrieve by key Update instance Create new instance Delete instance var post = Post.$get({ pid: 101 }); post.Author.Name = "Alice"; post.$save(); var user = new User({ Name: "Alice", Created: new Date() }); user.$save(); post.$discard();
  • 112. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 112 Public Instance management Entity instances are managed Instances are singleton objects with "personality" Associated instances are stored by reference Upside: Runtime guarantees on consistency Single consistent view on every instance (enforced by $persist) Automatic association management (1:1, 1:n, m:n) Downside: Entity cache Additional overhead for instance management Only limited subset of database functionality for instance retrieval
  • 113. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 113 Public Consistent instance view HANA XSJS { uid: 1, Email: "alice@sap.se" } { pid: 103, Title: "Third", Author: } { uid: 2, Email: "bob@sap.ag" } pid Title Author.uid 101 First 1 103 Third 1 uid Email 1 alice@sap.ag 2 bob@sap.ag { pid: 101, Title: "First", Author: }
  • 114. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 114 Public Database and transaction handling Transparent database and transaction handling Minimal XSDS runtime (metadata processing, entity cache, type conversion) Exposes/reuses DB functionality as much as possible (e.g., constraints checks) XSDS uses single DB connection and single transaction Suited for single-threaded, per-request execution model of XS Engine Supports auto commit, explicit commits, and rollbacks Supports connection configurations (.xssqlcc) post1.$save(); post2.$save(); XSDS.Transaction.$commit();
  • 115. Extended Programming Model XSDS ā€“ Unmanaged Mode
  • 116. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 116 Public XS Code CDS Metadata Definition CDS queries from XSJS: motivation ā€žGet the names of authors which commented on their own posts and the text of that commentā€œ var rs = conn.prepareStatement(ā€˜ SELECT a."Name", c."Text.Text" FROM "bboard.post" p JOIN "bboard.user" a ON p."Author.uid"=a."uid" JOIN "bboard.comment" c ON p."pid"=c."Post.pid" JOIN "bboard.user" ca ON c."Author.uid"=ca."uid" WHERE a."uid"=ca."uidā€œ').execute(); while (rs.next()) { rs.getInt(1); rs.getString(2); } entity post { key pid: Integer not null; Author: association [1] to user; }; entity user { key uid: Integer not null; Name: String(63) not null; }; entity comment { key cid: Integer not null; Text: text; Author: association[1] to user; Post: association[1] to post; //via backlink }; Leaking Abstraction: Column name can only be derived from table definition Convenience: ā€žString-basedā€œ query interface & manual result set processing Redundant Code: JOINs could be derived from metadata
  • 117. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 117 Public XSDS queries Ad-hoc queries Construct general queries in a JavaScript-like way Yields plain JavaScript object as unmanaged value, not instance Query Language Incremental query building Operators $project, $where, $matching, ... Full support for CDS path navigation Expression language based on CDS Query Language using fluent API Alternative, more concise JSON-like selection notation for restricted subset var query = Post.$query().$where(Post.Author.Name.$eq("Alice")); var results = query.$execute();
  • 118. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 118 Public Demo: XSDS queries - $project Projections with CDS navigation expressions Result: var res = Post.$query().$project({ Author: {Name: true}, Comments: {Author: {Name: true}}, Title: "TitleOfPost"}) .$execute(); [{ Author: { Name: "Alice" }, Comments: { Author: { Name: "Bob" } }, TitleOfPost: "First Post!" }, ...]
  • 119. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 119 Public Demo: XSDS queries - $where Complex where conditions: Predefined operators of expression language: $eq, $ne, $gt, $lt, $ge, $le, $like, $unlike Escape to any SQL operator: var selfCommentingPosts = Post.$query().$where(Post.Comments.Author.pid.$eq(Post.Author.pid)) .$execute(); var somePost = Post.$query() .$where(Post.Rating.$prefixOp('SQRT').$gt(2)).$execute(); translated to: WHERE SQRT ("t0"."Rating") > 2
  • 120. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 120 Public Demo: XSDS queries - $matching Selection using ā€œtemplateā€ for the result Unmanaged version of $find, $findAll, uses same template language More concise Less expressive var interestingPosts = Post.$query().$matching({ Rating: { $gt: 2 }, Tags: { Name: "+1" } }).execute(); + ā€“
  • 121. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 121 Public Demo: incremental query construction Incremental construction with immutable query objects Explicit trigger // build query without DB call var qBadPosts = Post.$query().$where(Post.Author.pid) .$eq(Post.Comments.Author.pid))); // refine query var qStarBadPosts = qBadPosts.$where(Post.Rating.$gt(4)); // trigger actual DB calls var badTitles = qBadPosts.$project( { Title: true, Author: {Name : true}}).$execute(); var recentBadTitles = qStarBadPosts.$project({ Title: true }) .$execute();
  • 122. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 122 Public Reference: JSON expressions Simple expressions Complex expressions JSON Expression Language Operators $eq $ne $lt $le $gt $ge $like $unlike $null Post.$find({ mandt: "001", pid: 101 }); Post.$find({ Title: { $like: "First%" }, Rating: { $gt: 1, $lt: 3 }, Created: { $lt: Date.now() ā€“ 3600 } });
  • 123. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 123 Public Query builder Optimized query construction Allows for incremental query construction without database roundtrips Immutable query objects support sharing of subqueries Just-in-time translation into plain SQL, using needed joins SELECT "t0.Author"."Name" AS "t0.Author.Name", "t0.Author"."Email" AS "t0.Author.Email", "t0"."Title" AS "t0.Title" FROM "sap.hana.xsopen.xsds.examples::bboard.post" "t0" JOIN "sap.hana.xsopen.xsds.examples::bboard.user" "t0.Author" ON "t0"."Author.uid"="t0.Author"."uid" WHERE ("t0"."Rating" > 2) AND ("t0.Author"."Name" = 'Alice')
  • 124. Extended Programming Model XSDS - Procedures
  • 125. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 125 Public XS Procedures Library A standard reusable library shipped by SAP to simplify Stored Procedure calls from XSJS and make they ā€œfeelā€ like JavaScript functions
  • 126. Extended Programming Model Repository REST API
  • 127. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 127 Public SAP HANA REST API ā€¢An implementation of the Orion Server API within HANA ā€¢Designed to allow development tools access to HANA capabilities, especially the Repository.
  • 128. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 128 Public SAP HANA REST API ā€“ server API parts ā€¢File API ā€¢Workspace API ā€¢Transfer API ā€¢Metadata API ā€¢Change Tracking API ā€¢OData Services ā€¢Info API
  • 129. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 129 Public SAP HANA REST API ā€“ File API ā€¢File API ā€¢Workspace API ā€¢Transfer API ā€¢Metadata API ā€¢Change Tracking API ā€¢OData Services ā€¢Info API ā€¢Enables you to browse and manipulate files and directories via HTTP ā€¢Basic HTTP methods GET, PUT, and POST to send requests ā€¢JSON is used as the default representation format ā€¢Can also retrieve metadata and previous versions of the content
  • 130. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 130 Public SAP HANA REST API ā€“ Workspace API ā€¢File API ā€¢Workspace API ā€¢Transfer API ā€¢Metadata API ā€¢Change Tracking API ā€¢OData Services ā€¢Info API ā€¢Enables you to create and manipulate workspaces and projects via HTTP ā€¢Workspace and project concepts taken over from Eclipse ā€¢Both ORION concepts are technically mapped to the SAP HANA XS package concept ā€¢When you create a project, it is an SAP HANA XS sub package in the specified workspace package
  • 131. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 131 Public SAP HANA REST API ā€“ Transfer API ā€¢File API ā€¢Workspace API ā€¢Transfer API ā€¢Metadata API ā€¢Change Tracking API ā€¢OData Services ā€¢Info API ā€¢Is used to import and export packages and files ā€¢Resumable, chunked uploads of file content ā€¢Export not yet implemented. Use the File API for export.
  • 132. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 132 Public SAP HANA REST API ā€“ Metadata API ā€¢File API ā€¢Workspace API ā€¢Transfer API ā€¢Metadata API ā€¢Change Tracking API ā€¢OData Services ā€¢Info API ā€¢Provides services to support search and auto completion scenarios ā€¢it is possible to retrieve metadata for tables, views, procedures, functions, sequences, and schemas as well as CDS metadata
  • 133. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 133 Public SAP HANA REST API ā€“ Change Tracking API ā€¢File API ā€¢Workspace API ā€¢Transfer API ā€¢Metadata API ā€¢Change Tracking API ā€¢OData Services ā€¢Info API ā€¢Enables you to make use of specific lifecycle-management features included with the SAP HANA Repository via HTTP ā€¢For example: you can ensure that an export operation includes only the latest approved versions of repository objects
  • 134. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 134 Public SAP HANA REST API ā€“ OData Services ā€¢File API ā€¢Workspace API ā€¢Transfer API ā€¢Metadata API ā€¢Change Tracking API ā€¢OData Services ā€¢Info API ā€¢A set of OData services that enable access to configuration data stored in the SAP HANA environment ā€¢Includes details on the following: ā€¢Delivery Units ā€¢INI Configuration files ā€¢M_FEATURES
  • 135. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 135 Public SAP HANA REST API ā€“ Info API ā€¢File API ā€¢Workspace API ā€¢Transfer API ā€¢Metadata API ā€¢Change Tracking API ā€¢OData Services ā€¢Info API ā€¢Can be used to display information about the current version of the REST API. ā€¢Includes a description of the current version of the delivery unit and the number of commands (API entry points) that are currently supported by the REST API
  • 136. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 136 Public SAP HANA REST API - SapBackPack ā€¢SAP specific functionality (like activation) added via the additional parameter - SapBackPack
  • 138. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 138 Public SAP River ā€“ Whatā€™s New in SPS 09? The benefits of the SAP River language (RDL) application development environment were validated by partners and early adaptors. However, based on feedback we received, and consistent with our strategic direction of building open and standard environments, SAP has decided to abandon a proprietary language approach, and to reapply and integrate the SAP River assets and principles within a cloud based development environment as part of the HANA Cloud Platform. The SAP River language will therefore no longer be available as a stand-alone development environment in SAP HANA.
  • 139. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 139 Public SAP River assets reused SAP River application explorer rebuilt as SAP OData Explorer in SPS09 General OData test and data generation tool which supports XSODATA services
  • 140. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 140 Public SAP River concepts realized in alternative ways Integrated one-click debugging Step from the application server layer logic directly in database layer logic within one debug session
  • 141. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 141 Public SAP River concepts realized in alternative ways - XSDS XSDS: Native CDS consumption ļƒ¼Import CDS entities as native JavaScript objects ļƒ¼Understand CDS metadata for working with JavaScript objects Import and extend CDS entity definitions Reads available metadata on types, keys, associations Supports extension, projection, renaming of entity definitions Already supports CDS via backlink, via entity associations var User = XSDS.$importEntity("demo.bboard", "bboard.user"); var Post = XSDS.$importEntity("demo.bboard", "bboard.post", { Comments: { $association: { $entity: Comment, $viaBacklink: "Post" }}});
  • 142. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 142 Public SAP River concepts realized in alternative ways ā€“ XSDS (continued) XS Data Services Entity instances and unmanaged values Query Builder Ad-hoc queries Based on CDS QL (WIP) Manual consistency Full HANA support CDS Entities and Types HANA Entity Manager Lightweight ORM Navigation to associations Data consistency Limited query functionality +
  • 143. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 143 Public Disclaimer This presentation outlines our general product direction and should not be relied on in making a purchase decision. This presentation is not subject to your license agreement or any other agreement with SAP. SAP has no obligation to pursue any course of business outlined in this presentation or to develop or release any functionality mentioned in this presentation. This presentation and SAPā€™s strategy and possible future developments are subject to change and may be changed by SAP at any time for any reason without notice. This document is provided without a warranty of any kind, either express or implied, including but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. SAP assumes no responsibility for errors or omissions in this document, except if such damages were caused by SAP intentionally or grossly negligent.
  • 144. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 144 Public How to find SAP HANA documentation on this topic? ā€¢In addition to this learning material, you can find SAP HANA platform documentation on SAP Help Portal knowledge center at http://help.sap.com/hana_platform. ā€¢The knowledge centers are structured according to the product lifecycle: installation, security, administration, development: SAP HANA Options ļ‚ŸSAP HANA Advanced Data Processing ļ‚ŸSAP HANA Dynamic Tiering ļ‚ŸSAP HANA Enterprise Information Management ļ‚ŸSAP HANA Predictive ļ‚ŸSAP HANA Real-Time Replication ļ‚ŸSAP HANA Smart Data Streaming ļ‚ŸSAP HANA Spatial ā€¢Documentation sets for SAP HANA options can be found at http://help.sap.com/hana_options: SAP HANA Platform SPS ļ‚ŸWhatā€™s New ā€“ Release Notes ļ‚ŸInstallation ļ‚ŸAdministration ļ‚ŸDevelopment ļ‚ŸReferences ā€¢
  • 145. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. Thank you Contact information Thomas Jung SAP HANA Product Management AskSAPHANA@sap.com
  • 146. Ā©2014 SAP SE or an SAP affiliate company. All rights reserved. 146 Public Ā© 2014 SAP SE or an SAP affiliate company. All rights reserved. No part of this publication may be reproduced or transmitted in any form or for any purpose without the express permission of SAP SE or an SAP affiliate company. SAP and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP SE (or an SAP affiliate company) in Germany and other countries. Please see http://global12.sap.com/corporate-en/legal/copyright/index.epx for additional trademark information and notices. Some software products marketed by SAP SE and its distributors contain proprietary software components of other software vendors. National product specifications may vary. These materials are provided by SAP SE or an SAP affiliate company for informational purposes only, without representation or warranty of any kind, and SAP SE or its affiliated companies shall not be liable for errors or omissions with respect to the materials. The only warranties for SAP SE or SAP affiliate company products and services are those that are set forth in the express warranty statements accompanying such products and services, if any. Nothing herein should be construed as constituting an additional warranty. In particular, SAP SE or its affiliated companies have no obligation to pursue any course of business outlined in this document or any related presentation, or to develop or release any functionality mentioned therein. This document, or any related presentation, and SAP SEā€™s or its affiliated companiesā€™ strategy and possible future developments, products, and/or platform directions and functionality are all subject to change and may be changed by SAP SE or its affiliated companies at any time for any reason without notice. The information in this document is not a commitment, promise, or legal obligation to deliver any material, code, or functionality. All forward- looking statements are subject to various risks and uncertainties that could cause actual results to differ materially from expectations. Readers are cautioned not to place undue reliance on these forward-looking statements, which speak only as of their dates, and they should not be relied upon in making purchasing decisions.