Árvore de páginas

Versões comparadas

Chave

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

01. DADOS GERAIS

Produto:

Solucoes_totvs
Solucao TOTVS Manufatura

Linha de Produto:

TOTVS Protheus

Segmento:

Segmentos_totvs
SegmentoManufatura

Módulo:SIGAQIP - Inspeção de Processos
Função:

QIPA215

País:Todos
Ticket:Interno.
Issue:DMANQUALI-4018 - DMANQUALI-4686 - DMANQUALI-4478

02. SITUAÇÃO/REQUISITO

Criar uma nova interface para Inspeção de Processo, simplificada para facilitar a entrada de Medições.

03. SOLUÇÃO

Projeto em desenvolvimento, abaixo informações sobre requisitos e disponibilização das API's.

04. DEMAIS INFORMAÇÕES

Deck of Cards
historyfalse
idProced_Implanta
Card
idRequisitos
labelRequisitos
titleRequisitos
  1. Módulo Inspeção de Processos (SIGAQIP) Implantado;
  2. Build, RPO e LIB atualizados para versão mais recente no release 12.1.33;
  3. Servidor REST habilitado no AppServer do ambiente;Contrato TOTVS I ou Mobile*** (revisar);
  4. Host configurado no Mingle;
  5. Versão mais recente do APP Minha Produção instalada no dispositivo;
Card
idImplantação Serviço ou Disponibilização de API's
labelImplantação Serviço ou Disponibilização de API's
titleImplantação Serviço ou Disponibilização de API's

O processo de integração do módulo Inspeção de Processos (SIGAQIP) do ERP TOTVS Protheus com o App Mobile Minha Produção se dá através do uso de API's REST.

A TOTVS disponibiliza o uso destas API's para clientes que desejaram realizar diretamente desejam customizar a integração com o processo de inspeção. 

A seguir, apresentamos um resumo detalhando as APIs e os EndPoints disponibilizados, demonstração de configuração do servidor RESTFul no AppServer.INI do servidor de aplicação do Protheus, utilização de Postman com GET e POST para conhecimento dos EndPoints e implementação de exemplo de código ADVPL para Client RESTPortanto, o cliente deve seguir as instruções apresentadas neste tutorial.




Informações
titlePré-Requisitos Uso de API's
  1. Configuração do servidor REST no ambiente, seguir instruções da documentação oficial: 1. Configuração do REST do Protheus;
  2. Atualização do RPO com versão da expedição contínua igual ou superior a: DMANQUALI-4478;última versão publicada disponível em: Pacotes - APP Inspeção de Processos - P12
  3. Utilização dos métodos GET e POST conforme especificação padrão "TOTVS - RESTFul API" e exemplos a seguir;

Deck of Cards
historyfalse
idDetalhamento_APIs
effectTypefade
Card
idLista_APIs
labelLista de API's e Endpoints Disponíveis
titleLista de API's e Endpoints Disponíveis

A seguir são listadas as API's disponibilizadas, detalhamentos de seus endpoints e mapa de campos relacionados.

