Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Dica
titleIntegrando InventarioCliente

Abaixo iremos mostrar como configurar o Processo de Inventário  Cliente no Protheus para integra-lo com o sistema Totvs Live. Siga o Passo a Passo.

Aviso
titleImportante
  1. É obrigatório a criação do campo A1_MSEXP, para que não ocorra um loop infinito, quando o processo de CLIENTE está ativo para BUSCA e ENVIO no mesmo assinante.
  2. Clientes com o conteúdo da tag TipoCliente = "INFORMAL" vindo do TVFR não são integrados porque, para o Protheus não existe este tipo, são permitidos clientes pessoa FISICA ou JURÍDICA.

Cadastrando o Processo de

...

Cliente

Para integrarmos o Inventário  Cliente com o Totvs Live primeiramente é necessário acessar o cadastro do Processo para verificar se o Inventário Cliente foi criado automaticamente no Protheus.

...

1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Processos.

2- Ajustar dicionario conforme a documentaçãohttps://tdn.totvs.com/x/WfCnI

3- Aguarde a criação automática do cadastro de processo referente ao InventárioCliente.  

34- Verifique se foi criado as Informações abaixo:

Processo: INVENTARIO   Cliente 

Tabela: SB7 SA1

Chave: B7A1_FILIAL+B7_DATA+B7A1_COD+B7_LOCAL+B7_LOCALIZ+B7_NUMSERI+B7_LOTECTL+B7_NUMLOTE+B7_CONTAGE  A1_LOJA

Vinculando o Processo de

...

Cliente ao Assinante Live


1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Assinantes.

...

3- Na guia Assinantes x Processos, preencha os seguintes campos:

Processo: InventarioCliente 

Ativo: Sim

Tipo Process: Busca

Filiais Proc: Informe o código das filiais que deseja Buscar o Processode apenas uma filial para buscar o Processo. (todas as lojas abaixo do sistema satélite serão retornadas)

Configuração: Preencha esta campo de acordo com a sua URL da API  InventarioCliente, como mostra o exemplo abaixo:

Obs:  A tag ChaveUni pode processar um array de Tags XML ou Variável disponível no momento do processamento para formar a chave única do cliente que será gravado na tabela MHQ no campo MHQ_CHVUNI

Bloco de código
{
    "url_token": "http://caminhoxxxxxxx/PracticoLivexxxxxxxx/LiveConnector/FacadeIntegracao.svc?wsdl",     (Url para acessar o LiveConector)
    "operacao": "RecuperarInventarioLCRecuperarClienteLC_Integracao_Xml",                                      (Operação para buscar token)
    "sistemasatelitetagretorno": "123456789",                                                          (código do sistema satélite)<LC_TicketClienteSaida>",
    "usuariodocumentoId":"[email protected] "LC_ClienteSaida",
                                                       (nome do usuário)
    "senha":"senha"                                                                         (senha do usuário)
}"ChaveUni": [
		"Self:cConfirma",
		"CPF_CNPJ"
	] 
}

Layout Envio: Preencha este campo de acordo com o exemplo abaixo: Lembrando que é permitido utilizar macro execuções no Layout abaixo, após o &.

Bloco de código
&"<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:liv='http://LiveConnector/'>
   	<soapenv:Header />
   	<soapenv:Body>
      		<liv:RecuperarInventarioLCRecuperarClienteLC_Integracao_Xml>
         			<liv:codigoSistemaSatelite>" + self:oConfAssin['sistemasatelite']:oLive:getSatelite(self) + "</liv:codigoSistemaSatelite>
         			<liv:xmlIdentificacao><![CDATA[<?xml version='1.0' encoding='utf-8'?><LC_Identificacao><Chave>" + self:cToken:oLive:getToken(self) + "</Chave><CodigoSistemaSatelite>" + self:oConfAssin['sistemasatelite']:oLive:getSatelite(self) + "</CodigoSistemaSatelite><Data/><Hora/></LC_Identificacao>]]></liv:xmlIdentificacao>
      		</liv:RecuperarInventarioLCRecuperarClienteLC_Integracao_Xml>
   	</soapenv:Body>
</soapenv:Envelope>"

Layout Publicação:  Layout que será utilizado para gerar a Publicação (tabela MHQ), especificamente o campo MHQ_MENSAG

Obs: Os campos abaixo são configuráveis conforme a sua necessidade após o &. Podendo incluir mais campos e chamada de funções para preenchimento.

