Item Buckets

a cura di Dante Ciambella | 13 maggio 2014
Ipotizziamo sia necessario creare all'interno del Content Editor una struttura con Milioni di Item al suo interno, ad esempio ci viene chiesto di memorizzare 100.000 prodotti in una singola categoria. Per fare in modo che Sitecore riesca a memorizzare una simile mole di informazioni è necessario aggiungere un numero consistente di categorie ed eventualmente sotto-categorie.

Il problema è che una volta consegnato al cliente finale c'è il rischio che la operatività quotidiana causi un sovraccarico del sistema nel caso in cui vengano caricati molti Item.

Sitecore, come la maggior parte dei CMS, ha alcune difficoltà nello storicizzare un gran numero di Item all'interno di un singolo nodo. Per risolvere questo inconveniente è stato introdotto un metodo efficiente per memorizzare milioni di Item di contenuto all'interno di un singolo container. È possibile convertire singoli Item, presenti nell'albero dei contenuti, all'interno di un item Bucket (secchio) il quale può contenere qualsiasi numero di sotto-elementi.

Questi sotto elementi non sono elencati nell'albero dei contenuti. È possibile cercare in ogni item Bucket al fine di trovare gli item di contenuto ai quali si è interessati.

Gli Item Buckets permettono all'autore di contenuti di effettuare le seguenti operazioni:
  1. Nascondere gli Item presenti nella struttura dei contenuti ad albero.

  2. Utilizzare la funzionalità di ricerca per recuperare elementi di contenuto dagli Item Buckets

  3. Utilizzare la funzionalità di ricerca per impostare il valore di campi degli Item.

  4. Modificare la relazione genitore-figlio degli item.

Le funzionalità avanzate di ricerca di Sitecore permettono di cercare attraverso tutti gli items presenti in Sitecore utilizzando ad esempio testo libero, filtri di ricerca etc.. rendendo facile ottenere quello che si sta effettivamente cercando.

Prima di cominciare con un esempio pratico possiamo dare alcune semplici indicazioni per creare un item di tipo “bucketable”. Di seguito alcuni semplici passi per impostare degli item come di tipo bucket:

  1. Una volta creato un item utilizzando la voce di menu “Configure” è necessario premere il pulsante Bucket per rendere “bucketable” l'Item.

  2. Per fare in modo che un Item possa essere storicizzato in un Item Bucket è necessario fare in modo che sia Bucketable e ciò può essere ottenuto in due modi:

    • fare in modo che il singolo item di contenuto sia Bucketable.

    • fare in modo che lo Standard Value sul quale il Template è basato sia Bucketable.

Nel nostro caso particolare in cui tutti gli Item, devono essere tutti quanti di tipo Bucketable è consigliato fare in modo che lo Standard Value del template sia di tipo Bucketable. Naturalmente è necessario creare gli Item all'interno di un Folder che sia di tipo Bucketable altrimenti sarebbero trattati come normali Item.

Per effettuare le nostre prove abbiamo deciso di estrarre da Twitter il maggiori numero possibile di Tweet storicizzarli e ricercali all'interno di un contenitore di tipo “Bucket”.

Per i nostri scopi abbiamo utilizzato la libreria Tweetinvi, le uniche informazioni restituite dalla struttura dati dei Tweet sono l'utente, che ha creato il Tweet e la descrizione testuale del Tweet. Per fare ciò abbiamo modificato un esempio scaricabile dal sito della libreria.

È da tener presente che l'applicazione creata non è una Web Application, ma una Windows Form di conseguenza è stato necessario effettuare molte modifiche alla configurazione del progetto per poter far funzionare le API di Sitecore. Il meccanismo asincrono con i quali i tweet vengono restituiti ci avrebbe obbligato a creare una Web Application con pagine asincrone.

Di seguito uno Screen Shot con l'applicazione funzionante:

 

Abbiamo lanciato molte volte l'applicazione cercando Tweet con differenti parole di ricerca ed i Tweet sono stati correttamente inseriti nel folder di tipo Bucket che per comodità abbiamo chiamato Tweets. Di seguito uno Screen Shot del Content Editor ed il codice, molto semplice, per l'inserimento degli Item specifici: 

Database masterDb = Sitecore.Configuration.Factory.GetDatabase("master");
ID idParent = new ID("{FBB6A8FE-8915-4041-B90A-34410D71633E}");
parentItem = masterDb.GetItem(idParent);
ID idTweet = new ID("{5392EE0A-4048-4A86-BC88-85C1581DF162}");
TemplateID templateID = new TemplateID(idTweet);
Item itemChild = parentItem.Add(itemName, templateID);
itemChild.Editing.BeginEdit();
itemChild.Fields["Name"].Value = creatorName;
itemChild.Fields["Description"].Value = description;
itemChild.Editing.EndEdit();

 

Con questo tipo di implementazione tutti gli item vengono comunque visualizzati all'interno del Folder di tipo Bucket per fare in modo che siano cercabili, ma non elencati, è dunque necessario effettuare una sincronizzazione manuale. Noi abbiamo effettuato una sincronizzazione manuale utilizzando il Content Editor, ma potrebbe essere effettuata anche applicativamente.

Dopo la sincronizzazione il Bucket appare come di seguito:

 

Di seguito invece un esempio di ricerca degli Item come viene mostrata nella interfaccia del Content Editor:

Item buckets