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 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 REST.
- Configuração do servidor REST no ambiente, seguir instruções da documentação oficial: Configuração do REST do Protheus;
- Atualização do RPO com versão da expedição contínua igual ou superior a XX/XX/2022 - Pacotes de Atualização - QIP - P12.
- Utilização dos métodos GET e POST conforme especificação padrão "TOTVS - RESTFul API" e exemplos a seguir;
|
A seguir são listadas as API's disponibilizadas, detalhamentos de seus endpoints e mapa de campos relacionados. |
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. ;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 |
|
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"; 
{
"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
} |
|
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; 
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")

{
"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
}]
} |
{
"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
} |
|
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: #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
|
|
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: #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"] := 335 //Para editar um resultado
//oNumeric["recno"] := 0 //Para incluir um novo resultado
aAdd(oBody['items'], oNumeric)
oText := JsonObject():New()
oText["recnoInspection"] := 134
oText["recnoTest"] := 14
oText["measurementDate"] := "2022-08-09"
oText["measurementTime"] := "11:31"
oText["rehearserID"] := "001"
oText["rehearser"] := "NOME DO ENSAIADOR"
oText["testType"] := "T"
oText["measurements"] := nil
oText["textStatus"] := "A"
oText["textDetail"] := "BOA"
oText["protheusLogin"] := "ADMINISTRADOR"
oText["recno"] := 336
//oText["recno"] := 0 //Para incluir um novo resultado
aAdd(oBody['items'], oText)
cBody := oBody:toJson()
oRestClient := FWRest():New("http://localhost:5050/rest")
oRestClient:SetPath("/processinspectiontestresults/api/qip/v1/save")
oRestClient:SetPostParams(cBody)
If oRestClient:Post(aHeaderWS)
Conout(oRestClient:GetResult())
Else
Conout(oRestClient:GetLastError())
EndIf
Return
|
|
|
|