Deck of Cards
historyfalse
idPrincipais_Campos
effectTypefade
Card
idAPI_1
labelInspeções de Processos por Operação
titleInspeções de Processos por Operação
  • TOTVS - RESTFul API:
  • Métodos:
    • GET: Retorna Lista Inspeções de Processos Pendentes:
      • Endpoint: processinspections/api/qip/v1/pendinglist/{Login}/{Laboratory}/{Order}/{OrderType}/{Page}/{PageSize}/{NotStarted}/{WithoutReport}/{IncompleteReport}
      • Objetivo: Objetivo: permitir a consulta das inspeções de processos pendentes a nível de ordem de produção + operação;
      • PathParam:
        • Login: referência de login do usuário do configurador Protheus em QAA_LOGIN (obrigatório). Ex: ADMINISTRADOR;
        • Laboratory: laboratório para filtro da inspeção de processos. Ex: "LABFIS", "" para todos;
        • Order: referência de campos para ordenação dos resultados. Ex: "productionOrderID,operationID,lot";
        • OrderType: referência de ordenação dos resultados, Ex 1: vazio ou "ASC" para crescente. Ex 2: "DESC" para decrescente.
        • Page: número de página atual da paginação de resultados; Ex: 1.
        • PageSize: tamanho da página considerado na paginação de resultados; Ex: 5;
        QueryParam:Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;
        • NotStarted: indicador se deve filtrar somente as inspeções não iniciadas; Ex: false (boolean);
        • WithoutReport: indicador se deve filtrar somente as inspeções sem laudo; Ex: false (boolean);
        • IncompleteReport: indicador se deve filtrar somente as inspeções incompletas; Ex: false (boolean);
      • QueryParam:
        • Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;

    • GET: Pesquisa Inspeção:
        GET: Pesquisa Inspeção:
        • Endpoint: processinspectionsapi/qip/v1/search/{Login}/{Laboratory}/{Text}/{Order}/{OrderType}/{Page}/{PageSize}
        • Objetivo: permitir a pesquisa por Produto ou OP das inspeções de processos a nível de ordem de produção + operação;
        • PathParam:
          • Text: texto para pesquisa por OP ou produto;
          • Demais conforme anterior; 
        • QueryParam:
          • Fields: referência de "Código API" para os campos que devem ser retornados. Default: todos;

      • GET: Existe UsuárioRetorna Uma Inspeção de Processos:
        • Endpoint: processinspectionsapiapiprocessinspectionsapi/qip/v1/userExistinspection/{Login}/{Laboratory}/{Recno}/{OperationID}
        • Objetivo: permitir identificar se o usuário possui cadastro no módulo inspeção de processosa consulta de uma inspeção de processo a nível de ordem de produção + operação;
        • PathParam:
          • Login: referência de login do usuário do configurador Protheus em QAA_LOGIN (obrigatório). Ex: ADMINISTRADOR;

    Mapa de Campos Padrões:

          • Recno: RECNO do registro na tabela de inspelção QPK;
          • OperationID: operação relacionada a inspeção. Ex: "01", "" para todas;
        • QueryParam:
          • Fields: referência de "Código API" para os campos que devem ser retornados. Default: todos;

      • GET: Existe Usuário:
        • Endpoint: processinspections/api/qip/v1/userExist/{Login}
        • Objetivo: permitir identificar se o usuário possui cadastro no módulo inspeção de processos;
        • PathParam:
          • Login: referência de login do usuário do configurador Protheus em QAA_LOGIN (obrigatório). Ex: ADMINISTRADOR;


    Mapa de Campos Padrões:

    DescriçãoCódigo APIReferência ProtheusTipoOpções
    Código do ProdutoproductIDQPK_PRODUTC
    Descrição do ProdutoproductB1_DESC
    DescriçãoCódigo APIReferência ProtheusTipo
    Código do ProdutoproductIDQPK_PRODUTC
    Descrição do ProdutoproductB1_DESCC
    Ordem de ProduçãoproductionOrderIDQPK_OPC
    Código do RoteirooperationRoutinesQQK_CODIGOC
    Código da OperaçãooperationIDQQK_OPERACC
    Descrição da OperaçãooperationQQK_DESCRIC
    RecursoresourceH1_DESCRIC
    QuantidadelotSizeQPK_TAMLOTN
    Código Unidade MedidalotUnitIDQPK_UMC
    Unidade de MedidalotUnitAH_DESCPOC
    LotelotQPK_LOTEC
    Número de SérieserialNumberQPK_NUMSERC
    Data de EmissãodateQPK_EMISSAD
    Cliente e LojacustomerA1_COD + A1_LOJA + A1_NOMEC
    Versão da EspecificaçãospecificationVersionQPK_REVIC
    Data da ProduçãoproductionDateQPK_DTPRODD
    Usuário PermitidoallowedUserReferência existente de cLogin = QAA_LOGIN → true== cLoginLtrue = Usuário Permitido
    false = Usuário Não Permitido
    Laudo de OperaçãooperationReportQPM_LAUDOCStatus:
    N = Não Iniciado
    I = Iniciado

    A = Aprovado
    R =

    Rejeitado

    Reprovado
    U = Liberação Urgente
    C = Liberação Condicional
    Vazio ou NULL = Pendente

    Statusstatus

    Regra de Negócio Interna

    C
    Recno InspeçãorecnoQQK.R_E_C_N_O_N
Card
idAPI_2
labelEnsaios
titleEnsaios
N = Não Iniciado
I = Iniciado
A = Aprovado
R = Rejeitado
U = Liberação Urgente
C = Liberação Condicional
Laudo IncompletoincompleteReport
C

"true" = possui laudo incompleto

"false"= não possui laudo incompleto

*ocorrência de laudo geral sem laudo de operação ou laboratório;
* ou, a ocorrência de laudo de operação sem laudo de laboratório

