{"id":5187,"date":"2023-10-03T08:55:06","date_gmt":"2023-10-03T08:55:06","guid":{"rendered":"https:\/\/twproject.com\/support\/?page_id=5187"},"modified":"2023-10-05T08:54:21","modified_gmt":"2023-10-05T08:54:21","slug":"crea-la-tua-form-personalizzata","status":"publish","type":"page","link":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/","title":{"rendered":"Crea la tua form personalizzata"},"content":{"rendered":"<p>L&#8217;idea che sta dietro alle form personalizzate, chiamate anche plugin, \u00e8 che tu possa aggiungere una form avente un numero arbitrario di campi associato ai progetti, alle risorse, o anche genericamente presente nel menu di Twproject, a seconda del contesto e dei diritti dell&#8217;utente, creando semplicemente un singolo file jsp.<br \/>\nNon \u00e8 necessario compilare classi o modificare lo schema del database, indipendentemente da quanti nuovi campi tu voglia inserire!<\/p>\n<p>La principale caratteristica di tali componenti infatti \u00e8 che permettono di estendere le\u00a0 propriet\u00e0 di un progetto senza doversi occupare della visualizzazione\/salvataggio\/modifica\/eliminazione dei dati, aspetti interamente gestiti dal framework di Twproject e quindi del tutto trasparenti all&#8217;utente.<\/p>\n<p>Se le forms sono usate per estendere le propriet\u00e0 degli oggetti di Twproject secondo le proprie necessit\u00e0, i plugins invece sono di solito intesi per azioni automatizzate (e.g. wizards) o per estendere la capacit\u00e0 dei report.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5056 size-full\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/custom-form.png\" alt=\"\" width=\"1601\" height=\"903\" \/><\/p>\n<p>Le form sono visualizzate come tab nella pagina principale del progetto e delle risorse e,<strong> dalla versione\u00a07.1.009 di Twproject, sono integrate anche nella visualizzazione a diagramma di Gantt del progetto<\/strong>.<\/p>\n<h2>Uso delle form personalizzate<\/h2>\n<p>Nell&#8217;installazione standard di Twproject ci sono gi\u00e0 alcuni esempi di form su progetti e risorse. Quella per il calcolo della rilevanza, della complessit\u00e0 e del rischio di progetto ne sono un esempio da cui prendere spunto per realizzare le proprie personalizzazioni!<\/p>\n<p>Per vederne la lista, nella scheda del progetto, clicca sul tab <em>forms<\/em> (sempre che siano soddisfatte le condizioni per la loro visualizzazione).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5057 size-full\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/custom-form-menu.png\" alt=\"\" width=\"1594\" height=\"390\" \/><\/p>\n<p>Altri esempi appaiono invece solo quando un progetto o una risorsa di tipo azienda sia chiamata &#8220;<em>Twproject test form<\/em>&#8220;.<\/p>\n<h2>Crea la tua form<\/h2>\n<pre>NB: questa sezione richiede alcune capacit\u00e0 di programmazione Java.<\/pre>\n<p>Le forms\/reports\/plugins hanno senso solo se \u201cpersonalizzati\u201d secondo le proprie esigenze; quindi in questa sezione spiegheremo come funzionano e come scriverne di nuovi.<\/p>\n<p>Questa sezione \u00e8\u00a0 rivolta a chi possiede qualche skill di programmazione, conoscenza indispensabile per crearle, partendo da uno degli esempi forniti, senza troppe difficolt\u00e0.<\/p>\n<p>Le custom form sono dei file avente estensione \u201c.jsp\u201c (Java Servlet Pages) che risiedono in cartelle specifiche sul server in cui \u00e8 stata installata l&#8217;applicazione, in particolare:<br \/>\n&#8211; quelle di default sono nella cartella:<\/p>\n<pre>[root]\/applications\/teamwork\/plugins<\/pre>\n<p>&#8211; quelle personalizzate invece, per essere caricate da Twproject, devono essere inserite nella cartella:<\/p>\n<pre>[root]\/applications\/teamwork\/customers\/<em><strong>ACME<\/strong><\/em>\/plugins<\/pre>\n<p>Dove\u00a0<strong>ACME<\/strong> \u00e8 il nome\/short code della tua azienda.<\/p>\n<p>Quando il servizio di Twproject si avvia, l&#8217;applicazione analizza i files in queste cartelle e, se rispettano i requisiti analizzati di seguito, vengono \u201cinizializzati\u201d e resi disponibili dove previsto.<\/p>\n<p>Per visualizzare i plugin attivi vai in menu strumenti -&gt; admin e\u00a0nel box &#8220;Customization&#8221; clicca sulla voce \u201cforms, plugins and reports\u201d.<br \/>\nCliccando il pulsante \u201creload plugins\u201d puoi forzare una nuova verifica, e caricare eventuali nuove forms senza dover riavviare il servizio di Twproject.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2138 size-full\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/adminCustomForms.png\" alt=\"adminCustomForms\" width=\"877\" height=\"164\" \/><\/p>\n<h2>Come funziona<\/h2>\n<p><b>Caricamento<\/b>: All&#8217;avvio, Twproject invoca il metodo inizializza nelle jsp trovate, e carica in memoria la lista dei plugin disponibili.<\/p>\n<p><b>Visibilit\u00e0<\/b>: un plugin pu\u00f2 apparire nei seguenti contesti: nel menu \u201cstrumenti\u201d di Twproject, sull&#8217;editor del progetto e sull&#8217;editor delle risorse. La loro visualizzazione \u00e8 sottoposta alle condizioni implementate nel metodo \u201c<em>isVisible<\/em>\u201d nel file jsp della forms (vedi paragrafi successivi).<\/p>\n<p><b>Persistenza<\/b>: Dove vengono salvati i dati e in che modo? Dato che per definizione i campi di una form sono arbitrari, i suoi dati non sono soggetti ad integrit\u00e0 referenziale. Tutti i dati sono salvati nelle tabelle <em>olpl_des_data<\/em> e <em>olpl_des_data_value, <\/em>ma lo sviluppatore non deve fare nulla per la loro persistenza; infatti i campi presenti sulla form saranno salvati dal framework ed automaticamente agganciati al progetto\/risorsa cui si riferiscono.<br \/>\nNello specifico la colonna <em>referenceId<\/em> della tabella\u00a0olpl_des_data contiene l&#8217;id del progetto, la colonna\u00a0 <em>referenceClassName<\/em>\u00a0\u00e8 il nome della classe\u00a0 a cui \u00e8 collegato il form (Task nell&#8217;esempio)\u00a0 e la colonna <em>designerName<\/em>\u00a0\u00e8 il nome del form (corrispondente al nome del file jsp)<\/p>\n<h2>Analisi del plugin<\/h2>\n<p>Adesso \u00e8 il momento di passare al codice vero e proprio, la parte pi\u00f9 delicata e pi\u00f9 divertente\u2026<\/p>\n<p>Per iniziare ti consigliamo di usare <strong>simpleCustomForm.jsp<\/strong>: \u00e8 un file ben commentato con tipologie di campi diversi (stringhe, date, numeri, input file).<br \/>\nCopia il file nella tua cartella delle customizzazioni ed inizia a modificarlo aggiungendo o togliendo campi secondo le tue necessit\u00e0. Per verificare nell&#8217;interfaccia le modifiche apportate, ricordati di\u00a0 cliccare sul pulsante &#8220;reload plugins&#8221; nella pagina\u00a0 \u201cforms, plugins and reports\u201d (NB se il form non dovesse comparire poi nella lista, significherebbe che contiene qualche errore nel codice scritto che ne blocca il caricamento).<\/p>\n<p>Diamo uno sguardo al codice (estratto da simpleCustomForm.jsp).<\/p>\n<p>Ogni form ha una struttura rigida e deve estendere la classe astratta <em>CustomForm<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5191\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code01.jpg\" alt=\"\" width=\"721\" height=\"178\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code01.jpg 721w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code01-300x74.jpg 300w\" sizes=\"auto, (max-width: 721px) 100vw, 721px\" \/><\/p>\n<p>La classe astratta richiede obbligatoriamente l\u2019implementazione di due metodi<\/p>\n<pre>public boolean <strong>isVisible<\/strong>(RestState restState) {....\r\n\r\npublic LinkedHashMap&lt;String, DesignerField&gt; <strong>getDesignerFields<\/strong> (RestState restState){...<\/pre>\n<p>Il primo serve per indicare le condizioni secondo cui il form deve essere visualizzato:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5192\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code02.jpg\" alt=\"\" width=\"810\" height=\"227\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code02.jpg 810w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code02-300x84.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code02-768x215.jpg 768w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/p>\n<p>Questo metodo, basato sui dati ottenuti dallo stato della pagina (RestState e principalmente dal campo \u201cmainObject\u201d) verifica di essere nel contesto appropriato.<br \/>\nIn questo caso stiamo controllando se il mainObject, cio\u00e8 l&#8217;oggetto della scheda editata, \u00e8 un progetto (Task.class) e che il suo nome corrisponda a &#8220;Twproject test form&#8221;.\u00a0 Solo se entrambe le condizioni sono vere il form sar\u00e0 visibile.<\/p>\n<p>Il secondo metodo \u00e8 il \u201ccuore\u201d del form ed \u00e8 il punto in cui si definiscono i dati\u00a0 che si vogliono inserire,\u00a0 elencandoli come DesignerFields e specificando per ognuno di essi la tipologia del campo desiderato: String, Date, Boolean, Integer, Currency, CodeValueList etc.<br \/>\nSono i DesignerFields che sanno come gestire il salvataggio, la serializzazione e la relativa rappresentazione del dato.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5193\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code03.jpg\" alt=\"\" width=\"770\" height=\"72\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code03.jpg 770w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code03-300x28.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code03-768x72.jpg 768w\" sizes=\"auto, (max-width: 770px) 100vw, 770px\" \/><\/p>\n<p>Puoi avere un selettore come bottone radio o come lista<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5194\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code04.jpg\" alt=\"\" width=\"986\" height=\"358\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code04.jpg 986w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code04-300x109.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code04-768x279.jpg 768w\" sizes=\"auto, (max-width: 986px) 100vw, 986px\" \/><\/p>\n<p>come campo testo &#8220;breve&#8221; o come area di testo<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5195\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code05.jpg\" alt=\"\" width=\"904\" height=\"197\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code05.jpg 904w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code05-300x65.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code05-768x167.jpg 768w\" sizes=\"auto, (max-width: 904px) 100vw, 904px\" \/><\/p>\n<p>campi numerici di diverso formato<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5196\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code06.jpg\" alt=\"\" width=\"933\" height=\"174\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code06.jpg 933w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code06-300x56.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code06-768x143.jpg 768w\" sizes=\"auto, (max-width: 933px) 100vw, 933px\" \/><\/p>\n<p>input per la gestione di date ed ore<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5197\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code07.jpg\" alt=\"\" width=\"910\" height=\"146\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code07.jpg 910w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code07-300x48.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code07-768x123.jpg 768w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/p>\n<p>campi per l&#8217;upload di file<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5198\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code08.jpg\" alt=\"\" width=\"845\" height=\"96\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code08.jpg 845w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code08-300x34.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code08-768x87.jpg 768w\" sizes=\"auto, (max-width: 845px) 100vw, 845px\" \/><\/p>\n<p>lookup sulla tabella delle persone<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5199\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code09.jpg\" alt=\"\" width=\"1108\" height=\"85\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code09.jpg 1108w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code09-300x23.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code09-768x59.jpg 768w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code09-1024x79.jpg 1024w\" sizes=\"auto, (max-width: 1108px) 100vw, 1108px\" \/><\/p>\n<p>o su quella dei progetti<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5200\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code10.jpg\" alt=\"\" width=\"809\" height=\"93\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code10.jpg 809w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code10-300x34.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code10-768x88.jpg 768w\" sizes=\"auto, (max-width: 809px) 100vw, 809px\" \/><\/p>\n<p>checkbox<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5201\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code11.jpg\" alt=\"\" width=\"824\" height=\"86\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code11.jpg 824w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code11-300x31.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code11-768x80.jpg 768w\" sizes=\"auto, (max-width: 824px) 100vw, 824px\" \/><\/p>\n<p>menu a tendina i cui valori sono il risultato di una query da te definita<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5202\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code12.jpg\" alt=\"\" width=\"1293\" height=\"94\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code12.jpg 1293w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code12-300x22.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code12-768x56.jpg 768w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code12-1024x74.jpg 1024w\" sizes=\"auto, (max-width: 1293px) 100vw, 1293px\" \/><\/p>\n<p>campi plurimi aggiungibili a piacimento dall&#8217;interfaccia utente<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5203\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code13.jpg\" alt=\"\" width=\"768\" height=\"280\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code13.jpg 768w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code13-300x109.jpg 300w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/p>\n<p>Nota che, terminata la definizione di tutti i campi, il metodo deve effettuare il &#8220;<em>return<\/em>&#8221; degli stessi<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5204\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code14.jpg\" alt=\"\" width=\"407\" height=\"42\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code14.jpg 407w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code14-300x31.jpg 300w\" sizes=\"auto, (max-width: 407px) 100vw, 407px\" \/><\/p>\n<p>Sino ad ora abbiamo analizzato la struttura della inner class &#8220;PagePluginExt&#8221; che estende &#8220;CustomForm&#8221;.<\/p>\n<p>Ogni form personalizzata \u00e8 poi composta da due parti chiamate in diversi momenti del life-cicle dell&#8217;applicazione.<br \/>\nLa prima sezione \u00e8 l&#8217;inizializzazione, invocata all&#8217;avvio del servizio; essa inietta l&#8217;istanza del form nel sistema, rendendola quindi accessibile.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5205\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code15.jpg\" alt=\"\" width=\"1006\" height=\"92\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code15.jpg 1006w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code15-300x27.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code15-768x70.jpg 768w\" sizes=\"auto, (max-width: 1006px) 100vw, 1006px\" \/><\/p>\n<p>In questo caso stiamo creando un custom form nel gruppo dei \u201cTASK_FORMS\u201d, cos\u00ec da limitarne la visualizzazione alla sezione dei progetti.<br \/>\nTwproject usa quattro gruppi: \u201c<strong>REPORTS<\/strong>\u201d, \u201c<strong>RESOURCE_FORMS<\/strong>\u201d, \u201c<strong>TASK_FORMS<\/strong>\u201d, \u201c<strong>TREND<\/strong>&#8220;:<br \/>\n&#8211; REPORTS: sono trasversali agli oggetti. e visibili nelle liste e schede progetto, risorse, documenti, costi, worklog.<br \/>\n&#8211; RESOURCE_FORMS: visibili nella sola scheda risorsa<br \/>\n&#8211; TASK_FORMS: visibili nella sola scheda progetto<br \/>\n&#8211; TREND: ad ora visibili nella sola scheda progetto (ancora in fase di potenziamento)<\/p>\n<p><em>NB Il fatto per\u00f2 che Twproject &#8220;invochi&#8221; i plugin di questi gruppi, non implica per\u00f2 che siano effettivamente visualizzati; dipende dalle condizioni implementate nel metodo isVisible(ResState resState) di ogni plugin!<\/em><\/p>\n<p>L\u2019ultima sezione \u00e8 la formattazione del form in html, preceduta da un blocco standard in cui si istanziano gli oggetti indispensabili al funzionamento del form<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5206\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code16.jpg\" alt=\"\" width=\"1067\" height=\"205\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code16.jpg 1067w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code16-300x58.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code16-768x148.jpg 768w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code16-1024x197.jpg 1024w\" sizes=\"auto, (max-width: 1067px) 100vw, 1067px\" \/><\/p>\n<p>Sappiamo che in questo contesto l&#8217;oggetto principale \u00e8 un progetto quindi possiamo usarlo per estrarre alcuni dati per arricchire la form<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5207\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code17.jpg\" alt=\"\" width=\"556\" height=\"53\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code17.jpg 556w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code17-300x29.jpg 300w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><\/p>\n<p>e costruiamo infine la griglia HTML per la visualizzazione del form<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5208\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code18.jpg\" alt=\"\" width=\"661\" height=\"738\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code18.jpg 661w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code18-269x300.jpg 269w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><\/p>\n<p>Possiamo aggiungere alcuni calcoli sui valori inseriti<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5209\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code19.jpg\" alt=\"\" width=\"832\" height=\"220\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code19.jpg 832w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code19-300x79.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/code19-768x203.jpg 768w\" sizes=\"auto, (max-width: 832px) 100vw, 832px\" \/><\/p>\n<p>Il risultato finale sar\u00e0 questa interfaccia<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5189\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/simpleCustomForm.jpg\" alt=\"\" width=\"1041\" height=\"868\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/simpleCustomForm.jpg 1041w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/simpleCustomForm-300x250.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/simpleCustomForm-768x640.jpg 768w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/simpleCustomForm-1024x854.jpg 1024w\" sizes=\"auto, (max-width: 1041px) 100vw, 1041px\" \/><\/p>\n<p>Questo \u00e8 tutto&#8230; i pulsanti \u201cstampa\u201d e \u201csalva\u201d vengono aggiunti automaticamente!<\/p>\n<h2>Visualizzare una custom form nel diagramma di Gantt<\/h2>\n<p>Dalla versione 7.1.009 di Twproject \u00e8 stata introdotta la possibilit\u00e0 di caricare le form di tipo TASK_FORMS non solo nella scheda del progetto, come qui illustrato, ma anche nella sua visualizzazione a Gantt.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5190\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/gantt.jpg\" alt=\"\" width=\"1737\" height=\"419\" srcset=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/gantt.jpg 1737w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/gantt-300x72.jpg 300w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/gantt-768x185.jpg 768w, https:\/\/twproject.com\/support\/wp-content\/uploads\/2023\/09\/gantt-1024x247.jpg 1024w\" sizes=\"auto, (max-width: 1737px) 100vw, 1737px\" \/><\/p>\n<p>Questo permette una loro pi\u00f9 rapida compilazione, potendole gestire, nelle diverse fasi in cui \u00e8 organizzato un progetto, da una unica schermata.<\/p>\n<p>Data la struttura rigorosamente a griglia, non tutte le tipologie di campo sono visualizzabili, ma solo quelle pi\u00f9 standard, come date, stringhe, numeri, checkbox, scelta a tendina, campi calcolati.<\/p>\n<p>Per la guida su come creare una form personalizzata per le versioni di Twproject precedenti alla 7.1.009 segui questo link<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/twproject.s3.amazonaws.com\/resources\/custom-form-vecchia.html\">Crea la tua form personalizzata &gt;&gt;<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>L&#8217;idea che sta dietro alle form personalizzate, chiamate anche plugin, \u00e8 che tu possa aggiungere una form avente un numero arbitrario di campi associato ai progetti, alle risorse, o anche genericamente presente nel menu di Twproject, a seconda del contesto e dei diritti dell&#8217;utente, creando semplicemente un singolo file jsp. Non \u00e8 necessario compilare classi [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":3796,"menu_order":58,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-5187","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Crea la tua form personalizzata | Twproject support<\/title>\n<meta name=\"description\" content=\"L&#039;idea che sta dietro alle form personalizzate, chiamate anche plugin, \u00e8 che tu possa aggiungere una form avente un numero arbitrario di campi associato\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crea la tua form personalizzata | Twproject support\" \/>\n<meta property=\"og:description\" content=\"L&#039;idea che sta dietro alle form personalizzate, chiamate anche plugin, \u00e8 che tu possa aggiungere una form avente un numero arbitrario di campi associato\" \/>\n<meta property=\"og:url\" content=\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/\" \/>\n<meta property=\"og:site_name\" content=\"Twproject support\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/twproject\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-05T08:54:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/custom-form.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1601\" \/>\n\t<meta property=\"og:image:height\" content=\"903\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:label1\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/\",\"url\":\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/\",\"name\":\"Crea la tua form personalizzata | Twproject support\",\"isPartOf\":{\"@id\":\"https:\/\/twproject.com\/support\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/twproject.com\/support\/wp-content\/uploads\/custom-form.png\",\"datePublished\":\"2023-10-03T08:55:06+00:00\",\"dateModified\":\"2023-10-05T08:54:21+00:00\",\"description\":\"L'idea che sta dietro alle form personalizzate, chiamate anche plugin, \u00e8 che tu possa aggiungere una form avente un numero arbitrario di campi associato\",\"breadcrumb\":{\"@id\":\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/#primaryimage\",\"url\":\"https:\/\/twproject.com\/support\/wp-content\/uploads\/custom-form.png\",\"contentUrl\":\"https:\/\/twproject.com\/support\/wp-content\/uploads\/custom-form.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/twproject.com\/support\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Utilizzo avanzato\",\"item\":\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Personalizzazione\",\"item\":\"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Crea la tua form personalizzata\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/twproject.com\/support\/#website\",\"url\":\"https:\/\/twproject.com\/support\/\",\"name\":\"Twproject support\",\"description\":\"Twproject documentation online\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/twproject.com\/support\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Crea la tua form personalizzata | Twproject support","description":"L'idea che sta dietro alle form personalizzate, chiamate anche plugin, \u00e8 che tu possa aggiungere una form avente un numero arbitrario di campi associato","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/","og_locale":"it_IT","og_type":"article","og_title":"Crea la tua form personalizzata | Twproject support","og_description":"L'idea che sta dietro alle form personalizzate, chiamate anche plugin, \u00e8 che tu possa aggiungere una form avente un numero arbitrario di campi associato","og_url":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/","og_site_name":"Twproject support","article_publisher":"https:\/\/www.facebook.com\/twproject","article_modified_time":"2023-10-05T08:54:21+00:00","og_image":[{"width":1601,"height":903,"url":"https:\/\/twproject.com\/support\/wp-content\/uploads\/custom-form.png","type":"image\/png"}],"twitter_misc":{"Tempo di lettura stimato":"7 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/","url":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/","name":"Crea la tua form personalizzata | Twproject support","isPartOf":{"@id":"https:\/\/twproject.com\/support\/#website"},"primaryImageOfPage":{"@id":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/#primaryimage"},"image":{"@id":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/#primaryimage"},"thumbnailUrl":"https:\/\/twproject.com\/support\/wp-content\/uploads\/custom-form.png","datePublished":"2023-10-03T08:55:06+00:00","dateModified":"2023-10-05T08:54:21+00:00","description":"L'idea che sta dietro alle form personalizzate, chiamate anche plugin, \u00e8 che tu possa aggiungere una form avente un numero arbitrario di campi associato","breadcrumb":{"@id":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/#primaryimage","url":"https:\/\/twproject.com\/support\/wp-content\/uploads\/custom-form.png","contentUrl":"https:\/\/twproject.com\/support\/wp-content\/uploads\/custom-form.png"},{"@type":"BreadcrumbList","@id":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/crea-la-tua-form-personalizzata\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/twproject.com\/support\/it\/"},{"@type":"ListItem","position":2,"name":"Utilizzo avanzato","item":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/"},{"@type":"ListItem","position":3,"name":"Personalizzazione","item":"https:\/\/twproject.com\/support\/it\/utilizzo-avanzato\/personalizzazione\/"},{"@type":"ListItem","position":4,"name":"Crea la tua form personalizzata"}]},{"@type":"WebSite","@id":"https:\/\/twproject.com\/support\/#website","url":"https:\/\/twproject.com\/support\/","name":"Twproject support","description":"Twproject documentation online","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/twproject.com\/support\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"}]}},"_links":{"self":[{"href":"https:\/\/twproject.com\/support\/it\/wp-json\/wp\/v2\/pages\/5187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twproject.com\/support\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/twproject.com\/support\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/twproject.com\/support\/it\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/twproject.com\/support\/it\/wp-json\/wp\/v2\/comments?post=5187"}],"version-history":[{"count":0,"href":"https:\/\/twproject.com\/support\/it\/wp-json\/wp\/v2\/pages\/5187\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/twproject.com\/support\/it\/wp-json\/wp\/v2\/pages\/3796"}],"wp:attachment":[{"href":"https:\/\/twproject.com\/support\/it\/wp-json\/wp\/v2\/media?parent=5187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}