Joomla.it Forum
Componenti per Joomla! => Gestione Form => : The Jackall 09 Apr 2010, 16:20:05
-
Buongiorno a tutti.
Avrei bisogno di 1 dritta per l'utilizzo del PlugIn multipage di chronoforms.
Ho sviluppato una serie di forms (4 per l'esattezza) tutti legati tramite un form madre.
Il tutto sembra funzionare in modo corretto. Avrei xò la necessità di poter inserire righe multiple nel DB all'interno del form n° 3.
Penso sia la problematica affrontata da VALES alla fine della sua utilissima guida Tutorial form multipage ncon chronoforms-1
C'è qcuno che ha già affrontato la problematica?
-
Quella modalità l'ho ulteriormente sviluppata in Albo Pretorio con il form multipage di inserimento degli allegati agli atti dell'albo.
Nell'ultimo form viene visualizzato il riepilogo degli atti inseriti nei precedenti passaggi e si può decidere di continuare gli inserimenti oppure salvare il lavoro già fatto.
Se scarichi albo pretorio vedi tutto.
-
Grazie mille Vales...
Speravo in un tuo consiglio!!
Lunedì provo subito!
Buone W-End
-
Buongionro.
Ho scaricato e installato il modulo "albo Pretorio".
Complimenti per il lavoro fatto..
Vorrei chiederti 2 delucidazioni se possibile..
Ho compreso +o- il "giro del funo", ma ho un dubbio su come vengono inseriti i dati nelle tabelle.
Mi spiego meglio.
Nel form "madre_atto_10" che è il contenitore, hai legato le 2 tabelle "atti_10" e "allegati_10".
Le stesse tabelle le hai legate anche al form "allegati_10".
facendo delle prove ho notato che i dati nel db vengono salvati nelle 2 tabelle all'atto dell'invio del primo allegato. Se poi si continua ad inserire ulteriori allegati, questi vengono salvati solo nella tabella relativa "allegati_10", e sempre all'atto dell'invio degli allegati (quindi nel form allegati_10 e non in allegati_10_conferma come in precedenza avevo immaginato).
Io ho provato a ricreare per le mie esigenze una struttura simile alla tua, e funziona.. Solo che, al momento del salvataggio del secondo mio allegato, mi scrive anche una seconda riga nella mia tabella degli atti.
Come hai fatto tu ad evitare questo?
Secondo dubbio.. Ma questo mi sa che ha bisogno di uno studio ulteriore..
Sarebbe possibile strutturare il tutto (sempre con questa logica) in modo da avere due doppi salvataggi?
Esempio:
primo form: seleziono gli operai che hanno seguito una lavorazione. Possono essere da 1 a infinto.
nel secondo form seleziono i prodotti che sono stati seguiti dagli oprari precedentemente selezionati.
le 2 tabelle sarebbero legato da un codice (lotto) inserito manualmente dal data-entry.
In pratica, nella tabella operai ci possono essere n righe con il codice lotto identico, e lo stesso per la tabella prodotti.
E' fattibile??
Grazie
-
Una delle caratteristiche del multiform è che non si possono registrare nei form intermedi tabelle diverse da quelle assegnate al multipage madre. Questa è la spiegazione dell'utilizzo del form allegati_10 con le stesse tabelle del multipage. Se avessi assegnato al form allegati_10 solo la sua tabella avrei ottenuto (come mi è capitato nello sviluppo) un errore.
Avendo quindi questo vincolo ho dovuto mettere a punto quella procedura particolare segue questo flusso.
1) inserimento dati form atto_10.
2) passaggio al form allegati_10 ed inserimento dell'allegato.
3) a questo punto avendo inserito anche l'allegato posso registrare anche l'atto, senza allegato non avrebbe senso. Quindi registro nelle tabelle atto e allegato.
4) passo al form di richiesta di continuare ad inserire gli allegati o terminare.
5) se torno ad inserire altri allegati registrerò un nuovo allegato ma nella tabella degli atti non inserirò un nuovo atto ma assegnerò a ccf_id il valore dell'atto precedentemente inserito e questo consente a chronoform di scrivere sullo stesso record con il valore del campo chiave uguale a quello dell'atto già inserito.
6) quando deciderò di non inserire più allegati lo stesso problema di pone per l'allegato, quindi quando passerò i valori al form multipage madre_atto_10 dovrò passare come fatto prima lo stesso ccf_id dell'atto ed il cf_id dell'ultimo allegato inserito per evitare duplicazioni.
Questo è il meccanismo di Albo Pretorio.
Per ottenere il tuo obiettivo devi usare questo meccanismo due volte.
lavorazione = atto
operai = allegati
prodotti= altro tipo di allegato
quindi così al volo direi dovresti inserire due nuovi form prodotti e conferma prodotti. Il multipage diventa composto dai seguenti form.
lavorazione, operai, continua operai, prodotti, continua prodotti.
Le tabelle in gioco ora diventano 3: lavorazione, operai, prodotti. E per i motivi sopra detti devono essere usate contemporaneamente in operai, prodotti e contenitore multipage. Le tabelle operai e prodotti dovranno avere un campo che le relaziona con le lavorazioni (come in Albo Pretorio gli allegati hanno un codice atto).
Stai attento al gioco dei campi chiave delle tabelle nelle varie registrazioni che saranno necessarie (ti occorono degli script php per gestire questo aspetto) e non usare mai lo stesso nome per la chiave di tabelle diverse. Quindi le tre tabelle potrebbero avere per esempio campi chiave ccf_id, cf_if, cf_idd .
Credo che dovrebbe funzionare anche questo form.
-
Buongiorno Vales.. I tuoi suggerimenti sono stati ottimi.
Funziona quasi tutto.
Nel senso che:
Ho creato 5 form
- f0_vol - Che mi da il pregressivo di inserimento
- f1_vol_lav - Nel quale inserisco i pezzi prodotti
- f1_vol_lav_con - Form di conferma per l'inserimento e x scegliere se inserire un altro pezzo o passare agli operatori
- f2_vol_ope - nel quale seleziono l'operatore coinvolto
- f2_vol_ope_con - Form di conferma per l'inserimento e x scegliere se inserire un altro operatore o terminare la procedura.
Ho creato le 3 tabella con stesso nome:
- f0_vol - IDKEY: cf_id_ins e campo c_ins per la relazione con le altre 2 tabelle
- f1_vol_lav IDKEY: cf_id_lav e campo c_ins preso dal form f0_vol
- f2_vol_ope IDKEY: cf_id_ope e campo c_ins preso dal form f0_vol
A differenza di quanto da te proposto, xò, sono stato costretto a legare la tabella f1_vol_lav al relativo form e la tabella f2_vol_ope al relativo form. Poi tutte e 3 le tabelle sono state legate al form madre.
In tale modo la procedura funziona. Mi registra gli n prodotti lavorati. Passando poi agli operatori, mi registra gli n operatori coinvolti.
Il problema sorge in fase di termine del lavoro. Qui infatti, mi registra correttamente il pregressivo nella tabella f0_vol (correttamente in quanto nel relativo form non ho legato la tabella) ma mi duplica gli ultimi 2 inserimenti.
Ho provato a pensare + che a scrivere lo script php per evitare la cosa, ma non trovo il modo corretto di impostare la procedura.
Sarebbe corretto impostare la cosa in modo che se nel form f2_vol_ope_con non inserisco ulteriore operatori, ma chiudo la procedura, allora al form vengono passate le variabili max(cf_id_lav) e max(cf_id_ope) in modo che mi vada a sovrascrivere l'ultima riga di entrambe le tabelle?
E dove dovrei mettere tale procedura? Nell'ultimo form immagino (ovvero quello f2_vol_ope_con di conferma degli operatori)?
Ultima domanda? Potrebbe interessare poi la pubblicazione del lavoro, facendo ovvi riferimenti alla fonte (vales) dalla quale mi sono ispirato??
grazie
-
Allora.... Aggiorno la situaizone...
Son riuscito a.. "pensare" come evitare che la procedura crei doppioni di inserimento.
Era più semplice di quanto potessi immaginare.
Adesso il tutto funziona in modo corretto:
Il primo form mi fa selezionare la data in e mi fornisce il numero di registrazione progressivo.
Il secondo form mi fa inserire n articoli che hanno subito le lavorazioni
Il terzo form, mmi fa solo il riepilogo del secondo e mi da l ascelta di continuare al form seguente, o inserire un ulteriore articolo.
Il quarto form mi fa inserire gli operatori che hanno partecipato alla lavorazione, con ora inizio e ora fine.
Il quinto form mi da la possibilità di inserire un ulteriore operatore oppure terminare la procedura.
In caso di termina procedura, i record delle tabelle vengono solo aggiornati e non ci sono doppioni.
Nei prox giorni posterò il lavoro completo..
Un grazie 100000 a VALES per le dritte che mi ha fornito!