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".
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas