I am able query the data that I want from an integration within a process model, but when I try to map the Json results to a CDT process variable, all of the fields are blank. The keys from the Json dictionary are identical to the names for each field in the CDT. How can I map the Json dictionary into the CDT process variable?
Alternatively, how can I create an expression rule to parse each field from the Json and map each of them to a text process variable?
the following expression returns all key, value pairs from the Json: a!fromJson(rule!<rule_name>().result.body)
However, the following returns a null value:
a!fromJson(rule!<rule_name>().result.body).keyname1
Discussion posts and replies are publicly visible
Seems this is occurring due to the way your data from the integration is structured. You might be getting a list of Dictionary as shown in this example.
What is the output when you cast it? Try this:
index(cast('type!yourCDT?list', a!fromJson(...result.body), "keyname1", "No Value")
It says "expected 2 parameters, but found 4 parameters" when including this portion of the expression: , "keyname1", "No Value")
When I use the following ER I get the following error:
index(cast('type!{urn:com:appian:types}apiResultsData'(), a!fromJson(rule!API_Results(null).result.body)))
Expression evaluation error at function 'cast' [line 4]: Could not cast from apiResultsData to Number (Integer). Details: CastInvalidCould not cast from apiResultsData to Number (Integer). Details: CastInvalid
I am not trying to cast to an integer, as there are only text fields in the Json response and in the CDT.
The following is the result from the API Call:
Raw response body:
body: "{"args":{"ID":"99887766","File_Name":"PT_1","Type":"PT","Prob":"0.77"},"headers":{"x-forwarded-proto":"https","x-forwarded-port":"443","host":"postman-echo.com","x-amzn-trace-id":"Root=1-5f19cd4a-e32e53040178811afc5c3291","user-agent":"Appian","accept-encoding":"gzip,deflate"},"url":""">postman-echo.com/get error: null (Null) connectedSystem: null (Connected System)
When I convert JSON to Appian value:
body Dictionary
remove the () after type!{urn:com:appian:types}apiResultsData'() and instead do this:
index(cast('type!{urn:com:appian:types}apiResultsData', a!fromJson(rule!API_Results(null).result.body)))
or if you think you are going to get multiple values then:
index(cast('type!{urn:com:appian:types}apiResultsData?list', a!fromJson(rule!API_Results(null).result.body)))
if I run the first query above, I get the following error:
Expression evaluation error at function 'index': Too few parameters for function; expected at least 2 parameters, but found 1 parameters.
if I run the second query above, the error is: Invalid type for type constructor: apiResultsData?list
index(cast('type!{urn:com:appian:types}apiResultsData', a!fromJson(rule!API_Results(null).result.body)), "No Data")
that query executes but returns a null value when I replace "No Data" with a dictionary key