Páginas filhas
  • Integração Fluig RM

Versões comparadas

Chave

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

 

Índice

Objetivo

O objetivo deste guia é apresentar as características e a configuração da integração do Fluig com o ERP RM.

Fluig acessando ERP RM

O processo de integração do Fluig com o ERP RM possui duas formas: uma utilizando os Web Services padrão SOA hospedados diretamente no serviço de HOST da aplicação e outra utilizando os Web Services dentro do IIS (Internet Information Services).

...

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
Card
labelPasso 1

Passo 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>

...

 

 

...

Card
idPasso 2
labelPasso 2

Passo 2

Localizando o serviço RM que deseja integrar

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

1)

...

      DataServers: Todos os CRUDS dos cadastros desenvolvidos na tecnologia .NET do RM são disponibilizados através do Web

...

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

...

  1. contexto e o filtro informado.
  2. ReadRecord:

...

  1.  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.
  2. SaveRecord:

...

  1.   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 aqui

...

 ou usando a opção de localizar do aplicativo “TOTVS WS Client

 

 

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

2)

...

      Processos: Expõe no wsProcess

...

 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

 

3)

...

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

...

clicando aqui.

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

 

 

Passo 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:

 

Passo 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

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.

...

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

ERP RM acessando Fluig

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

...