GetRestDataJSON.p 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*------------------------------------------------------------------------
  2. File : GetRestDataExample.p
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : javier.garcia
  7. Created : Wed Nov 27 15:28:15 CET 2019
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. /* *************************** Definitions ************************** */
  11. USING OpenEdge.Net.HTTP.* FROM PROPATH.
  12. USING OpenEdge.Net.URI FROM PROPATH.
  13. USING OpenEdge.Core.String FROM PROPATH.
  14. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  15. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  16. USING OpenEdge.Net.HTTP.IHttpClientLibrary.
  17. USING OpenEdge.Net.HTTP.Lib.ClientLibraryBuilder.
  18. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  19. /* ******************** Preprocessor Definitions ******************** */
  20. DEFINE VARIABLE oCredentials AS Credentials NO-UNDO.
  21. DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
  22. DEFINE VARIABLE oJson AS JsonObject NO-UNDO.
  23. DEFINE VARIABLE oJsonEntity AS JsonObject NO-UNDO.
  24. DEFINE VARIABLE oJsonParamEntity AS JsonObject NO-UNDO.
  25. DEFINE VARIABLE oJsonMappings AS JsonArray NO-UNDO.
  26. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  27. DEFINE VARIABLE oLib AS IHttpClientLibrary NO-UNDO.
  28. DEFINE VARIABLE cUrl AS CHARACTER INITIAL "https://test.digitaldrink-online.um3o.de/b2b-digitaldrink-dataservice/export" NO-UNDO.
  29. DEFINE VARIABLE cLoginName AS CHARACTER INITIAL "Huber" NO-UNDO.
  30. DEFINE VARIABLE cPassword AS CHARACTER INITIAL "rkZR9BwM" NO-UNDO.
  31. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  32. DEFINE VARIABLE lcJson AS LONGCHAR NO-UNDO.
  33. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
  34. DEFINE VARIABLE oJsonObject AS JsonObject NO-UNDO.
  35. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  36. DEFINE VARIABLE iCount AS INTEGER NO-UNDO.
  37. /* *************************** Main Block *************************** */
  38. /*SESSION:DEBUG-ALERT = TRUE. */
  39. /* */
  40. /*LOG-MANAGER:LOGFILE-NAME = "logWorkaround.txt".*/
  41. /*LOG-MANAGER:LOGGING-LEVEL = 5. */
  42. /*LOG-MANAGER:CLEAR-LOG(). */
  43. /* Generate Request JSON Body Raw */
  44. oJsonMappings = NEW JsonArray().
  45. oJsonMappings:Add("content.nutritionInfoId").
  46. oJsonParamEntity = NEW JsonObject().
  47. oJsonParamEntity:Add("clientId", "Huber").
  48. oJsonParamEntity:Add("clientName", "Testuser Huber").
  49. oJsonParamEntity:Add("mappings", oJsonMappings).
  50. oJsonParamEntity:Add("language", "de").
  51. oJsonEntity = NEW JsonObject().
  52. oJsonEntity:Add("senderName", "Freitext-H�ndlerbezeichnung").
  53. oJsonEntity:Add("type", "EXP002").
  54. oJsonEntity:Add("parameters", oJsonParamEntity).
  55. /* Auth */
  56. oCredentials = NEW Credentials("application", cLoginName, cPassword).
  57. oRequest = RequestBuilder:Post(cUrl,oJsonEntity)
  58. :UsingBasicAuthentication(oCredentials)
  59. :ContentType("application/json; charset=utf-8")
  60. :AcceptJson()
  61. :Request.
  62. oLib = ClientLibraryBuilder:Build()
  63. :sslVerifyHost(NO)
  64. :ServerNameIndicator('test.digitaldrink-online.um3o.de')
  65. :library.
  66. oResponse = ClientBuilder:Build()
  67. :UsingLibrary(oLib)
  68. :Client
  69. :Execute(oRequest).
  70. /* Response JSON */
  71. IF oResponse:StatusCode <> 200 THEN
  72. MESSAGE "Request Error: " + STRING(oResponse:StatusCode)
  73. VIEW-AS ALERT-BOX.
  74. ELSE
  75. DO:
  76. oParser = NEW ObjectModelParser().
  77. oJsonObject = CAST(oParser:Parse(CAST(oResponse:Entity, JsonObject):GetJsonText()), JsonObject).
  78. MESSAGE
  79. oJsonObject:GetCharacter("state") SKIP
  80. oJsonObject:GetCharacter("stateMessage") SKIP
  81. oJsonObject:GetInteger("stateCount")
  82. VIEW-AS ALERT-BOX.
  83. DO ix = 1 TO oJsonObject:GetInteger("stateCount"):
  84. MESSAGE oJsonObject:GetJsonArray("mappings"):GetJsonObject(ix):GetJsonObject("content"):GetJsonObject("nutritionInfoId"):GetCharacter("protein")
  85. VIEW-AS ALERT-BOX.
  86. END.
  87. END.
  88. CATCH oError AS Progress.Lang.Error :
  89. MESSAGE oError:GetMessage(1) SKIP(2)
  90. oError:CallStack
  91. VIEW-AS ALERT-BOX.
  92. END CATCH.
  93. /* *************************** Example *************************** */
  94. /*https://knowledgebase.progress.com/articles/Article/example-using-system-net-http-httpclient-to-post-to-a-rest-web-service*/
  95. /*https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvpin/openedge.net.http.ihttprequest.html*/
  96. /*https://knowledgebase.progress.com/articles/Article/How-to-consume-a-REST-Webservice-from-an-OpenEdge-Client*/
  97. /*https://knowledgebase.progress.com/articles/Article/How-to-store-JSON-from-an-HTTP-service-in-a-temp-table*/
  98. /*https://community.progress.com/community_groups/openedge_development/f/19/t/58920*/
  99. /*https://knowledgebase.progress.com/articles/Article/How-to-send-a-string-as-the-Request-Body-when-using-the-OpenEdge-HTTP-client*/
  100. /*https://github.com/PeterJudge-PSC/http_samples/tree/master/http_client/http_authentication*/
  101. /*https://www.youtube.com/watch?v=e4_4Ls2XLOM*/
  102. /* JSON */
  103. /*https://knowledgebase.progress.com/articles/Article/how-to-create-a-jsonobject-from-a-dataset-and-back*/
  104. /*https://knowledgebase.progress.com/articles/Article/How-to-turn-a-string-into-a-JsonObject*/
  105. /*https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvjsn/inferring-abl-schemas-from-json-data.html#wwID0ETIGM*/