In Livecycle spesso si ha a che fare con form che contengono campi obbligatori, ovviamente in tal caso non è possibile eseguire la submit fino a quando questi campi non sono compilati.
Però può succedere che per vari motivi si debba inviare comunque la form al backend in una sorta di step intermedio.
Nel mio caso si tratta di un documento particolarmente lungo ed era necessario dare la possibilità all'utente di salvare il documento in bozza sul server, quindi di fatto eseguire una submit ignorando temporaneamente i campi mandatory.
Secondo lo scripting reference di livecycle per recuperare tutti i field di una form posso utilizzare questo codice:
Però può succedere che per vari motivi si debba inviare comunque la form al backend in una sorta di step intermedio.
Nel mio caso si tratta di un documento particolarmente lungo ed era necessario dare la possibilità all'utente di salvare il documento in bozza sul server, quindi di fatto eseguire una submit ignorando temporaneamente i campi mandatory.
Secondo lo scripting reference di livecycle per recuperare tutti i field di una form posso utilizzare questo codice:
// Get the field containers from each page.
for (var nPageCount = 0; nPageCount < xfa.host.numPages; nPageCount++) { var oFields = xfa.layout.pageContent(nPageCount, "field"); var nNodesLength = oFields.length;
Usando questo comando però vengono recuperati tutti i campi all'interno del layout della form xfa.layout.pageContent e questo non andava bene nel mio caso, perché venivano ignorati tutti i campi obbligatori nascosti (e quindi esclusi dal layout).
Per ovviare al problema ho utilizzato una funzione ricorsiva che legge tutti i nodi della form, quando trova un campo field o combobox disabilita il mandatory.
Ma non è finita qui, perché era necessario anche riabilitare on the fly l'obbligatorietà dei campi senza eseguire un refresh della form.
Quindi ogni volta che disabilito un campo salvo il suo status mandatory precedente in un nodo che chiamo prevMandatory e che appendo all'attributo desc del campo stesso.
In questo modo posso disabilitare e riabilitare i campi mandatory in qualsiasi fase della compilazione.
Questa funzione disabilita i campi obbligatori, come parentElement passo la root della form:
Ma non è finita qui, perché era necessario anche riabilitare on the fly l'obbligatorietà dei campi senza eseguire un refresh della form.
Quindi ogni volta che disabilito un campo salvo il suo status mandatory precedente in un nodo che chiamo prevMandatory e che appendo all'attributo desc del campo stesso.
In questo modo posso disabilitare e riabilitare i campi mandatory in qualsiasi fase della compilazione.
Questa funzione disabilita i campi obbligatori, come parentElement passo la root della form:
function
removeRequiredFields(parentElement){
var
currentElement;
var
allChildrens = parentElement.nodes;
for
(
var
i=0; i < allChildrens.length; i++){ currentElement = allChildrens.item(i);
if
(currentElement.className == "subform"){
//chiamata ricorsiva weeeh!
removeRequiredFields(currentElement); }
else if
(currentElement.className == "field"){ mandatoryDisable(currentElement); }
else if
(currentElement.className == "exclGroup"){
for
(
var
j=0; j < currentElement.nodes.length; j++){
if
(currentElement.nodes.item(j).className == "field"){ mandatoryDisable(currentElement); } } } } }
function
mandatoryDisable(currentElement){
var
mandatory = currentElement.mandatory;
if
(mandatory == "disabled"){
var
vNewVariable = xfa.form.createNode("text", "prevMandatory"); vNewVariable.value = "disabled"; currentElement.desc.nodes.append(vNewVariable); }
else if
(mandatory == "error"){
var
vNewVariable = xfa.form.createNode("text", "prevMandatory"); vNewVariable.value = "error"; currentElement.desc.nodes.append(vNewVariable); } currentElement.mandatory = "disabled"; }
Questa invece è la funzione per riabilitare i campi obbligatori.
function
enableRequiredFields(parentElement){
var
currentElement;
var
allChildrens = parentElement.nodes;
for
(
var
i=0; i < allChildrens.length; i++){ currentElement = allChildrens.item(i);
if
(currentElement.className == "subform"){
//chiamata ricorsiva weeeh!
enableRequiredFields(currentElement); }
else if
(currentElement.className == "field"){
var
nodeLength = currentElement.desc.nodes.length;
if
(nodeLength > 0){ var mandatory = currentElement.desc.prevMandatory.value; currentElement.mandatory = mandatory; } }
else if
(currentElement.className == "exclGroup"){
for
(
var
j=0; j<; currentElement.nodes.length; j++){
if
(currentElement.nodes.item(j).className == "field"){
var
nodeLength = currentElement.desc.nodes.length;
if
(nodeLength > 0){
var
mandatory = currentElement.desc.prevMandatory.value; currentElement.mandatory = mandatory; } } } } } }
Nessun commento:
Posta un commento