Á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-4377

02. SITUAÇÃO/REQUISITO

Continuidade no desenvolvimento do projeto de Inspeção de Processos Mobile, requisito encerramento da inspeção via Laudos.

03. SOLUÇÃO

Projeto em desenvolvimento.

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;
  4. Host configurado no Mingle;
  5. Versão mais recente do APP Minha Produção instalada no dispositivo (Em processo de desenvolvimento);.
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 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.




Informações
titlePré-Requisitos Uso de API's
  1. Configuração do servidor REST no ambiente, seguir instruções da documentação oficial: Configuração do REST do Protheus;
  2. 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.
  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_3
labelEm desenvolvimento.
titleEm desenvolvimento.


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.

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

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";

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;

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
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"]           :=  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

05. ASSUNTOS RELACIONADOS