/*------------------------------------------------------------------------ File : GetRestDataExample.p Purpose : Syntax : Description : Author(s) : javier.garcia Created : Wed Nov 27 15:28:15 CET 2019 Notes : ----------------------------------------------------------------------*/ /* *************************** Definitions ************************** */ USING OpenEdge.Net.HTTP.* FROM PROPATH. USING OpenEdge.Net.URI FROM PROPATH. USING OpenEdge.Core.String FROM PROPATH. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH. USING OpenEdge.Net.HTTP.IHttpClientLibrary. USING OpenEdge.Net.HTTP.Lib.ClientLibraryBuilder. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH. /* ******************** Preprocessor Definitions ******************** */ DEFINE VARIABLE oCredentials AS Credentials NO-UNDO. DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO. DEFINE VARIABLE oJson AS JsonObject NO-UNDO. DEFINE VARIABLE oJsonEntity AS JsonObject NO-UNDO. DEFINE VARIABLE oJsonParamEntity AS JsonObject NO-UNDO. DEFINE VARIABLE oJsonMappings AS JsonArray NO-UNDO. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO. DEFINE VARIABLE oLib AS IHttpClientLibrary NO-UNDO. DEFINE VARIABLE cUrl AS CHARACTER INITIAL "https://test.digitaldrink-online.um3o.de/b2b-digitaldrink-dataservice/export" NO-UNDO. DEFINE VARIABLE cLoginName AS CHARACTER INITIAL "Huber" NO-UNDO. DEFINE VARIABLE cPassword AS CHARACTER INITIAL "rkZR9BwM" NO-UNDO. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO. DEFINE VARIABLE lcJson AS LONGCHAR NO-UNDO. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO. DEFINE VARIABLE oJsonObject AS JsonObject NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE iCount AS INTEGER NO-UNDO. /* *************************** Main Block *************************** */ /*SESSION:DEBUG-ALERT = TRUE. */ /* */ /*LOG-MANAGER:LOGFILE-NAME = "logWorkaround.txt".*/ /*LOG-MANAGER:LOGGING-LEVEL = 5. */ /*LOG-MANAGER:CLEAR-LOG(). */ /* Generate Request JSON Body Raw */ oJsonMappings = NEW JsonArray(). oJsonMappings:Add("content.nutritionInfoId"). oJsonParamEntity = NEW JsonObject(). oJsonParamEntity:Add("clientId", "Huber"). oJsonParamEntity:Add("clientName", "Testuser Huber"). oJsonParamEntity:Add("mappings", oJsonMappings). oJsonParamEntity:Add("language", "de"). oJsonEntity = NEW JsonObject(). oJsonEntity:Add("senderName", "Freitext-H�ndlerbezeichnung"). oJsonEntity:Add("type", "EXP002"). oJsonEntity:Add("parameters", oJsonParamEntity). /* Auth */ oCredentials = NEW Credentials("application", cLoginName, cPassword). oRequest = RequestBuilder:Post(cUrl,oJsonEntity) :UsingBasicAuthentication(oCredentials) :ContentType("application/json; charset=utf-8") :AcceptJson() :Request. oLib = ClientLibraryBuilder:Build() :sslVerifyHost(NO) :ServerNameIndicator('test.digitaldrink-online.um3o.de') :library. oResponse = ClientBuilder:Build() :UsingLibrary(oLib) :Client :Execute(oRequest). /* Response JSON */ IF oResponse:StatusCode <> 200 THEN MESSAGE "Request Error: " + STRING(oResponse:StatusCode) VIEW-AS ALERT-BOX. ELSE DO: oParser = NEW ObjectModelParser(). oJsonObject = CAST(oParser:Parse(CAST(oResponse:Entity, JsonObject):GetJsonText()), JsonObject). MESSAGE oJsonObject:GetCharacter("state") SKIP oJsonObject:GetCharacter("stateMessage") SKIP oJsonObject:GetInteger("stateCount") VIEW-AS ALERT-BOX. DO ix = 1 TO oJsonObject:GetInteger("stateCount"): MESSAGE oJsonObject:GetJsonArray("mappings"):GetJsonObject(ix):GetJsonObject("content"):GetJsonObject("nutritionInfoId"):GetCharacter("protein") VIEW-AS ALERT-BOX. END. END. CATCH oError AS Progress.Lang.Error : MESSAGE oError:GetMessage(1) SKIP(2) oError:CallStack VIEW-AS ALERT-BOX. END CATCH. /* *************************** Example *************************** */ /*https://knowledgebase.progress.com/articles/Article/example-using-system-net-http-httpclient-to-post-to-a-rest-web-service*/ /*https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvpin/openedge.net.http.ihttprequest.html*/ /*https://knowledgebase.progress.com/articles/Article/How-to-consume-a-REST-Webservice-from-an-OpenEdge-Client*/ /*https://knowledgebase.progress.com/articles/Article/How-to-store-JSON-from-an-HTTP-service-in-a-temp-table*/ /*https://community.progress.com/community_groups/openedge_development/f/19/t/58920*/ /*https://knowledgebase.progress.com/articles/Article/How-to-send-a-string-as-the-Request-Body-when-using-the-OpenEdge-HTTP-client*/ /*https://github.com/PeterJudge-PSC/http_samples/tree/master/http_client/http_authentication*/ /*https://www.youtube.com/watch?v=e4_4Ls2XLOM*/ /* JSON */ /*https://knowledgebase.progress.com/articles/Article/how-to-create-a-jsonobject-from-a-dataset-and-back*/ /*https://knowledgebase.progress.com/articles/Article/How-to-turn-a-string-into-a-JsonObject*/ /*https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvjsn/inferring-abl-schemas-from-json-data.html#wwID0ETIGM*/