1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Duvida Uso da ENAPI301

Discussão em 'EMS , HCM e Totvs 11' iniciado por tfofano, Março 25, 2026.

  1. tfofano

    tfofano Membro Participativo

    Bom dia pessoal,

    Estou criando uma API REST que cria estruturas dentro do Datasul, mas estou tendo erros internos, mas esses erros não são retornados na TT indicada na documentação, estou seguinte a documentação: ENAPI301 - Consistir e gravar informações referentes a estruturas de itens - Linha Datasul - TDN

    Inicialmente ainda não estou usando a ENAPI302, mas vou implementar,

    Estou enviando via POST o seguinte JSON, deixei bem enxuto mesmo pra ter os campos da tela ali do EN0105 apenas:
    {
    "estrutura": [
    {
    "codigoItem": "0002",
    "sequencia": 10,
    "componente": "0032",
    "quantidadeComponente": 1,
    "logFantasma": false,
    "revisao": "01",
    "serieInicial": null,
    "serieFinal": null,
    "localMontagem": "LINHA-PRODUCAO-01",
    "fatorPerda": 0,
    "proporcao": 100,
    "quantidadeUsada": 2.5,
    "observacao": "Inclusão via API REST",
    "tempoReserva": 0,
    "tipoSobra": 1,
    "quantidadeLiquida": 2.5,
    "quantidadeItem": 1,
    "logQuantidadeFixa": false,
    "codigoRoteiro": null,
    "codigoOperacao": null
    }
    ]
    }

    Eu faço o seguinte na minha API:
    PROCEDURE pi-create:
    DEFINE INPUT PARAMETER oJsonInput AS JsonObject NO-UNDO.
    DEFINE OUTPUT PARAMETER oJsonOutput AS JsonObject NO-UNDO.
    DEFINE VARIABLE oList AS JsonObject NO-UNDO.
    DEFINE VARIABLE aJsonErrors AS JsonArray NO-UNDO.
    DEFINE VARIABLE oJsonErrors AS JsonObject NO-UNDO.
    DEFINE VARIABLE oBody AS JsonObject NO-UNDO.
    DEFINE VARIABLE oRequest AS JsonAPIRequestParser NO-UNDO.
    DEFINE VARIABLE lHasNext AS LOGICAL NO-UNDO.
    DEFINE VARIABLE iCount AS INTEGER INITIAL 1 NO-UNDO.
    DEFINE VARIABLE iErro AS INTEGER NO-UNDO.

    oRequest = NEW JsonAPIRequestParser(oJsonInput).
    oBody = oRequest:getPayload().
    TEMP-TABLE ttEstruturaItem:READ-JSON('LONGCHAR',oBody:getJsonText(),'EMPTY').
    //TEMP-TABLE tt-ref-estrut:READ-JSON('LONGCHAR',oRequest:getJsonText(),'EMPTY').
    IF NOT CAN-FIND(FIRST ttEstruturaItem) THEN DO:
    create RowErrors.
    assign RowErrors.ErrorNumber = 1
    RowErrors.ErrorDescription = "Json de entrada não pode ser convertido para tabela tt-estrutura"
    RowErrors.ErrorHelp = "Verifique se a estrutura do json de entrada esta correto!"
    RowErrors.ErrorType = "ERROR":U.

    oJsonOutput = JsonAPIResponseBuilder:asError(TEMP-TABLE RowErrors:HANDLE).
    END.
    ELSE DO:

    CREATE tt-versao-integr.
    ASSIGN cod-versao-integracao = 1.
    FOR EACH ttEstruturaItem:
    CREATE tt-estrutura.
    BUFFER-COPY ttEstruturaItem TO tt-estrutura.
    ASSIGN tt-estrutura.ind-tipo-movto = 1. // Inclusão
    END.
    run enp/enapi301.p (input table tt-versao-integr,
    output table tt-erros-geral,
    input-output table tt-estrutura,
    input table tt-ref-estrut,
    input NO,
    output table tt-componente).
    IF RETURN-VALUE = "NOK" THEN DO:
    MESSAGE 'Erros geral'
    VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
    FOR EACH tt-erros-geral:

    CREATE RowErrors.
    ASSIGN RowErrors.ErrorNumber = tt-erros-geral.cod-erro
    RowErrors.ErrorSequence = tt-erros-geral.num-sequencia-erro
    RowErrors.ErrorDescription = tt-erros-geral.des-erro
    RowErrors.ErrorHelp = 'Máquina origem: ' + STRING(tt-erros-geral.cod-maq-origem) + ' - ' +
    'Número processo:' + STRING(tt-erros-geral.num-processo)
    RowErrors.ErrorType = "ERROR":U.

    END.

    oJsonOutput = JsonAPIResponseBuilder:asError(TEMP-TABLE RowErrors:HANDLE).

    END.
    ELSE DO:
    oList = NEW JsonObject().
    oList:Read(TEMP-TABLE tt-estrutura:HANDLE).

    oJsonOutput = JsonAPIResponseBuilder:eek:k(INPUT oList, 201). // Retorna json tt-estrutura com status code 201
    END.

    END. // FIRST tt-estrutura fim
    CATCH verropro AS PROGRESS.Lang.ProError:
    DO iErro = 1 TO verropro:NumMessages:
    create RowErrors.
    assign RowErrors.ErrorNumber = verropro:GetMessageNum(iErro)
    RowErrors.ErrorDescription = verropro:GetMessage(iErro)
    RowErrors.ErrorHelp = verropro:CallStack
    RowErrors.ErrorSubType = "ERROR":U.
    END.
    oJsonOutput = JsonAPIResponseBuilder:asError(TEMP-TABLE RowErrors:HANDLE).
    END CATCH.
    END PROCEDURE.

    Validei que está dando RETURN 'NOK', mas não retorna, mas ao colocar uma message ali no for each, nem tem registros, acaba complicando meu debug, não sei se é algum erro já conhecido, ou se estou fazendo algo de errado.
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Tu colocou um MESSAGE dentro da API? deve ser isso aí, olha o log do servidor
  3. tfofano

    tfofano Membro Participativo

    Então coloquei pra sair no PASOE, ele sai ali que entrou como return NOK, eu tinha feito outro teste, de colocar dentro do FOR EACH, mas nem passou por dentro do FOR EACH, logo entendo que tá vazia essa tabela de tt-erros-geral
  4. tfofano

    tfofano Membro Participativo

    Achei o problema pessoal, ali na RowErrors eu defini um campo errado: RowErrors.ErrorSubType = "ERROR":U. estava RowErrors.ErrorType = "ERROR":U. acabava não criando os registros, aproveitando, também notei uma coisa, na chamada, JsonAPIResponseBuilder:asError:

    Se faz necessário a chamada ser executada da seguinte forma:
    h-handle = TEMP-TABLE RowErrors:HANDLE.
    oOutput = JsonAPIResponseBuilder:asError(h-handle).

    Caso o contrário os erros ocorridos não são retornados
    rafael.andrade curtiu isso.

Compartilhe esta Página