HTML forms are a popular way to capture and transmit sets of data. Take, for example, a registration page that includes fields such as name, email, and contact number. Each field has a name and a value. When a user clicks Submit on the page, data from the page is sent to the backend service as form data.

Form data is a set of key-value pairs. The value of a key can be a string, a JSON object, or an image. To add form data to an HTTP request, use the AddFormData() method. For example:

USING OpenEdge.Net.HTTP.*.
USING OpenEdge.Net.URI.
USING Progress.Json.ObjectModel.*.

DEFINE VARIABLE oClient AS IHttpClient NO-UNDO.
DEFINE VARIABLE oURI AS URI NO-UNDO.
DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO. 
DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
DEFINE VARIABLE oJsonObject AS JsonObject NO-UNDO.
DEFINE VARIABLE JsonString AS LONGCHAR NO-UNDO.
DEFINE VARIABLE oResponseBody AS OpenEdge.Core.String NO-UNDO.

//Build a request
oURI = URI:Parse("http://httpbin.org/post").
oRequest = RequestBuilder:POST(oURI):AddFormData('First Name', 'John'):AddFormData('Last Name', 'Doe'):Request.


//Execute a request
oClient = ClientBuilder:Build():Client.
oResponse = oClient:Execute(oRequest).

//Process the response
IF oResponse:StatusCode <> 200 THEN
    RETURN ERROR "Request Error: " + STRING(oResponse:StatusCode).
ELSE
    oJsonObject = CAST(oResponse:Entity, JsonObject).
    oJsonObject:Write(JsonString, true).
    MESSAGE string(JsonString).
    

To send a JSON object in the form data, convert it to string. For example:

USING Progress.Json.ObjectModel.*.

DEFINE VARIABLE CustomerJsonObject AS JsonObject.

CustomerJsonObject = new JsonObject().
CustomerJsonObject:Add("CustNum", "200").
CustomerJsonObject:Add("Name", "Excellent Sports Apparel").

oRequest = RequestBuilder:POST(oURI):AddFormData('Customer Record', string(CustomerJsonObject)):Request.