Passo a passo: | A integração entre o Protheus e Quirons ocorre para envio/recebimento de dados, como: - Funcionários - Centro de Custo - Abonos - Funções - Tipos de Estabilidade - Afastamentos/Ausências - Insalubridade e Periculosidade, e etc.
Importante destacar que existem dados que são enviados do Protheus para o Quirons, e outros que são consumidos diretamente pelo Quirons, ou seja, o usuário não fará o envio via Protheus, ele consegue coletar os dados necessários diretamente no Quirons.
As informações enviadas do Protheus para o Quirons, estarão presentes em uma tabela chamada RJP, e os dados integrados (com falha ou sucesso), podem ser consultados na rotina de Monitor de Integração. Os dados consumidos diretamente pelo Quirons não transitam nesta tabela do Protheus, e consequentemente não conseguimos consultá-los no Monitor de Integração, nestes casos, se houver falha no processo, o usuário consegue consultar o status diretamente no Quirons.
Os dados que são enviados através do Protheus, seja de forma manual via rotina de Carga Inicial OU através do Schedule, são: • Cadastro de Pessoas, conhecido também por Cadastro de Participantes - tabela RD0 • Cadastro de Funcionários - tabela SRA • Histórico Funcional/Alterações Salariais - tabela SR7 • Cadastro de Dependentes - tabela SRB • Histórico Funcional/Transferências - tabela SRE • Treinamentos - tabela RA4 • Cadastro de Departamentos - tabela SQB • Cadastro de Cargos - tabela SQ3 • Candidatos/Currículos - tabela SQG
Os dados que são consumidos diretamente por uma rotina no Quirons, são: • Tipos de Abono - tabela SP6 • Centro de Custo - tabela CTT • Turno de Trabalho - tabela SR6 • Cadastro de Funções - tabela SRJ • Tipos de Ausência - tabela RCM • Tipos de Estabilidade - tabela RCC • Tipos de Treinamento - tabela RA2 • Insalubridade e Periculosidade - tabelas SRA e RCE • Estabilidade Funcional - tabelas SRA e SR8 • Marcações - tabela SP8 • Necessidade de Treinamento - tabela RA3 • Afastamentos/Ausências - tabela SR8 Deck of Cards |
---|
| Card |
---|
label | 1. Configurando o Rest |
---|
| A integração entre o Protheus e Quirons acontece através de arquivos JSON, que são movimentados através de um serviço de REST, que precisa estar devidamente configurado e no ar. (Ajuda: O que é o arquivo JSON?) Para configuração do serviço REST, pode ser seguida esta documentação: Configuração do serviço REST Outra opção mais rápida, seria a configuração do serviço REST diretamente no arquivo appserver.ini do seu ambiente. Para isso, pode ser seguido este exemplo de configuração de REST.
Caso não consiga configurar com a documentação acima, veja o vídeo a seguir: | Card |
---|
label | 2. Habilitando os campos de Log de Auditoria |
---|
| É necessária a criação dos campos de Log de Auditoria chamados _USERLGI e _USERLGA nas tabelas abaixo, para que no momento que o Quirons for fazer o consumo de novos dados ou registros alterados, seja possível que ele valide o que de fato deve ou não ser consumido: • SP6 - Tipos de Abono • CTT - Centro de Custo • SR6 - Turno de Trabalho • SRJ - Funções • RCM - Tipos de Ausência • RCC - Tipos de Estabilidade • RA2 - Tipos de Treinamento É possível fazer o processo seguindo a documentação oficial do Framework: https://tdn.totvs.com/display/public/framework/Rotinas+de+Logs+e+Auditoria Para isso, acesse o Configurador - Base de Dados - Dicionário - Base de Dados - busque pela primeira tabela, neste exemplo, vamos usar a SRJ. Clique em Editar - no menu à esquerda, escolha a opção Campos e na sequência, clique na opção Campos Reservados e selecione as opções Log de Inclusão e Log de Alteração e confirme os ajustes. Importante que você esteja em acesso exclusivo no momento da criação dos campos. Caso não consiga fazer a inclusão dos campos, veja este vídeo: Card |
---|
label | 3. Criação dos Menus |
---|
| Para que seja possível a integração de dados do Protheus para o Quirons, bem como cadastro de usuário, senha e acesso à rotina de Monitor de Integração que possibilita que o usuário confira se o dado foi ou não integrado corretamente, será necessária a inclusão de três rotinas no menu do SIGAGPE através do Configurador, que são: • Carga Inicial - GPEM925 • Parâmetros - GPEM926 • Monitor - GPEM924 Para inclusão das rotinas no menu, é necessário acesso em modo exclusivo. Com isso, acesse o Configurador - Ambiente - Cadastro - Menus - selecione o módulo Gestão de Pessoal e Confirme: Posicione na primeira opção com o nome do módulo SIGAGPE e clique na opção Adicionar para que todos os menus existentes fiquem no painel à direita da nossa tela conforme exemplo: Os três novos menus podem ser adicionados em qualquer menu que já existe, mas também é possível criar um novo sub menu. No exemplo abaixo, decidi incluir um novo sub menu dentro do menu Atualizações. Para isso, posiciono no menu Atualizações e clico na opção Novo Grupo. Inseri como exemplo, o nome Quirons e com isso, o sub menu já fica visível para que consigamos incluir as rotinas. As rotinas devem ser incluídas com o nome de sua preferência, sendo importante apenas se atentar ao informar o nome do Programa (o fonte da rotina que está sendo incluída), Módulo que será o Gestão de Pessoal e Tipo que será Função Protheus, conforme este exemplo. Após finalizar as três inclusões, elas deverão aparecer no novo sub menu. Para confirmar os ajustes, basta clicar em Gerar - informar SIGAGPE e Gerar novamente. Caso não tenha conseguido incluir os menus, veja este vídeo: Card |
---|
label | 4. Parâmetro envolvido na integração |
---|
| Para habilitar a integração no Protheus, é necessário configurarmos o parâmetro MV_RHNG com conteúdo .T. Image Removed
Card |
---|
label | 2. Configurando o Postman |
---|
| O Postman é uma ferramenta de mercado, onde conseguimos simular o envio de arquivos XML/JSON na integração via Mensagem Única (EAI), simulando integrações com o Protheus, ou seja, ao invés de termos que instalar o outro sistema e aprender como fazer o processo nele, usamos o Postman para simular os testes e validações necessárias. Link para baixar o Postman: https://www.postman.com/downloads/ Veja detalhes sobre o uso e a configuração do Postman neste vídeo: Dica |
---|
| - A API RESTful é uma interface que dois sistemas usam para trocar informações de forma segura pela internet.
- Os Métodos existentes em uma API são como as ações que esta API permite que sejam realizadas através dela:
- DELETE: Método específico para remoção de dados, ou seja, permite deletar dados através da API;
- GET: Método para uma requisição que busca dados, ou seja, ele é usado para consultar dados através da API, não altera informações, apenas as carrega;
- POST: Método para uma requisição que envia dados, ou seja, é usado para inserir informações através da API;
- PUT: Método para atualização de dados, pode ser utilizado quando se deseja atualizar uma informação já existente.
|
|
Card |
---|
label | 03. Informações Complementares |
---|
| Nesta guia, gostaria de passar informações importantes do processo de integração que podem te ajudar na análise das ocorrências e na configuração das integrações: |
Card |
---|
| label | 04. Testando o Recebimento |
---|
| Vamos chamar aqui de Recebimento as mensagens que são enviadas do Quirons para o Protheus. Precisamos seguir uma sequencia para podermos realizar as integrações: Deck of Cards |
---|
id | Recebimento de Mensagens |
---|
| Card |
---|
label | 1. Unidade de Medida |
---|
| Para que possamos realizar a integração do Produto e, posteriormente, das requisições e movimentações dele, é preciso termos integrado a Unidade de Medida. O adapter da Unidade de Medida é o "UNITOFMEASURE" (QIEA030). Abaixo temos o exemplo do Json e as Tags mais importantes:
Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"ProductVersion":"12",
"BranchId":"01",
"Type":"BusinessMessage",
"ProductName":"PROTHEUS",
"BusinessUnit":"",
"DeliveryType":"sync",
"Transaction":"UNITOFMEASURE",
"StandardVersion":"1.000",
"Version":"2.002",
"UUID":"99b01fde-72a2-4c27-afbc-fe64e6afe94e",
"SubType":"event",
"Enterprise":"",
"Event":"upsert",
"CompanyId":"99",
"GeneratedOn":"2022-04-20T13:27:56Z",
"SourceApplication":"QUIRONS"
},
"Content":{
"Code":"Q5",
"ShortName":"UNIDADE M",
"InternalId":"99|01|Q5",
"Description":"UNIDADE QUIRONS"
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | Code | Código da Unidade de Medida (AH_UNIMED) | ShortName | Nome da Unidade de Medida (AH_UMRES) | InternalId | Id de identificação do Registro (XXF_EXTVAL) | Description | Descrição em Português da Unidad de Medida (AH_DESCPO) | Agora vamos testar a integração da Unidade de Medida: Unidade de Medida | "UNITOFMEASURE" (QIEA030) Card |
---|
| Outro cadastro básico necessário para a integração é o do local de estoque (Armazém). O adapter do Armazém é o "WAREHOUSE" (AGRA045). Abaixo temos o exemplo do Json e as Tags mais importantes: Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"ProductVersion":"12",
"BranchId":"01",
"Type":"BusinessMessage",
"ProductName":"PROTHEUS",
"BusinessUnit":"",
"DeliveryType":"sync",
"Transaction":"WAREHOUSE",
"StandardVersion":"1.000",
"Version":"1.000",
"UUID":"4848af38-5962-d1c1-faeb-cfad85908058",
"SubType":"event",
"Enterprise":"",
"Event":"upsert",
"CompanyId":"99",
"GeneratedOn":"2022-04-20T13:44:20Z",
"SourceApplication":"QUIRONS"
},
"Content":{
"BranchId":"01",
"Code":"33",
"Active":"true",
"Type":"1",
"Purpose":1,
"WarehouseClassification":"3",
"Event":"upsert",
"InternalId":"99|01|33",
"WorkCenterCode":" ",
"CompanyId":"99",
"StandardWarehouse":2,
"Entity":"WAREHOUSE",
"CompanyinternalId":"99|01",
"Description":"QUIRONS"
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | Code | Código do Armazém (NNR_CODIGO) | Type | Tipo do Armazém (NNR_TIPO) | InternalId | Id de identificação do Registro (XXF_EXTVAL) | Description | Descrição do Armazém (NNR_DESCRI) | Agora vamos testar a integração do Local de Estoque (Armazém): Local de Estoque | "WAREHOUSE" (AGRA045) Card |
---|
| Vamos agora para o cadastro principal necessário para a integração que é o Cadastro de Produto (MATA010). O adapter do Cadastro de Produto é o "ITEM" (MATA010). Abaixo temos o exemplo do Json e as Tags mais importantes: Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"BusinessUnit":"",
"ProductName":"PROTHEUS",
"Transaction":"ITEM",
"Version":"4.005",
"UUID":"989bd96b-e333-0b74-f6da-2ac8d4c7f625",
"Event":"upsert",
"CompanyId":"99",
"GeneratedOn":"2022-04-20T13:49:25Z",
"BranchId":"01",
"DeliveryType":"sync",
"Type":"BusinessMessage",
"CompanySharingMode":"",
"BusinessUnitySharingMode":"",
"StandardVersion":"1.000",
"BranchSharingMode":"",
"SubType":"event",
"Enterprise":"",
"SourceApplication":"QUIRONS",
"ProductVersion":"12"
},
"Content":{
"ItemStatus":"2",
"StandardWarehouseInternalId":"99|01|33",
"ItemTitle":" ",
"ItemWidth":"0",
"CompanyId":"99",
"UnitOfMeasureCode":"Q5",
"Code":"QUIRONS01",
"FiscalInformation":{
"CsllAliquot":"0",
"IrrfIncidence":"false",
"IssServiceCode":" ",
"PisRetaining":"false",
"CsllRetaining":"false",
"PisAliquot":"0",
"CofinsAliquot":"0",
"TaxSubstitutionCode":" ",
"CofinsRetaining":"false",
"IssAliquot":"0",
"MunicipalTaxCod":" "
},
"ItemLenght":"0",
"EconomicLot":"0",
"Name":"PRODUTO QUIRONS 01",
"MinimumLot":"0",
"ManufacturerCode":" ",
"ItemHeight":"0",
"NetWeight":"0",
"Values":{
"CostPrice":"0",
"SalesPrice":"0",
"AverageCostPrice":"0",
"StandardCostPrice":"0"
},
"Brand":"",
"ShortName":"PRODUTO QUIRONS 01",
"Active":"1",
"MultiplicationFactorValue":"0",
"CompanyinternalId":"99|01",
"InternalId":"99|01|QUIRONS01",
"ProductType":"10",
"GrossWeight":"0",
"ItemFeaturesTechnical":"",
"ItemDescription":"",
"ItemDimensions":"0",
"BranchId":"01",
"UnitOfMeasureInternalId":"99|01|Q5",
"StandardWarehouseDescription":"QUIRONS",
"TypeUMConversion":[
{
"type":"M",
"Description":"Multiplicador"
}
],
"StandardWarehouseCode":"33",
"Trail":"N",
"BinControl":"False",
"Origin":""
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | StandardWarehouseInternalId | Id externo do Armazém (XXF_EXTVAL) a ser preenchido no Produto (B1_LOCPAD) | StandardWarehouseDescription | Descriação do Armazém | StandardWarehouseCode | Código do Armazém | UnitOfMeasureCode | Código da Unidadde de Medida | UnitOfMeasureInternalId | Id externo da Unidade de Medida (XXF_EXTVAL) a ser preenchida no Produto (B1_UM) | Code | Código do Produto (B1_COD) | Name / ShortName | Descrição do Produto | InternalId | Internal Id do Produto | Agora vamos testar a integração do Cadastro do Produto: Cadastro do Produto | "ITEM" (MATA010) Card |
---|
label | 4. Requisição de Armazém |
---|
| Agora vamos para para nossa primeira movimentação na integração que é a Requisição ao Armazém (MATA105) O adapter da Requisição é o "REQUEST" (MATA105). Abaixo temos o exemplo do Json e as Tags mais importantes: Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"BranchId":"01",
"CompanyId":"99",
"DeliveryType":"Sync",
"Event":"upsert",
"GeneratedOn":"2022-04-20T11:37:53Z",
"ProductName":"PROTHEUS",
"ProductVersion":"1.0.0",
"SourceApplication":"QUIRONS",
"StandardVersion":"1.000",
"Type":"BusinessMessage",
"SubType":"event",
"UUID":"4d5f50b0-b423-11ec-9191-33b31221ae01",
"BranchSharingMode":"",
"BusinessUnitySharingMode":"",
"CompanySharingMode":"",
"Version":"1.009",
"Transaction":"REQUEST"
},
"Content":{
"Code":"",
"InternalId":"4d4cda20-b423-11ec-9191-33b17223ae01",
"CompanyId":"99",
"BranchId":"01",
"Number":"",
"RegisterDateTime":"2022-04-20T11:37:53Z",
"CompanyInternalId":"99|01",
"DeliveryDateTime":"2022-04-20T11:37:53Z",
"UserRequesterCode":"[email protected]",
"UserRequesterInternalId":"Estoque",
"Type":"001",
"ListOfRequestItem":[
{
"Event":"upsert",
"CostCenterCode":"01",
"Code":"01",
"InternalId":"4d1ace18-b423-11ec-b337-d3c1947b8001",
"DeliveryDateTime":"2022-04-20T11:37:53Z",
"ItemInternalid":"99|01|QUIRONS01",
"Quantity":"1",
"TotalPrice":"1",
"UnitPrice":"1",
"UnitOfMeasureInternalId":"99|01|Q5",
"WarehouseInternalId":"99|01|33",
"Observation":"Lorem ipsum dolor sit amet"
},
{
"Event":"upsert",
"CostCenterCode":"02",
"Code":"02",
"InternalId":"4d1e28f6-b423-11ec-b337-c18a880fb401",
"DeliveryDateTime":"2022-04-20T11:37:53Z",
"ItemInternalid":"99|01|QUIRONS01",
"Quantity":"1",
"TotalPrice":"1",
"UnitPrice":"1",
"UnitOfMeasureInternalId":"99|01|Q5",
"WarehouseInternalId":"99|01|33",
"Observation":"Lorem ipsum dolor sit amet"
}
]
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | Content > InternalId | Id externo da Solicitação (XXF_EXTVAL) que fará o De/Para com o campo CP_NUM | UserRequesterCode | Usuário que realizou a requisição (CP_SOLICIT) | UserRequesterInternalId | Id interno do Solicitante, o sistema vai absorver o código do usuário que está acessando o Rest (CP_CODSOLI) | CostCenterCode | Código do Centro de Custo (CP_CC) | CostCenterCode > InternalId | Id externo do Centro de Custo (XXF_EXTVAL) que fará o De/Para com o campo CP_CC | ItemInternalid | Id externo do Cadastro do Produto (XXF_EXTVAL) que fará o De/Para com o campo CP_PRODUTO | UnitOfMeasureInternalId | Id externo da Unidade de Medida (XXF_EXTVAL) a ser preenchida na Requisição (CP_UM) | WarehouseInternalId | Id externo do Armazém (XXF_EXTVAL) a ser preenchido na Requisição (CP_LOCAL) | Observation | Observação a ser preenchida no campo CP_OBS | Agora vamos testar a integração da Requisição ao Armazém: Requisição ao Armazém | "REQUEST" (MATA105) Card |
---|
label | 5. Movimentação Interna |
---|
| Vamos agora para a nossa próxima movimentação na integração que é a Movimentação Interna (MATA241) O adapter da Movimentação é o "STOCKTURNOVER" (MATA241). Abaixo temos o exemplo do Json e as Tags mais importantes: Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"ProductVersion":"12",
"BranchId":"01",
"Type":"BusinessMessage",
"ProductName":"PROTHEUS",
"BusinessUnit":"",
"DeliveryType":"sync",
"Transaction":"STOCKTURNOVER",
"StandardVersion":"1.000",
"Version":"1.000",
"UUID":"63f4edf9-2f90-9e14-dc40-a05f25109e03",
"SubType":"event",
"Enterprise":"",
"Event":"upsert",
"CompanyId":"99",
"GeneratedOn":"2022-04-20T14:52:06Z",
"SourceApplication":"QUIRONS"
},
"Content":{
"Number":"",
"Series":" ",
"BranchId":"01",
"Code":"TESTE00",
"Type":"S",
"MovementTypeCode":"599",
"DocumentType":"R",
"ListOfStockTurnoverItem":[
{
"NumberSeries":"",
"ItemReferenceCode":"QUIRONS01",
"UnitPrice":1,
"LotExpirationDate":"",
"InternalId":"99|01|TESTE00|107528",
"ItemInternalId":"99|01|QUIRONS01",
"UnitOfMeasureCode":"Q5",
"ProjectInternalId":"",
"WarehouseCode":"33",
"RequestItemInternalId":"99|01|PMS119|01|20220420",
"CostCenterCode":"01",
"Observation":"",
"LotOrSerialNumber":"",
"UnitOfMeasureInternalId":"99|01|Q5",
"Code":"TESTE00",
"ItemCode":"QUIRONS01",
"WarehouseInternalId":"99|01|33",
"DeliveryDateTime":"2022-04-20",
"CostCenterInternalId":"4d1ace18-b423-11ec-b337-d3c1947b8001",
"AccountantAcountInternalId":"",
"BinLocation":"",
"TaskInternalId":"",
"EmissionDate":"2022-04-20",
"TotalPrice":1,
"Quantity":1,
"TotalStock":100
},
{
"NumberSeries":"",
"ItemReferenceCode":"QUIRONS02",
"UnitPrice":1,
"LotExpirationDate":"",
"InternalId":"99|01|TESTE00|107529",
"ItemInternalId":"99|01|QUIRONS02",
"UnitOfMeasureCode":"M2",
"ProjectInternalId":"",
"WarehouseCode":"38",
"RequestItemInternalId":"99|01|PMS119|02|20220420",
"CostCenterCode":"02",
"Observation":"",
"LotOrSerialNumber":"",
"UnitOfMeasureInternalId":"99|01|M2",
"Code":"TESTE00",
"ItemCode":"QUIRONS02",
"WarehouseInternalId":"99|01|38",
"DeliveryDateTime":"2022-04-20",
"CostCenterInternalId":"99|01|02",
"AccountantAcountInternalId":"",
"BinLocation":"",
"TaskInternalId":"",
"EmissionDate":"2022-04-20",
"TotalPrice":1,
"Quantity":1,
"TotalStock":100
}
],
"DeliveryDateTime":"2022-04-20",
"InternalId":"99|01|TESTE00|107528",
"CompanyId":"99",
"RegisterDateTime":"2022-04-20",
"CompanyInternalId":"99|01",
"AbatementDateTime":"2022-04-20"
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | CostCenterCode | Código do Centro de Custo (D3_CC) | CostCenterInternalId | Id externo do Centro de Custo (XXF_EXTVAL) que fará o De/Para com o campo D3_CC | ItemInternalid | Id externo do Cadastro do Produto (XXF_EXTVAL) que fará o De/Para com o campo D3_COD | UnitOfMeasureInternalId | Id externo da Unidade de Medida (XXF_EXTVAL) a ser preenchida na Movimentação (D3_UM) | WarehouseInternalId | Id externo do Armazém (XXF_EXTVAL) a ser preenchido na Movimentação (D3_LOCAL) | Agora vamos testar a integração da Movimentação Interna: Movimentação Interna | "STOCKTURNOVER" (MATA241) Card |
---|
| Vamos agora para a rotina de Saldo Atual (MATA225) O adapter da Movimentação é o "STOCKLEVEL" (MATA225). Abaixo temos o exemplo do Json e as Tags mais importantes: Expandir |
---|
| Bloco de código |
---|
| {
"Header":{
"ProductVersion":"12",
"BranchId":"01",
"Type":"BusinessMessage",
"ProductName":"PROTHEUS",
"BusinessUnit":"",
"DeliveryType":"sync",
"Transaction":"STOCKLEVEL",
"StandardVersion":"1.000",
"Version":"3.004",
"UUID":"48997d98-0480-0109-f17e-1fc7d8c844b0",
"SubType":"event",
"Enterprise":"",
"Event":"upsert",
"CompanyId":"99",
"GeneratedOn":"2022-04-20T14:35:21Z",
"SourceApplication":"QUIRONS"
},
"Content":{
"BranchId":"01",
"Active":"true",
"ListOfReturnItem":[
{
"CurrentStockAmount":"98",
"ReserveSource":" ",
"FutureStockAmount":"0",
"ValueOfCurrentStockAmount":"98",
"ListOfAddressStock":{
},
"CompanyId":"99",
"ItemInternalId":"99|01|QUIRONS01",
"AvailableStockAmount":"98",
"BookedStockAmount":"0",
"Amountcommittedstock":"0",
"UnitItemCost":"1",
"UnitOfMeasureInternalId":"99|01|Q5",
"BranchId":"01",
"TransitStockAmount":"0",
"CompanyInternalId":"99|01",
"AverageUnitItemCost":"98",
"SalesOrderQuantity":"0",
"ListOfWarehouseStock":[
{
"WarehouseInternalId":"99|01|33",
"CurrentStockAmount":"98",
"TransitStockAmount":"0",
"FutureStockAmount":"0",
"UnitItemCost":"1",
"ValueOfCurrentStockAmount":"98",
"AvailableStockAmount":"98",
"BookedStockAmount":"0",
"AverageUnitItemCost":"98",
"SalesOrderQuantity":"0",
"Amountcommittedstock":"0"
}
],
"ListOfLotStock":{
},
"ListOfSeriesStock":{
}
}
],
"Event":"upsert",
"CompanyId":"99",
"CompanyinternalId":"99|01",
"Entity":"StockLevel"
}
} |
|
Expandir |
---|
| Tag | Descrição |
---|
BranchId | Filial do Protheus | DeliveryType | Tipo de Sincronização da Mensagem | Transaction | Nome da Mensagem que está enviando | StandardVersion | Versão do Adapter que está utilizando | UUID | ID único da mensagem | Event | Tipo de Evento, sendo que na inclusão de um registro será "upsert" | CompanyId | Código da Empresa do Protheus. Ex: "99" ou "01" | GeneratedOn | Data que será gravada como inclusão do registro | SourceApplication | Nome da aplicação a ser gravada no De/Para | CurrentStockAmount | B2_QATU | FutureStockAmount | B2_QACLASS | ValueOfCurrentStockAmount | B2_VATU1 | ListOfAddressStock | Lista dos endereços dos produtos (Caso utilize Endereçamento) | AvailableStockAmount | Estoque Disponível | BookedStockAmount | B2_RESERVA | Amountcommittedstock | B2_QEMP | UnitItemCost | B2_CM1 | AverageUnitItemCost | B2_VATU1 | SalesOrderQuantity | B2_QPEDVEN | Com base no exemplo de REST listado acima, para conferir se ele está ativo e no ar, você deve abrir o seu Appserver do Protheus e deverá aparecer no console os dados do REST. Após esta conferência, para acessar o seu REST e conferir a lista de APIs disponíveis, é necessário acessar o endereço web com os dados: localhost: o número da sua porta informada na sessão HTTPREST no appserver.ini /REST. Com base no nosso exemplo, o endereço de acesso ficaria http://localhost:8085/REST. Será pedido o usuário e senha para acesso, você deve informar os dados de acesso usados para login no Protheus e ao acessar, já terá acesso à listagem de APIs disponíveis.
Caso não consiga configurar com a documentação acima, veja o vídeo a seguir: Como configurar o REST
|
Card |
---|
label | 2. Habilitando os campos de Log de Auditoria |
---|
| É necessária a criação dos campos de Log de Auditoria chamados _USERLGI e _USERLGA nas tabelas abaixo, para que no momento que o Quirons for fazer o consumo de novos dados ou registros alterados, seja possível que ele valide o que de fato deve ou não ser consumido: • SP6 - Tipos de Abono • CTT - Centro de Custo • SR6 - Turno de Trabalho • SRJ - Funções • RCM - Tipos de Ausência • RCC - Tipos de Estabilidade • RA2 - Tipos de Treinamento
É possível fazer o processo seguindo a documentação oficial do Framework: https://tdn.totvs.com/display/public/framework/Rotinas+de+Logs+e+Auditoria
Para isso, acesse o Configurador - Base de Dados - Dicionário - Base de Dados - busque pela primeira tabela, neste exemplo, vamos usar a SRJ. Clique em Editar - no menu à esquerda, escolha a opção Campos e na sequência, clique na opção Campos Reservados e selecione as opções Log de Inclusão e Log de Alteração e confirme os ajustes.
Importante que você esteja em acesso exclusivo no momento da criação dos campos.
Caso não consiga fazer a inclusão dos campos, veja este vídeo: Como incluir os campos de Log de Auditoria |
Card |
---|
label | 3. Criação dos Menus |
---|
| Para que seja possível a integração de dados do Protheus para o Quirons, bem como cadastro de usuário, senha e acesso à rotina de Monitor de Integração que possibilita que o usuário confira se o dado foi ou não integrado corretamente, será necessária a inclusão de três rotinas no menu do SIGAGPE através do Configurador, que são: • Carga Inicial - GPEM925 • Parâmetros - GPEM926 • Monitor - GPEM924
Para inclusão das rotinas no menu, é necessário acesso em modo exclusivo. Com isso, acesse o Configurador - Ambiente - Cadastro - Menus - selecione o módulo Gestão de Pessoal e Confirme:
Posicione na primeira opção com o nome do módulo SIGAGPE e clique na opção Adicionar para que todos os menus existentes fiquem no painel à direita da nossa tela conforme exemplo:
Os três novos menus podem ser adicionados em qualquer menu que já existe, mas também é possível criar um novo sub menu. No exemplo abaixo, decidi incluir um novo sub menu dentro do menu Atualizações. Para isso, posiciono no menu Atualizações e clico na opção Novo Grupo. Inseri como exemplo, o nome Quirons e com isso, o sub menu já fica visível para que consigamos incluir as rotinas.
As rotinas devem ser incluídas com o nome de sua preferência, sendo importante apenas se atentar ao informar o nome do Programa (o fonte da rotina que está sendo incluída), Módulo que será o Gestão de Pessoal e Tipo que será Função Protheus, conforme este exemplo.
Após finalizar as três inclusões, elas deverão aparecer no novo sub menu. Para confirmar os ajustes, basta clicar em Gerar - informar SIGAGPE e Gerar novamente.
Caso não tenha conseguido incluir os menus, veja este vídeo: Incluindo Menus |
Card |
---|
label | 4. Parâmetro envolvido na integração |
---|
| Para habilitar a integração no Protheus, é necessário configurarmos o parâmetro MV_RHNG com conteúdo .T. |
Card |
---|
label | 5. Configurando nossa URL para simular o envio do Protheus para Quirons |
---|
| Como não temos um ambiente Quirons para receber os dados, vamos utilizar a ferramenta Webhook para simular o Quirons, através do endereço https://webhook.site/#!/view
Ao acessar o Webhook, será gerada uma URL única, e ela será usada nos cadastros do Protheus.
No SIGAGPE, vamos acessar a rotina de Parâmetros que criamos no passo 3, e faremos o preenchimento desta forma: • URI = nossa URL única gerada no Webhook • Usuário e Senha = você pode informar seu email e qualquer senha, pois como estamos usando o Webhook, estes dados não serão validados efetivamente. |
Card |
---|
label | 6. Cadastro do Schedule |
---|
| A última etapa cadastral, se trata do Schedule da rotina GPEM923, para que os dados enviados através da nossa rotina de Carga Inicial, sejam gravados na tabela RJP, e com isso, o Schedule envie os dados da RJP para o Quirons através do nosso arquivo JSON.
Para cadastrar o Schedule, será necessário acessar o Configurador - Ambiente - Schedule - Schedule. Devemos inicialmente cadastrar um Agent na opção de mesmo nome, levando em consideração: • IP = como faremos apenas testes em ambiente interno, podemos informar localhost • Porta = se trata da nossa porta TCP, contida no arquivo appserver.ini do nosso ambiente
Após o cadastro, nosso Agent deve ficar com status Habilitado para o correto funcionamento. OBS: cadastre o Agent vinculado ao Grupo de Empresas em que a integração foi toda configurada.
Por fim, vamos cadastrar o Job da rotina GPEM923, que será a responsável pelo envio dos dados da tabela RJP para o Quirons. • Para isso, vamos na opção Agendamentos e faremos a inclusão com a rotina GPEM923 • Na primeira parte do cadastro, informaremos a recorrência, ou seja, de quanto em quanto tempo queremos que o Job seja executado. Neste exemplo, estamos deixando como Sempre Ativo, ou seja, o Job sempre fará buscas na tabela por qualquer dado novo gravado, para que o envio ao Quirons seja feito em tempo real, porém, o cliente pode definir isso da melhor forma pra ele • Na segunda parte do cadastro, informaremos os dados do Grupo de Empresa, Filial e Módulo • Por fim, vamos conferir nosso cadastro para Concluir.
Após o cadastro, o Job aparecerá com status Habilitado.
Caso tenha dificuldade no cadastro de Agent e Job, veja este vídeo: Configuração do Schedule
|
Card |
---|
label | 7. Integrando dados do Protheus para o Quirons |
---|
| Com todos os cadastros necessários, estamos prontos para fazer nossa integração funcionar \õ/
No Protheus, vamos acessar a rotina de Carga Inicial e vamos selecionar os dados que queremos integrar para o Quirons.
Após a confirmação de execução da rotina, ao consultar nossa tabela RJP, teremos o dado gravado corretamente, o que significa que podemos conferir o status do envio através da rotina de Monitor de Integração - GPEM924. Para isso, basta buscar o registro que tentamos integrar e clicar em Visualizar.
No Webhook, assim que o Job do Schedule processar o envio, podemos conferir a estrutura do arquivo JSON com os dados integrados.
Caso tenha dúvidas sobre o processo, veja este vídeo: Integrando Protheus x Quirons |
Card |
---|
| O Postman é uma ferramenta de mercado, onde conseguimos simular o envio de arquivos XML/JSON na integração via Mensagem Única (EAI), simulando integrações com o Protheus, ou seja, ao invés de termos que instalar o outro sistema e aprender como fazer o processo nele, usamos o Postman para simular os testes e validações necessárias. Link para baixar o Postman: https://www.postman.com/downloads/ Cabe ressaltar que usaremos o Postman apenas nos casos onde precisamos simular o consumo de dados no Quirons, por exemplo, se precisamos consumir os dados de um novo Centro de Custo cadastrado. Dica |
---|
| - A API RESTful é uma interface que dois sistemas usam para trocar informações de forma segura pela internet.
- Os Métodos existentes em uma API são como as ações que esta API permite que sejam realizadas através dela:
- DELETE: Método específico para remoção de dados, ou seja, permite deletar dados através da API;
- GET: Método para uma requisição que busca dados, ou seja, ele é usado para consultar dados através da API, não altera informações, apenas as carrega;
- POST: Método para uma requisição que envia dados, ou seja, é usado para inserir informações através da API;
- PUT: Método para atualização de dados, pode ser utilizado quando se deseja atualizar uma informação já existente.
|
|
Card |
---|
label | 9. Fazendo um GET no Postman para simular o consumo de dados no Quirons |
---|
| Neste teste, usaremos o Postman para simular o consumo de dados no Quirons, por exemplo: nos casos onde foi cadastrado um novo Centro de Custo no Protheus, o usuário precisa acessar o Quirons, e através dele fazer o consumo deste dado, para que ele também exista no Quirons. Para isso, usaremos o método GET no Postman e também usaremos esta documentação para sabermos quais parâmetros são chave para que seja feita a requisição dos dados na nossa API.
Simulando o consumo dos dados de um Centro de Custo: • devemos buscar na documentação os parâmetros que serão usados no nosso GET • acessar nosso REST, e procurar pela API informada na documentação, neste caso, a de nome payrollcostcenter. Ao localizá-la, clicar na opção For More Details. Aqui, vamos guardar os dados contidos no GET para usarmos na sequência no Postman • com o Postman aberto, criaremos um novo File e vamos iniciar o preenchimento do nosso GET. Primeiro, vamos informar o endereço do nosso REST + os dados copiados do GET do nosso REST • agora, vamos preencher os parâmetros conforme nossa documentação, informando manualmente um a um e contendo os dados do código de Filial e Grupo de Empresas. Com isso, poderemos ver que a barrinha do nosso GET ficará com todos estes parâmetros também • por fim, vamos clicar na opção Body - deixar marcada a opção None e clicar no Send
Protinho, agora conseguimos visualizar o arquivo JSON contendo os dados do Centro de Custo de código 01, de nome Suporte. Seu teste funcionou certinho =D
Se tiver dúvidas, você pode assistir esse vídeo com o processo: Simulação via Postman x Protheus |
Card |
---|
label | 10. Monitor de Integração |
---|
| Existe a rotina de Monitor de Integração (GPEM924), que possibilita o usuário visualizar os registros que foram integrados com sucesso ou não, e registros pendentes de envio quando o Schedule ainda não foi executado.
A rotina possui legenda para os registros, mas caso queira consultar com mais exatidão, basta dar um Visualizar para conseguir verificar: data/hora de envio, quais registros foram enviados e o status.
É possível ter um histórico das tentativas de integração de um mesmo registro, para isso, é necessário que o parâmetro MV_HISTQUI esteja com conteúdo: → 1 para gravar apenas falhas → 2 para gravar tudo → 0 para nunca gravar
Este parâmetro não é de uso obrigatório, mas caso esteja com conteúdo1 ou 2, os registros serão gravados na tabela RU7. |
|