Quando modifichiamo il contenuto della tabella ALBUM, o quando aggiungiamo/eliminiamo un nuovo record, anche la collection deve essere aggiornata per rispecchiare questi cambiamenti. A differenza del sistema che abbiamo realizzato nel paragrafo precedente, infatti, la ricerca non è eseguita direttamente sul database, ma su un'altra fonte dati (la collection) che è stata generata in un preciso momento.
Quando aggiungiamo un record nella tabella con il modulo di inserimento, dobbiamo eseguire un aggiornamento di tutta la collection.
1. Aggiungi il tag <cfindex>. con l'attributo action="refresh" nel file inserimento.cfm, dopo l'istruzione <cfinsert>:
........
<!--- Inserisce il nuovo record nel datasource discoteca --->
<cfinsert datasource="#application.DSN#" dbtype="ODBC" tablename="ALBUM" formfields="ALBUM_TITOLO,ALBUM_AUTORE,ALBUM_ETICH, ALBUM_DESCR,ALBUM_GENERE,ALBUM_IMG">
<!--- aggiorna i dati della collection --->
<cfquery name="getAlbum" datasource="#application.DSN#">
SELECT ID_ALBUM, ALBUM_TITOLO, ALBUM_AUTORE, ALBUM_DESCR, ALBUM_GENERE
FROM ALBUM</cfquery>
<cfindex collection="collectionDiscoteca" action="refresh" query="getAlbum" key="ID_ALBUM" title="ALBUM_TITOLO" body="ALBUM_TITOLO,ALBUM_AUTORE,ALBUM_DESCR,ALBUM_GENERE">
......
Quando, invece, si elimina un record, dobbiamo eliminare quel singolo record anche dalla collection.
2. Aggiungi il tag <cfindex> con l'attributo action="delete" nel file elimina.cfm, dopo l'istruzione per eliminare il record dal database.
.........
<!--- Elimina il record dal database --->
<cfquery name="delete" datasource="#application.DSN#">
DELETE FROM ALBUM
WHERE ID_ALBUM = #form.ID#
</cfquery>
<!--- Elimina il record dalla collection --->
<cfindex collection="collectionDiscoteca" action="delete" key="#form.ID#">
.........
Quando si elimina un record dalla collection, si utilizza l'attributo "key", al quale si passa la chiave (nel nostro caso, l'ID) del record che si vuole cancellare.
Aggiornando invece un record del database, dobbiamo dire a ColdFusion 1) di "svuotare" quel record nella collection, 2) di aggiornare lo stesso record con i nuovi valori.
3. Aggiungi il tag <cfindex> con l'attributo action="delete" nel file aggiornamento.cfm dopo il tag <cfupdate>, utilizzato per aggiornare il record dal database.
......
<!--- Aggiorna il record ID_ALBUM nella tabella ALBUM del datasource discoteca --->
<cfupdate datasource="#application.DSN#" tablename="ALBUM" formfields="ID_ALBUM,ALBUM_TITOLO,ALBUM_AUTORE,ALBUM_ETICH, ALBUM_DESCR,ALBUM_GENERE,ALBUM_IMG">
<!--- Elimina il record dalla collection --->
<cfindex collection="collectionDiscoteca" action="delete" key="#form.ID_ALBUM#">
......
4. Utilizza <cfindex> con l'attributo action="update" per aggiornare la collection con i nuovi dati del record. Per questo motivo, dobbiamo eseguire una query su quello specifico record, e "passare" questa query al tag <cfindex>:
......
<!--- Aggiorna il record ID_ALBUM nella tabella ALBUM del datasource discoteca --->
<cfupdate datasource="#application.DSN#" tablename="ALBUM" formfields="ID_ALBUM,ALBUM_TITOLO,ALBUM_AUTORE,ALBUM_ETICH, ALBUM_DESCR,ALBUM_GENERE,ALBUM_IMG">
<!--- Elimina il record dalla collection --->
<cfindex collection="collectionDiscoteca" action="delete" key="#form.ID_ALBUM#">
<!--- Prende dal database i dati aggiornati del record --->
<cfquery name="getAlbum" datasource="#application.DSN#">
SELECT ID_ALBUM, ALBUM_TITOLO, ALBUM_AUTORE, ALBUM_DESCR, ALBUM_GENERE
FROM ALBUM
WHERE ID_ALBUM = #form.ID#
</cfquery>
<!--- Aggiorna il record della collection --->
<cfindex collection="collectionDiscoteca" action="update" query="getAlbum" key="ID_ALBUM" title="ALBUM_TITOLO" body="ALBUM_TITOLO,ALBUM_AUTORE,ALBUM_DESCR,ALBUM_GENERE">
.........
Ora la collection sarà aggiornata ogni volta che modifichiamo il contenuto del database.
Fai delle prove di aggiornamento del database utilizzando la ricerca avanzata, per verificare che il codice scritto funzioni correttamente. Per confrontare il tuo codice, scarica quello originale da qui.
Utilizzare ColdFusion Administrator per gestire le collection
Abbiamo creato e indicizzato una collection attraverso i tag <cfcollection> e <cfindex>. E' possibile gestire le collection utilizzando ColdFusion Administrator ("http://localhost:8500/cfide/administrator/") scegliendo "Verity Collections" dal menu "DATA & SERVICES". Questo tipo di gestione è molto utile soprattutto quando si desidera indicizzare documenti, anziché i record di un database.