Histórico da Página
Pré-Requisitos:
Para implantar a integração do envio de reservas do o Mozart no processo de integrações assícronas de Gemco para o Protheus é necessário que as seguintes configurações estejam instaladas corretamente.
- Configuração Base Banco de Dados Gemco
- Configuração Adapter Reserva
- Configuração Mozart
- Instalado
- Sistema operacional devidamente configuradoConfiguração Protheus (Adapter e Schedule)
1 - Detalhes técnico no Gemco
1.1 Configurações de Banco
...
Para implantação do Mozart é necessário a instalação das seguintes tabelas de dados:
criar a tabela MOZART_PEDVENDA
Script :
/****** Object: Table [dbo].[MOZART_PEDVENDA] Script Date: 17/08/2018 14:53:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MOZART_PEDVENDA](
[CODFIL] [numeric](3, 0) NOT NULL,
[TIPOPED] [numeric](1, 0) NOT NULL,
[NUMPEDVEN] [numeric](12, 0) NOT NULL,
[DTHR] [datetime] NULL,
[RESERVA] [numeric](1, 0) NULL,
[RECEBIMENTO] [numeric](1, 0) NULL,
CONSTRAINT [MOZART_PEDVENDA_PK] PRIMARY KEY NONCLUSTERED
(
[CODFIL] ASC,
[TIPOPED] ASC,
[NUMPEDVEN] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
A seguir é necessário criar Triggers nas seguintes tabelas do Gemco MOV_PEDIDO e MOV_ITPED essas triggers são responsáveis em salvar, atualizar e deletar os dados do pedido na tabela MOZART_PEDVENDA.
Scripts.:
/****** Object: Trigger [dbo].[MOZART_PEDVENDA_TR_INS] Script Date: 17/08/2018 18:03:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
...
IF (SELECT COUNT(1) FROM CAD_TPNOTA (NOLOCK) WHERE TPNOTA = @TPNOTA AND TIPO = 'S' AND (TPREM = 'L' OR TPREM = 'D' OR TPREM = 'G') AND (TPDEST = 'L' OR TPDEST = 'D' OR TPDEST = 'G')) > 0 AND @TIPOPED = 2
BEGIN
IF @STATUSNOVO < 5 AND @RESERVA IS NULL --CRIACAO PEDIDO
INSERT INTO MOZART_PEDVENDA (CODFIL, TIPOPED, NUMPEDVEN, DTHR, RESERVA, RECEBIMENTO)
SELECT CODFIL, TIPOPED, NUMPEDVEN, GETDATE(), 0, NULL FROM INSERTED
END
GO
/****** Object: Trigger [dbo].[MOZART_PEDVENDA_TR_UPD] Script Date: 17/08/2018 18:04:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
...
Os scripts das tabelas podem ser encontrados no endereço : http://tfs.bematech.com.br:8080/tfs/spo/Varejo/Gemco/
Seguindo o processo de implantação, os próximos passos de configurações devem ser executados no banco de dados.
Obs.: No momento não é possível configurar o Mozart via interface, apenas via querys no banco de dados. segue abaixo scripts e orderm de execução.
MzOperacao, nesta tabela é necessário informar os campos : Id e Descricao
SET IDENTITY_INSERT [dbo].[MzOperacao] ON
INSERT [dbo].[MzOperacao] ([Id], [Descricao], [Request], [RequestCallback], [IdCallback]) VALUES(3101, N'GEMCO PARA PROTHEUS - PEDIDO DE VENDA - RESERVAR VENDA', NULL, NULL, NULL)
SET IDENTITY_INSERT [dbo].[MzOperacao] OFF
Nesta tabela é criado o código da operação (coluna Id) que identificará está integração de "GEMCO PARA PROTHEUS - PEDIDO DE VENDA - RESERVAR VENDA" no Mozart.
Obs.: Adicione sempre Id sequencial, neste caso foi adicionado o id 3101.
MzCliente, nesta tabela é necessário informar os campos : Id e Descricao
SET IDENTITY_INSERT [dbo].[MzCliente] ON
INSERT [dbo].[MzCliente] ([Id], [Descricao], [Referencia]) VALUES (1, N'GEMCO', NULL)
INSERT [dbo].[MzCliente] ([Id], [Descricao], [Referencia]) VALUES (8, N'PROTHEUS', NULL)
SET IDENTITY_INSERT [dbo].[MzCliente] OFF
Nesta tabela deve ser informado os Nomes e Id dos sistemas que serão integrados. Neste caso, Gemco e Protheus.
Obs.: Adicione sempre Id sequencial.
. MzOperacaoCliente. Informe : Id, IdOperacao e IdCliente
SET IDENTITY_INSERT [dbo].[MzOperacaoCliente] ON
INSERT [dbo].[MzOperacaoCliente] ([Id], [IdOperacao], [IdCliente], [Request], [RequestCallback]) VALUES (20, 3101, 8, NULL, NULL)
SET IDENTITY_INSERT [dbo].[MzOperacaoCliente] OFF
Está tabela tem o relacionamento com as tabelas MzOperacao e MzOperacaoCliente.
Obs.: Adicione sempre Id sequencial.
MzTransacao, nesta tabela é necessário informar Id e Nome.
SET IDENTITY_INSERT [dbo].[MzTransacao] ON
INSERT [dbo].[MzTransacao] ([Id], [Nome]) VALUES (4, N'ITEMRESERVE')
SET IDENTITY_INSERT [dbo].[MzTransacao] OFF
Informe um Id sequencial e o nome da mensagem.
Obs.: O globalization culture deve seguir uma escolha do começo ao fim da configuração. Por exemplo: Ao configurar usando o Nome ITEMRESERVE esse mesmo nome é uma chave de indentificação na transação. A integração não funcionará caso encontre algum nome como RESERVA
MzAplicacaoEvento, nesta tabela é necessário informar Id, IdAplicacao, evento, IdOperacao e IdTransacao.
SET IDENTITY_INSERT [dbo].[MzAplicacaoEvento] ON
INSERT [dbo].[MzAplicacaoEvento] ([Id], [IdAplicacao], [Evento], [TipoIntegracao], [IdOperacao], [IdTransacao]) VALUES (36, 8, N'UPSERT', NULL, 3101, 4)
MzAssinatura, nesta tabela é necessário informar Id, IdAplicacaoEvento, IdCliente, Tenant e IdOperacao.
SET IDENTITY_INSERT [dbo].[MzAssinatura] ON
INSERT [dbo].[MzAssinatura] ([Id], [IdAplicacaoEvento], [IdAplicacaoAssinante], [IdCliente], [Tenant], [IdOperacao]) VALUES (29, 36, 8, 8, N'T3', NULL)
MzAssinaturaPasso, nesta table é necessário informar os seguintes campos : Id, IdAssinatura, Ordem e Request.
SET IDENTITY_INSERT [dbo].[MzAssinaturaPasso] ON
INSERT [dbo].[MzAssinaturaPasso] ([Id], [IdAssinatura], [Ordem], [Request]) VALUES (69, 29, 1, N'{"AwaitCallback": true, "Url": "http://10.171.67.163:8175/EAISERVICE.apw", "Method": "POST","TimeoutEmSegundos": 30, "Headers": { "Content-Type": "text/xml", "SOAPAction" : "http://www.totvs.com/RECEIVEMESSAGE" }}')
O insert acima é necessário quando temos uma integração onde o evento parte do Gemco para o Protheus. na coluna request sempre deve ser informado em "AwaitCallback": true quando aguardamos o EAI Totvs processar uma mensagem recebida. No insert abaixo é inserido o passo que recebe o processamento do EAI Totvs.
INSERT [dbo].[MzAssinaturaPasso] ([Id], [IdAssinatura], [Ordem], [Request]) VALUES (70, 29, 2, N'{"Adapter": false, "Url": "http://localhost:84/Reserva/api/gemco/Reserva/ToUpsertBusinessMessageResponse", "Method": "POST", "Headers": { "Content-Type": "application/json" } }')
1.2 Configurações de ambiente
O ambiente que será executado o Mozart EAI deve ser instalado o plugin .Net Core 2.0.
O download do plugin pode ser feito no seguinte site : https://www.microsoft.com/net/download/dotnet-core/2.0
Obs.: Instale a versão Runtime 2.0.0.
No ambiente windows o iis deve está instalado e devidamente configurado apartir da versão 6
Após todas essa configurações, o Mozart EAI pode ser publicado no IIS normalmente.
Obs.: Para mais detalhes de configuração e publicação de aplicativos web no IIS, acesse o link : https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.1&tabs=aspnetcore2x
Depois de finalizadas as configurações, o Mozart EAI pode ser iniciado no IIS de acordo com a rota(ip) cadastrado. Ex.:
Para submeter uma mensagem de ITEMRESERVE do gemco para o Mozart EAI. Envie um Post com o seguinte mapeamento :
___________________________________________________________________________________________________________________________________
__________________________________________________________________________________________________________________________________
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
___________________________________________________________________________________________________________________________________
___________________________________________________________________________________________________________________________________
No Mozart para concluir um processo de configuração é preciso configurar o arquivo "configuracao.json", como mostra a imagem abaixo.
Caso esse processo de Reserva(ItemReserve) seja enviado pelo Gemco é preciso configurar o parametro "Temporizadores" com as seguintes informações
Como mostra as imagens acima, foi configurado no Mozart o endpoint da api de reserva que será chamada pelo Mozart de acordo com o time configurado em "Frequencia".
IF (SELECT COUNT(1) FROM CAD_TPNOTA (NOLOCK) WHERE TPNOTA = @TPNOTA AND FLVENDA = 'S') > 0 AND @TIPOPED = 0
BEGIN
IF @STATUSNOVO < 5 AND @RESERVA IS NULL --CRIACAO PEDIDO
INSERT INTO MOZART_PEDVENDA (CODFIL, TIPOPED, NUMPEDVEN, DTHR, RESERVA, RECEBIMENTO)
SELECT CODFIL, TIPOPED, NUMPEDVEN, GETDATE(), 0, NULL FROM INSERTED
ELSE
IF (@STATUSNOVO IN(5,4) AND @RECEBIMENTO IS NULL) --PASSOU CAIXA
UPDATE MOZART_PEDVENDA
SET RECEBIMENTO = 0, DTHR = GETDATE()
FROM MOV_PEDIDO AS A
INNER JOIN INSERTED AS B ON A.CODFIL = B.CODFIL AND A.TIPOPED = B.TIPOPED AND A.NUMPEDVEN = B.NUMPEDVEN
INNER JOIN MOZART_PEDVENDA AS C WITH(NOLOCK) ON A.CODFIL = C.CODFIL AND A.TIPOPED = C.TIPOPED AND A.NUMPEDVEN = C.NUMPEDVEN
ELSE IF (@STATUSNOVO = 9 AND (@RECEBIMENTO = 0 OR @RECEBIMENTO IS NULL) AND @STATUSANTIGO = 3 ) -- CANCELAMENTO ANTES DE PASSAR PELO CAIXA
UPDATE MOZART_PEDVENDA
SET RESERVA = 0
FROM MOV_PEDIDO AS A
INNER JOIN INSERTED AS B ON A.CODFIL = B.CODFIL AND A.TIPOPED = B.TIPOPED AND A.NUMPEDVEN = B.NUMPEDVEN
INNER JOIN MOZART_PEDVENDA AS C WITH(NOLOCK) ON A.CODFIL = C.CODFIL AND A.TIPOPED = C.TIPOPED AND A.NUMPEDVEN = C.NUMPEDVEN
END
GO
/****** Object: Trigger [dbo].[MOZART_PEDVENDA_IT_TR_INS_UPD] Script Date: 17/08/2018 18:01:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[MOZART_PEDVENDA_IT_TR_INS_UPD] ON [dbo].[MOV_ITPED]
FOR INSERT, UPDATE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;
...
IF (SELECT COUNT(1) FROM CAD_TPNOTA (NOLOCK) WHERE TPNOTA = @TPNOTA AND FLVENDA = 'S') > 0 AND @TIPOPED = 0
BEGIN
IF @RESERVA = 2 AND @RECEBIMENTO IS NULL AND ((UPDATE(STATUS) AND @STATUSNOVO = 9) OR UPDATE(FILORIG))
UPDATE MOZART_PEDVENDA
SET RESERVA = 0
FROM INSERTED AS A
INNER JOIN MOZART_PEDVENDA AS B WITH(NOLOCK) ON A.CODFIL = B.CODFIL AND A.TIPOPED = B.TIPOPED AND A.NUMPEDVEN = B.NUMPEDVEN
WHERE A.STATUS <= 4;
END
...
GO
/****** Object: Trigger [dbo].[MOZART_PEDVENDA_IT_TR_DEL] Script Date: 17/08/2018 18:02:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
...
IF (SELECT COUNT(1) FROM CAD_TPNOTA (NOLOCK) WHERE TPNOTA = @TPNOTA AND FLVENDA = 'S') > 0 AND @TIPOPED = 0
BEGIN
IF @RESERVA = 2 AND @RECEBIMENTO IS NULL
UPDATE MOZART_PEDVENDA
SET RESERVA = 0
FROM deleted AS A
INNER JOIN MOZART_PEDVENDA AS B WITH(NOLOCK) ON A.CODFIL = B.CODFIL AND A.TIPOPED = B.TIPOPED AND A.NUMPEDVEN = B.NUMPEDVEN
WHERE A.STATUS <= 4;
END
ELSE IF (SELECT COUNT(1) FROM CAD_TPNOTA (NOLOCK) WHERE TPNOTA = @TPNOTA AND TIPO = 'S' AND (TPREM = 'L' OR TPREM = 'D' OR TPREM = 'G') AND (TPDEST = 'L' OR TPDEST = 'D' OR TPDEST = 'G')) > 0 AND @TIPOPED = 2
BEGIN
IF @RESERVA = 2 AND (@RECEBIMENTO IS NULL OR @RECEBIMENTO = 0)
UPDATE MOZART_PEDVENDA
SET RESERVA = 0
FROM deleted AS A
INNER JOIN MOZART_PEDVENDA AS B WITH(NOLOCK) ON A.CODFIL = B.CODFIL AND A.TIPOPED = B.TIPOPED AND A.NUMPEDVEN = B.NUMPEDVEN
WHERE A.STATUS <= 4;
END
GO
Deve ser criado também uma tabela de De/Para chamada MSGPDR_PEDIDORESERVA_DEPARA no banco do Gemco, essa tabela será responsável em armazernar os internalId dos dois sitemas
exemplo:
Script.:
/****** Object: Table [dbo].[MSGPDR_PEDIDORESERVA_DEPARA] Script Date: 17/08/2018 19:12:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[MSGPDR_PEDIDORESERVA_DEPARA](
[SISTEMA_INT] [varchar](30) NOT NULL,
[COD_INT] [varchar](50) NOT NULL,
[CODFIL] [numeric](5, 0) NOT NULL,
[NUMPEDVEN] [numeric](9, 0) NOT NULL,
[TIPOPED] [numeric](5, 0) NOT NULL,
[DATA_INT] [datetime] NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[MSGPDR_PEDIDORESERVA_DEPARA] ADD DEFAULT (getdate()) FOR [DATA_INT]
GO
1.2 Adapter Reserva
O Adapter de Reserva deve ser instalado para enviar os dados ao Mozart, e o mesmo enviar ao EAI Totvs.
O Adapter Reserva é uma Web Api, tecnologia rest que utiliza .Net Core 2.0, ela será responsável em consultar a tabela Mozart_PedVenda para verificar se existem pedidos de venda válidos para serem reservados no Protheus.
Atraves da coluna PublicacaoMozart na Tabela Mozart_PedVenda quando a trigger inseri um novo numero de pedido de venda, por default está coluna recebe o status 0, quando o Adapter Reserva inicia o processamento ele atualiza o status da PublicacaoMozart para 1, ao termino do processo de gerar uma mensagem padronizada de ItemReserve e envia lo ao Mozart, o status da coluna PublicacaoMozart é atualizado para 2.
Caso o mesmo pedido sofra alguma alteração no gemco a coluna PublicacaoMozart será atualizada para 0 novamente para ser enviado ao Protheus uma atualização da reserva anterior. Se o pedido for excluido no Gemco, também será gerado uma mensagem de ItemReserve com status de cancelamento.
A imagem abaixo mostra a api já publicada no iis e em funcionamento.
No Adapter Reserva há dois métodos :
O método BuscarTodosIntegraçãoMozart que será configurado no Timer do Mozart para ser chamado para buscar no banco do Gemco pedidos de venda válidos para serem reservados suas mercadorias via Protheus.
Há também o método ToUpsertBusinessMessageResponse responsável em receber o retorno de um envio de uma reserva, salva o id do Protheus no de/para e informa a mensagem do resultado da integração.
Exemplo de uma mensagem padronizada de ItemReserve gerado pelo Adapter Reserva :
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tot="http://www.totvs.com"><soapenv:Header /><soapenv:Body><tot:RECEIVEMESSAGE><tot:INMSG><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<TOTVSMessage>
<MessageInformation version="1.000">
<UUID>5a5a36ee-0558-42a7-9f61-893d65287810</UUID>
<Type>BusinessMessage</Type>
<Transaction>ItemReserve</Transaction>
<StandardVersion>1.000</StandardVersion>
<SourceApplication>GEMCO</SourceApplication>
<CompanyId>40</CompanyId>
<BranchId>1</BranchId>
<Product name="GEMCO" version="1.000" />
<GeneratedOn>2018-08-17T17:04:04</GeneratedOn>
<DeliveryType>Async</DeliveryType>
</MessageInformation>
<BusinessMessage>
<BusinessEvent>
<Entity>ItemReserve</Entity>
<Event>Upsert</Event>
<Identification name="" />
</BusinessEvent>
<BusinessContent>
<CompanyId>40</CompanyId>
<BranchId>1</BranchId>
<InternalId>40|1|0|600</InternalId>
<CompanyInternalId>40|1</CompanyInternalId>
<ReserveType>LJ</ReserveType>
<DocumentReserve>600</DocumentReserve>
<Requester>Gemco</Requester>
<RequestBranch>1</RequestBranch>
<ReserveItemType>
<Item>
<ItemCode>8718</ItemCode>
<ItemInternalId>8718</ItemInternalId>
<WarehouseCode>01</WarehouseCode>
<WarehouseInternalId>01</WarehouseInternalId>
<Quantity>12.000000000</Quantity>
<ReserveExpiration>2018-08-18T17:04:04</ReserveExpiration>
<IssueDateReserve>2018-08-17T17:04:04</IssueDateReserve>
<SubLotNumber />
<SeriesItem />
<AddressingItem />
<NoteReserveItem>VENDEDOR 05</NoteReserveItem>
<ReserveBranch>1</ReserveBranch>
<IsCanceled>F</IsCanceled>
</Item>
</ReserveItemType>
</BusinessContent>
</BusinessMessage>
</TOTVSMessage>]]></tot:INMSG></tot:RECEIVEMESSAGE></soapenv:Body></soapenv:Envelope>
1.3 Configurações no Mozart
Os seguintes procedimento deve ser configurados no Mozart :
Em sua pasta de publicação existe um arquivo chamado Configuracao.json neste arquivo deve ser executados os trecho de configuração abaix
{
"Id": "GEMCO PARA PROTHEUS - PEDIDO VENDA - RESERVAR VENDA",
"IdOperacao": 3134,
"Frequencia": 20000,
"QuantidadeRegistrosEnfileirar": 5,
"LimiteReprocessamento": 3,
"TimeoutEmSegundos": 190,
"Coletores": [
{
"Id": "Reciclagem: Processando - Aguard. Proc.",
"FrequenciaEmMilissegundos": 30000,
"TempoOciosoEmSegundos": 120,
"StatusOrigem": 2,
"StatusDestino": 1
},
{
"Id": "Reciclagem: Reprocessar - Aguard. Proc.",
"FrequenciaEmMilissegundos": 30000,
"TempoOciosoEmSegundos": 60,
"StatusOrigem": 5,
"StatusDestino": 1
}
]
},
{
"Id": "GEMCO PARA PROTHEUS - PEDIDO VENDA - CANCELAR RESERVA",
"IdOperacao": 3135,
"Frequencia": 30000,
"QuantidadeRegistrosEnfileirar": 1,
"LimiteReprocessamento": 3,
"TimeoutEmSegundos": 120,
"Coletores": [
{
"Id": "Reciclagem: Processando - Aguard. Proc.",
"FrequenciaEmMilissegundos": 30000,
"TempoOciosoEmSegundos": 120,
"StatusOrigem": 2,
"StatusDestino": 1
},
{
"Id": "Reciclagem: Reprocessar - Aguard. Proc.",
"FrequenciaEmMilissegundos": 30000,
"TempoOciosoEmSegundos": 60,
"StatusOrigem": 5,
"StatusDestino": 1
}
]
},
No arquivo de configuração do Mozart para processos em que o sistema Gemco envia para o Protheus, deve ser configurado o seguinte código :
{
"Nome": "GEMCO PARA PROTHEUS - PEDIDO VENDA - RESERVAR VENDA",
"Api": {
"Url": "http://localhost:84/Reserva/api/Gemco/Reserva/BuscarTodosIntegracaoMozart",
"Method": "GET",
"TimeoutEmSegundos": 60,
"Headers": {
"Authorization": "bearer 71EC877E31CC3DF7BE52BC4D2F595"
}
},
"TempoEsperaExecucaoEmMilisegundos": 30000
},
Com está configuração, o mozart recebe um endereço de método em uma api "Url": "http://localhost:84/Reserva/api/Gemco/Reserva/BuscarTodosIntegracaoMozart" recebe qual o tipo de requisição terá que ser feita, neste caso ele executará um GET como está configurado "Method": "GET", receberá a configuração de quanto tempo no máximo ele pode processar um requisição, na configuração acima está definida em 60 segundo "TimeoutEmSegundos": 60, para saber de quanto em quanto tempo o Mozart deve chamar o método BuscarTodosIntegracaoMozart foi configurado "TempoEsperaExecucaoEmMilisegundos": 30000 que equivalem a 30 segundos. Então, a cada 30 segundos o Mozart via seu timer (Tarefas em segundo plano) fará a chamada.
As querys devem ser executadas no banco de dados do Mozart
INSERT [dbo].[MzOperacao] ([Id], [Descricao], [Request], [RequestCallback], [IdCallback]) VALUES (3134, N'GEMCO PARA PROTHEUS - PEDIDO DE VENDA - RESERVAR VENDA', NULL, NULL, NULL)
INSERT [dbo].[MzOperacao] ([Id], [Descricao], [Request], [RequestCallback], [IdCallback]) VALUES (3135, N'GEMCO PARA PROTHEUS - PEDIDO DE VENDA - CANCELAR RESERVA', NULL, NULL, NULL)
INSERT [dbo].[MzOperacaoCliente] ([Id], [IdOperacao], [IdCliente], [Request], [RequestCallback]) VALUES (46, 3134, 8, NULL, NULL)
INSERT [dbo].[MzOperacaoCliente] ([Id], [IdOperacao], [IdCliente], [Request], [RequestCallback]) VALUES (47, 3135, 8, NULL, NULL)
INSERT [dbo].[MzTransacao] ([Id], [Nome]) VALUES (25, N'RESERVA')
INSERT [dbo].[MzTransacao] ([Id], [Nome]) VALUES (26, N'RESERVACANCELAMENTO')
INSERT [dbo].[MzAplicacaoEvento] ([Id], [IdAplicacao], [Evento], [TipoIntegracao], [IdOperacao], [IdTransacao]) VALUES (72, 13, N'UPSERT', NULL, 3134, 25)
INSERT [dbo].[MzAplicacaoEvento] ([Id], [IdAplicacao], [Evento], [TipoIntegracao], [IdOperacao], [IdTransacao]) VALUES (73, 13, N'DELETE', NULL, 3135, 26)
INSERT [dbo].[MzAssinatura] ([Id], [IdAplicacaoEvento], [IdAplicacaoAssinante], [IdCliente], [Tenant], [IdOperacao]) VALUES (72, 75, 15, 8, N'T3', NULL)
INSERT [dbo].[MzAssinatura] ([Id], [IdAplicacaoEvento], [IdAplicacaoAssinante], [IdCliente], [Tenant], [IdOperacao]) VALUES (73, 76, 15, 8, N'T3', NULL)
INSERT [dbo].[MzAssinaturaPasso] ([Id], [IdAssinatura], [Ordem], [Request]) VALUES (187, 69, 1, N'{"AwaitCallback": true, "Url": "http://10.171.67.163:8175/EAISERVICE.apw", "Method": "POST","TimeoutEmSegundos": 30, "Headers": { "Content-Type": "text/xml", "SOAPAction" : "http://www.totvs.com/RECEIVEMESSAGE" }}')
INSERT [dbo].[MzAssinaturaPasso] ([Id], [IdAssinatura], [Ordem], [Request]) VALUES (188, 69, 2, N'{"Adapter": false, "Url": "http://localhost:84/Reserva/api/gemco/Reserva/ToUpsertBusinessMessageResponse", "Method": "POST", "Headers": { "Content-Type": "application/json" } }')
INSERT [dbo].[MzAssinaturaPasso] ([Id], [IdAssinatura], [Ordem], [Request]) VALUES (189, 70, 1, N'{"AwaitCallback": true, "Url": "http://10.171.67.163:8175/EAISERVICE.apw", "Method": "POST","TimeoutEmSegundos": 30, "Headers": { "Content-Type": "text/xml", "SOAPAction" : "http://www.totvs.com/RECEIVEMESSAGE" }}')
INSERT [dbo].[MzAssinaturaPasso] ([Id], [IdAssinatura], [Ordem], [Request]) VALUES (190, 70, 2, N'{"Adapter": false, "Url": "http://localhost:84/Reserva/api/gemco/Reserva/ToUpsertBusinessMessageResponse", "Method": "POST", "Headers": { "Content-Type": "application/json" } }')
2.0 Configurações no Protheus
Exemplo de Mensagem: ItemReserve - Mensagem para Integração da Reserva de Produtos
...
O cadastro de adapters são rotinas responsáveis por realizar o processamento das mensagens enviadas e recebidas, possibilitando a inclusão, alteração e exclusão do adapter no Protheus.
Atenção:
Todos os Adapters devem ser cadastrados. Pois a versão da mensagem pode influenciar na correta geração ou recebimento das mensagens dependentes.
Caso não deseje usar alguns dos Adapters basta desmarcar as opções de Envio/recebimento conforme necessário.
No Configurador (SIFACFG), acesse Ambientes/Schedule/Adapter E.a.i
2.1 Efetue a Inclusão de uma nova rotina para os Adapters do sistema Protheus.Configure a rotina do Adapter, de acordo com os dados abaixo e que já foram pré estabelecidos para a integração:
Mensagem única: Sim
Rotina: Nome do adapter
Mensagem: Nome da mensagem única que o Adapter EAI espera receber.
Descrição: Identificação da mensagem.
Envia: SIM (se envia a informação para o outro sistema) ou NÃO ( Se não envia nenhuma informação deste adapter para o outro sistema).
Recebe: SIM (se recebe a informação do outro sistema) ou NÃO ( Se não recebe nenhuma informação deste adapter do outro sistema).
Método: Síncrono/Assincrono
Operação: Todas
Canal de Envio: EAI
Observe que ao preencher o campo Canal Envio, com a opção 2 - EAI, o sistema preenche automaticamente o campo Rota padrão, com o conteúdo preenchido no parâmetro MV_EAIURL2.
Atenção: Efetue a inclusão dos Adapters e Versões conforme tabela abaixo:
...
Mensagem Única
...
Rotina Protheus
...
Mensagem
...
Descrição
...
Envia
...
Recebe
...
Método Protheus
...
Operação
...
Canal de Envio
...
Sim
...
MATA030
...
CustomerVendor
...
Cliente
...
Não
...
Sim
...
Assíncrono
...
Todas
...
EAI
...
Sim
...
LOJA160
...
Reduction
...
Redução Z
...
Não
...
Sim
...
Assíncrono
...
Todas
...
EAI
...
Sim
...
Assíncrono
...
LOJA701
...
2.000
...
Sim
...
LOJA140
...
1.000
...
Importante!
Os adapters devem ser adicionados somente na Retaguarda.
2.2 Cadastro de De/Para de Empresas:
No EAI Protheus existe a possibilidade de se cadastrar, para as Mensagens Únicas TOTVS, um relacionamento entre a Empresa e Filial de processamento que chegou na mensagem com uma existente no Protheus. Isto se deve ao fato de que, na Mensagem Única TOTVS
os valores trafegados na mensagem são sempre do sistema que enviou a mensagem, cabendo ao sistema receptor a tradução das informações trafegadas.
- No Configurador (SIFACFG), acesse Ambientes/Schedule/Emp.Fil.Msg.Unica.
- Cadastre De-Para de Empresas e Filiais e configure-os conforme os valores a seguir:
...
2.3 Inclusão De / Para dos Caixas cadastrados no Protheus e Gemco:
Pré - requisitos:
Efetuar o cadastro do caixa no Protheus e solicitar junto a Bematech, o código do operador Live.
- No Configurador, acesse Ambiente / Schedule De /para de Mensagem Unica.
Preencha os campos abaixo
- Referência: BEMATECH
- Tabela: Informe a tabela SLF
- Alias: Informe SLF
- Campo: LF_COD
- Valor Externo: Informe o código do Caixa Cadastrado no Live, conforme exemplo abaixo.
- Valor Interno: Informe a Empresa| Filial | e o Código do Caixa cadastrado no Protheus, conforme exemplo abaixo.
Atenção: O campo de valor Interno deve ser preenchido com os valores de Empresa e filial mais o conteudo separados por "|" (Pipe). Caso a tabela seja compartilhada deve-se preencher de acordo com a regra de compartilhamento.
Exemplo: T1|D RJ 01|C02
Segue exemplo do código do caixa Cadastrado no Protheus,
2.4 Cadastro de De/Para CFOP/TES:
O cadastro de De/Para da CFOP/TES, é de extrema importância para que as mensagens transmitidas, tenham suas movimentações dentro do Sistema Protheus definidas de acordo com as operações.
Pré - requisitos:
- Efetuar o cadastro do CFOP.
- Solicitar junto a Bematech, o código do CFOP utilizados nas operações Gemco.
- No Configurador, acesse Ambiente / Schedule De /para de Mensagem Única.
Preencha os campos abaixo.
- Referência: BEMATECH
- Tabela: Informe a tabela SF4XXX
- Alias: Informe SF4
- Campo: F4_CODIGO
- Valor Externo: Informe o código do CFOP cadastrado no Live, conforme exemplo abaixo.
- Valor Interno: Informe a Empresa|Filial | Código da TES cadastrada no Protheus, conforme exemplo abaixo.
Atenção: O campo de valor Interno deve ser preenchido com os valores de Empresa e filial mais o conteudo separados por "|" (Pipe). Caso a tabela seja compartilhada deve-se preencher de acordo com a regra de compartilhamento.
Exemplo: T3||506
...






















