lunedì 17 dicembre 2012

Persistence

Nothing in the world can take the place of persistence. Talent will not; nothing is more common than unsuccessful men with talent. Genius will not; unrewarded genius is almost a proverb. Education will not; the world is full of educated derelicts. Persistence and determination are omnipotent. The slogan "press on" has solved and always will solve the problems of the human race.

- Calvin Coolidge, 1933

giovedì 20 settembre 2012

Il gioco delle tre carte


Uno degli aspetti più fastidiosi dell'essere umano è la ridicola convinzione che non siamo responsabili delle conseguenze delle nostre azioni, come testimonia l'infantile disinvoltura con cui troppo spesso attribuiamo alla volontà del Fato il disastroso esito delle nostre cazzate.

Il gioco delle tre carte - Marco Mavaldi

martedì 7 febbraio 2012

Livecycle & Mandatory

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:
 // 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:

 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; 
                     } 
                 } 
             } 
         } 
     } 
 } 

martedì 17 maggio 2011

PUMA H-Street 2011

Finalmente! era ora che la Puma si decidesse a rifarle, a quelle vecchie ho lisciato la suola a forza di metterle.
Stavo cominciando a pensare che piacesse solo a me avere i piedi freschi durante la bella stagione.
Un paio nell'armadio e un altro nel mirino.