Localizando o serviço RM que deseja integrar Os serviços do RM são disponibilizados por três formas: Deck of Cards |
---|
| | DataServer | DataServer | DataServer | 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 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. |
|
|
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 + "'"; } } |