Versões comparadas

Chave

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

Índice:


       

Índice
exclude.*ndice:

Objetivo:


Exemplo de utilização do Web Service do RM Reports no Fluig.

Este documento tem o intuito de auxiliar na criação de uma integração simples entre o Fluig e o Web Service do RM Reports (TBC - Web Services Reports)

Cadastro do Web Service do RM Reports no Fluig:


O Web Service do RM Reports deve ser cadastrado no Fluig para que possa ser acessado na integração. Segue link da documentação para disponibilizar o serviço no Fluig: Visualização de Serviços

Criação do DataSet com o conteúdo do relatório gerado:


Para que os dados de um relatório sejam retornados, deve-se criar um DataSet no Fluig que consumirá o Web Service do RM Reports, solicitará a geração do relatório desejado e retornará o conteúdo do relatório gerado. O arquivo WsFuigDataSet.js é um exemplo da criação de um DataSet com informações para a geração de um relatório de boleto. Segue link da documentação do Fluig para o desenvolvimento de DataSetsDesenvolvimento de Datasets

Segue link da documentação da integração do Fluig com aplicativos externos que auxilia no entendimento de como recuperar as informações do Web ServiceIntegração com Aplicativos Externos


Bloco de código
languagejs
titleExemplo - WsFuigDataSet.js
collapsetrue
function createDataset(fields, constraints, sortFields) {

	try {		
		// 'WSRMReports' é o identificador utilizado no cadastro do Web Service do RM Reports no Fluig
		const SERVICE_STUB = ServiceManager.getService('WSRMReports'); // Cria o objeto de Integração
		log.info("wsProjetos-> SERVICE_STUB: " + SERVICE_STUB);
		const SERVICE_HELPER = SERVICE_STUB.getBean();

		// Cria o obejto da classe principal do Servico
		const wsReport = SERVICE_HELPER.instantiate('com.totvs.WsReport');
		log.info("wsProjetos-> wsReport: " + wsReport);

		// Obtem o objeto do WS
		var iWsReport = wsReport.getRMIwsReport();
		log.info("wsProjetos-> iWsReport: " + iWsReport);

		// Usuário e senha para autenticação no RM
		var rm_user = 'XXXXX';
		var rm_pass = '*****';

		var authIwsDataServer = SERVICE_STUB.getBasicAuthenticatedClient(iWsReport, 'com.totvs.IwsReport', rm_user, rm_pass);
		log.info("wsProjetos-> authIwsDataServer: " + authIwsDataServer);

		var NomeRelatorio = 'Relatorio.pdf';
		var IdBoleto = '1';

		// recupera o ID do boleto de acordo com parâmetro passado na constraint
		if (constraints.length > 0) {
			IdBoleto = String(new java.lang.String(constraints[0].getInitialValue()));
		}
		
		// XML de parâmetros recuperado pelo Web Service do RM Reports
		var parametros = "<ParametersSet>" +
			"<xs:schema id=\"ParametersSet\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">" +
			"<xs:element name=\"ParametersSet\" msdata:IsDataSet=\"true\" msdata:UseCurrentLocale=\"true\">" +
			"<xs:complexType>" +
			"<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">" +
			"<xs:element name=\"ParametersTable\">" +
			"<xs:complexType>" +
			"<xs:sequence>" +
			"<xs:element name=\"Description\" type=\"xs:string\" minOccurs=\"0\" />" +
			"<xs:element name=\"Name\" msdata:Caption=\"Nome\" type=\"xs:string\" minOccurs=\"0\" />" +
			"<xs:element name=\"Value\" msdata:DataType=\"System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" msdata:Caption=\"Valor\" type=\"xs:anyType\" minOccurs=\"0\" />" +
			"<xs:element name=\"Type\" msdata:DataType=\"System.Type, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" type=\"xs:string\" minOccurs=\"0\" />" +
			"</xs:sequence>" +
			"</xs:complexType>" +
			"</xs:element>" +
			"</xs:choice>" +
			"</xs:complexType>" +
			"</xs:element>" +
			"</xs:schema>" +
			"<ParametersTable>" +
			"<Description />" +
			"<Name>CODCOLIGADA</Name>" +
			"<Value xsi:type=\"xs:int\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">1</Value>" +
			"<Type>System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</Type>" +
			"</ParametersTable>" +
			"<ParametersTable>" +
			"<Description />" +
			"<Name>IDBOL</Name>" +
			"<Value xsi:type=\"xs:int\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + IdBoleto + "</Value>" +
			"<Type>System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</Type>" +
			"</ParametersTable>" +
			"</ParametersSet>"

		// dados de cadastro relatório
		var CodigoColigadaRel = 1;
        var IdRelatorio = 29; 
        var Contexto = "codcoligada=1;codsistema=G";

		// solicita a geração do realtório e armazena o identificador único
		var guid = authIwsDataServer.generateReport(CodigoColigadaRel, IdRelatorio, '', parametros, NomeRelatorio, Contexto);

		// recupera o tamanho do relatório gerado
		var size = authIwsDataServer.getGeneratedReportSize(guid);

		var offset = 0;
		var rptstr = "";
		var pack = 65000;

		// monta o arquivo com o relatório gerado
		while (offset < size) {
			var temp = pack;
			if ((offset + temp) > size)
				temp = size - offset;

			rptstr += authIwsDataServer.getFileChunk(guid, offset, temp);

			offset = offset + pack;
		}

		result = rptstr;

		log.info("Resultado do Servico:
//tdn.totvs.com/display/public/fluig/Desenvolvimento+de+Datasets
 " + result);

		//O TBC retorna os valores da chave caso o registro tenha sido salvo,
		//caso contrário, a exceção ocorrida é enviada pelo mesmo retorno, porém
		//formatada entre linhas '==='

		if ((result != null) && (result.indexOf("===") != -1)) {
			log.info("Erro no serviço.");
			var msgErro = result.substring(0, result.indexOf("==="));
			log.info(msgErro);
			throw msgErro;
		}

		var dataset = DatasetBuilder.newDataset();

		dataset.addColumn("RELATORIO");
		dataset.addRow(new Array(result));

		log.info("RELATORIO: " + result);

		return dataset;

	} catch (e) {
		return getDatasetError(e);
	};
}

function getDatasetError(exception) {
	var dtsError = DatasetBuilder.newDataset();
	dtsError.addColumn("ERROR");
	dtsError.addRow(["Ocorreu um erro na execução do DataSet. Mensagem: " + exception]);
	return dtsError;

};


Exibição do relatório gerado nas páginas do Fluig:


Depois de disponibilizar o serviço e criar o DataSet do relatório, é necessário recuperar os dados DataSet e exibir o relatório. A página em que a integração for disparada deve possuir um link com a chamada para as funções JavaScript que solicitam a geração dos relatórios, no caso deste exemplo, inserimos um link simples na página.


Bloco de código
languagexml
titleExemplo
<a id="boleto" href="#" onclick="GerarRelatorioRM()">Gerar Boleto</a>


O evento de click deste link executa as funções JavaScript abaixo que solicitarão a geração do relatório. O arquivo WsFluigReports.js deve ser referenciado na página do Fluig com o link para geração.


Bloco de código
languagejs
titleExemplo - WsFluigReports.js
collapsetrue
function GerarRelatorioRM() {

	// cria uma nova janela para exibição do conteúdo do relatório em PDF
	var newWindow = window.open("RMReports", "pagina");
    var data = getBytesRMReport();
    newWindow.document.write("<html><body><iframe title=\"MY title\" width=\"100%\" height=\"100%\" src=\"" + data + "\"></iframe></body></html>"); 
}


function getBytesRMReport() {

	// Constraint com o identificador do boleto que será utilizado para geração do realtório
	var IdBoleto = DatasetFactory.createConstraint("IDBOLETO", "110011", "110011", ConstraintType.MUST);
	var constraints = new Array(IdBoleto);

	var resultado = "";

	// dsRelatorioWs é identificador do DataSet exportado para o Fluig
	var dataset = DatasetFactory.getDataset("dsRelatorioWs", null, constraints, null);
	var wsReport = dataset.values[0];

	// seta o formato de abertura da string base 64 retornada pelo Web Service do RM Reports para PDF
	if (dataset.values.length == 1) {
		resultado = "data:application/pdf;base64, " + wsReport["RELATORIO"];
	}

	return resultado;
}
Painel
titleExemplo prático utilizando o recurso Minhas Páginas do Fluig
collapsetrue

Podemos realizar um teste símples utilizando o recurso Minhas Páginas do Fluig.

  • Acesse:  Painel de Controle > Personalização > Minhas Páginas;
  • Crie uma nova página;
  • Adicione um widget Editor de Conteúdo do agrupador WCM;
  • Clique na opção código-fonte e insira o código a seguir;


Bloco de código
languagejs
titleCódigo Exemplo
collapsetrue
<html>
<head>
	<title></title>
</head>
<body>
  <script type="text/javascript" src="/webdesk/vcXMLRPC.js"></script>
  <script>
    function GerarRelatorioRM() { 
    // cria uma nova janela para exibição do conteúdo do relatório em PDF
    var newWindow = window.open("RMReports", "pagina");
    var data = getBytesRMReport();
    newWindow.document.write("<html><body><iframe title=\"MY title\" width=\"100%\" height=\"100%\" src=\"" + data + "\"></iframe></body></html>");
}
 
function getBytesRMReport() {
 
    // Constraint com o identificador do boleto que será utilizado para geração do realtório
    var IdBoleto = DatasetFactory.createConstraint("IDBOLETO", "110011", "110011", ConstraintType.MUST);
    var constraints = new Array(IdBoleto);
 
    var resultado = "";
 
    // dsRelatorioWs é identificador do DataSet exportado para o Fluig
    var dataset = DatasetFactory.getDataset("dsRelatorioWs", null, constraints, null);
    var wsReport = dataset.values[0];
 
    // seta o formato de abertura da string base 64 retornada pelo Web Service do RM Reports para PDF
    if (dataset.values.length == 1) {
        resultado = "data:application/pdf;base64, " + wsReport["RELATORIO"];
    }
 
    return resultado;
}
</script>
<p><button onclick="GerarRelatorioRM()">Gerar Relatório</button></p>

<div id="my-div"> </div>
</body>
</html>

Expandir
titleExemplo ilustrativo...

Exemplo ilustrativoImage Added

Informações
iconfalse
Informações
iconfalse

Produto: Framework

Informações
iconfalse

Versão: 12.011.XX

Informações
iconfalse

Processo: Web Service do RM Reports no Fluig

Informações
iconfalse
Informações
iconfalse

Status: Em construção Finalizado

Informações
iconfalse

Data:  

Informações
iconfalse

Autores:

Erlon Cesar Lima De Freitas

Flavio Henrique Pereira Campelo

Gustavo Naves De Castro

Philippe Fernandes Lima Gonçalves

SARAH ROLAND CAMPOS LISBOA

Wesley Avelino De Carvalho