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 a integração com o processo de inspeção. A seguir, apresentamos um resumo detalhando as APIs e os EndPoint disponibilizados, demonstração de configuração do servidor REST Full 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 Cliente REST.
Informações |
---|
title | Pré-Requisitos Uso de API's |
---|
| - Configuração do servidor REST no ambiente, seguir instruções da documentação oficial: 1. Configuração do REST do Protheus;
- Atualização do RPO com versão da expedição contínua igual ou superior a: DMANQUALI-4478;
- Utilização dos métodos GET e POST conforme especificação padrão "TOTVS - RESTFul API" e exemplos a seguir;
|
Deck of Cards |
---|
history | false |
---|
id | Detalhamento_APIs |
---|
effectType | fade |
---|
| Card |
---|
id | Lista_APIs |
---|
label | Lista de API's e Endpoints Disponíveis |
---|
title | Lista 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 |
---|
history | false |
---|
id | Principais_Campos |
---|
effectType | fade |
---|
| Card |
---|
id | API_1 |
---|
label | Inspeções de Processos por Operação |
---|
title | Inspeçõ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}/{Order}/{OrderType}/{Page}/{PageSize}
- 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;
- 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;
- GET: Pesquisa Inspeção:
- Endpoint: processinspectionsapi/qip/v1/search/{Login}/{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ário:
- Endpoint: processinspectionsapiapi/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ção | Código API | Referência Protheus | Tipo |
---|
Código do Produto | productID | QPK_PRODUT | C | Descrição do Produto | product | B1_DESC | C | Ordem de Produção | productionOrderID | QPK_OP | C | Código da Operação | operationID | QQK_OPERAC | C | Descrição da Operação | operation | QQK_DESCRI | C | Recurso | resource | H1_DESCRI | C | Quantidade | lotSize | QPK_TAMLOT | N | Código Unidade Medida | lotUnitID | QPK_UM | C | Unidade de Medida | lotUnit | AH_DESCPO | C | Lote | lot | QPK_LOTE | C | Número de Série | serialNumber | QPK_NUMSER | C | Data de Emissão | date | QPK_EMISSA | D | Cliente e Loja | customer | A1_COD + A1_LOJA + A1_NOME | C | Versão da Especificação | specificationVersion | QPK_REVI | C | Data da Produção | productionDate | QPK_DTPROD | D | Usuário Permitido | allowedUser | Referência existente de cLogin = QAA_LOGIN → true | L | Status: N = Não Iniciado I = Iniciado A = Aprovado R = Rejeitado U = Liberação Urgente C = Liberação Condicional | status | Regra de Negócio Interna | C | Recno Inspeção | recno | QQK.R_E_C_N_O_ | N |
|
Card |
---|
id | API_2 |
---|
label | Ensaios |
---|
title | Ensaios |
---|
| - 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;
- QueryParam:
- Fields: referência de "Código API" para os campos que devem ser retornados. Default: vazio = todos;
Mapa de Campos Padrões:
Descrição | Código API | Referência Protheus | Tipo |
---|
RECNO Inspeção | recnoInspection | QPK.R_E_C_N_O_ | N | RECNO Ensaio | recnoTest | QP7.R_E_C_N_O_ ou QP8.R_E_C_N_O_ | N | Código do Ensaio | testID | QP7_ENSAIO ou QP8_ENSAIO | C | Sequência do Laboratório | sequence | QP7_SEQLAB ou QP8_SEQLAB | N | Título do Ensaio | title | QP1_DESCPO | C | Quantidade de Medições | numberOfMensurements | QP1_QTDE* | N | Laboratório | laboratory | X5_DESCRI para X5_TABELA = 'Q2' | C | Especificação Resumida | summarySpecification | QP7_NOMINA QP7_LIE / QP7_LSE Ou QP8_TEXTO | C | Código Unidade de Medida | lotUnitID | QP7_UNIMED | C | Tipo de Controle | controlType | QP7_MINMAX | C | Limite Inferior Engenharia | lowerDeviation | QP7_LIE | C | Limite Superior Engenharia | upperDeviation | QP7_LSE | C | Tipo do Ensaio | testType | QP7 → N → Numérico QP8 → T → Texto | C | Status: A = Aprovado R = Reprovado P = Pendente N = Não Obrigatório | status | Regra de Negócio Interna | C |
|
Card |
---|
id | API_3 |
---|
label | Resultados das Inspeções |
---|
title | Resultados 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;
- 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_ (facultativo)
- 0 → incluirá nova amostra;
- informado → editará uma amostra existente;
Mapa de Campos Padrões: Descrição | Código API | Referência Protheus | Tipo |
---|
RECNO Inspeção | recnoInspection | QPK.R_E_C_N_O_ | N | RECNO Ensaio | recnoTest | QP7.R_E_C_N_O_ ou QP8.R_E_C_N_O_ | N | Data da Amostra | measurementDate | QPR_DTMEDI | D | Hora da Amostra | measurementTime | QPR_HRMEDI | H | Código do Ensaiador | rehearserID | QPR_ENSR | C | Ensaiador | rehearser | QAA_NOME | C | Tipo do Ensaio | testType | QP7 → N → Numérico QP8 → T → Texto | C | Array de Medições | measurements | String com array de medições: QPS_MEDICA | C | Status da Amostra: A = Aprovado R = Reprovado | textStatus | QPR_RESULT | C | Justificativa Reprovação | textDetail | QPQ_MEDICA | C | Usuário Protheus | protheusLogin | QAA_LOGIN | C | RECNO Amostra | recno | QPR.R_E_C_N_O_ | N |
|
|
|
Card |
---|
id | AppServer.INI |
---|
label | AppServer.INI |
---|
title | AppServer.INI |
---|
| Segue abaixo demonstração de código para configuração de servidor REST Full no AppServer.ini do servidor de aplicação do ERP TOTVS Protheus: Bloco de código |
---|
language | text |
---|
title | 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 |
---|
id | GET Postman |
---|
label | GET Postman |
---|
title | GET 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";
Bloco de código |
---|
language | text |
---|
title | Exemplo de resposta |
---|
collapse | true |
---|
| {
"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 |
---|
id | POST Postman |
---|
label | POST Postman |
---|
title | POST Postman |
---|
| Segue abaixo demonstração da execução de um método POST via Postman: 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;
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")
Bloco de código |
---|
language | text |
---|
title | Exemplo de conteúdo para Body |
---|
collapse | true |
---|
| {
"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 |
---|
language | text |
---|
title | Exemplo de resposta |
---|
collapse | true |
---|
| {
"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 |
---|
id | Código: GET REST Client em ADVPL |
---|
label | Código: GET REST Client em ADVPL |
---|
title | Có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 |
---|
language | text |
---|
title | Có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 |
---|
id | Código: POST REST Client em ADVPL |
---|
label | Código: POST REST Client em ADVPL |
---|
title | Código: POST REST Client em ADVPL |
---|
| - Build, RPO e LIB atualizados para versão mais recente no release 12.1.33;
- Servidor REST habilitado no AppServer do ambiente;
- Contrato TOTVS I ou Mobile*** (revisar);
- Host configurado no Mingle;
- Versão mais recente do APP Minha Produção instalada no dispositivo;
|
|
|