Description
Retrieves data to the DataWindow, DataWindowChild, or DataStore from the RESTFul Web service according to the key name of the JSON string. If the data received from the RESTful web service is compressed as gzip, it will be automatically decompressed. Only gzip compression format is supported at this moment. The developer can use the SetRequestHeader function to set the Accept-Encoding header to allow only the gzip compression format.
Applies to
RestClient object
Syntax
objectname.Retrieve ( dwControl, urlName {, data} {, tokenrequest} )
Argument |
Description |
---|---|
objectname |
A reference to the RestClient object. |
dwControl |
The name of the DataWindow control, DataStore, or child DataWindow. |
urlName |
A string whose value is the URL. |
data (optional) |
A string or blob data. If this argument is not specified, the retrieve function sends the request to the server with "GET" method, otherwise with "POST". |
tokenrequest (optional) |
A reference to the TokenRequest object for supporting OAuth 2.0. If this parameter is used, the token settings in the SetOAuthToken and SetJWTToken functions will be ignored. |
Usage
The Retrieve function retrieves data only when the JSON key name matches with the DataWindow column name; if none of the JSON key name matches with any of the DataWindow column name, then no data will be inserted into the DataWindow and the function returns error code -17.
For the Retrieve function, the JSON string returned from the RESTFul Web service APIs must be an array in the two-level plain JSON format (see Plain JSON: two-level structure in Application Techniques for details); for the RetrieveOne function, the JSON string returned from the RESTFul Web service APIs can be an array in the two-level plain JSON format (see Plain JSON: two-level structure in Application Techniques for details) or a JSON object.
The Retrieve function is not supported in DataWindow/DataWindowChild/DataStore with the following presentation styles: Composite, Crosstab, OLE 2.0, and RichText.
Although the Retrieve function is not supported in the Composite DataWindow, you can call GetChild function to get the child DataWindow from the Composite DataWindow, and then call the Retrieve function to retrieve the data into the child DataWindow.
The Retrieve function will not trigger the DataWindow RetrieveRow event considering the performance effect, although it will trigger the RetrieveStart and RetrieveEnd events.
Return value
Long.
Returns values as follows. If any argument's value is null, the method returns null.
>=0 -- Returns the number of rows if it succeeds
-1 -- General error
-2 -- Invalid URL
-3 -- Cannot connect to the Internet
-4 -- Timed out
-5 -- Get token error
-7 -- Failed to automatically decompress the response body
-10 -- The token is invalid or has expired
-15 -- Unsupported character sets
-16 -- The JSON is not a plain JSON with two-level structure
-17 -- No data is inserted into the DataWindow because no key in the JSON matches any column name in it
Example 1
This example retrieves data to a DataWindow:
long ll_return RestClient lnv_RestClient lnv_RestClient = Create RestClient // Set DataObject dw_emp.DataObject = "d_sq_gr_emp" // Send request using GET ll_return = lnv_RestClient.Retrieve(dw_emp, "http://demo.appeon.com/PB/webapi_client/employee/102") // Check the return value if ll_return >= 0 then MessageBox("Success", "Rows = " + String(ll_return)) else MessageBox("Error", "Failed to retrieve data.") end if
Example 2
This example retrieves data to a DataStore:
long ll_return RestClient lnv_RestClient datastore lds_datastore lnv_RestClient = Create RestClient lds_datastore = create datastore // Set DataObject lds_datastore.DataObject = "d_sq_gr_emp" // Send request using GET ll_return = lnv_RestClient.Retrieve(lds_datastore, "http://demo.appeon.com/PB/webapi_client/employee/102") // Check the return value if ll_return >= 0 then MessageBox("Success", "Rows = " + String(ll_return)) else MessageBox("Error", "Failed to retrieve data.") end if
Example 3
This example retrieves data to a DataWindowChild:
int li_return RestClient lnv_restClient DataWindowChild ldwc_dept lnv_restClient = create RestClient //get the DataWindowChild dw_emp.getchild("dept_id", ldwc_dept) //Get data from web api using GET method li_return = lnv_restClient.retrieve(ldwc_dept, "http://demo.appeon.com/pb/webapi_client/department") if li_return >= 0 then messagebox("Success", "Rows = " + string(li_return)) else messagebox("Error", "Failed to retrieve data.") end if
Example 4
This example passes the string data using POST method and retrieves data to a DataWindow.
long ll_return RestClient lnv_RestClient lnv_RestClient = Create RestClient String ls_json = '{"empId":100, "fname":" John", "lname": "Guevara"}' // Construct a POST request (supports all headers) lnv_RestClient.SetRequestHeader("Content-Type", "application/json;charset=UTF-8") // Send the POST request (add data to the body and automatically set Content-Length header) ll_return = lnv_RestClient.Retrieve(dw_emp, "http://demo.appeon.com/PB/webapi_client/employee", ls_Json) // Check the return value if ll_return >= 0 then MessageBox("Success", "Rows = " + String(ll_return)) else MessageBox("Error", "Failed to retrieve data.") end if
Example 5
This example passes the blob data using POST method and retrieves data to a DataWindow.
Long ll_rc Blob lblb_data RestClient lnv_RestClient lnv_RestClient = Create RestClient // Set DataObject dw_1.DataObject = "d_employee" // Construct a POST request (supports all headers) lnv_RestClient.SetRequestHeader("Content-Type", "application/json;charset=UTF-8") // Content-Length is set by Retrieve automatically // ... lblb_data = blob('{"empId":100, "fname":"John", "lname":"Guevara"}', EncodingUTF8!) // Send the POST request (add data to the body and automatically set Content-Length header) ll_rc = lnv_RestClient.Retrieve(dw_1, "http://demo.appeon.com/PB/webapi_client/employee/blob", lblb_data) // Check the return value if ll_rc >= 0 then MessageBox("Success", "Rows = " + String(ll_rc)) else MessageBox("Error", "Failed to retrieve data.") end if
Example 6
This example passes the string data using POST method and retrieves data to a DataStore.
String ls_json Long ll_rc Datastore lds_1 RestClient lnv_RestClient lnv_RestClient = Create RestClient lds_1 = Create Datastore lds_1.DataObject = "d_employee" ls_json = '{"city": "Needham", "state": "MA", zipCode": "02192"}' // Construct a POST request (supports all headers) lnv_RestClient.SetRequestHeader("Content-Type", "application/json;charset=UTF-8") // Content-Length is set by Retrieve automatically // ... // Send the POST request (add data to the body and automatically set Content-Length header) ll_rc = lnv_RestClient.Retrieve(lds_1, "http://demo.appeon.com/PB/webapi_client/employee", ls_Json) // Check the return value if ll_rc >= 0 then MessageBox("Success", "Rows = " + String(ll_rc)) else MessageBox("Error", "Failed to retrieve data.") end if
Example 7
This example passes the blob data using POST method and retrieves data to a DataStore.
Long ll_rc RestClient lnv_RestClient lnv_RestClient = Create RestClient blob lblb_data Datastore lds_1 lds_1 = Create Datastore // Set DataObject lds_1.DataObject = "d_employee" // Construct a POST request (supports all headers) lnv_RestClient.SetRequestHeader("Content-Type", "application/json;charset=UTF-8") // Content-Length is set by Retrieve automatically // ... lblb_data = blob('{"empId":100, "fname":"John", "lname":"Guevara"}', EncodingUTF8!) // Send the POST request (add data to the body and automatically set Content-Length header) ll_rc = lnv_RestClient.Retrieve(lds_1, "http://demo.appeon.com/PB/webapi_client/employee/blob", lblb_data) // Check the return value if ll_rc >= 0 then MessageBox("Success", "Rows = " + String(ll_rc)) else MessageBox("Error", "Failed to retrieve data.") end if
Example 8
This example passes the string data using POST method and retrieves data to a DataWindowChild.
int li_return string ls_data RestClient lnv_restClient DataWindowChild ldwc_dept lnv_restClient = create RestClient //Get DataWindowChild dw_emp.getchild("dept_id", ldwc_dept) ls_data = "{'id':100}" lnv_restClient.SetRequestHeader("Content-Type", "application/json;charset=UTF-8") //Get data from web api using POST method li_return = lnv_restClient.retrieve(ldwc_dept, "http://demo.appeon.com/pb/webapi_client/department/RetrievePassJson", ls_data) if li_return >= 0 then messagebox("Success", "Rows = " + string(li_return)) else messagebox("Error", "Failed to retrieve data.") end if
Example 9
This example passes the blob data using POST method and retrieves data to a DataWindowChild.
int li_return blob lblb_data RestClient lnv_restClient DataWindowChild ldwc_dept lnv_restClient = create RestClient lnv_restClient.setrequestheader("Content-Type", "Application/json;charset=utf-8") //Convert the string to a blob lblb_data = blob("{'id':100}", encodingutf8!) //Get DataWindowChild dw_emp.getchild("dept_id", ldwc_dept) //Pass data from web api using POST method li_return = lnv_restClient.retrieve(ldwc_dept, "http://demo.appeon.com/pb/webapi_client/department/RetrievePassJson", lblb_data) if li_return >= 0 then messagebox("Success", "Rows = " + string(li_return)) else messagebox("Error", "Failed to retrieve data.") end if
Example 10
This example gets data from a Web site with token authentication and then retrieves data to a DataWindow.
integer li_return RestClient lnv_restClient TokenRequest lnv_tokenRequest lnv_restClient = create RestClient lnv_TokenRequest.tokenlocation = "http://demo.appeon.com/pb/identityserver/connect/token" //Location of the token lnv_TokenRequest.method = "post" //Request method lnv_TokenRequest.granttype = "client_credentials" //Grant type lnv_TokenRequest.clientid = "GRfjNAfCg2bI47l1sX5zdFiTEmdrkCKa20zm5YVS4iM=" //client ID lnv_TokenRequest.clientsecret = "K7gNU3sdo-OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=" //client certificate li_return = lnv_restClient.retrieve(dw_dept, "http://demo.appeon.com/pb/webapi_client/identity/departments", lnv_tokenRequest) if li_return >= 0 then messagebox("Success", "Rows " + string(li_return)) else messagebox("Error", "Failed to retrieve data.") end if
Example 11
This example passes the blob data using POST method and retrieves the data from the Web site with token authentication to the DataWindow.
integer li_return blob lblb_data RestClient lnv_restClient TokenRequest lnv_tokenRequest lnv_restClient = create RestClient lnv_TokenRequest.tokenlocation = "http://demo.appeon.com/pb/identityserver/connect/token" //Location of the token lnv_TokenRequest.method = "post" //Request method lnv_TokenRequest.granttype = "client_credentials" //Grant type lnv_TokenRequest.clientid = "GRfjNAfCg2bI47l1sX5zdFiTEmdrkCKa20zm5YVS4iM=" //client ID lnv_TokenRequest.clientsecret = "K7gNU3sdo-OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=" //client certificate lnv_restClient.setrequestheader("Content-Type", "Application/json;charset=utf-8") lblb_data = blob("{'id':100}", encodingutf8!) li_return = lnv_restClient.retrieve(dw_dept, "http://demo.appeon.com/pb/webapi_client/identity/department", lblb_data, lnv_tokenRequest) if li_return >= 0 then messagebox("Success", "Rows " + string(li_return)) else messagebox("Error", "Failed to retrieve data.") end if
Example 12
The client sends the server a request which includes the "gzip" compression method; then the server compresses and returns the data as requested; and then the client automatically extracts the data.
Integer li_Return RestClient lrc_Dept lrc_Dept = Create RestClient lrc_Dept.SetRequestHeader("Content-Type", "application/json;charset=UTF-8") // Sets the compression method in the request header lrc_Dept.SetRequestHeader("Accept-Encoding","gzip") // DataWindow column name and type must match with those returned from // URL: https://demo.appeon.com/PB/webapi_client/department dw_submit.DataObject = 'd_example_dept' // dw_submit datawindow will display the return data li_Return = lrc_Dept.Retrieve(dw_submit,"https://demo.appeon.com/PB/webapi_client/department") If li_Return < 0 Then // Prints the error message End If
See also