La visibilidad por script permite configurar visibilidades dinámicas para los campos del formulario. Así, puedes definir si ciertos campos deben ser requeridos, editables, solo lecutra u ocultos en base al valor de otro campo o a la decisión tomada en cierta tarea.

Funciones disponibles
La API de Flokzu ofrece el siguiente conjunto de funciones para usar en los scripts:
Flokzu.setHidden( [[campo]] ); //Oculta un campo
Flokzu.setRequired( [[campo]] ); //Vuelve requerido un campo
Flokzu.setEditable( [[campo]] ); //Vuelve un campo editable
Flokzu.setReadOnly([[campo]]): //Vuelve un campo sólo lectura
Flokzu.setFieldValue( [[campo]] , "valor" ); //Sobreescribe el valor de un campo al valor especificado
Flokzu.getFieldValue( [[campo]] ); //Obtiene el valor de un campo
Flokzu.getAllColumnValues( [[campo::columna]] ); // Obtiene todos los valores de una columna de un campos tabla
Flokzu.onChange( [[campo]] , function ); //Cuando cambia un campo, ejecuta una function
Flokzu.onTableChange( [[campo::columna]], function ); //Cuando cambie una columna de una tabla, ejecuta una function
Flokzu.onInit(function); //Para ejecutar una function que inicialice todo (cuando carga la página por ejemplo)
Flokzu.onAction(function) //Para ejecutar una function cuando se presione algún botón (decisión). En el segundo parámetro se almacena el valor del botón presionado.
Flokzu.error( [[campo]] , "mensaje" ); //Lanza un error asociado a un campo, mostrando el mensaje correspondiente
Flokzu.currentUser(); //Retorna el mail del usuario logueado
Flokzu.getFieldByName( "nombreDeCampo" ); //​Retorna el id de campo a partir del nombre

El nombre de los campos y botones debe escribirse exactamente igual, respetando mayúsculas, minúsculas, espacios y caracteres especiales.

Metodología para el desarrollo de scripts
Salvo las funciones de la API de Flokzu y la forma especial de referenciar los campos utilizanado [[]], el resto del código es JavaScript y se rige por las reglas de desarrollo Javascript.

Un script de visibilidad es básicamente un conjunto de funciones que determina bajo qué condiciones hay que modificar la visibilidad de un campo.
Además, cada función debe suscribirse al campo que quiere "escuchar" para que al cambiar el valor de ese campo, se ejecute la función automáticamente. Si una función debe ejecutarse ni bien se abre la instancia de proceso (ej.: para ocultar un campo), además deberá suscribirse mediante el método Flokzu.onInit.

REGLA: Para poder modificar la visibilidad de un campo en tiempo real, dependiendo de otros campos, el campo cuya visibilidad cambiará dinámicamente debe estar configurado como editable en el proceso (para la tarea que tenga el script). Caso contrario, por más que se modifique la visibilidad por script no se comportará adecuadamente.

Estructura del script
1) Escribir todas las funciones necesarias para configurar la visibilidad dinámica.
Para definir una función debes escribir:
function nombreFuncion(){ ... contenido de la función ... }

2) Suscribir las funciones a los campos correspondientes y/o al evento de inicialización. Las suscripciones deben estar dejabo de la definición de la función.
//Suscribirse a un campo para ejecutar una función
Flokzu.subscribe( [[nombre campo]] , nombreFuncion );
//Suscribirse al evento de inicio
Flokzu.onInit(nombreFuncion);


Ejemplo según valor de un campo
En este ejemplo, tenemos un campo combo manual llamado "Estado Civil" y cuando un usuario selecciona la opción "Otro", se mostrará el campo "Por favor especifique" (requerido). En caso contrario ese campo estará oculto.

En primer lugar definimos la siguiente función:

//Function maritalStatus para evaluar el contenido del campo "Estado Civil"
function maritalStatus(){
if ( Flokzu.getFieldValue( [[Estado Civil]] ) == "Otro" ){
//Establecemos el campo como requerido
Flokzu.setRequired( [[Por favor especifique]] );
} else {
// En cualquier otro caso, el campo será oculto
Flokzu.setHidden( [[Por favor especifique]] );
}
};

Luego es necesario suscribir a la función al campo correspondiente:

//Debemos "escuchar" el campo "Estado Civil" y cuando cambie ejecutar la funcion.
Flokzu.onChange( [[Estado Civil]] , maritalStatus);

//Dado que el campo "Estado Civil" estará editable (por REGLA), queremos que ni bien se abra la instancia de proceso, si el valor no es "Otro", quede oculto. Por eso hay que suscribir a la función al evento de inicio.
Flokzu.onInit( maritalStatus );


Resultado final




Ejemplo según botón seleccionado
A veces la visibilidad de un campo dependerá de la decisión tomada. Por ejemplo, si se decide rechazar una solicitud podemos establecer que el campo "Motivo de rechazo" sea obligatorio. En cambio, si se aprueba ese campo estará oculto.
En ese caso la función tiene 2 parámetros que pueden ser utilizados para consultar que decisión (botón) se ha elegido:

function test(msg,boton){
if(boton== "Rechazar"){
Flokzu.setRequired([[Motivo de Rechazo]]);
}
else{
Flokzu.setHidden([[Motivo de Rechazo]]);
}
}

Flokzu.onAction(test);



Ejemplo getAllColumnValues
Si se utiliza la función Flokzu.getAllColumnValues, se puede iterar sobre los valores de la siguiente forma:

function funcX(msg, data){
$(Flokzu.getAllColumnValues( [[campo::columna]] )).each(
function(){
alert( $(this).attr('value') ); //Lanza un alert con cada uno de los valores.
}
);
}

Flokzu.onTableChange( [[campo::columna]] , funcX );
¿Este artículo te resultó útil?
¡Gracias!