Bloco de código
{  
    "B7
	"A1_FILIAL": "&RmiDePaRetxFilial('LIVESA1')", 'SM0',
	"A1_NOME": "&SubStr(self:oRegistro:_INVENTARIO:Nome_CNPJLojaRazaoSocial:Text,.F.1,TamSX3('A1_NOME')[1])",
    "B7_DOC	"A1_TIPO": "&IIF(Alltrim(self:oRegistro:_INVENTARIOTipoClassificacaoClienteCodigo:_CodigoInventario:TextText) == '2','R','F')",
	"A1_LOJA":    "B7_DATA":"&DtoS(CtoD("&SuperGetMV('MV_LOJAPAD',.F., '01')",
	"A1_NREDUZ": "&SubStr(self:oRegistro:_INVENTARIO:Nome_DataFechamentoRazaoSocial:Text,1,10))TamSX3('A1_NREDUZ')[1])",
    "SB7	"A1_CGC": [
        {
            "B7_COD":"&RmiDePaRet('LIVE', 'SB1',self:oRegistro:_INVENTARIO:_ProdutosLista:_Produto[nItem]:_CodigoProduto:text,.F.)",
            "B7_LOCAL": "01",
            "B7_QUANT":"&self:oRegistro:_INVENTARIO:_ProdutosLista:_Produto[nItem]:_QtdEstoquePosicaoAtual:text",
            "B7_CONTAGE": "1",
            "B7_ORIGEM": "LOJAINT"
        }
    ]"&self:oRegistro:_CPF_CNPJ:Text",
	"A1_PESSOA": "&IIF(UPPER(Alltrim(self:oRegistro:_TipoCliente:Text)) == 'JURIDICA','J','F')",
	"A1_BAIRRO": "&self:oRegistro:_LISTAENDERECOSSAIDA:_LC_ENDERECOSAIDA:_BAIRRO:Text",
	"A1_CEP": "&StrTran( self:oRegistro:_LISTAENDERECOSSAIDA:_LC_ENDERECOSAIDA:_CEP:TEXT, '-', '' )",
	"A1_EST": "&self:oRegistro:_LISTAENDERECOSSAIDA:_LC_ENDERECOSAIDA:_Estado:Text",
	"A1_COMPLEM": "&self:oRegistro:_LISTAENDERECOSSAIDA:_LC_ENDERECOSAIDA:_Complemento:Text",
	"A1_END": "&self:oRegistro:_LISTAENDERECOSSAIDA:_LC_ENDERECOSAIDA:_LOGRADOURO:Text",
	"A1_COD_MUN": "&SUBSTR(self:oRegistro:_LISTAENDERECOSSAIDA:_LC_ENDERECOSAIDA:_Cidade_NumeroMunicipioIBGE:Text,3,5)",
	"A1_DDD": "&IIF(!EMPTY(self:oRegistro:_LISTATELEFONESSAIDA:TEXT),Iif(ValType(self:oRegistro:_LISTATELEFONESSAIDA:_LC_TELEFONESAIDA) == 'A',self:oRegistro:_LISTATELEFONESSAIDA:_LC_TELEFONESAIDA[1]:_DDD:TEXT,self:oRegistro:_LISTATELEFONESSAIDA:_LC_TELEFONESAIDA:_DDD:TEXT),'11')",
	"A1_TEL": "&IIF(!EMPTY(self:oRegistro:_LISTATELEFONESSAIDA:TEXT),Iif(ValType(self:oRegistro:_LISTATELEFONESSAIDA:_LC_TELEFONESAIDA) == 'A',self:oRegistro:_LISTATELEFONESSAIDA:_LC_TELEFONESAIDA[1]:_NUMERO:TEXT,self:oRegistro:_LISTATELEFONESSAIDA:_LC_TELEFONESAIDA:_NUMERO:TEXT),'31110300')",
	"A1_MSBLQL": "&IIF(UPPER(Alltrim(self:oRegistro:_Inativo:Text))=='FALSE','2','1')",
	"A1_DTNASC": "&self:oRegistro:_DataNascimento:Text",
	"A1_EMAIL": "&StrTran( IIF( XmlChildEx(self:oRegistro:_LISTAENDERECOSELETRONICOSAIDA, '_LC_ENDERECOELETRONICOSAIDA') <> Nil, IIF(ValType(self:oRegistro:_LISTAENDERECOSELETRONICOSAIDA:_LC_ENDERECOELETRONICOSAIDA) == 'A', self:oRegistro:_LISTAENDERECOSELETRONICOSAIDA:_LC_ENDERECOELETRONICOSAIDA[1]:_DESCRICAO:TEXT, self:oRegistro:_LISTAENDERECOSELETRONICOSAIDA:_LC_ENDERECOELETRONICOSAIDA:_DESCRICAO:TEXT), '' ), '´', '')"
}


Exemplo da configuração do Processo Inventario Cliente no assinante Live:

Image RemovedImage Added


Dica
titleFluxo de integração

Após ter realizado as configurações acima a integração do Inventário  Cliente 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 a busca da publicação sera realizado a distribuição das publicações de Inventários para Cliente para o Assinante Live na tabela MHR.

Com as distribuições realizadas o serviço RMIENVIA realizara o envio de Inventário para Cliente para o Totvs Protheus, após a finalização do serviço RMIENVIA, no campo MHR_ENVIO, será gravado o json que enviamos para o Protheus e no campo MHR_RETORN é gravado a mensagem de retorno do Live, se obteve sucesso ou não na inclusão do Inventário Cliente .