Classe responsável por tratar e manipular os dados e gerar o JSON para retornar na API Progress. Através dela é possível a criação da response com as seguintes informações:
- Payload (corpo da requisição)
- Status de retorno
- Indicador de existência de registros ainda pendentes (HasNext).
- Representação da tabela temporária de erros (JsonArray da RowErrors).
- Exceção de erro Progress do tipo Progress.Lang.AppError.
- Exceção de erro Progress do tipo Progress.Lang.Error.
DEFINE OUTPUT PARAM jsonOutput AS JsonObject NO-UNDO.
DEFINE VARIABLE oJsonObject AS JsonObject NO-UNDO.
DEFINE VARIABLE oResponse AS JsonAPIResponse NO-UNDO.
ASSIGN oJsonObject = NEW JSONObject().
oResponse = NEW JsonAPIResponse(oJsonObject).
oResponse:setHasNext(FALSE).
oResponse:setStatus(500).
oResponse:setRowErrors(JsonAPIUtils:convertTempTableToJsonObject(TEMP-TABLE RowErrors:HANDLE):getJsonArray("RowErrors")).
jsonOutput = oResponse:createJsonResponse().
Construtor
Parâmetro | Descrição |
|---|---|
| JsonConstruct | Objeto JsonObject ou JsonArray com o conteúdo a ser retornado pela API Progress (Payload) |
Métodos
Nome | Descrição |
|---|---|
| setStatus | Seta o Status HTTP do retorno da requisição (200, 404, 500, etc). |
| setHasNext | Seta o indicador da existências de mais registros para paginação. |
| setRowErrors | Seta um objeto JsonArray com a representação da tabela de erros (RowErrors). Para a conversão da tabela de erros em objeto JsonArray utilize o seguinte exemplo: oJsonObject = JsonAPIUtils:convertTempTableToJsonObject(TEMP-TABLE RowErrors:HANDLE)
oResponse:setRowErrors(oJsonObject:getJsonArray("RowErrors")).
|
| setAppError | Seta um objeto de erro do tipo Progress.Lang.AppError |
| setError | Seta um objeto de erro do tipo Progress.Lang.Error DO: ASSIGN cTest = ENTRY(3,cTest). END. CATCH err AS Progress.Lang.Error : oResponse:setError(err). oResponse:setStatus(500). END CATCH. FINALLY: jsonOutput = oResponse:createJsonResponse(). END FINALLY. |
| createJsonResponse | Cria o objeto JsonObject estruturado para ser retornado pela API Progress. |
Mapeamento da RowErrors (include method/dbotterr.i):
| Campo | Json | Descrição |
|---|---|---|
| ErrorNumber | code | Código da mensagem |
| ErrorDescription | message | Descrição da mensagem |
| ErrorSubType | type | Tipo de mensagem |
| ErrorHelp | detailedMessage | Help da mensagem |
Exemplo de uso da JsonAPIResponse
...
{method/dbotterr.i}
DEFINE OUTPUT PARAM jsonOutput AS JsonObject NO-UNDO.
DEFINE VARIABLE oJsonObject AS JsonObject NO-UNDO.
DEFINE VARIABLE oResponse AS JsonAPIResponse NO-UNDO.
ASSIGN oJsonObject = NEW JSONObject()
oResponse = NEW JsonAPIResponse(oJsonObject).
CREATE RowErrors.
ASSIGN RowErrors.ErrorNumber = 1
RowErrors.ErrorDescription = "Descrição do Erro"
RowErrors.ErrorSubType = "ERROR".
CREATE RowErrors.
ASSIGN RowErrors.ErrorNumber = 2
RowErrors.ErrorDescription = "Descrição do Erro2"
RowErrors.ErrorSubType = "ERROR".
oResponse:setHasNext(FALSE).
oResponse:setStatus(500).
oResponse:setRowErrors(JsonAPIUtils:convertTempTableToJsonObject(TEMP-TABLE RowErrors:HANDLE):getJsonArray("RowErrors")).
jsonOutput = oResponse:createJsonResponse().
...
/*
No exemplo acima será retornado um Json na variável "jsonOutput" no seguinte formato:
{
"status":500,
"payload":{
"code":"1",
"message":"Descrição do Erro",
"type":"error",
"detailedMessage":"",
"details":[{
"code":"2",
"message":"Descrição do Erro2",
"type":"error",
"detailedMessage":""
}]
}
}
*/
Nota
A tag "details" somente aparecerá no JSON quando houver mais de uma mensagem do mesmo tipo, exemplo: duas mensagens de "error" ou duas mensagens de "warning".
Import HTML Content
Visão Geral
Conteúdo das Ferramentas