SAP HANA SPS 09 - XS Programming Model



Comments



Description

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