Versões comparadas
Chave
- Esta linha foi adicionada.
- Esta linha foi removida.
- A formatação mudou.
Índice:
Í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 DataSets: Desenvolvimento 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 Service:
Integração com Aplicativos Externos
Download arquivo: WsFuigDataSet.js
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
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; // solicita a geração do realtório e armazena o identificador único var guid = authIwsDataServer.generateReport(CodigoColigadaRel, IdRelatorio, '', parametros, NomeRelatorio); // 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: " + 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 | ||||
---|---|---|---|---|
| ||||
<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.
Download arquivo: WsFluigReports.js
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
function GerarRelatorioRM() { // cria uma nova janela para exibição do conteúdo do relatório em PDF newWindow = window.open('RMReports', 'pagina'); newWindow.document.write("<iframe id='iFrameReport' width='100%' height='100%' src='" + getBytesRMReport() + "'></iframe>"); } 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; } |
Informações | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||
|
Informações | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||
|
Índice:
Í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 DataSets: Desenvolvimento 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 Service:
Integração com Aplicativos Externos
Download arquivo: WsFuigDataSet.js
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
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;
// solicita a geração do realtório e armazena o identificador único
var guid = authIwsDataServer.generateReport(CodigoColigadaRel, IdRelatorio, '', parametros, NomeRelatorio);
// 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: " + 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 | ||||
---|---|---|---|---|
| ||||
<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.
Download arquivo: WsFluigReports.js
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
function GerarRelatorioRM() {
// cria uma nova janela para exibição do conteúdo do relatório em PDF
newWindow = window.open('RMReports', 'pagina');
newWindow.document.write("<iframe id='iFrameReport' width='100%' height='100%' src='" + getBytesRMReport() + "'></iframe>");
}
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;
} |
Informações | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||
|
icon | false |
---|
Informações | ||
---|---|---|
| ||
Status: Em construção |
Informações | ||
---|---|---|
| ||
Data: |
icon | false |
---|
Autores: