Páginas filhas
  • Integração Fluig RM

Versões comparadas

Chave

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

...

Após instalação dos Webservices do RM hospedados no Host, podemos utilizar a opção de “aceleradores fluigs” disponibilizado no aplicativo “TOTVS WS Client” para gerar classes e arquivos necessário para montar um Processo dentro do fluig. Para isto, seguir os passos abaixo:

 

Deck of Cards
idPasso a Passo
default
Card
trueidPasso 1
labelPasso 1
titlePasso 1

Configurar o WS TOTVS Client

     Para que o TOTVS WS Client consiga acessar os WebServices do RM, é necessário que os mesmos estejam ativos e que o DefaultDB esteja configurado. Para saber como configurar o DefaultDB acesse o link: http://tdn.totvs.com/x/sQSqC

      Para uso do sistema "TOTVS WS Client" é necessário copiar os arquivos: "TotvsWSClient.exe" e "TotvsWSClient.exe.config" para a pasta RM.Net do seu ambiente configurado.

      Em seguida, basta editar o arquivo "TotvsWSClient.exe.config" alterando as Tag's "Host", "Port" e "WS-Server" para as configurações do ambiente desejado. Conforme exemplo abaixo:

 

TotvsWSClient.exe.config

<?xml version="1.0"?>

<configuration>

  <appSettings>

    <add key="Host" value="localhost" />

    <add key="Port" value="1180" />

    <add key="EnableCompression" value="False" />

    <add key="WS-Server" value="http://localhost:8051" />

    <add key="WS-UserName" value="mestre" />

    <add key="WS-DataServerName" value="GlbUsuarioData" />

    <add key="WS-ProcessName" value="GlbAcessoData" />

    <add key="WS-CodColigadaSQL" value="" />

    <add key="WS-CodSistemaSQL" value="" />

 </appSettings>

</configuration>

 

Mais informações sobre customização Fluig podem ser obtidas em Customização de Workflow.

 

 

Card
idPasso 2
labelPasso 2
titlePasso 2

Localizando o serviço RM que deseja integrar

Os serviços do RM são disponibilizados por três formas:

 

Deck of Cards
idFormas de Acesso ao RM
Card
idDataserversDataserves
labelDataserversDataserves
titleDataserversDataserves

1)      DataServers: Todos os CRUDS dos cadastros desenvolvidos na tecnologia .NET do RM são disponibilizados através do Web Services Services WsDataServer.  Basicamente, oferece quatro métodos principais:

  1. GetSchema: responsável por retornar o schema (XSD) do XML necessário para salvar um registro (saverecord).
  2. ReadView: responsável por efetuar a leitura do cadastro do RM e retornar um XML contendo registros de acordo com o contexto e o filtro informado.
  3. ReadRecord: responsável responsável por efetuar a leitura do cadastro do RM e retornar um XML contendo registros de acordo com a chave primária e o contexto informado.
  4. SaveRecord:  responsável  responsável por efetuar alterações de registros do cadastro do RM de acordo com o XML informado.

A lista de dataservers (com o ID) disponíveis pode ser obtido obtido aqui ou ou usando a opção de localizar do aplicativo “TOTVS WS Client

 Image Removed

 Image Added

Nota
titleNota

Importante: o passo 4 marca o nome do ID que deverá ser passado no parâmetro “DataServer” dos Web Services Webservices acima.

 

 

Card
idProcessos
labelProcessos
titleProcessos

Processos: Expõe no wsProcess serviços serviços do RM. Permite consumi-los através de uma requisição webservice padrão SOAP, respeitando os parâmetros de cada serviço que podem ser obtidos seguindo os passos abaixo:

 

http://tdn.totvs.com.br/display/public/rm/TBC+-+Web+Service+Process

Card
idConsultaSQL
labelConsultaSQL
titleConsultaSQL

ConsultaSQL: Retorna o resultado de uma consulta SQL cadastrada no RM. Detalhes de como criar um consulta sql podem ser obtidos clicando clicando aqui.

http://tdn.totvs.com.br/display/public/rm/TBC+-+Web+Service+ConsultaSQL 

  

Card
idPasso 3
labelPasso 3
titlePasso 3

Importando os arquivos dos aceleradores para o Fluig:

Após salvar os arquivos, basta importar o arquivo “*.fluigprj” para dentro do seu projeto.

 

 

 

 

 

Caso deseje fazer a integração manualmente, pode se fazer da seguinte forma:

 

Fazendo a comunicação via “Web Services SOAP” do aplicativo.

Neste tipo de integração utilizando Web Service padrão SOAP disponibilizado pelo ERP, o acesso do Fluig a estes serviços é direto.

A seguir são apresentadas as configurações do Fluig para acesso ao Web Service padrão SOAP:

 

 