Recno InspeçãorecnoQQK
  • TOTVS - RESTFul API:
  • Métodos:GET: Retorna Lista de Ensaios das Inspeções de Processos:
  • Endpoint: processinspectiontestapi/qip/v1/list/{Recno}/{Order}/{OrderType}/{Page}/{PageSize}
  • Objetivo: permitir a consulta dos ensaios das inspeções de processos;
  • PathParam:Recno: recno da inspeção - QPK
    .R_E_C_N_O_
    ;
  • Order: referência de campos para ordenação dos resultados. Ex: "title,laboratory";
  • OrderType: referência de ordenação dos resultados, Ex 1: vazio ou "ASC" para crescente. Ex 2: "DESC" para decrescente.
  • Page: número de página atual da paginação de resultados; Ex: 1.
  • PageSize: tamanho da página considerado na paginação de resultados; Ex: 5;
  • N
          • QPK.R_E_C_N_O_
          • ;
          • OperationID: operação relacionada a inspeção. Ex: "01";
          • Laboratory: laboratório relacionado a inspeção. Ex: "LABFIS", "" para todos;
          • Order: referência de campos para ordenação dos resultados. Ex: "title,laboratory";
          • OrderType: referência de ordenação dos resultados, Ex 1: vazio ou "ASC" para crescente. Ex 2: "DESC" para decrescente.
          • Page: número de página atual da paginação de resultados; Ex: 1.
          • PageSize: tamanho da página considerado na paginação de resultados; Ex: 5;
        • QueryParam:
          • Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;

      • GET: Retorna Um Ensaios das Inspeções de Processos:
        • Endpoint: processinspectiontestapi/qip/v1/test/{Recno}/{OperationID}/{IDEnsaio}
        • Objetivo: permitir a consulta de um único Ensaio da inspeção de processos.
        • PathParam:
          • Recno: recno da inspeção - QPK.R_E_C_N_O_;
          • OperationID: código da operação relacionada a inspeção. Ex: "01", "" para todas;
          • IDRecno: código do ensaio para pesquisa, por exemplo, valor de conteúdo em QP7_ENSAIO, QP8_ENSAIO;
        • QueryParam:
          • Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;


    Mapa de Campos Padrões:

    Card
    idAPI_2
    labelEnsaios
    titleEnsaios
    • TOTVS - RESTFul API:
    • Métodos:
      • GET: Retorna Lista de Ensaios das Inspeções de Processos:
        • Endpoint: processinspectiontestapi/qip/v1/list/{Recno}/{OperationID}/{Order}/{OrderType}/{Page}/{PageSize}
        • Objetivo: permitir a consulta dos ensaios das inspeções de processos;
        • PathParam:
          • Recno: recno da inspeção -
  • QueryParam:
    • Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;
  • Mapa de Campos Padrões:
    DescriçãoCódigo APIReferência ProtheusTipo
    RECNO InspeçãorecnoInspectionN
    RECNO EnsaiorecnoTestQP7.R_E_C_N_O_ ou QP8.R_E_C_N_O_N
    Código do EnsaiotestIDQP7_ENSAIO ou QP8_ENSAIOC
    Sequência do LaboratóriosequenceQP7_SEQLAB ou QP8_SEQLABN
    Título do EnsaiotitleQP1_DESCPOC
    Quantidade de MediçõesnumberOfMensurementsQP1_QTDE*N
    LaboratóriolaboratoryX5_DESCRI para X5_TABELA = 'Q2'C
    Especificação ResumidasummarySpecification

    QP7_NOMINA QP7_LIE / QP7_LSE

    Ou QP8_TEXTO

    C
    Código Unidade de MedidalotUnitIDQP7_UNIMEDC
    Tipo de ControlecontrolTypeQP7_MINMAXC
    Limite Inferior EngenharialowerDeviationQP7_LIEC
    Limite Superior EngenhariaupperDeviationQP7_LSEC
    Tipo do EnsaiotestTypeQP7 → N → Numérico
    QP8 → T → Texto
    C
    Status:
    A = Aprovado
    R = Reprovado
    P = Pendente
    N = Não Obrigatório
    statusRegra de Negócio InternaC
    DescriçãoCódigo APIReferência ProtheusTipoOpções
    RECNO InspeçãorecnoInspectionQPK.R_E_C_N_O_N
    RECNO EnsaiorecnoTestQP7.R_E_C_N_O_ ou QP8.R_E_C_N_O_N
    Código do EnsaiotestIDQP7_ENSAIO ou QP8_ENSAIOC
    Sequência do LaboratóriosequenceQP7_SEQLAB ou QP8_SEQLABN
    Ensaio Obrigatórioobrigatory
    L
    Título do EnsaiotitleQP1_DESCPOC
    Quantidade de MediçõesnumberOfMensurementsQP1_QTDE*N

    QP1_QTDE quando QP1_CARTA $ "|XBR|XBS|XMR|HIS|NP |"

    3 quando QP1_CARTA == 'P  '

    2 quando QP1_CARTA == 'U  '

    1 caso contrário

    TipotypeQP1_TIPOC
    LaboratóriolaboratoryX5_DESCRI para X5_TABELA = 'Q2'C
    ID do LaboratóriolaboratoryIDX5_CHAVE para X5_TABELA = 'Q2'C
    Especificação ResumidasummarySpecification

    QP7_NOMINA QP7_LIE / QP7_LSE

    Ou QP8_TEXTO

    C
    Código Unidade de MedidalotUnitIDQP7_UNIMEDC
    Tipo de ControlecontrolTypeQP7_MINMAXC
    Valor NominalnominalValueQP7_NOMINAC
    Limite Inferior EngenharialowerDeviationQP7_LIEC
    Limite Superior EngenhariaupperDeviationQP7_LSEC
    Operação da InspeçãooperationIDQP7_OPERAC / QP8_OPERACC
    Tipo do EnsaiotestTypeTabelas do Protheus:
    QP7 = Ensaios Mensuráveis Produtos
    QP8 = Ensaios Textos dos Produtos
    CN = Numérico
    T = Texto
    Laudo do LaboratóriolaboratoryReportQPL_LAUDOC

    A = Aceito sem restrição
    B = Aceito com desvio simples
    C = Aceito com desvio grave
    E = Rejeitado totalmente
    U = Liberação urgente

    StatusstatusRegra de Negócio InternaCA = Aprovado
    R = Reprovado
    P = Pendente
    N = Não Obrigatório
          • (obrigatório);
          • OperationID: operação da inspeção (obrigatório);
          • IDTest: código do ensaio relacionado QP7_ENSAIO ou QP8_ENSAIO (obrigatório);
          • Demais conforme anterior; 
        • QueryParam:
          • Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;

      • GET: Retorna Histórico de Resultados da Inspeção de Processos:
        • Endpoint: processinspectiontestresultsapi/api/qip/v1/history/{RecnoQPK}/{Order}/{Page}/{PageSize}
        • Objetivo: permitir a consulta do histórico de resultados completo da inspeção de processos com base no RECNO de uma inspeção (RecnoQPK);
        • PathParam:
          • RecnoQPK: recno da inspeção - QPK
    QP7.R_E_C_N_O_ ou QP8
          • .R_E_C_N_O_
          • (obrigatório);
          • Demais conforme anterior; 
        • QueryParam:
          • Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;

      • POST: Salva Resultado(s):
        • Endpoint: processinspectiontestresultsapi/api/qip/v1/save
        • Objetivo: permitir salvar resultados de inspeção;
        • QueryParam:
          • items: array com relação de objetos json com os campos padrões a seguir:
            • recnoInspection: RECNO da inspeção QPK.R_E_C_N_O_ (Obrigatório);
            • recnoTest: RECNO do ensaio relacionado - QP7.R_E_C_N_O_ ou QP8.R_E_C_N_O_ (Obrigatório);
            • measurementDate: data da amostra (facultativo);
              • Ao não enviar o sistema considerará a data do recebimento da mensagem;
            • measurementTime: hora da amostra (facultativo);
              • Ao não enviar o sistema considerará a data do recebimento da mensagem;
            • testType: tipo do resultado de ensaio (Obrigatório):
              • QP7 → N → Numérico;
              • QP8 → T → Texto;
            • measurements: array com string de medições da amostra (Obrigatório quando testType = N);
            • textStatus: status da amostra (Obrigatório):
              • A = Aprovado;
              • R = Reprovado;
            • textDetail: justificativa de medições do tipo texto reprovadas(Obrigatório quando testType = N e textStatus = R);
            • protheusLogin: login do usuário do Protheus (Obrigatório);
            • recno: RECNO da amostra -
            • QPR.R_E_C_N_O_
    Card
    idAPI_3
    labelResultados das Inspeções
    titleResultados das Inspeções
    Card
    idAPI_3
    labelResultados das Inspeções
    titleResultados das Inspeções
    • TOTVS - RESTFul API:
    • Métodos:
      • GET: Retorna Resultado(s) da Inspeção de Processos:
      • Endpoint: processinspectiontestresultsapi/api/qip/v1/result/{RecnoQPK}/{RecnosQPR}/{Order}/{Page}/{PageSize}
      • Objetivo: permitir a consulta de uma relação específica de resultados de inspeção com base no RECNO da inspeção (RecnoQPK) e em lista de RECNOS das amostras (RecnosQPR);
      • PathParam:
        • RecnoQPK: recno da inspeção - QPK.R_E_C_N_O_ (obrigatório);
        • RecnosQPR: recnos das amostras separados por ponto e virgula - QPR.R_E_C_N_O_;
        • Order: referência de campos para ordenação dos resultados. Ex: "productionOrderID,operationID";
        • OrderType: referência de ordenação dos resultados, Ex 1: vazio ou "ASC" para crescente. Ex 2: "DESC" para decrescente.
        • Page: número de página atual da paginação de resultados; Ex: 1.
        • PageSize: tamanho da página considerado na paginação de resultados; Ex: 5;
      • QueryParam:Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;
        GET: Retorna Histórico de Resultados por Ensaio:
      • Endpoint: processinspectiontestresultsapi/api/qip/v1/testhistory/{RecnoQPK}/{IDTest}/{Order}/{Page}/{PageSize}
      • Objetivo: permitir a consulta do histórico de resultados de um ensaio específico com base no RECNO de uma inspeção (RecnoQPK) e no ID de um ensaio (IDTest, QP7_ENSAIO ou QP8_ENSAIO);
      • PathParam:
        • RecnoQPK: recno da inspeção - QPK.R_E_C_N_O_ (obrigatório);
        • IDTest: código do ensaio relacionado QP7_ENSAIO ou QP8_ENSAIO (obrigatório);
        • Demais conforme anterior; 
      • QueryParam:Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;
        GET: Retorna Histórico de Resultados da Inspeção de Processos:
      • Endpoint: processinspectiontestresultsapi/api/qip/v1/history/{RecnoQPK}/{Order}/{Page}/{PageSize}
      • Objetivo: permitir a consulta do histórico de resultados completo da inspeção de processos com base no RECNO de uma inspeção (RecnoQPK);
      • PathParam:
        • RecnoQPK: recno da inspeção - QPK.R_E_C_N_O_ (obrigatório);
        • Demais conforme anterior; 
      • QueryParam:Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;
        POST: Salva Resultado(s):
        • Endpoint: processinspectiontestresultsapi/api/qip/v1/save
        • Objetivo: permitir salvar resultados de inspeção;
        • result/{RecnoQPK}/{RecnosQPR}/{Order}/{Page}/{PageSize}
        • Objetivo: permitir a consulta de uma relação específica de resultados de inspeção com base no RECNO da inspeção (RecnoQPK) e em lista de RECNOS das amostras (RecnosQPR);
        • PathParam:
          • RecnoQPK: recno da inspeção -
          QueryParam:
          • items: array com relação de objetos json com os campos padrões a seguir:recnoInspection: RECNO da inspeção QPK.R_E_C_N_O_ (Obrigatórioobrigatório);
          • recnoTest: RECNO do ensaio relacionado - QP7RecnosQPR: recnos das amostras separados por ponto e virgula - QPR.R_E_C_N_O_ ou QP8.R_E_C_N_O_ (Obrigatório);
          • measurementDate: data da amostra (facultativo);
            • Ao não enviar o sistema considerará a data do recebimento da mensagem;
          • measurementTime: hora da amostra (facultativo);
            • Ao não enviar o sistema considerará a data do recebimento da mensagem;
          • ;
          • Order: referência de campos para ordenação dos resultados. Ex: "productionOrderID,operationID";
          • OrderType: referência de ordenação dos resultados, Ex 1: vazio ou "ASC" para crescente. Ex 2: "DESC" para decrescente.
          • Page: número de página atual da paginação de resultados; Ex: 1.
          • PageSize: tamanho da página considerado na paginação de resultados; Ex: 5;
        • QueryParam:
          • Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;

      • GET: Retorna Histórico de Resultados por Ensaio:
        • Endpoint: processinspectiontestresultsapi/api/qip/v1/testhistory/{RecnoQPK}/{OperationID}/{IDTest}/{Order}/{Page}/{PageSize}
        • Objetivo: permitir a consulta do histórico de resultados de um ensaio específico com base no RECNO de uma inspeção (RecnoQPK) e no ID de um ensaio (IDTest, QP7_ENSAIO ou QP8_ENSAIO);
        • PathParam:
          • RecnoQPK: recno da inspeção - QPK
          • testType: tipo do resultado de ensaio (Obrigatório):
            • QP7 → N → Numérico;
            • QP8 → T → Texto;
          • measurements: array com string de medições da amostra (Obrigatório quando testType = N);
          • textStatus: status da amostra (Obrigatório):
            • A = Aprovado;
            • R = Reprovado;
          • textDetail: justificativa de medições do tipo texto reprovadas(Obrigatório quando testType = N e textStatus = R);
          • protheusLogin: login do usuário do Protheus (Obrigatório);
          • recno: RECNO da amostra - QPR.R_E_C_N_O_  (facultativo)
            • 0 → incluirá nova amostra;
            • informado → editará uma amostra existente;

    Mapa de Campos Padrões:

    DescriçãoCódigo APIReferência ProtheusTipo
    RECNO InspeçãorecnoInspectionQPK.R_E_C_N_O_N
    RECNO EnsaiorecnoTestN
    Data da AmostrameasurementDateQPR_DTMEDID
    Hora da AmostrameasurementTimeQPR_HRMEDIH
    Código do EnsaiadorrehearserIDQPR_ENSRC
    EnsaiadorrehearserQAA_NOMEC
    Tipo do EnsaiotestTypeQP7 → N → Numérico
    QP8 → T → Texto
    C
    Array de MediçõesmeasurementsString com array de medições: QPS_MEDICAC
    Status da Amostra:
    A = Aprovado
    R = Reprovado
    textStatus

    QPR_RESULT

    C
    Justificativa ReprovaçãotextDetailQPQ_MEDICAC
    Usuário ProtheusprotheusLoginQAA_LOGINC
    RECNO AmostrarecnoN
    Card
    idAppServer.INI
    labelAppServer.INI
    titleAppServer.INI

    Segue abaixo demonstração de código para configuração de servidor REST no AppServer.ini do servidor de aplicação do ERP TOTVS Protheus:

    Bloco de código
    languagetext
    titleAmostra de Configuração REST no AppServer.INI
    ;CONFIGURACAO REST
    [ONSTART]
    JOBS=HTTPJOB1
    REFRESHRATE=120
    
    [HTTPJOB1]
    MAIN=HTTP_START
    ENVIRONMENT=V12_1_33_compila
    
    [HTTPV11]
    Enable=1
    Sockets=HTTPREST1
    
    [HTTPREST1]
    Port=5050
    IPsBind=
    URIs=HTTPURI1
    Security=1
    
    [HTTPURI1]
    URL=/rest
    PrepareIn=ALL
    Instances=1,1,1,1
    CORSEnable=1
    AllowOrigin=*
    ; FIM CONFIGURACAO REST
    Card
    idGET Postman
    labelGET Postman
    titleGET Postman

    Segue abaixo demonstração da execução de um método GET via Postman:

    1. Crie uma nova aba, selecione a operação GET e o endpoint desejado, por exemplo: http://localhost:5050/rest/processinspectiontestresults/api/qip/v1/history;

    2. Configure o modo de autorização na aba "Authorization" com o usuário e senha de acesso ao ERP TOTVS Protheus;

    3. Informe os parâmetros desejados na aba "Params";

    4. Envie a requisição clicando em "SEND";

    Image Removed

            •  (facultativo)
              • 0 → incluirá nova amostra;
              • informado → editará uma amostra existente;

      • DELETE: Deleta Informações de Uma Amostra (Novo: em expedição):
        • Endpoint: processinspectiontestresultsapi/api/qip/v1/result
        • Objetivo: permitir deletar uma amostra da inspeção de resultados;
        • QueryParam:
          • RecnoQPR: RECNO da amostra correspondente para exclusão na tabela QPR;


    Mapa de Campos Padrões:

    DescriçãoCódigo APIReferência ProtheusTipoOpções
    RECNO InspeçãorecnoInspectionQPK.R_E_C_N_O_N
    RECNO EnsaiorecnoTestQP7.R_E_C_N_O_ ou QP8.R_E_C_N_O_N
    Data da AmostrameasurementDateQPR_DTMEDID
    Hora da AmostrameasurementTimeQPR_HRMEDIH
    Código do EnsaiadorrehearserIDQPR_ENSRC
    EnsaiadorrehearserQAA_NOMEC
    Tipo do EnsaiotestTypeQP7 = Tabela de Ensaios Mensuráveis Produtos
    QP8 = Tabela de Ensaios Textos dos Produtos
    CN = Numérico
    T = Texto
    Array de MediçõesmeasurementsString com array de medições: QPS_MEDICAC
    Status da AmostratextStatus

    QPR_RESULT

    CA = Aprovado
    R = Reprovado
    Justificativa ReprovaçãotextDetailQPQ_MEDICAC
    Usuário ProtheusprotheusLoginQAA_LOGINC
    RECNO AmostrarecnoQPR.R_E_C_N_O_N
    Card
    idAppServer.INI
    labelAppServer.INI
    titleAppServer.INI

    Segue abaixo demonstração de código para configuração de servidor RESTFul no AppServer.ini do servidor de aplicação do ERP TOTVS Protheus:

    Nota: ajustar "ENVIRONMENT" para o nome de seu ambiente.

    Card
    idPOST Postman
    labelPOST Postman
    titlePOST Postman

    Segue abaixo demonstração da execução de um método POST via Postman:

    1. Crie uma nova aba, selecione a operação GET e o endpoint desejado, por exemplo: http://localhost:5050/rest/processinspectiontestresults/api/qip/v1/save;

    2. Configure o modo de autorização na aba "Authorization" com o usuário e senha de acesso ao ERP TOTVS Protheus;

    Image Removed

    3. Informe os itens para inclusão na aba "Body" conforme os dados de recno, rehearser e testType de sua base (consulte acima "Lista de API's e Endpoints Disponíveis"):

    Image Removed

    Bloco de código
    languagetext
    titleExemplo de conteúdo para Body
    collapsetrue
    Amostra de Configuração REST no AppServer.INI
    ;CONFIGURACAO REST
    [ONSTART]
    JOBS=HTTPJOB1
    REFRESHRATE=120
    
    [HTTPJOB1]
    MAIN=HTTP_START
    ENVIRONMENT=V12_1_33_compila
    
    [HTTPV11]
    Enable=1
    Sockets=HTTPREST1
    
    [HTTPREST1]
    Port=5050
    IPsBind=
    URIs=HTTPURI1
    Security=1
    
    [HTTPURI1]
    URL=/rest
    PrepareIn=ALL
    Instances=1,1,1,1
    CORSEnable=1
    AllowOrigin=*
    ; FIM CONFIGURACAO REST
    Card
    idGET Postman
    labelGET Postman
    titleGET Postman

    Conheça melhor os EndPoints testando-os via Postman. Segue abaixo demonstração da execução de um método GET:

    1. Crie uma nova aba, selecione a operação GET e o endpoint desejado, por exemplo: http://localhost:5050/rest/processinspectiontestresults/api/qip/v1/history;

    2. Configure o modo de autorização na aba "Authorization" com o usuário e senha de acesso ao ERP TOTVS Protheus;

    3. Informe os parâmetros desejados na aba "Params";

    4. Envie a requisição clicando em "SEND";

    Image Added

    Bloco de código
    languagetext
    titleExemplo de resposta
    collapsetrue
    {
        "items": [
            {
                "recnoInspection": 134,
                "recnoTest": 166,
                "measurementDate": "2022-08-09",
                "measurementTime": "11:31",
                "rehearserID": "001",
                 "rehearser": "NOME DO ENSAIADOR", 
                "testType": "N",
                "measurements": [
                    "      10"
                ],
                "textStatus": "A",
                "textDetail": null,
                "protheusLogin": "ADMINISTRADOR",
                "recno": 334
            },
            {
                "recnoInspection": 134,
                "recnoTest": 165,
                "measurementDate": "2022-08-09",
                "measurementTime": "11:31",
                "rehearserID": "001",
                 "rehearser": "NOME DO ENSAIADOR", 
                "testType": "N",
                "measurements": [
                    "   19.00"
                ],
                "textStatus": "A",
                "textDetail": null,
                "protheusLogin": "ADMINISTRADOR",
                "recno": 335
            },
            {
                "recnoInspection": 134,
                "recnoTest": 14,
                "measurementDate": "2022-08-09",
                "measurementTime": "11:31",
                "rehearserID": "001",
                "rehearser": "NOME DO ENSAIADOR",
                "testType": "T",
                "measurements": [],
                "textStatus": "A",
                "textDetail": "BOA",
                "protheusLogin": "ADMINISTRADOR",
                "recno": 336
            }
        ],
        "hasNext": false,
        "code": 200
    }
    Card
    idPOST Postman
    labelPOST Postman
    titlePOST Postman

    Conheça melhor os EndPoints testando-os via Postman. Segue abaixo demonstração da execução de um método POST:

    1. Crie uma nova aba, selecione a operação POST e o endpoint desejado, por exemplo: http://localhost:5050/rest/processinspectiontestresults/api/qip/v1/save;

    2. Configure o modo de autorização na aba "Authorization" com o usuário e senha de acesso ao ERP TOTVS Protheus;

    Image Added

    3. Informe os itens para inclusão na aba "Body" conforme os dados de recno, rehearser e testType de sua base:
    (Em caso de dúvidas, consulte acima "Lista de API's e Endpoints Disponíveis + Resultados das Inspeções")

    Image Added


    Bloco de código
    languagetext
    titleExemplo de conteúdo para Body
    collapsetrue
    {
        "items": [
            {
                "recnoInspection": 134,
                "recnoTest": 165,
                "measurementDate": "2022-08-09",
                "measurementTime": "11:31",
                "rehearserID": "001",
                "rehearser": "NOME DO ENSAIADOR",
                "testType": "N",
                "measurements": [
                    "   19.00"
                ],
                "textStatus": "A",
                "textDetail": null,
                "protheusLogin": "ADMINISTRADOR",
                "recno": 335
            },
            {
                "recnoInspection": 134,
                "recnoTest": 14,
                "measurementDate": "2022-08-09",
                "measurementTime": "11:31",
                "rehearserID": "001",
                "rehearser": "NOME DO ENSAIADOR",
                "testType": "T",
                "measurements": [],
                "textStatus": "A",
                "textDetail": "BOA",
                "protheusLogin": "ADMINISTRADOR",
                "recno": 336
            }]
    }
    Bloco de código
    languagetext
    titleExemplo de resposta
    collapsetrue
    {
        "items": [
            {
                "recnoInspection": 134,
                "recnoTest": 14,
                "measurementDate": "2022-08-09",
                "measurementTime": "11:31",
                "rehearserID": "001",
                "rehearser": "NOME DO ENSAIADOR",
                "testType": "T",
                "measurements": [],
                "textStatus": "A",
                "textDetail": "BOA",
                "protheusLogin": "ADMINISTRADOR",
                "recno": 336
            },
            {
                "recnoInspection": 134,
                "recnoTest": 165,
                "measurementDate": "2022-08-09",
                "measurementTime": "11:31",
                "rehearserID": "001",
                "rehearser": "NOME DO ENSAIADOR",
                "testType": "N",
                "measurements": [
                    "   19.00"
                ],
                "textStatus": "A",
                "textDetail": null,
                "protheusLogin": "ADMINISTRADOR",
                "recno": 335
            }
        ],
        "hasNext": false,
        "code": 200
    }
    Card
    idCódigo: GET REST Client em ADVPL
    labelCódigo: GET REST Client em ADVPL
    titleCódigo: GET REST Client em ADVPL

    Você pode desenvolver uma customização usando a classe FWRest, documentada em: https://tdn.totvs.com/display/public/framework/FWRest

    Segue abaixo exemplo de código ADVPL com GET Rest Client para API de Inspeções de Processos:

    Bloco de código
    languagetext
    titleCódigo Exemplo - ADVPL FWRest GET
    #INCLUDE "TOTVS.CH"
    
    User Function tstMAIN()
        RPCSetType(3)
        lRet := RpcSetEnv("99", "01")
    	U_tstAPIGET()
    	RpcClearEnv()
    Return
    
    User Function tstAPIGET()
    
    	Local aHeaderWS   as array
    	Local cLogin      as string
    	Local cPassword   as string
    	Local cPathParams as string
    	Local oRestClient as object
    	//Local oResult     as object
    
    	cLogin    := "ADMIN"
    	cPassword := "1234"
    
    	aHeaderWS := {}
    	AAdd(aHeaderWS, {"Content-Type: application/json"})
        AAdd(aHeaderWS, "Authorization: Basic " + Encode64(cLogin+":"+cPassword))
    
    	oRestClient := FWRest():New("http://localhost:5050/rest")
    	cPathParams := ""
    	cPathParams +=  "RecnoQPK=134"
    	cPathParams += "&Order=recno"
    	cPathParams += "&Page=1"
    	cPathParams += "&PageSize=9"
    	
    	oRestClient:SetPath("/processinspectiontestresults/api/qip/v1/history/")
    	oRestClient:SetGetParams(cPathParams)
    	
    	If oRestClient:Get(aHeaderWS)
    		ConOut(oRestClient:GetResult())
    		
    		//oResult := JsonObject():New()
    		//oResult:fromJson(oRestClient:GetResult())
    		//oResult['items'] //Relação de Resultados
    
    	Else
    		ConOut(oRestClient:GetLastError())
    	EndIf
    	
    Return
    
    
    Card
    idCódigo: POST REST Client em ADVPL
    labelCódigo: POST REST Client em ADVPL
    titleCódigo: POST REST Client em ADVPL

    Você pode desenvolver uma customização usando a classe FWRest, documentada em: https://tdn.totvs.com/display/public/framework/FWRest

    Segue abaixo exemplo de código ADVPL com POST Rest Client para API de Resultados Inspeções de Processos:

    Bloco de código
    languagetext
    titleCódigo Exemplo - ADVPL FWRest POST
    #INCLUDE "TOTVS.CH"
    
    User Function tstMAIN()
        RPCSetType(3)
        lRet := RpcSetEnv("99", "01")
    	U_tstAPIPOST()
    	RpcClearEnv()
    Return
    
    User Function tstAPIPOST()
    
    	Local aHeaderWS   as array
    	Local cBody       as string
    	Local cLogin      as string
    	Local cPassword   as string
    	Local oBody       as object
    	Local oNumeric    as object
    	Local oRestClient as object
    	Local oText       as object
    
    	cLogin    := "ADMIN"
    	cPassword := "1234"
    
    	aHeaderWS := {}
    	AAdd(aHeaderWS, {"Content-Type: application/json"})
        AAdd(aHeaderWS, "Authorization: Basic " + Encode64(cLogin+":"+cPassword))
    
    	oBody := JsonObject():New()
    	oBody['items'] := {}
    
    	oNumeric := JsonObject():New()
    	oNumeric["recnoInspection"] :=  134
    	oNumeric["recnoTest"]       :=  165
    	oNumeric["measurementDate"] :=  "2022-08-09"
    	oNumeric["measurementTime"] :=  "11:31"
    	oNumeric["rehearserID"]     :=  "001"
    	oNumeric["rehearser"]       :=  "NOME DO ENSAIADOR"
    	oNumeric["testType"]        :=  "N"
    	oNumeric["measurements"]    := {}
    	aAdd(oNumeric["measurements"], "   19.00")
    
    	oNumeric["textStatus"]      :=  "A"
    	oNumeric["textDetail"]      :=  nil
    	oNumeric["protheusLogin"]   :=  "ADMINISTRADOR"
    	oNumeric["recno"]{
        "items": [
            {
                "recnoInspection": 134,
                "recnoTest": 165,
                "measurementDate": "2022-08-09",
                "measurementTime": "11:31",
                "rehearserID": "001",
                "rehearser": "NOME DO ENSAIADOR",
                "testType": "N",
                "measurements": [
                    "   19.00"
                ],
                "textStatus": "A",
                "textDetail": null,
                "protheusLogin": "ADMINISTRADOR",
               := "recno": 335
     //Para editar um resultado
    	//oNumeric["recno"]    },
           := {
     0 //Para incluir um        "recnoInspection": 134,
    novo resultado
    
    	aAdd(oBody['items'], oNumeric)
    
    
    	oText := JsonObject():New()
    	oText["recnoInspection"] := 134
    	oText["recnoTest"]       := 14
    	oText["measurementDate"] := "2022-08-09"
    	oText["measurementTime"] := "recnoTest": 14,
      11:31"
    	oText["rehearserID"]         := "measurementDate": "2022-08-09",
    001"
    	oText["rehearser"]       := "NOME DO   "measurementTime": "11:31",
    ENSAIADOR"
    	oText["testType"]           := "rehearserID": "001",
       T"
    	oText["measurements"]    := nil
    	oText["textStatus"]       :=  "rehearser": "NOME DO ENSAIADOR",
    A"
    	oText["textDetail"]      := "BOA"
    	oText["protheusLogin"]    := "testType": "T",
    ADMINISTRADOR"
    	oText["recno"]           := "measurements": [],
    336
    	//oText["recno"]            "textStatus": "A",
    :=  0 //Para incluir um novo resultado
    
    	aAdd(oBody['items'], oText)
    	cBody := oBody:toJson()
    
    	oRestClient := "textDetail": "BOA",
    FWRest():New("http://localhost:5050/rest")	
    	oRestClient:SetPath("/processinspectiontestresults/api/qip/v1/save")
    	oRestClient:SetPostParams(cBody)            "protheusLogin": "ADMINISTRADOR",
    
    	If oRestClient:Post(aHeaderWS)
            Conout(oRestClient:GetResult())
        "recno": 336
      Else
          }]
    }
    Card
    idExemplos de Código: REST Client em ADVPL
    labelExemplos de Código: REST Client em ADVPL
    titleExemplos de Código: REST Client em ADVPL
    1. Build, RPO e LIB atualizados para versão mais recente no release 12.1.33;
    2. Servidor REST habilitado no AppServer do ambiente;
    3. Contrato TOTVS I ou Mobile*** (revisar);
    4. Host configurado no Mingle;
    5. Versão mais recente do APP Minha Produção instalada no dispositivo;

    04. DEMAIS INFORMAÇÕES

    Não se aplica.
      Conout(oRestClient:GetLastError())
        EndIf
    	
    Return
    
    

    05. ASSUNTOS RELACIONADOS