Integrando Produto
Abaixo iremos mostrar como configurar o Processo de Envio Produto do Protheus para integra-lo com o sistema Totvs Live. Siga o Passo a Passo.
Cadastrando o Processo de Produto
Para integrarmos o Produto com o Totvs Live primeiramente é necessário acessar o cadastro do Processo para verificar se o Produtofoi criado automaticamente no Protheus.
1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Processos.
2- Aguarde a criação automática do cadastro de processo referente ao Produto.
3- Verifique se foi criado as Informações abaixo:
Processo: Produto
Tabela: SB1
Chave: B1_FILIAL+B1_COD
Vinculando o Processo de Produto ao Assinante Live
1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Assinantes.
2- Com o assinante Live previamente cadastrado, posicione no assinante Live e clique em alterar.
3- Na guia Assinantes x Processos, preencha os seguintes campos:
Processo: Produto
Ativo: Sim
Tipo Process: Envia
Filiais Proc: Informe o código das filiais que deseja Enviar o Processo
Configuração: Preencha esta campo de acordo com a sua URL da API Produto, como mostra o exemplo abaixo:
{ "url": "http://XXXX.XXXX.XXXX.XXX.com/PracticoLive/LiveConnector/FacadeIntegracao.svc?wsdl", "operacao": "ManterProdutoLC_Integracao_Xml", "tagretorno": "<LC_Retorno>" }
Layout Envio: Preencha este campo de acordo com o exemplo abaixo: Lembrando que é permitido utilizar macro execuções no Layout abaixo, após o &.
Função para retirar caracteres especiais
O Live não permite caracteres especiais na descrição do Produto, então inclua a função RMISUBSTR(cConteudo,cProcura,cTroca
) nas tags Descricao e DescricaoResumida.
Exemplo:
<Descricao>" + RMISUBSTR(@self:oPublica['B1_DESC'],"+|&|%"," + |E| PORC " ) + "</Descricao><DescricaoResumida>" + RMISUBSTR(@SubStr(self:oPublica['B1_DESC'], 1, 50),"+|&|%"," + |E| PORC " ) + "</DescricaoResumida>
&"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:liv='http://LiveConnector/'> <soapenv:Header/> <soapenv:Body> <liv:ManterProdutoLC_Integracao_Xml> <liv:codigoSistemaSatelite>" + self:oLive:getSatelite(self) + "</liv:codigoSistemaSatelite> <liv:xmlTicketProduto><![CDATA[<?xml version='1.0' encoding='utf-8'?> <LC_TicketProduto> <Chave>" + self:oLive:getToken(self) + "</Chave> <CodigoSistemaSatelite>" + self:oLive:getSatelite(self) + "</CodigoSistemaSatelite> <Data>" + DtoS( Date() ) + "</Data> <Hora>" + StrTran(Time(), ':', '') + "</Hora> <Numero>" + RMITImeStamp() + "</Numero> <Documentos> <LC_Produto> <NumeroSequencia>1</NumeroSequencia> <Ativo>true</Ativo> <CNPJFornecedor>" + IIF(!Empty(self:oPublica['B1_PROC']),Posicione('SA2', 1, self:oPublica['B1_PROC'] + self:oPublica['B1_LOJPROC'], 'A2_CGC'),'') + "</CNPJFornecedor> <CEST>" + self:oPublica['B1_CEST'] + "</CEST> <CNAE>" + self:oPublica['B1_CNAE'] + "</CNAE> <CodigoAlternativo>" + IIF(Empty(self:oPublica['B1_ALTER']), self:oPublica['B1_CODBAR'], self:oPublica['B1_ALTER']) + "</CodigoAlternativo> <CodigoClassificacaoFiscal>" + self:oPublica['B1_POSIPI'] + "</CodigoClassificacaoFiscal> <CodigoItemServico/> <CodigoPadrao>" + (self:cIdRetaguarda := self:oPublica['B1_COD']) + "</CodigoPadrao> <CodigoPrincipal>" + self:oPublica['B1_CODBAR'] + "</CodigoPrincipal> <CodigoProdutoPorFornecedor>" + self:oPublica['B1_CODBAR'] + "</CodigoProdutoPorFornecedor> <DescontoMaximo>99.99</DescontoMaximo> <DescontoVendaPromocao>99.99</DescontoVendaPromocao> <Descricao>" + self:oPublica['B1_DESC'] + "</Descricao> <DescricaoResumida>" + SubStr(self:oPublica['B1_DESC'], 1, 50) + "</DescricaoResumida> <DescricaoTipoProduto>REVENDA</DescricaoTipoProduto> <IPPT>" + self:oPublica['B1_IPPT'] + "</IPPT> <IndicadorArredondamento>true</IndicadorArredondamento> <InserirClassificacao>true</InserirClassificacao> <PesoBruto>" + cValToChar(self:oPublica['B1_PESO']) + "</PesoBruto> <PesoLiquido>" + cValToChar(self:oPublica['B1_PESO']) + "</PesoLiquido> <PrecoCentralizado>true</PrecoCentralizado> <QuantidadeCasaDecimal>0</QuantidadeCasaDecimal> <QuantidadeCasaDecimalValor>0</QuantidadeCasaDecimalValor> <QuantidadeMultiplaCompra>0</QuantidadeMultiplaCompra> <SiglaUnidadeMedida>" + self:oPublica['B1_UM'] + "</SiglaUnidadeMedida> <SituacaoTributariaOrigem>" + IIF(Empty(self:oPublica['B1_ORIGEM']),'0',self:oPublica['B1_ORIGEM']) + "</SituacaoTributariaOrigem> <SituacaoVenda>true</SituacaoVenda> <Classificacoes> <LC_ClassificacaoProduto> <DescricaoClassificacao>TESTE</DescricaoClassificacao> <DescricaoTipoClassificacao>MARCA</DescricaoTipoClassificacao> </LC_ClassificacaoProduto> </Classificacoes> <UnidadesNegocio/> <ProdutoFornecedores/> </LC_Produto> </Documentos> </LC_TicketProduto>]]></liv:xmlTicketProduto> </liv:ManterProdutoLC_Integracao_Xml> </soapenv:Body> </soapenv:Envelope>"
Exemplo da Configuração do campo de exportação B1_MSEXP via Configurador:
Exemplo da configuração do Processo Produto no assinante Live:
Possiveis erros de integração Live:
- No Live o usuário pode configurar quais tipos de Produtos são aceitos. Neste caso o Live Connector pode retornar esse erro:
BD: Não foi possível incluir/alterar o produto enviado pelo Connector: Rentech.Framework.Base.BusinessException: Não é permitido cadastrar produto com tipo informado.
 at Rentech.PracticoLive.Global.Business.Produto.Atualizar(Guid publicDomain, Guid protectedDomain, Produto Produto, Guid idAgrupador)
 at Rentech.PracticoLive.Global.Business.Produto.AtualizarConnector(Guid publicDomain, Guid protectedDomain, Produto Produto, DadosFiscaisProduto dadosFiscaisProduto)
Fluxo de integração
Após ter realizado as configurações acima a integração do Produto seguirá o seguinte fluxo:
Com os serviços RMIPUBLICA, RMIDISTRIB e RMIENVIA configurados e ativos, será gerado as publicações na tabela MHQ.
Após o envio da publicação sera realizado a distribuição das publicações de Produto para o Assinante Live na tabela MHR.
Com as distribuições realizadas o serviço RMIENVIA realizara o envio de Produto para o Totvs Live.