Deck of Cards
idPasso a Passo
function createDataset(fields, constraints, sortFields) { var NOME_DATASERVER = "FisEtdDataBR"; try { // carrega o webservice... var authService = getWebService(); // monta o filtro... var parsedConstraints = parseConstraints(constraints, true); // faz a leitura... var result = authService.readView(NOME_DATASERVER, parsedConstraints.filter, parsedConstraints.context); // carrega o xml... var xmlResultados = new XML(result); // verifica se a tabela é válida... if(xmlResultados.GETD == null){ return logError("A tabela GETD nao foi encontrada: " + NOME_SERVICO + " - " + CAMINHO_SERVICO); } // inicializa o dataset do resultado... var dataset = DatasetBuilder.newDataset(); dataset.addColumn("DESCRICAO"); dataset.addColumn("CODETD"); // preenche o dataset... for each(item in xmlResultados.GETD) { dataset.addRow(new Array( item.DESCRICAO.toString() , item.CODETD.toString() )); } // retorna... return dataset; } catch (e) { if (e == null) e = "Erro desconhecido!"; var mensagemErro = "Ocorreu um erro ao ler dados do RM: " + e; return logError(mensagemErro); } } function logError(mensagemErro) { var dataset = DatasetBuilder.newDataset(); dataset.addColumn("erro"); dataset.addRow(new Array(mensagemErro)); log.error(mensagemErro); return dataset; } // carrega o web service function getWebService(){ var NOME_SERVICO = "WSDATASERVER"; var CAMINHO_SERVICO = "com.totvs.WsDataServer"; var dataServerService = ServiceManager.getServiceInstance(NOME_SERVICO); if(dataServerService == null){ throw "Servico nao encontrado: " + NOME_SERVICO; } var serviceLocator = dataServerService.instantiate(CAMINHO_SERVICO); if(serviceLocator == null){ throw "Instancia do servico nao encontrada: " + NOME_SERVICO + " - " + CAMINHO_SERVICO; } var service = serviceLocator.getRMIwsDataServer(); if(service == null){ throw "Instancia do dataserver do invalida: " + NOME_SERVICO + " - " + CAMINHO_SERVICO; } var serviceHelper = dataServerService.getBean(); if(serviceHelper == null){ throw "Instancia do service helper invalida: " + NOME_SERVICO + " - " + CAMINHO_SERVICO; } var authService = serviceHelper.getBasicAuthenticatedClient(service, "com.totvs.IwsDataServer", 'mestre', 'totvs'); if(serviceHelper == null){ throw "Instancia do auth service invalida: " + NOME_SERVICO + " - " + CAMINHO_SERVICO; } return authService; } //Transforma o conceito de constraints do Fluig para o Filtro do TBC. function parseConstraints(constraints, filterRequired) { // inicializa o resultado... var result = []; result.context = ""; // inicializa o filtro... var filter = ""; // varre as contraints... for each(con in constraints) { var fieldName = con.getFieldName().toUpperCase(); if (fieldName == "RMSCONTEXT") { result.context = con.getInitialValue(); continue; } filter += "("; if (fieldName == "RMSFILTER") { filter += con.getInitialValue(); } else { if (con.getInitialValue() == con.getFinalValue() || isEmpty(con.getFinalValue())) { filter += con.getFieldName(); var isLike = false; switch(con.getConstraintType()) { case ConstraintType.MUST: filter += " = "; break; case ConstraintType.MUST_NOT: filter += " = "; break; case ConstraintType.SHOULD: filter += " LIKE "; isLike = true; break; case ConstraintType.SHOULD_NOT: filter += " NOT LIKE "; isLike = true; break; } filter += getFormattedValue(con.getInitialValue(), isLike); } else { filter += con.getFieldName(); filter += " BETWEEN "; filter += getFormattedValue(con.getInitialValue(), false); filter += " AND "; filter += getFormattedValue(con.getFinalValue(), false); } } filter += ") AND "; } if (filter.length == 0) { if(filterRequired){ filter = "1=2"; } else{ filter = "1=1"; } } else filter = filter.substring(0, filter.length-5); // guarda o filtro... result.filter = filter; // retorna o resultado... return result; } function isEmpty(str) { return (!str || 0 === str.length); } function getFormattedValue(value, isLike){ if(isLike){ return "'%" + value + "%'"; } else{ return "'" + value + "'"; } }

Passo 2

 

Utilizar o serviço cadastrado nos pontos requeridos no escopo da integração.

Exemplo: eventos de formulário, eventos de workflow e datasets.

Card
idPasso 1
labelPasso 1
titlePasso 1

Cadastrar um serviço do tipo Web Services dentro do Fluig pelo Fluig Studio (opção Incluir Serviços na aba Visualizar Serviços) apontando para WSDL doWeb Service SAP disponibilizado para integração.

 

Nota: A criação de DataSets que consomem WebServices do RM pode ser obtidos modificando o template abaixo:

Obs: o campo “NOME_DATASERVER” é o ID obtido de acordo com o passo 2 “Localizando o serviço RM que deseja integrar

Bloco de código
languagejs
themeEclipse
titleCriar Dataset
Card
idPasso 2
labelPasso 2
titlePasso 2

 

 

Nota
titleNota

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

...

O processo de integração do RM com o Fluig ocorre por chamada dos Web Services Fluig padrão SOA.

 

Nota

Mais informações sobre os Web Services Fluig podem ser obtidas em Utilização de Web Services.