Árvore de páginas

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

JsonConstructObjeto JsonObject ou JsonArray com o conteúdo a ser retornado pela API Progress (Payload)

Métodos

Nome

Descrição

setStatusSeta o Status HTTP do retorno da requisição (200, 404, 500, etc).
setHasNextSeta 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.
createJsonResponseCria o objeto JsonObject estruturado para ser retornado pela API Progress.

Mapeamento da RowErrors (include method/dbotterr.i):

CampoJsonDescrição
ErrorNumbercodeCódigo da mensagem
ErrorDescriptionmessageDescrição da mensagem
ErrorSubTypetypeTipo de mensagem
ErrorHelpdetailedMessageHelp 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".