Erro ao carregar o displayFields para usuários

Bom dia, pessoal.

Estou com um problema para carregar meu formulário dentro de um processo. Numa determinada atividade, preciso esconder alguns campos do meu formulário e fiz isso através do displayFields.

Tá funcionando direitinho para todos os usuários com papel admin, porem, para outros usuários sem o papel admin, que também possuem acesso ao processo, o displayFields não carrega corretamente. Já o evento de formulario validate está funcionando corretamente para todos os usuarios.

Alguém já passou por isso?

Estou com a versão 1.6.4-180508 203

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

Olá Carolina! Pode compartilhar o código que está implementado no displayFields, por favor?

Olá, Marcos, anexei o arquivo com o displayFields implementado. Agradeço a atençao!

Por nada! Pode enviar o log do fluig também? Esqueci de pedir ele :expressionless:

Marcos, anexei os logs. No arquivo log-admin-4436, a solicitação 4436 foi assumida por um admin e tudo funcionou corretamente. No arquivo log-user-4438, a solicitação 4438 foi assumida por um usuário sem permissão de admin e o displayFields não funcionou.

Qual o número da atividade onde está ocorrendo isso?

Mandei o log fazendo o teste na atividade 3, mas para usuários sem permissão de admin, o displayFields não funciona para nenhuma atividade. Em todas as atividades, o formulário é carregado inteiramente, sem esconder nenhum campo ou div. Esse processo é iniciado através de outro processo, usando o startProcess. No startProcess, configurei para a atividade inicial do segundo processo ser completada automaticamente, dessa forma, o processo já “inicia” na atividade 3

No console do navegador não aparece nada?

Marcos, tirei print do console das duas telas. O primeiro é com o usuário admin e o segundo com o usuário normal. A função listaProcesso() depende de uma informação que só é preenchida posteriormente, por isso está puxando um valor “undefined”

Hoje, um outro desenvolvedor enfrentou um problema parecido. Ele desenvolveu uma widget e deu permissão para um outro usuário comum acessar a página dessa widget. Quando esse usuário comum acessava a página, nada era mostrado, porem, qualquer outro usuário com permissão admin conseguia visualizar o conteudo dessa pagina. Para resolver, ele foi no Painel de Controles e acessou a opção “Permissões” e configurou a permissão “WIDGET - página” para todos os usuários visualizarem. Mas no meu caso, não consegui achar uma solução.

Pode enviar o seu formulário (html, js, eventos), por favor? Acho que o problema não é o displayFields… Abs!

Olá Carolina! Tudo bem?

Pela imagem anexa neste tópico, está ocorrendo um erro no custom.js (linha 310). O displayFields não deve executar corretamente devido esta “quebra” na execução do JavaScript do formulário.

No custom.js é feito uma consulta de dataset para recuperar registros de uma tabela Pai x Filho, correto?

Se nesse Pai x Filho existem registros adicionados por outro usuário, é necessário que o usuário que está consultando tenha permissão nestes registros. Como é o formulário de um processo, você pode passar a constraint “userSecurityId” ao consultar os registros da tabela pai e filho com a matrícula do usuário que possui permissão (um administrador, por exemplo). Mais informações: http://tdn.totvs.com/display/fluig/Desenvolvimento+de+Datasets

Na visualização do formulário os registros do Pai e Filho são exibidos para qualquer usuário que interaja com o processo pois o fluig trata esta questão de segurança. Porém, para consultar os dados via dataset é necessário que as permissões estejam corretas ou utilizar a constraint que citei acima.

Após alterar a consulta do dataset passando a constraint “userSecurityId”, creio que serial melhor externalizar essa consulta em um dataset customizado e no formulário você consulta o dataset customizado – e a constraint (e a consulta como um todo) não fica visível caso algum usuário utilize o Developer Tools do navegador. Caso você precise de algum dado do formulário para consultar o Pai e Filho, você pode passar como constraint no dataset customizado. Para recuperar as constraints em um dataset customizado é bem simples:


function createDataset(fields, constraints, sortFields) {
    var company;
    var initialDate;
    var finalDate;
    if (constraints != null) {
        for (var i = 0; i < constraints.length; i++) {
            if (constraints[i].fieldName == "company") { 
                company = constraints[i].initialValue; 
            }
            else if (constraints[i].fieldName == "date") {
                initialDate = constraints[i].initialValue; 
                finalDate = constraints[i].finalValue;
            }
        }
    }

//implementação do seu dataset...

}

Mais informações: http://tdn.totvs.com/display/fluig/Desenvolvimento+de+Datasets#DesenvolvimentodeDatasets-ConstruindoumDatasetCustomizado

Abs,

Marcos

Olá, Marcos! Tudo certo e com você?
Fiz as alterações mencionadas e agora está funcionando corretamente aqui.
Muito obrigada por toda a atenção!