Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

How to define pass POST Data via a UX REST Data Broker?

David Hubbard
Tera Guru

I am trying to call a POST-based REST API via UX REST Data Broker from UI Builder.

I have managed to get a POST call working with no data

called in UI Builder via

       api.data.approve_task.execute({
            taskId: api.context.props.taskId
        });

However I'm not clear on how to pass POST data into this via the `execute` method.  The UI Builder API Documentation (execute) only indicates how to do this for URL parameters, but only specifies this for a simple operation with no Data.

I have tried:

1) adding as a "dataParam" (as used in createHTTPEffect)

       api.data.approve_task.execute({
            taskId: api.context.props.taskId
            dataParam: {
               comment: "my comment" 
            }

        });

> this results in "no data" in REST client script i.e. the data isn't passed through

2) Looks like I can "hard-code" a "Request Body" in the Data Broker definition

> which get through to the REST client script - but isn't what I'm after

3) defined "data" as a parameter and tried to refer to it as

 

> but that results in "com.glide.rest.util.RESTRuntimeException: The payload is not valid JSON." in the logs

Any ideas on how to pass the data from client, though the Data Broker and into REST endpoint? 

I have a follow on question - "if you execute the data resource, from UI Builder, how do you get access to the return data?"

"execute" doesn't return a Promise, nor does it seem to make a blocked call in the script - as logging the data via "api.data.approve_task.output" returns undefined - even though I see the data returned in Developer Tools (albeit base64 encoded)

10 REPLIES 10

lakshminarayan4
ServiceNow Employee

Below is my request body.

 

{short_description: "{{short_description}}", caller_id: "{{caller_id}}"}