Páginas filhas
  • Integração Fluig RM

Versões comparadas

Chave

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

...

Âncora
Objetivo
Objetivo
Objetivo

...

Deck of Cards
idPasso a Passo
Card
defaulttrue
idPasso 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>

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: 

DataServerDataServerDataServer
Deck of Cards
idFormas de Acesso ao RM
Card
id
Dataservers
label
Dataservers
title
Dataservers

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 o contexto e o filtro informado.
  3. ReadRecord: 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 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

 

Image Modified

Nota

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

Card
idProcessos
labelProcessos
titleProcessos

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

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 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 + "'";

      }

}

...