Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

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
languagevb
titleCodigo original
/*------------------------------------------------------------------------------
 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
bgColor#fff
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 ( INPUT
idxShortcut,
INPUT
 idxShortcut, 
                                                        INPUT JsonAPIUtils:getPropertyJsonObject(payload, "description") ).
RUN setDefaultShortcut IN


    RUN setDefaultShortcut IN THIS-PROCEDURE ( INPUT
idxShortcut,
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
languagevb
titleCodigo original
/*------------------------------------------------------------------------------
 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
languagevb
titleCodigo original
   
    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.
 

...