DataFlex
DataFlex
curl Dependency Engine Simple Example
See more CURL Examples
This example demonstrates a simple way to define curl commands with declared inputs and outputs, and then execute a target command by automatically resolving its dependencies.
When the DoYourThing method is called with the target curl command, the following occurs:
- Scans the curl command for required inputs using the
{{variable}}syntax - Determines which of those inputs already have values
- For any missing inputs:
- Locates another
curlcommand that can produce the needed value - Recursively resolves that command’s own inputs in the same way
- Locates another
- Constructs an execution plan so that each
curlcommand runs only after all of its required inputs are available
The execution plan is then carried out, with the final step being the target curl command originally passed to DoYourThing.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoHttpCurl
String sTargetCurl
String sFnName
String sJsonPath
Variant vJsonOAuth2
Handle hoJsonOAuth2
Integer iStatusCode
Variant vResponseJson
Handle hoResponseJson
String sTemp1
Move False To iSuccess
Get Create (RefClass(cComChilkatHttpCurl)) To hoHttpCurl
If (Not(IsComObjectCreated(hoHttpCurl))) Begin
Send CreateComObject of hoHttpCurl
End
// The target curl command we ultimately want to execute.
// It requires a {{site_id}} value, which is not yet known.
Move "GET https://graph.microsoft.com/v1.0/sites/{{site_id}}/drives" To sTargetCurl
// Because site_id is unknown, we define a helper function (curl command)
// that can retrieve it.
Move "getSite" To sFnName
Get ComAddFunction Of hoHttpCurl sFnName "GET https://graph.microsoft.com/v1.0/sites/root:/sites/{{site_name}}" To iSuccess
// Define the outputs produced by the helper function.
// Outputs are extracted from the JSON response using JSON paths.
// Here, the "id" field from the response is mapped to the variable "site_id".
Move "id" To sJsonPath
Get ComAddOutput Of hoHttpCurl sFnName sJsonPath "site_id" To iSuccess
// Provide a value for site_name, which is required by the getSite function.
Send ComSetVar To hoHttpCurl "site_name" "test"
// ----------------------------------------------------------------------------------------------------------------------
// Build the OAuth2 configuration used for authentication.
// This uses the client credentials flow, with secrets retrieved
// from the local secrets manager (because EnableSecrets = true).
Get Create (RefClass(cComChilkatJsonObject)) To hoJsonOAuth2
If (Not(IsComObjectCreated(hoJsonOAuth2))) Begin
Send CreateComObject of hoJsonOAuth2
End
Set ComEnableSecrets Of hoJsonOAuth2 To True
Get ComUpdateString Of hoJsonOAuth2 "oauth2.client_id" "!!sharepoint|oauth2|client_id" To iSuccess
Get ComUpdateString Of hoJsonOAuth2 "oauth2.client_secret" "!!sharepoint|oauth2|client_secret" To iSuccess
Get ComUpdateString Of hoJsonOAuth2 "oauth2.scope" "https://graph.microsoft.com/.default" To iSuccess
Get ComUpdateString Of hoJsonOAuth2 "oauth2.token_endpoint" "!!sharepoint|oauth2|token_endpoint" To iSuccess
// ----------------------------------------------------------------------------------------------------------------------
Get pvComObject of hoJsonOAuth2 to vJsonOAuth2
Get ComSetAuth Of hoHttpCurl vJsonOAuth2 To iSuccess
// Execute the target curl command.
// Internally, the system will:
// 1) Detect that {{site_id}} is required but not yet defined.
// 2) Find that the "getSite" function can produce site_id.
// 3) Verify that getSite's input (site_name) is already available.
// 4) Build an execution plan: first run getSite, then run the target curl.
Get ComDoYourThing Of hoHttpCurl sTargetCurl To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoHttpCurl To sTemp1
Showln sTemp1
Procedure_Return
End
// Retrieve and display the HTTP response status code.
Get ComStatusCode Of hoHttpCurl To iStatusCode
Showln "response status code: " iStatusCode
// Load and display the JSON response from the final curl command.
Get Create (RefClass(cComChilkatJsonObject)) To hoResponseJson
If (Not(IsComObjectCreated(hoResponseJson))) Begin
Send CreateComObject of hoResponseJson
End
Set ComEmitCompact Of hoResponseJson To False
Get pvComObject of hoResponseJson to vResponseJson
Get ComGetResponseJson Of hoHttpCurl vResponseJson To iSuccess
Get ComEmit Of hoResponseJson To sTemp1
Showln sTemp1
End_Procedure