Histórico da Página
...
Para uma melhor explicação do assunto, montamos um exemplo para o endpoint que cria os atalhos de execução e evoluímos para receber um JsonArray de atalhos para serem criados;
Como era o codigo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
/*------------------------------------------------------------------------------
Purpose: Inclui um atalho Local
Notes:
------------------------------------------------------------------------------*/
PROCEDURE upsertLocalShortcut:
DEFINE INPUT PARAMETER jsonInput AS JsonObject NO-UNDO.
DEFINE INPUT PARAMETER isUpdate AS LOGICAL NO-UNDO.
DEFINE VARIABLE idxShortcut AS INTEGER NO-UNDO.
DEFINE VARIABLE payload AS JsonObject NO-UNDO.
ASSIGN payload = | ||||
Painel | ||||
| ||||
PROCEDURE upsertLocalShortcut: DEFINE INPUT PARAMETER jsonInput AS JsonObject NO-UNDO. DEFINE INPUT PARAMETER isUpdate AS LOGICAL NO-UNDO. DEFINE VARIABLE idxShortcut AS INTEGER NO-UNDO. DEFINE VARIABLE payload AS JsonObject NO-UNDO.ASSIGN payload = jsonInput:GetJsonObject("payload"). /* Valida os campos obrigatorios */ RUN validateLocalRequiredFields IN THIS-PROCEDURE (INPUT payload). IF NOT IF NOT VALID-HANDLE(hExecutionShortcutRepository)THEN RUN THEN RUN btb/properties/infrastructure/domain/ExecutionShortcutRepository.p PERSISTENT SET hExecutionShortcutRepository. ASSIGN idxShortcut = ASSIGN idxShortcut = getIdxShortcut(jsonInput, isUpdate). /* Validacoes somente para update */ IF isUpdate THEN DO: /* Valida se existe o registro no banco de dados */ RUN validateIndex IN RUN validateIndex IN THIS-PROCEDURE (INPUT idxShortcut). /* Valida o tipo do atalho se foi alterado */ RUN validateTypeShortcut IN RUN validateTypeShortcut IN THIS-PROCEDURE (INPUT idxShortcut, INPUT {&LOCAL_ACCESS}). END. /* Valida a descricao do atalho */ RUN validateDescriptionShortcut IN THIS-PROCEDURE ( INPUTidxShortcut, INPUT idxShortcut, INPUT JsonAPIUtils:getPropertyJsonObject(payload, "description") ).RUN setDefaultShortcut IN RUN setDefaultShortcut IN THIS-PROCEDURE ( INPUTidxShortcut, INPUT idxShortcut, INPUT JsonAPIUtils:getPropertyJsonObject(payload, "description") ).RUN upsertLocalShortcut IN hExecutionShortcutRepository (INPUT payload, INPUT RUN upsertLocalShortcut IN hExecutionShortcutRepository (INPUT payload, INPUT STRING(idxShortcut)). FINALLY: DELETE PROCEDURE hExecutionShortcutRepository FINALLY: DELETE PROCEDURE hExecutionShortcutRepository NO-ERROR. END FINALLY. END PROCEDURE. |
Como ficou apos a implementação da tecnica:
Bloco de código | ||||
---|---|---|---|---|
| ||||
/*------------------------------------------------------------------------------ Purpose: Inclui um atalho Local Notes: ------------------------------------------------------------------------------*/ PROCEDURE upsertLocalShortcut: DEFINE INPUT PARAMETER jsonInput AS JsonObject NO-UNDO. DEFINE INPUT PARAMETER isUpdate AS LOGICAL NO-UNDO. DEFINE VARIABLE idxShortcut AS INTEGER NO-UNDO. DEFINE VARIABLE payload AS JsonObject NO-UNDO. DEFINE VARIABLE payloadArray AS JsonArray NO-UNDO. DEFINE VARIABLE iCountPayload AS INTEGER NO-UNDO. DEFINE VARIABLE iPayloadLength AS INTEGER NO-UNDO. ASSIGN iPayloadLength = CAST(jsonInput:getJSONArray("payload"), "JSONArray"):LENGTH NO-ERROR. payloadArray = NEW JsonArray(). ASSIGN payloadArray = jsonInput:getJSONArray("payload") NO-ERROR. IF payloadArray:LENGTH = 0 THEN do: // caso o tamanho seja zero payload = CAST(jsonInput:getJSONObject("payload"), "JSONObject") NO-ERROR. //atribui object payloadArray:ADD(payload). //adiciona ao array END. iPayloadLength = payloadArray:LENGTH. DO iCountPayload = 1 TO iPayloadLength: ASSIGN payload = payloadArray:getJSONObject(iCountPayload) NO-ERROR. /* Valida os campos obrigatorios */ RUN validateLocalRequiredFields IN THIS-PROCEDURE (INPUT payload). IF NOT VALID-HANDLE(hExecutionShortcutRepository) THEN RUN btb/properties/infrastructure/domain/ExecutionShortcutRepository.p PERSISTENT SET hExecutionShortcutRepository. ASSIGN idxShortcut = getIdxShortcut(jsonInput, isUpdate). /* Validacoes somente para update */ IF isUpdate THEN DO: /* Valida se existe o registro no banco de dados */ RUN validateIndex IN THIS-PROCEDURE (INPUT idxShortcut). /* Valida o tipo do atalho se foi alterado */ RUN validateTypeShortcut IN THIS-PROCEDURE (INPUT idxShortcut, INPUT {&LOCAL_ACCESS}). END. /* Valida a descricao do atalho */ RUN validateDescriptionShortcut IN THIS-PROCEDURE ( INPUT idxShortcut, INPUT JsonAPIUtils:getPropertyJsonObject(payload, "description") ). RUN setDefaultShortcut IN THIS-PROCEDURE ( INPUT idxShortcut, INPUT JsonAPIUtils:getPropertyJsonObject(payload, "description") ). RUN upsertLocalShortcut IN hExecutionShortcutRepository (INPUT payload, INPUT STRING(idxShortcut)). END. FINALLY: DELETE PROCEDURE hExecutionShortcutRepository NO-ERROR. END FINALLY. END PROCEDURE. |
A técnica utilizada e documentada:
Bloco de código | ||||
---|---|---|---|---|
| ||||
DEFINE VARIABLE payloadArray AS JsonArray NO-UNDO.
DEFINE VARIABLE iCountPayload AS INTEGER NO-UNDO.
DEFINE VARIABLE iPayloadLength AS INTEGER NO-UNDO.
ASSIGN iPayloadLength = CAST(jsonInput:getJSONArray("payload"), "JSONArray"):LENGTH NO-ERROR.
payloadArray = NEW JsonArray().
ASSIGN payloadArray = jsonInput:getJSONArray("payload") NO-ERROR.
IF payloadArray:LENGTH = 0 THEN do: // caso o tamanho seja zero
payload = CAST(jsonInput:getJSONObject("payload"), "JSONObject") NO-ERROR. //atribui object
payloadArray:ADD(payload). //adiciona ao array
END.
iPayloadLength = payloadArray:LENGTH.
DO iCountPayload = 1 TO iPayloadLength:
ASSIGN payload = payloadArray:getJSONObject(iCountPayload) NO-ERROR.
END.
|
...
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas