Código de formulário: FRM00000822800017320210901100648740305
Erro no console
Código do arquivo publico js:
//Função para referenciar arquivos externos
function loadScripts(urls, callback, index) {
if (index === undefined) index = 0;
$.getScript(urls[index])
.done(function () {
console.log("Script carregado:", urls[index]);
if (index < urls.length - 1) {
loadScripts(urls, callback, index + 1);
} else if (callback) {
console.log("Todos os scripts carregados");
callback();
}
})
.fail(function () {
console.error("Falha ao carregar:", urls[index]);
});
}
// *********************************** AmCharts ********************************************
$(window).on('load', function () {
loadScripts([
'https://cdn.jsdelivr.net/npm/amcharts3/amcharts/amcharts.js',
'https://cdn.jsdelivr.net/npm/amcharts3/amcharts/serial.js',
'https://cdn.jsdelivr.net/npm/amcharts3/amcharts/funnel.js',
'https://cdn.jsdelivr.net/npm/amcharts3/amcharts/pie.js',
'https://cdn.jsdelivr.net/npm/amcharts3/amcharts/themes/light.js',
'https://cdn.jsdelivr.net/npm/amcharts3/amcharts/gauge.js'
], drawAmCharts);
});
function drawAmCharts() {
$('.drawChart').each(function () {
drawAmChart(this);
});
}
function drawAmChart(element) {
var $el = $(element);
$el.removeClass('drawChart'); // Evita desenhar duas vezes
var scriptTag = $el.children('script');
if (scriptTag.length === 0) return;
var json;
try {
json = JSON.parse(scriptTag.text());
} catch (e) {
console.error("JSON inválido no gráfico:", e);
return;
}
$el.empty();
// Verifica se AmCharts existe antes de tentar usar
if (typeof AmCharts === 'undefined') {
console.error("AmCharts ainda não está disponível!");
return;
}
try {
AmCharts.makeChart(element, json);
console.log("Gráfico criado!");
} catch (e) {
console.error("Erro ao criar gráfico:", e);
}
}
// *********************************** AmCharts (END) ********************************************
// Carrega o plugin apenas se estiver na "Master Page"
if (document.getElementById('MasterWraper')) {
let script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://static.latromi.com.br/plugins/CustomStatusBar/v2/custom-status-bar.js';
script.addEventListener('load', function (ev) {
// Este código será executado quando o arquivo for completamente carregado.
var statusBar = new customStatusBar({ height: 22, alignment: 'left' });
statusBar.addField('Usuário Logado: <b>{?SESSION LoginUsuario}</b> Conta: <b>{?SESSION CampoLivre1}</b>');
});
document.head.appendChild(script);
}
Bom dia, @Gabriel!
O código apresentado parece estar OK, seguindo a lógica que esta sendo implementado estará carregando os gráficos que tiverem marcado com a classe drawChart.
O que podemos fazer é tentar limpar o cache do navegador e recarregar as configurações.
Outra ação que pode ser feito é no ponto que está chamando a função loadScripts utilizar a função presente na lib de métodos de extensão do Latromi:
latromiExtensions.loadScripts();
Esperamos que alguma dessas sugestões te auxilie na solução da questão apresentada, mas caso ainda persista estamos à disposição para continuar analisando uma possível solução 
Atualizei a função. Entretanto estou enfrentando problemas com a renderização, principalmente quando envolve atualização das consultas nativas. Existe algum método para identificar o evento de atualização e após completar executar a função de desenhar os gráficos?
Bom dia, @Gabriel!
Sim, é possível usar os callbacks presentes nos métodos dos formulários, sendo eles:
-
setOnFormCreatedCallback: callback responsável por informar o evento de Load do formulário, permitindo acessar os elementos assim que estão renderizados no DOM da página.
-
setOnEventFiringCallback: callback responsável por informar os eventos que estão sendo disparados no formulário.
-
setOnFieldValueChangedCallback: callback reponsável por informar os campos que estão sofrendo alteração de valor no formulário.
Exemplo de utilização
const myForm = (function () {
// Adiciona Callbacks no Formulário
latromi.formManager.setOnFormCreatedCallback(onFormCreated);
latromi.formManager.setOnEventFiringCallback(onEventFiring);
latromi.formManager.setOnFieldValueChangedCallback(onFieldValueChanged);
// Ocorre logo após o form ser inicializado
function onFormCreated(ev) { }
// Ocorre quando um evento é disparado no Form
function onEventFiring(ev) { }
// Ocorre quando o valor de um campo é alterado no Form
function onFieldValueChanged(ev) { }
// Todas as funções acima são "privadas", e não podem ser chamadas externamente.
// As únicas funções que podem ser chamadas externamente são as que compões o resultado a seguir:
return {
test: function() { }
}
})();
Eu adicionei isso, porém não obtive o resultado esperado. O problema continua.
const myForm = (function () {
const amchartsScripts = [
'https://cdn.jsdelivr.net/npm/amcharts3/amcharts/amcharts.js',
'https://cdn.jsdelivr.net/npm/amcharts3/amcharts/serial.js',
'https://cdn.jsdelivr.net/npm/amcharts3/amcharts/pie.js',
'https://cdn.jsdelivr.net/npm/amcharts3/amcharts/themes/light.js',
'https://www.amcharts.com/lib/3/amcharts.js',
'https://cdn.amcharts.com/lib/3/gauge.js',
'https://www.amcharts.com/lib/3/amcharts.js',
'https://www.amcharts.com/lib/3/serial.js',
'https://www.amcharts.com/lib/3/pie.js'
];
// Adiciona Callbacks no Formulário
latromi.formManager.setOnFormCreatedCallback(onFormCreated);
latromi.formManager.setOnEventFiringCallback(onEventFiring);
latromi.formManager.setOnFieldValueChangedCallback(onFieldValueChanged);
// Ocorre logo após o form ser inicializado
function onFormCreated(ev)
{
latromiExtensions.loadScripts(amchartsScripts)
drawAmCharts();
}
// Ocorre quando um evento é disparado no Form
function onEventFiring(ev) {
drawAmCharts();
}
// Ocorre quando o valor de um campo é alterado no Form
function onFieldValueChanged(ev) {
drawAmCharts();
}
// Todas as funções acima são "privadas", e não podem ser chamadas externamente.
// As únicas funções que podem ser chamadas externamente são as que compões o resultado a seguir:
return {
test: function() { }
}
})();
Dentro do método loadscript
existe um parâmetro a mais de callback, que será executado ao terminar de carregar os scripts. Seguindo o código informado pode ser feito a seguinte alteração:
function onFormCreated(ev)
{
latromiExtensions.loadScripts(amchartsScripts, drawAmCharts);
}
Eu conseguiria adaptar isso no arquivo publico ?
Sim, é possível adaptar esse código no Javascript público. No seguinte tópico da comunidade tem alguns exemplos legais que demonstram uma implementação de código.
1 curtida