Duvida Criação de endpoint POST - API para Datasul

Discussão em 'EMS , HCM e Totvs 11' iniciado por tfofano, Setembro 3, 2024.

  1. tfofano

    tfofano Membro Participativo

    Pessoal, tenho o seguinte código, retirei o outro endpoint para focar no post:

    USING Progress.Json.ObjectModel.*.
    USING Progress.Json.ObjectModel.ObjectModelParser.
    USING Progress.Json.ObjectModel.JsonArray.
    USING Progress.Json.ObjectModel.JsonObject.

    {utp/ut-api.i}
    {utp/ut-api-utils.i}
    /* GET - Informacoes de usuario */
    {utp/ut-api-action.i get-user-info GET /detalhe~*}
    /* GET - Para marcar pontos*/
    {utp/ut-api-action.i get-user-info POST /marca-ponto~*}
    {utp/ut-api-notfound.i}

    // Marca registro de ponto
    PROCEDURE marca-ponto:

    DEFINE VARIABLE contador AS INTEGER INITIAL 1.

    DEFINE INPUT PARAM jsonInput AS JsonObject NO-UNDO.

    DEFINE VARIABLE oRequestParser AS JsonAPIRequestParser NO-UNDO.
    DEFINE VARIABLE oQueryParams AS JsonObject NO-UNDO.
    DEFINE VARIABLE aPathParams AS JsonArray NO-UNDO.
    DEFINE VARIABLE oResponse AS JsonAPIResponse NO-UNDO.

    // Parâmetros recebidos do endpoint API
    DEFINE VARIABLE func LIKE funcionario.cdn_funcionario.
    DEFINE VARIABLE dataEntrada LIKE marcac_nova_integr.dat_marcac_aces.
    DEFINE VARIABLE horaEntrada LIKE marcac_nova_integr.num_horar_marcac_aces.
    DEFINE VARIABLE dataEntradaAlmoco LIKE marcac_nova_integr.dat_marcac_aces.
    DEFINE VARIABLE horaEntradaAlmoco LIKE marcac_nova_integr.num_horar_marcac_aces.
    DEFINE VARIABLE dataSaidaAlmoco LIKE marcac_nova_integr.dat_marcac_aces.
    DEFINE VARIABLE horaSaidaAlmoco LIKE marcac_nova_integr.num_horar_marcac_aces.
    DEFINE VARIABLE dataSaida LIKE marcac_nova_integr.dat_marcac_aces.
    DEFINE VARIABLE horaSaida LIKE marcac_nova_integr.num_horar_marcac_aces.

    oRequestParser = NEW JsonAPIRequestParser(jsonInput).

    ASSIGN oQueryParams = oRequestParser:getQueryParams()
    aPathParams = oRequestParser:getPathParams().

    ASSIGN func = INT(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "func"))
    dataEntrada = DATE(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "dataEntrada"))
    horaEntrada = INTEGER(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "horaEntrada"))
    dataEntradaAlmoco = DATE(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "dataEntradaAlmoco"))
    horaEntradaAlmoco = INTEGER(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "horaEntradaAlmoco"))
    dataSaidaAlmoco = DATE(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "dataSaidaAlmoco"))
    horaSaidaAlmoco = INTEGER(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "horaSaidaAlmoco"))
    dataSaida = DATE(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "dataSaida"))
    horaSaida = INTEGER(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "horaSaida")).

    DO WHILE contador <= 4:
    DEFINE VARIABLE dataMarcacao AS DATE FORMAT '99/99/9999'.
    DEFINE VARIABLE horaMarcacao AS INTEGER FORMAT '99999999'.
    DEFINE VARIABLE val_control_marcac LIKE marcac_nova_integr.val_control_marcac.

    CASE contador:
    WHEN 1 THEN DO:
    ASSIGN dataMarcacao = dataEntrada
    horaMarcacao = horaEntrada.
    END.

    WHEN 2 THEN DO:
    ASSIGN dataMarcacao = dataEntradaAlmoco
    horaMarcacao = horaEntradaAlmoco.
    END.

    WHEN 3 THEN DO:
    ASSIGN dataMarcacao = dataSaidaAlmoco
    horaMarcacao = horaSaidaAlmoco.
    END.

    WHEN 4 THEN DO:
    ASSIGN dataMarcacao = dataSaida
    horaMarcacao = horaSaida.
    END.

    OTHERWISE
    MESSAGE "Valor inválido".
    END CASE.

    // Busca o último valor para atribuir
    FIND LAST marcac_nova_integr NO-LOCK NO-ERROR.
    IF AVAILABLE marcac_nova_integr THEN
    ASSIGN val_control_marcac = marcac_nova_integr.val_control_marcac + 1.
    ELSE
    ASSIGN val_control_marcac = 1. // Caso não exista nenhum registro

    CREATE marcac_nova_integr. // Cria registro na tabela de marcações

    ASSIGN marcac_nova_integr.dat_marcac_aces = dataMarcacao
    marcac_nova_integr.num_horar_marcac_aces = horaMarcacao
    marcac_nova_integr.cod_func_msa = STRING(func)
    marcac_nova_integr.val_perf_aces = 0
    marcac_nova_integr.val_control_marcac = val_control_marcac
    marcac_nova_integr.num_vers_layout_afd = 0
    marcac_nova_integr.num_direcao_aces = 0
    marcac_nova_integr.dat_ult_atualiz = dataMarcacao
    marcac_nova_integr.cod_usuar_ult_atualiz = 'tsuricato'
    marcac_nova_integr.cod_usuar_ext_chave = '001;101;' + STRING(func)
    marcac_nova_integr.cod_unid_ext_chave = '001;101'
    marcac_nova_integr.cod_inscr_emp = 0
    marcac_nova_integr.num_livre_1 = 9
    marcac_nova_integr.num_livre_2 = 0
    marcac_nova_integr.val_livre_1 = 1
    marcac_nova_integr.val_livre_2 = 0
    marcac_nova_integr.log_livre_1 = FALSE
    marcac_nova_integr.log_livre_2 = FALSE.

    contador = contador + 1.
    END.

    CATCH oError AS PROGRESS.Lang.ERROR:
    jsonOutput = NEW JsonObject().
    jsonOutput:ADD("status", 505).
    jsonOutput:ADD("message", oError:GetMessage(1) + " / " + oError:GetMessage(2)).
    END CATCH.

    END PROCEDURE.

    Estou com um problema, quando tenta utilizar esse endpoint, testei pelo Postman, recebo o erro HTTP Status 415 – Media Type não suportado, primeira vez que faço uma API para o Datasul, não sei o que pode ser.
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Na definição dos endpoints tu chama "get-user-info" mas essa procedure não existe, somente a "marca-ponto"

    {utp/ut-api-action.i get-user-info GET /detalhe~*}
    {utp/ut-api-action.i get-user-info POST /marca-ponto~*}
  3. tfofano

    tfofano Membro Participativo

    Cara, eu não tinha percebido, eu tenho essa procedure no codigo original, apaguei pra ficar menos código, vou testar fazer a requisição agora,

    {utp/ut-api.i}
    {utp/ut-api-utils.i}
    /* GET - Informacoes de usuario */
    {utp/ut-api-action.i get-user-info GET /detalhe~*}
    /* GET - Para marcar pontos*/
    {utp/ut-api-action.i marca-ponto POST /marca-ponto~*} Ajustei aqui
    {utp/ut-api-notfound.i}
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Na sua alteração só vai funcionar o POST, o get continua apontando pra uma procedure que não existe
  5. tfofano

    tfofano Membro Participativo

    USING Progress.Json.ObjectModel.*.
    USING Progress.Json.ObjectModel.ObjectModelParser.
    USING Progress.Json.ObjectModel.JsonArray.
    USING Progress.Json.ObjectModel.JsonObject.

    {utp/ut-api.i}
    {utp/ut-api-utils.i}
    /* GET - Informacoes de usuario */
    {utp/ut-api-action.i get-user-info GET /detalhe~*}
    /* GET - Para marcar pontos*/
    {utp/ut-api-action.i marca-ponto POST /ponto~*}
    {utp/ut-api-notfound.i}

    DEF VAR cdn_funcionario LIKE funcionario.cdn_funcionario.
    DEF VAR nom_pessoa_fisic LIKE funcionario.nom_pessoa_fisic.
    DEF VAR des_cargo LIKE cargo.des_cargo.

    // Retorna informacoes de um colaborador.
    PROCEDURE get-user-info:
    DEFINE INPUT PARAM jsonInput AS JsonObject NO-UNDO.
    DEFINE OUTPUT PARAM jsonOutput AS JsonObject NO-UNDO.

    DEFINE VARIABLE oRequestParser AS JsonAPIRequestParser NO-UNDO.
    DEFINE VARIABLE oQueryParams AS JsonObject NO-UNDO.
    DEFINE VARIABLE aPathParams AS JsonArray NO-UNDO.
    DEFINE VARIABLE oJsonObject AS JsonObject NO-UNDO.
    DEFINE VARIABLE oResponse AS JsonAPIResponse NO-UNDO.

    DEFINE VARIABLE func LIKE funcionario.cdn_funcionario.

    oRequestParser = NEW JsonAPIRequestParser(jsonInput).

    ASSIGN oQueryParams = oRequestParser:getQueryParams()
    aPathParams = oRequestParser:getPathParams().

    ASSIGN func = INT(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "func")).

    ASSIGN jsonOutput = NEW JsonObject().

    FOR EACH funcionario NO-LOCK WHERE funcionario.cdn_funcionario = func,
    FIRST cargo NO-LOCK
    WHERE cargo.cdn_cargo_basic = funcionario.cdn_cargo_basic:

    ASSIGN cdn_funcionario = funcionario.cdn_funcionario
    nom_pessoa_fisic = funcionario.nom_pessoa_fisic
    des_cargo = cargo.des_cargo.


    END.

    // Popula o JSON de sa¡da com as informa‡äes do funcion rio.
    jsonOutput:ADD("codRegistro", cdn_funcionario).
    jsonOutput:ADD("nomeCompleto", nom_pessoa_fisic).
    jsonOutput:ADD("cargo", des_cargo).

    END PROCEDURE.

    // Marca registro de ponto
    PROCEDURE marca-ponto:

    DEFINE VARIABLE contador AS INTEGER INITIAL 1.

    DEFINE INPUT PARAM jsonInput AS JsonObject NO-UNDO.

    DEFINE VARIABLE oRequestParser AS JsonAPIRequestParser NO-UNDO.
    DEFINE VARIABLE oQueryParams AS JsonObject NO-UNDO.
    DEFINE VARIABLE aPathParams AS JsonArray NO-UNDO.
    DEFINE VARIABLE oResponse AS JsonAPIResponse NO-UNDO.

    // Parƒmetros recebidos do endpoint API
    DEFINE VARIABLE func LIKE funcionario.cdn_funcionario.
    DEFINE VARIABLE dataEntrada LIKE marcac_nova_integr.dat_marcac_aces.
    DEFINE VARIABLE horaEntrada LIKE marcac_nova_integr.num_horar_marcac_aces.
    DEFINE VARIABLE dataEntradaAlmoco LIKE marcac_nova_integr.dat_marcac_aces.
    DEFINE VARIABLE horaEntradaAlmoco LIKE marcac_nova_integr.num_horar_marcac_aces.
    DEFINE VARIABLE dataSaidaAlmoco LIKE marcac_nova_integr.dat_marcac_aces.
    DEFINE VARIABLE horaSaidaAlmoco LIKE marcac_nova_integr.num_horar_marcac_aces.
    DEFINE VARIABLE dataSaida LIKE marcac_nova_integr.dat_marcac_aces.
    DEFINE VARIABLE horaSaida LIKE marcac_nova_integr.num_horar_marcac_aces.

    oRequestParser = NEW JsonAPIRequestParser(jsonInput).

    ASSIGN oQueryParams = oRequestParser:getQueryParams()
    aPathParams = oRequestParser:getPathParams().

    ASSIGN func = INT(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "func"))
    dataEntrada = DATE(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "dataEntrada"))
    horaEntrada = INTEGER(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "horaEntrada"))
    dataEntradaAlmoco = DATE(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "dataEntradaAlmoco"))
    horaEntradaAlmoco = INTEGER(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "horaEntradaAlmoco"))
    dataSaidaAlmoco = DATE(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "dataSaidaAlmoco"))
    horaSaidaAlmoco = INTEGER(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "horaSaidaAlmoco"))
    dataSaida = DATE(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "dataSaida"))
    horaSaida = INTEGER(JsonAPIUtils:getPropertyJsonObject(oQueryParams, "horaSaida")).

    DO WHILE contador <= 4:
    DEFINE VARIABLE dataMarcacao AS DATE FORMAT '99/99/9999'.
    DEFINE VARIABLE horaMarcacao AS INTEGER FORMAT '99999999'.
    DEFINE VARIABLE val_control_marcac LIKE marcac_nova_integr.val_control_marcac.

    CASE contador:
    WHEN 1 THEN DO:
    ASSIGN dataMarcacao = dataEntrada
    horaMarcacao = horaEntrada.
    END.

    WHEN 2 THEN DO:
    ASSIGN dataMarcacao = dataEntradaAlmoco
    horaMarcacao = horaEntradaAlmoco.
    END.

    WHEN 3 THEN DO:
    ASSIGN dataMarcacao = dataSaidaAlmoco
    horaMarcacao = horaSaidaAlmoco.
    END.

    WHEN 4 THEN DO:
    ASSIGN dataMarcacao = dataSaida
    horaMarcacao = horaSaida.
    END.

    OTHERWISE
    MESSAGE "Valor inv lido".
    END CASE.

    // Busca o £ltimo valor para atribuir
    FIND LAST marcac_nova_integr NO-LOCK NO-ERROR.
    IF AVAILABLE marcac_nova_integr THEN
    ASSIGN val_control_marcac = marcac_nova_integr.val_control_marcac + 1.
    ELSE
    ASSIGN val_control_marcac = 1. // Caso nÆo exista nenhum registro

    CREATE marcac_nova_integr. // Cria registro na tabela de marca‡äes

    ASSIGN marcac_nova_integr.dat_marcac_aces = dataMarcacao
    marcac_nova_integr.num_horar_marcac_aces = horaMarcacao
    marcac_nova_integr.cod_func_msa = STRING(func)
    marcac_nova_integr.val_perf_aces = 0
    marcac_nova_integr.val_control_marcac = val_control_marcac
    marcac_nova_integr.num_vers_layout_afd = 0
    marcac_nova_integr.num_direcao_aces = 0
    marcac_nova_integr.dat_ult_atualiz = dataMarcacao
    marcac_nova_integr.cod_usuar_ult_atualiz = 'tsuricato'
    marcac_nova_integr.cod_usuar_ext_chave = '001;101;' + STRING(func)
    marcac_nova_integr.cod_unid_ext_chave = '001;101'
    marcac_nova_integr.cod_inscr_emp = 0
    marcac_nova_integr.num_livre_1 = 9
    marcac_nova_integr.num_livre_2 = 0
    marcac_nova_integr.val_livre_1 = 1
    marcac_nova_integr.val_livre_2 = 0
    marcac_nova_integr.log_livre_1 = FALSE
    marcac_nova_integr.log_livre_2 = FALSE.

    contador = contador + 1.
    END.

    CATCH oError AS PROGRESS.Lang.ERROR:
    jsonOutput = NEW JsonObject().
    jsonOutput:ADD("status", 505).
    jsonOutput:ADD("message", oError:GetMessage(1) + " / " + oError:GetMessage(2)).
    END CATCH.

    END PROCEDURE.
  6. tfofano

    tfofano Membro Participativo

    Fiz a alteração mas ainda recebo o mesmo erro no body da requisição.

Compartilhe esta Página