次ã«ãããã«é²ãã§ãå€éšãµãŒãã¹ããããŒã¿ããŒã¹ã«ããŒã¿ãããŒãããæ¹æ³ã瀺ããŸãã åæã«ã1ã€ã®è©Šçšã·ã¹ãã å ã§ã®ãŠãŒã¶ãŒåé¢ã®èŠä»¶ã«é¢é£ãããè©Šçšçã¯ã©ãŠãã䜿çšããéã®åŸ®åŠãªç¹ãããã€ã瀺ãããŸãã
ã ããç§ãã¡ãæã£ãŠãããã®ã 1ã€ç®ã¯ã httpsïŒ//account.hanatrial.ondemand.com/cockpitã«ããã¯ã©ãŠãã®ã³ã³ãããŒã«ããã«ãžã®ã¢ã¯ã»ã¹ã§ãã
2çªç®ã¯ã helloworldtrialãšåŒã°ããSAP HANAäžã®ã€ã³ã¹ã¿ã³ã¹åããããã©ãããã©ãŒã ã§ãã
3çªç®ã«ãSAP HANA Cloudã®ãã©ã°ã€ã³ãšhelloworldtrialãžã®äœæãããæ¥ç¶ãåãããã€ã³ã¹ããŒã«ãããEclipseéçºç°å¢ïŒ
ããããããšïŒSAP HANAããŒã¿ããŒã¹ã«ããŒãã«ãäœæããå€éšãœãŒã¹ããããŒã¿ãããŒãããŸãã ããã§ã¯ãããã€ãã®éœåžã®çŸåšã®æ°æž©ã«é¢ããæ å ±ãä¿åããŸãã ããšãã°ãopenweathermap.orgããããŒã¿ãååŸããŸãã
æ°ãããããžã§ã¯ããäœæããããšããå§ããŸãããã Eclipseãèµ·åããSAP HANAéçºã®ããŒã¹ãã¯ãã£ããéããŸãïŒ ãŠã£ã³ããŠ>ããŒã¹ãã¯ãã£ããéã>ãã®ä»... ïŒïŒ
ååãæå®ããŠãæ°ãããããžã§ã¯ãXSã¢ããªã±ãŒã·ã§ã³ãäœæããŸãïŒ[ãã¡ã€ã«]> [æ°èŠ]> [ãããžã§ã¯ã...]> [SAP HANA Cloud]ïŒã
次ã«ãã¯ãŒã¯ã¹ããŒã¹ãšããã±ãŒãžãéžæããããã®æšæºçãªæé ã«åŸãå¿ èŠããããŸãã 泚æïŒ ãã®äŸã§ã¯ãã¯ã©ãŠãã€ã³ã¹ã¿ã³ã¹ã«äžèŽãããpXXXXXXXXtrial.helloworldtrialãšãã圢åŒã®ããã±ãŒãžãéžæããããšãéèŠã§ãã pXXXXXXXXtrialã¯ã¯ã©ãŠãäžã®ãŠãŒã¶ãŒåã§ãã
ãããŠããã¹ãŠã®äœæ¥ãè¡ãã¹ã¯ãªããget_weather.xsjsã䜿çšããŠã¡ã€ã³ãã¡ã€ã«ã瀺ããŸãã
ããã±ãŒãžã¢ã¯ã»ã¹å¶åŸ¡ã .Xsaccessãã¡ã€ã«
.xsaccessãã¡ã€ã«ã䜿çšããŠãXSã¢ããªã±ãŒã·ã§ã³ã®ããããã£ïŒããšãã°ãã¹ã¯ãªãããå®è¡ããããã«å¿ èŠãªæ¿èªãªã©ïŒãæå®ããŸãã ãã®ãã¡ã€ã«ã®å 容ã次ã®ãã®ã«çœ®ãæããŸãã
{ "exposed" : true, "default_file" : "get_weather.xsjs" }
å ¬éãããããããã£ã¯ããã®XSã¢ããªã±ãŒã·ã§ã³ãURLãããµãŒããŒäžã§å®è¡ã§ããããšã瀺ããŸãã default_fileããããã£ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ã®å®è¡å¯èœãã¡ã€ã«ã瀺ããŸãã ããã«ããããã¡ã€ã«åãè¿œå ããã«ã³ã³ãããŒã«ããã«ïŒã³ãã¯ãããïŒããçŽæ¥èµ·åã§ããŸãã
ããã§ãã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ãã£ãã«ããŠããã®æ®µéã§ãã¹ãŠã®æé ãæ£ããå®äºããããšã確èªããŸãã ãããè¡ãã«ã¯ãProject Explorerã¿ãã§ãããžã§ã¯ããå³ã¯ãªãã¯ããã³ã³ããã¹ãã¡ãã¥ãŒã§Team> ActivateãéžæããŸãã
æŽæ°ïŒF5ïŒãã¯ãªãã¯ããŠãWebãã©ãŠã¶ãŒã®ã³ã³ãããŒã«ããã«ãåèµ·åããŸãã ãã以å€ã®å ŽåãXSã¢ããªã±ãŒã·ã§ã³ã¯ãªã¹ãã«è¡šç€ºãããŸããã
XSã¢ããªã±ãŒã·ã§ã³ã®URLãã¯ãªãã¯ããŸãã
æ°ãããŠã£ã³ããŠãéããã³ã³ãã³ããééã£ãã³ã³ãã³ãã¿ã€ãã®ãªã¯ãšã¹ããã¢ããªã±ãŒã·ã§ã³/ jsonã䜿çšããŸããã衚瀺ãããŸãã ã¯ãŒã¯ããŒã¹ãèµ·åããããšã確èªãããã次ã«é²ã¿ãŸãã
ããŒã¿ããŒã¹ã«ããŒãã«ãäœæãã
ããŒã¿ããŒã¹ã«ããŒãã«ãäœæããŸãããã®ããŒãã«ã«ã¯ãæ¥ä»ãšæå»ãå± äœå°ã®ååãçŸåšã®æ°æž©ã®åãå«ãŸããŸãã
ã·ã¹ãã ã«ããŒãã«ãäœæããã«ã¯ãã€ã³ã¿ã©ã¯ãã£ããã¶ã€ããŒãSQLã¹ã¯ãªããããŸãã¯.hdbtableãã¡ã€ã«ã䜿çšããæ¹æ³ãããã€ããããŸãã
æéã®æ¹æ³ã¯ãã¹ããŒãã®ååã眮ãæããŠã¹ã¯ãªãããå®è¡ããããšã§ãã [ã·ã¹ãã ]ã¿ãã«ç§»åããã¯ã©ãŠãã®SQLã³ã³ãœãŒã«ãèµ·åããŸãã
NEO_ã¹ããŒã ã®ååã眮ãæããŠããã®ãããªã¹ã¯ãªãããå®è¡ããŸã ã
create column table "NEO_<<<>>>"."T_WEATHER"( "ID" INTEGER GENERATED ALWAYS AS IDENTITY (MINVALUE 0 START WITH 0 INCREMENT BY 1), "FORECAST_TMSTMP" TIMESTAMP NOT NULL , "LOCATION" NVARCHAR(50) NOT NULL, "TEMPERATURE" REAL NOT NULL, "TIMESTMP" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, PRIMARY KEY ("ID"));
åã¹ãã¬ãŒãžãæã€ããŒãã«ãäœæããŠãããšããäºå®ã«æ³šç®ããŸãããã ãŸããæé»çã«ãããã ã·ãŒã±ã³ã¹ãæŽæ°ã®ã·ãŒã±ã³ã¹ãçæããããŒãã«ã«ã¬ã³ãŒããäœæãããšãã«IDå±æ§ã«æ ŒçŽããŸãã
NEO_ãã£ã¬ã¯ããªãæŽæ°ãããšãããŒãã«ã衚瀺ãããŸãã
ããŒã¿ããŒã¹ãŠãŒã¶ãŒã®åœ¹å²ã .Hdbroleãã¡ã€ã«
ç¡æè©Šçšã·ã¹ãã ã§ã¯ããŠãŒã¶ãŒã¯éåžžã«éãããæš©éãæã£ãŠããŸãã ããã¯ãç¹ã«ããã£ã¬ã¯ããªå ã®ãªããžã§ã¯ããå€æŽããèš±å¯ãšãŠãŒã¶ãŒã¢ã«ãŠã³ãã®ç®¡çã«é©çšãããŸãã ãããã£ãŠãè©Šçšçã·ã¹ãã ã«ã¯ããHCPãã¹ããŒã ã«äžé£ã®æé ãããããŠãŒã¶ãŒãäœæãããªããžã§ã¯ãã«å¯Ÿããæš©éã管çã§ããŸãã
T_WEATHERããŒãã«ã®ããŒã¿ãèªã¿æžãããã«ã¯ãæ°ããããŒã«ãå¿ èŠã§ãã ã¿ã€ã.hdbroleã®ãã¡ã€ã«ããããžã§ã¯ãã«è¿œå ããŸãïŒã¡ã€ã³ã¡ãã¥ãŒã®[ãã¡ã€ã« ] > [æ°èŠ ] > [ãã®ä» ]ã§ïŒã
weather_accessãšåŒã³ãŸãããïŒ
ãã®ãã¡ã€ã«ã®å 容ã次ã®ãã©ã°ã¡ã³ãã«çœ®ãæããŠããããã¡ã€ã«ãã¢ã¯ãã£ãã«ããŸãã
role p<<<>>>trial.helloworldtrial.TryWeather::weather_access { catalog sql object "NEO_<<<>>>>"."T_WEATHER": SELECT, UPDATE, INSERT; }
p <<< >>>ãã©ã€ã¢ã«ããŠãŒã¶ãŒåã«çœ®ãæããŸãã NEO _ << << >>>>ã¹ããŒã ã®ä»£ããã«ãããŒãã«ã®äœææã«ä¿åããã¹ããŒã ã®ååãæ¿å ¥ããå¿ èŠããããŸãã ãããŠä»ãéæ³ãå§ãŸããŸããããã¯ãè©Šçšã¢ãŒãã®ã¯ã©ãŠãã1ã€ã®ã·ã¹ãã ã§å€ãã®ãŠãŒã¶ãŒãäœæãããšããäºå®ã«é¢é£ããŠããŸãã ãŸããã¢ã¯ã»ã¹æš©ãåé¢ããããã«ããããã®ãŠãŒã¶ãŒã«ã¯éåžžã«éãããç¹æš©ããããŸãã
ã·ã¹ãã ãŠãŒã¶ãŒãweather_accessã®ããŒã«ãååŸããã«ã¯ãã·ã¹ãã æé ãå®è¡ããå¿ èŠããããŸãã
SQLã³ã³ãœãŒã«ãå®è¡ãã次ã®ã¹ã¯ãªãããå®è¡ããŸãïŒ
call "HCP"."HCP_GRANT_ROLE_TO_USER"('p<<<>>>trial .helloworldtrial.TryWeather::weather_access', 'p<<<>>>');
è©Šçšã·ã¹ãã ã®è¿œå ã®çµã¿èŸŒã¿æé
è©Šçšã·ã¹ãã ãã£ã¬ã¯ããªã®ããŒãã«ããã¥ãŒãããã·ãŒãžã£ãå€æŽããå Žåããããã®ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ããããã®ã¢ã¯ã»ã¹èš±å¯ãæ瀺çã«æŽæ°ããå¿
èŠãããããšã«æ³šæããŠãã ããã ããã¯ãããã·ãŒãžã£ãåŒã³åºãããšã§å®è¡ãããŸãã
.hdbroleãã¡ã€ã«ãå€æŽããŠã¢ã¯ãã£ãã«ããåŸã以äžãè¡ãå¿ èŠããããŸãã
call "HCP"."HCP_GRANT_SELECT_ON_ACTIVATED_OBJECTS";
.hdbroleãã¡ã€ã«ãå€æŽããŠã¢ã¯ãã£ãã«ããåŸã以äžãè¡ãå¿ èŠããããŸãã
call "HCP"."HCP_GRANT_ACTIVATED_ROLES";
ã¡ã€ã³ã¹ã¯ãªããã .Xsjsãã¡ã€ã«
ãããã£ãŠãããŒã¿ããŒã¹ã«ã¯ç©ºã®XSã¹ã¯ãªãããšããŒãã«ããããããŒã¿ã®æžã蟌ã¿ãšèªã¿åãã®ã¢ã¯ã»ã¹èš±å¯ãè¿œå ããŸããã ãã®è¡šã§ã¯ãçŸåšã®å€©æ°ã«é¢ããããŒã¿ãæžã蟌ã¿ãŸãã
倩æ°ããŒã¿ã¯ã©ãã§å
¥æã§ããŸãã
枩床ãååŸããã«ã¯ãopenweathermap.orgã®APIã䜿çšããŸãã ãã®ãµãŒãã¹ã®è©³çŽ°ã¯ãHabréã®èšäºã§èª¬æãããŠããŸã ã
ã¢ã¹ã¯ã¯ã§çŸåšã®å€©æ°ããŒã¿ãåä¿¡ããããã®URLã®äŸïŒ http : //api.openweathermap.org/data/2.5/weather?q= Moscow, ru&units=metric
JSONãªããžã§ã¯ãã®åœ¢åŒã§åä¿¡ããããŒã¿ã«ã¯ãç¹ã«ãUnixã¿ã€ã ã¹ã¿ã³ã圢åŒã®æ°æž©ã«é¢ããæ å ±ãå«ãŸããŠããŸãã ã¿ã°ãdtãïŒ
ã¢ã¹ã¯ã¯ã§çŸåšã®å€©æ°ããŒã¿ãåä¿¡ããããã®URLã®äŸïŒ http : //api.openweathermap.org/data/2.5/weather?q= Moscow, ru&units=metric
JSONãªããžã§ã¯ãã®åœ¢åŒã§åä¿¡ããããŒã¿ã«ã¯ãç¹ã«ãUnixã¿ã€ã ã¹ã¿ã³ã圢åŒã®æ°æž©ã«é¢ããæ å ±ãå«ãŸããŠããŸãã ã¿ã°ãdtãïŒ
{ ... "dt " : 1430318471, "id " : 524901, "name " : "Moscow ", "cod " : 200 }
倩æ°ããŒã¿ãæœåºããããŒãã«ã«æžã蟌ã¿ãŸãã
ã¹ã¯ãªãããœãŒã¹ã³ãŒã
éèŠïŒ æåã®2è¡ã®å®æ°å€ããŠãŒã¶ãŒåïŒ-trialã§çµããïŒãšNEO_ããŒã¿ããŒã¹ã¹ããŒãã®ååã«çœ®ãæããŸã ã
var CONST_ROOT_PACKAGE = "<<<pXXXXXtrial>>>"; var CONST_NEO_SCHEMA = "<<<NEO_XXXXXXXXXXXXXXXX>>>"; function getCurrentWeather(city_name) { var destination_package = "helloworldtrial.TryWeather"; var destination_name = "o_weather"; var destPackagePath = CONST_ROOT_PACKAGE + "." + destination_package; var dest = $.net.http.readDestination(destPackagePath, destination_name); var client = new $.net.http.Client(); var req = new $.web.WebRequest($.net.http.GET, "?q=" + city_name + "&units=metric"); client.request(req, dest); var response = client.getResponse(); var weather_data = JSON.parse(response.body.asString(), function(key, value) { if (key === "dt") { return new Date(value * 1000); } return value; }); return [ weather_data.dt, city_name, weather_data.main.temp ]; } function storeData(data_receiving_time, city, temp) { var conn = $.db.getConnection(); var stmt = conn .prepareStatement("INSERT INTO \"" + CONST_NEO_SCHEMA + "\".T_WEATHER (FORECAST_TMSTMP,LOCATION,TEMPERATURE) VALUES (?,?,?)"); stmt.setTimestamp(1, data_receiving_time);// OpenWeatherMap stmt.setString(2, city); stmt.setFloat(3, temp); var rs = stmt.executeQuery(); rs.close(); stmt.close(); conn.commit(); conn.close(); } function processRequest() { var cityNames = [ "Moscow,ru", "Saint Petersburg,ru", "Novosibirsk,ru", "Volgograd,ru", "Krasnoyarsk,ru" ]; var body = ""; var cityName, i; var dt; var city; var temp; var out_vals; try { for (i = 0; i < cityNames.length; i++) { cityName = cityNames[i]; out_vals = getCurrentWeather(cityName); dt = out_vals[0]; city = out_vals[1]; temp = out_vals[2]; storeData(dt, city, temp); body += " .\n: " + dt + "\n: " + city + "\n: " + temp + " C\n\n"; } $.response.setBody(body); $.response.contentType = "text/plain"; $.response.status = $.net.http.OK; } catch (e) { $.response.contentType = "text/plain"; $.response.status = $.net.http.INTERNAL_SERVER_ERROR; $.response.setBody(e.toString()); } } processRequest();
ãã®ã³ãŒãã¯ããããã å€éšAPIãåŒã³åºãå®å ã
ãŸããJavascriptããããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ã¯ã$ .dbåå空éã®æ¥ç¶ãªããžã§ã¯ããä»ããŠè¡ãããŸãã
var conn = $.db.getConnection(); var stmt = conn.prepareStatement("INSERT INTO <<table>> (FORECAST_TMSTMP,LOCATION,TEMPERATURE) VALUES (?,?,?)");
å€éšURLãžã®ã¢ã¯ã»ã¹ã .Xshttpdestãã¡ã€ã«
o_weatherãšããååã®.xshttpdeståã®æ°ãããªããžã§ã¯ãããããžã§ã¯ãã«è¿œå ããŸãã
ãããŠããã®ãã¡ã€ã«ã®å 容ã次ã®ãã®ã«çœ®ãæããŸãã
host = "api.openweathermap.org"; port = 80; description = "current weather"; useSSL = false; pathPrefix = "/data/2.5/weather"; authType = none; useProxy = true; proxyHost = "proxy-trial"; proxyPort = 8080; timeout = 5000; // in milliseconds
ãã®ãªããžã§ã¯ããä¿åããŠã¢ã¯ãã£ãåããŸãã
ããã§ãXSã¢ããªã±ãŒã·ã§ã³ã®ã¿ãã®HCPã³ã³ãããŒã«ããã«ã®[å®å ]ããã«ã«æ°ããèŠçŽ ã衚瀺ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®URLãã¯ãªãã¯ããŠãã¹ã¯ãªãããå®è¡ããããã次ã®çµæãç»é¢ã«è¡šç€ºããŸãã
ããã§Eclipseã§ãããŒã¿ãããŒãã«ã«ä¿åãããããšã確èªããŸãã ãããè¡ãã«ã¯ãT_WEATHERããŒãã«ãå³ã¯ãªãã¯ããŠã[ããŒã¿ãã¬ãã¥ãŒãéã]ãéžæããŸãã
ãããŠãããŒã¿ããŒã¹ã«æ°ããã¬ã³ãŒããäœæãããããšã確èªããŸãã
åèš
ãããã£ãŠããã®èšäºã§ã¯ãå€éšãœãŒã¹ïŒãã®å Žåã¯WebãµãŒãã¹ïŒããããŒã¿ãåä¿¡ãããããHANAããŒã¿ããŒã¹ã®ããŒãã«ã«ä¿åã§ããXSã¢ããªã±ãŒã·ã§ã³ãäœæããŸããã ããã«ãããŒã«ã®å®çŸ©ïŒweather_access.hdbroleïŒãšå€éšWebãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããã®ãã£ãã«ã®å®çŸ©ïŒo_weather.xshttpdestïŒã®2ã€ã®ç¹å¥ãªãªããžã§ã¯ããäœæããŸããã ãŸãããã©ã€ã¢ã«ã·ã¹ãã ã®ããŒã¿ããŒã¹ããŒãã«ãžã®ã¢ã¯ã»ã¹èš±å¯ãäžããããã«ãã¹ãã¢ãããã·ãŒãžã£ãåŒã³åºããŸããã