...
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 | default |
---|
true | id | Passo 1 |
---|
label | Passo 1 |
---|
title | 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 |
---|
id | Passo 2 |
---|
label | Passo 2 |
---|
title | Passo 2 |
---|
| Localizando o serviço RM que deseja integrar Os serviços do RM são disponibilizados por três formas: Deck of Cards |
---|
| Card |
---|
id | DataserversDataserves |
---|
label | DataserversDataserves |
---|
title | DataserversDataserves |
---|
| 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: - 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 o contexto e o filtro informado.
- 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.
- 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 |
---|
| Importante: o passo 4 marca o nome do ID que deverá ser passado no parâmetro “DataServer” dos Web Services Webservices acima. |
|
|
Card |
---|
id | Passo 3 |
---|
label | Passo 3 |
---|
title | 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: Deck of Cards |
---|
| Card |
---|
id | Passo 1 |
---|
label | Passo 1 |
---|
title | 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” Bloco de código |
---|
| language | js |
---|
theme | Eclipse |
---|
title | Criar Dataset |
---|
| 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 + "'";
}
} Card |
---|
id | Passo 2 |
---|
label | Passo 2 |
---|
title | Passo 2 |
---|
| 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.
|
Nota |
---|
| | Mais informações sobre customização Fluig podem ser obtidas em Customização de Workflow.
|
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
...
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.