Checkbox doesn't always fill in as the client script suggests
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-12-2024 03:30 PM - edited 08-12-2024 03:33 PM
Hello everyone.
I set up an onchange client script to fill a Checkbox field ('block_gestor_inativo') in case of none of the conditions within 2 IF are met (and in fact none of the conditions are met).
The catalog client script involves a search/capture on the server between data from the manager and the head (manager's manager) of the user logged into the instance.
I press F5 on the catalog item page and sometimes the checkbox appears filled in and sometimes it doesn't appear filled in.
What could be causing this? How do I solve it?
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
//Type appropriate comment here, and begin script below
g_form.getReference('manager', function(manager) {
var idManager = manager.sys_id;
var upn_prefix = manager.u_upn.substr(0, 4);
var level = manager.title.substr(0, 1);
var activeManager = manager.active;
var statusManager = manager.locked_out;
//Condições para filtrar o gerente: se ele estiver irregular nestes aspectos, escalamos o Head (gerente do gerente)
if (upn_prefix == 'BAJA' || isNaN(level) || parseInt(level) > 7 || statusManager == 'true' || activeManager == 'false') {
g_form.getReference('manager_manager', function(managerManager) {
var idManagerManager = managerManager.sys_id;
var upn_prefixManager = managerManager.u_upn.substr(0, 4);
var levelManager = managerManager.title.substr(0, 1);
var activeManagerManager = managerManager.active;
var statusManagerManager = managerManager.locked_out;
if (upn_prefixManager == 'BAJA' || isNaN(levelManager) || parseInt(levelManager) < 5 || statusManagerManager == 'true' || activeManagerManager == 'false') {
g_form.setValue('block_gestor_inativo', true);
alert('Gestores bloqueados');
} else {
g_form.clearValue('block_gestor_inativo');
g_form.setValue('approval_group_1', idManagerManager);
}
});
} else {
g_form.clearValue('block_gestor_inativo');
g_form.setValue('approval_group_1', idManager);
}
});
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-12-2024 06:18 PM
I'd try the below:
- Change
g_form.setValue('block_gestor_inativo', true);
to
g_form.setValue('block_gestor_inativo', 'true');
- replace getReference blocks with a GlideAjax-Script Include calls
- Add more alert statements and trace the flow of execution...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-13-2024 07:25 AM
Hello, @AnirudhKumar
Thanks for your help.
I agree with you that making a GlideAJAX is a better alternative. However, in this specific case the creation of a GlideAJAX/Script Include is put as the last option because it is a process that depends on the authorization of a third party.
What I did to solve this problem was to create an onLoad Client Script, taking what was already in the onChange Client Script, and finally adding a setTimeOut to delay the execution of the code by 3 seconds. There's a lot of information to process and sometimes the page load time doesn't match the code execution time.
It looks like this:
function onLoad() {
setTimeout(checkApprovers, 3000);
}
function checkApprovers() {
//Analisando dados do GERENTE
g_form.getReference('manager', function(manager) {
var idManager = manager.sys_id;
var upn_prefix = manager.u_upn.substr(0, 4);
var level = manager.title.substr(0, 1);
var activeManager = manager.active;
var statusManager = manager.locked_out;
//Condições para filtrar o gerente: se ele estiver irregular em um destes aspectos, escalamos o Head (gerente do gerente)
if (upn_prefix == 'BAJA' || isNaN(level) || parseInt(level) > 7 || statusManager == 'true' || activeManager == 'false') {
//Analisando dados do HEAD
g_form.getReference('manager_manager', function(managerManager) {
var idManagerManager = managerManager.sys_id;
var upn_prefixManager = managerManager.u_upn.substr(0, 4);
var levelManager = managerManager.title.substr(0, 1);
var activeManagerManager = managerManager.active;
var statusManagerManager = managerManager.locked_out;
//Se o Head também estiver irregular em um destes aspectos, o campo "Bloquear Gestor Inativo" é preenchido.
if (upn_prefixManager == 'BAJA' || isNaN(levelManager) || parseInt(levelManager) < 5 || statusManagerManager == 'true' || activeManagerManager == 'false') {
g_form.setValue('block_gestor_inativo', true);
} else {
//Se apenas o Gerente estiver irregular, quem vai aprovar a criação de SCTASK é o Head.
g_form.clearValue('block_gestor_inativo');
g_form.setValue('approval_group_1', idManagerManager);
}
});
} else {
//Se apenas o Head estiver irregular, quem vai aprovar a criação de SCTASK é o Gerente.
g_form.clearValue('block_gestor_inativo');
g_form.setValue('approval_group_1', idManager);
}
});
}