Erro XML integração Fluig x RM

Olá.

Estou desenvolvendo uma integração Fluig x RM e preciso ter os dados ta tabela de matrícula no período letivo dentro de um dataset do Fluig. Porém quando tento realizar esta busca recebo o erro:

Character reference "&#x1F" is an invalid XML character

Alguém já recebeu este erro, ou sabe o que poderia ser?

Documentação da view em questão: http://api.totvs.com.br/devrm/bo_rm/EduMatricPLData.html?Objeto=EduMatricPLData

Código do Dataset abaixo

// Programa responsável por integrar com os Webservices do RM  
// Para executar o programa, seguir os passos abaixo:  
//    1) Adicionar o arquivo abaixo ao seu projeto:  
//            http://tdn.totvs.com/download/attachments/211064343/DataClientfluig.js  
//     2) Inclua um serviço no Fluig com o nome WSDATASERVER apontando para    
//       http://localhost:8051/wsDataServer/MEX?singlewsdl (substituir localhost pelo IP e Porta do servidor RM)//.  

function createDataset(fields, constraints, sortFields)  
{  
    /* Prepararação das variaveis */    

    //usuário e senha do aplicativo RM. O mesmo utilizado para logar no sistema e que tenha permissão de     
    //acesso ao cadastro que deseja utilizar    
    var usuario = "mestre";    
    var senha = "totvs";    
    //importante passar no contexto o mesmo código de usuário usado para logar no webservice    

    var context = "CODCOLIGADA=1;CODFILIAL=1;CODSISTEMA=S;CODUSUARIO=mestre"    
    //o filtro pode ser qualquer campo da visão, por exemplo CODCOLIGADA=1 AND CODFILIAL = 1    
    var filtro = "1=1";

    var retorno = dcReadView("EduMatricPLData", context, usuario, senha, filtro);


    //Caso deseje utilizar as contraints do formulário  
    //var parsedConstraints = parseConstraints(constraints, true);  
    //var retorno = authService.readView("EduMatricPLData", parsedConstraints.filter, parsedConstraints.context, senha, filtro);  


    var xmlResultados = new XML(retorno);  



    for(var i = 0; i < xmlResultados.SMatricPL.length(); i++)   
    {   

    var dataset = DatasetBuilder.newDataset();     
             dataset.addColumn('CODCOLIGADA');   
             dataset.addColumn('RA');   
             dataset.addColumn('IDHABILITACAOFILIAL');   
             dataset.addColumn('IDPERLET');   
             dataset.addColumn('CODFILIAL');   
             dataset.addColumn('CODSTATUS');   
             dataset.addColumn('DTMATRICULA');   
             dataset.addColumn('PERIODO');   
             dataset.addColumn('NOMEALUNO');   
             dataset.addColumn('CODTIPOCURSO');   
             dataset.addColumn('NOMECURSO');
             dataset.addColumn('CONTADOR');   

             dataset.addRow(new Array(   
                     xmlResultados.SMatricPL[i].CODCOLIGADA.toString(),   
                     xmlResultados.SMatricPL[i].RA.toString(),   
                     xmlResultados.SMatricPL[i].IDHABILITACAOFILIAL.toString(),   
                     xmlResultados.SMatricPL[i].IDPERLET.toString(),   
                     xmlResultados.SMatricPL[i].CODFILIAL.toString(),   
                     xmlResultados.SMatricPL[i].CODSTATUS.toString(),   
                     xmlResultados.SMatricPL[i].DTMATRICULA.toString(),   
                     xmlResultados.SMatricPL[i].PERIODO.toString(),   
                     xmlResultados.SMatricPL[i].NOMEALUNO.toString(),   
                     xmlResultados.SMatricPL[i].CODTIPOCURSO.toString(),   
                     xmlResultados.SMatricPL[i].NOMECURSO.toString(),   
                     i));

    }
    // retorna...  
    return dataset;  

} 





/**'
* A API de autenticação da Totvs baseia no "Basic access authentication" do HTTP.
 * Código Java para autenticação 
 * Programa responsável por integrar com os Webservices do RM 
 *  Exemplo dev valores para os parâmetros 
 *        @param string Usuario = "mestre";
 *        @param string Senha = "senha";
*/

function getWebService(Usuario, Senha){

    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", Usuario, Senha);      
    if(serviceHelper == null){
        throw "Instancia do auth service invalida: " + Nome_Servico + " - " + Caminho_Servico;
    }

    return authService;
}


function dcReadView(dataservername, context, usuario, senha, filtro)
{     
      // carrega o webservice...
      var authService = getWebService(usuario, senha);

      // lê os dados da visão respeitando o filtro passado
      var viewData = new String(authService.readView(dataservername, filtro, context));

      return viewData;
 }


function dcReadRecord(dataservername, context, usuario, senha, primaryKey)
{     
      // carrega o webservice...
      var authService = getWebService(usuario, senha);

      // lê os dados do registro respeitando a pk passada
      try
      {
        var recordData = new String(authService.readRecord(dataservername, primaryKey, context));
      }
      catch (e) 
      {
          var recordData = new String(authService.getSchema(dataservername, context));
      }

      return recordData;
 }


function dcSaveRecord(dataservername, context, usuario, senha, xml)
{     
      // carrega o webservice...
      var authService = getWebService(usuario, senha);

      // salva o registro de acordo com o xml passado
      var pk = new String(authService.readRecord(dataservername, xml, context));

      return pk;
 }


//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    (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=1";
        }
        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 + "'";
    }
}



function getXMLFromString(xmlString) {
    var factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
    var parser = factory.newDocumentBuilder();
    var is = new org.xml.sax.InputSource();
    is.setCharacterStream(new java.io.StringReader(xmlString));
    return parser.parse(is);
}


 function abrirPesquisa(DATASET_ID, dataFields, resultFields, type, title){    
    window.open("/webdesk/zoom.jsp" +
    "?datasetId=" +
    DATASET_ID +
    "&dataFields=" +
    dataFields +
    "&resultFields=" +
    resultFields +
    "&type=" +
    type+
    "&title=" +
    title     
    , "zoom", "status,scroolbars=no,width=600,height=350,top=0,left=0");
}

function checkIsPK(result, qtd){
    var lines = result.split('\r');

    if(lines.length == 1){
        var pk = result.split(';');
        if(pk.length == qtd)
            return;
    }
        throw result;

}

 function ChekExist(result)
 {
     var lines = result.split('\r');
    if(lines.length > 1)
        return true
    else
        return false;
 }


function replaceValue(text, columnName, newValue){


    if ((newValue != null) && (newValue.trim() != ""))
    {
        var regex = new RegExp("<" + columnName + ">(.*?)<\\/" + columnName + ">", "g");
        var replaceText = "<" + columnName + ">" + newValue + "</" + columnName + ">";

        return text.replace(regex, replaceText);
    }
    else
        return text;
}


function isEmpty(str) {
    return (!str || 0 === str.length);
}
compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do fluig Forum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags rmxfluig xml integracao datasets datasets-customizado ou faça a sua própria pergunta.