Caracteres especiais no nome do arquivo em anexo

Tem como remover os caracteres especiais do nome do arquivo anexado?

Tentei com essa função, mas o tratamento teria que ser feito num evento de processo.


function validaCaracteres(nomeDocumento) {
    strSChar = "áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ";
    strNoSChars = "aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC";
    var newStr = "";

    for (var i = 0; i < nomeDocumento.length; i++) {
        if (strSChar.indexOf(nomeDocumento.charAt(i)) != -1) {
            newStr += strNoSChars.substr(strSChar.search(nomeDocumento.substr(i, 1)), 1);
        } else {
            newStr += nomeDocumento.substr(i, 1);
        }
    }

    return newStr.replace(/[^a-zA-Z 0-9]/g, '').toUpperCase();
}

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

@Marcella, chegou a testar esse código no evento do Processo? Creio de dará certo. Se não der, verifique no log em qual função que ele irá dar erro.

Sim. Ele não entra no for e reclamou das expressões regulares

Marcella, consegue detalhar a demanda que você tem? Você quer alterar o nome do arquivo físico ou o nome do documento publicado no fluig?

Marcos, temos integração com o Protheus, quando o anexo possui acentos, isso gera problemas. Então foi pedido um tratamento no nome do anexo no Fluig, ou seja, antes de ir para o Protheus.

@Marcella,

Teste dessa forma:


function validaCaracteres(nomeDocumento) {
    strSChar = "áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ";
    strNoSChars = "aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC";
    var newStr = "";

    for (var i = 0; i < nomeDocumento.length(); i++) {
        log.info("#### ENTROU NO FOR ####");
        if (strSChar.indexOf(nomeDocumento.charAt(i)) != -1) {
            log.info("UM");
            newStr += strNoSChars.substring(strSChar.contains(nomeDocumento.substring(i, 1)), 1);
        } else {
            log.info("DOIS");
            newStr += nomeDocumento.substring(i, 1);
        }
        log.info("#### newStr ####");
        log.info(newStr);
    }

    return newStr.replace(/[^a-zA-Z 0-9]/g, '').toUpperCase();
}

Ele entrou no for, mas não tratou os caracteres.

Coloquei a parte do log do que ele faz.

Alterei o código, testa ele

Inseri outro log, acusou erro ao salvar anexo.

Editei o código, teste ele.

Coloquei a parte do log. “newStr” retorna apenas “â”.

Verifica se a sua Workspace no Studio está com codificação UTF-8… Talvez está exportando com outra codificação e está indo errado para o fluig…

Está com UTF-8 sim, acabei de verificar.

Consegui uma solução paliativa usando só “replace”.

Uma forma paliativa de resolver o problema de acentuação do nome do arquivo foi utilizando o replace.


function validaCaracteres(nomeDocumento) {

    return nomeDocumento
        .replace("á", "a").replace("à", "a").replace("â", "a").replace("ã", "a")

    (...)
}

Utlizando o replace pode ser que dê problema, pois ele dá replace na primeira letra que encontrar, não em todas. Exemplo, imagine que o arquivo está com esse nome: áábcde, quando você der uma .replace(“á”), o arquivo ficará com esse nome: aábcde