Índice
- 1 Objetivo
- 2 Fluig acessando ERP RM
- 3 ERP RM acessando Fluig
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 |
---|
|
Card |
---|
| 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 |
---|
| 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: - GetSchema: responsável por retornar o schema (XSD) do XML necessário para salvar um registro (saverecord).
- 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.
- 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.
- 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 |
|
...
...
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) |
|
...
...
...
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) { |
|
...
...
NOME_DATASERVER = "FisEtdDataBR"; |
|
...
...
...
...
authService = getWebService(); // monta |
|
...
...
...
parsedConstraints = parseConstraints(constraints, true); // faz |
|
...
...
...
result = authService.readView(NOME_DATASERVER, parsedConstraints.filter, parsedConstraints.context); // carrega |
|
...
...
...
...
XML(result); // verifica se |
|
...
...
...
if(xmlResultados.GETD == null){ |
|
...
...
logError("A tabela GETD nao foi encontrada: " + NOME_SERVICO + " - " + CAMINHO_SERVICO); } // inicializa |
|
...
...
...
...
dataset = DatasetBuilder.newDataset(); dataset.addColumn("DESCRICAO"); dataset.addColumn("CODETD"); // preenche |
|
...
...
...
...
xmlResultados.GETD) { dataset.addRow(new |
|
...
Array( item.DESCRICAO.toString() , item.CODETD.toString() )); } // retorna... |
|
...
...
...
...
if (e == null) e = "Erro desconhecido!"; |
|
...
...
mensagemErro = "Ocorreu um erro ao ler dados do RM: " + e; |
|
...
...
logError(mensagemErro); } } function |
|
...
...
...
dataset = DatasetBuilder.newDataset(); dataset.addColumn("erro"); dataset.addRow(new |
|
...
Array(mensagemErro)); log.error(mensagemErro); |
|
...
...
...
...
...
...
NOME_SERVICO = "WSDATASERVER"; |
|
...
...
CAMINHO_SERVICO = "com.totvs.WsDataServer"; |
|
...
...
dataServerService = ServiceManager.getServiceInstance(NOME_SERVICO); |
|
...
if(dataServerService == null){ |
|
...
throw "Servico nao encontrado: " + NOME_SERVICO; } |
|
...
...
serviceLocator = dataServerService.instantiate(CAMINHO_SERVICO); |
|
...
if(serviceLocator == null){ |
|
...
throw "Instancia do servico nao encontrada: " + NOME_SERVICO + " - " + CAMINHO_SERVICO; } |
|
...
...
service = serviceLocator.getRMIwsDataServer(); |
|
...
...
throw "Instancia do dataserver do invalida: " + NOME_SERVICO + " - " + CAMINHO_SERVICO; } |
|
...
...
serviceHelper = dataServerService.getBean(); |
|
...
if(serviceHelper == null){ |
|
...
throw "Instancia do service helper invalida: " + NOME_SERVICO + " - " + CAMINHO_SERVICO; } |
|
...
...
authService = serviceHelper.getBasicAuthenticatedClient(service, "com.totvs.IwsDataServer", 'mestre', 'totvs'); |
|
...
if(serviceHelper == null){ |
|
...
throw "Instancia do auth service invalida: " + NOME_SERVICO + " - " + CAMINHO_SERVICO; } |
|
...
...
authService; } //Transforma |
|
...
...
constraints do Fluig para |
|
...
...
...
parseConstraints(constraints, filterRequired) { // inicializa |
|
...
...
...
result = []; result.context = ""; // inicializa |
|
...
...
...
...
...
...
...
...
...
...
fieldName = con.getFieldName().toUpperCase(); if |
|
...
(fieldName == "RMSCONTEXT") { result.context = con.getInitialValue(); |
|
...
continue; } filter += "("; if |
|
...
(fieldName == "RMSFILTER") { filter += con.getInitialValue(); } |
|
...
...
if (con.getInitialValue() == con.getFinalValue() || isEmpty(con.getFinalValue())) { filter += con.getFieldName(); |
|
...
...
...
switch(con.getConstraintType()) { |
|
...
...
ConstraintType.MUST: filter += " = "; |
|
...
...
...
ConstraintType.MUST_NOT: filter += " = "; |
|
...
...
...
ConstraintType.SHOULD: filter += " LIKE "; isLike = true; |
|
...
...
...
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 |
|
...
...
...
...
...
return (!str || 0 === str.length); } function |
|
...
getFormattedValue(value, isLike){ |
|
...
...
...
...
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.
...