venerdì 29 maggio 2009

CAML Query e Stato di un Item

Come sicuramente tutti sanno per testare lo stato di moderazione (_ModerationStatus) di un item in SharePoint con una query CAML si fa in questo modo:

<Query>
<Where>
<Eq>
<FieldRef Name=”_ModerationStatus” />
<Value Type=”ModStat”>Approved</Value>
</Eq>
</Where>
<Query>

Si nota subito che non  viene usato un codice (che sarebbe multilingua) ma un valore letterale, quindi se si installa SharePoint in Italiano questa query CAML non funzionerà. I valori possibili forniti da SDK sono:

Member name

Description

Approved The last major version of the item is
displayed in the public views of the list or document
library.
Denied The last major version of the item is not
displayed in the public views of the list or document
library.
Draft The item minor version is being edited and is
not ready for approval.
Pending The decision about displaying the item in
public views of the list or document library is pending.
Scheduled The decision about displaying the item in
public views of list or document library is pending and will be
processed by a timer service.

La traduzione in italiano degli stati dovrebbe essere:

Approvato
Negato
Bozza
In Sospeso
Pianificato

Alla prossima!



mercoledì 27 maggio 2009

WCM Variation & PageLayout

Per un progetto che sto seguendo, mi è capitato di dover affrontare questo problema:

“Avendo attivato le variation in un sito di publishing in cui sono stati crati dei custom web provisioning, ovvero delle classi che si occupano di fare alcune operazioni in fase di creazione di un sito, registrati in una custom site definition, mi è capitato che le home page dei siti ri-creati dal sistema di variation perdessero tutti i page layout associati, matenendo solo quello definito di default. Andando a controllare nella lista Pages le proprietà della default page si vedeva chiaramente che in presenza di contenuti questi venivano renderizzati in modo non corretto perchè mancava il giusto page layout.”

Fortunatamente esiste sempre un pio uomo sulla terra che affronta per primo questi problemi e in questo caso è stato Garry Lapointe che ci mette a disposizione una fantastica collezioni di custom extention per stsadm, tra cui esiste il comando: gl-fixpublishingpagespagelayouturl che permette di riassociare un page layout ad una pagina, ma non solo…

Con questo fantastico comando ho potuto risolvere il mio problema.



giovedì 14 maggio 2009

Scrivere in un SPFolder

Recentemente ho consigliato ad un cliente di utilizzare la possibilità di SharePoint di creare e scrivere in folder invece che in liste, visto che aveva la necessità di memorizzare solo dei dati (immagini) volanti e non permanenti, che dopo poco tempo dovevano essere rimossi. Il folder in questione è stato creato nella site collection per mezzo di una semplice feature che caricava un file di testo nel foder stesso consentendone la creazione. In socondo luogo abbiamo scritto il codice per accedere al foleder ed aggiornarne il contenuto.

Il codice in questione è il seguente:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite elevatedSite = new SPSite(SPContext.Current.Site.ID))
{
using (SPWeb elevatedWeb = elevatedSite.OpenWeb(SPContext.Current.Web.ID))
{
//creo un’istanza di SPfolder che mi aggancia alla cartella creata all’attivazione della FEATURE
SPFolder <NomeOggettoSPFolder> = elevatedSite.RootWeb.Folders["<NomeDellaFolder>"];
elevatedWeb.AllowUnsafeUpdates = true;
//aggiungo il file alla cartella temporaneamente
<NomeOggettoSPFolder>.Files.Add(FileUpload1.FileName, FileUpload1.FileBytes, true);
<NomeOggettoSPFolder>.Update();
elevatedWeb.AllowUnsafeUpdates = false;
}
}

});

E’ importante notare che per aggirare i problemi di sicurezza si è scelti di elevare i diritti di esecuzione e per farlo correttamente si è dovuto creare una Site Collection clone dell’originale e un Web Site clone dell’originale in modo che il contesto risultasse con gli opportuni privilegi. Il resto del codice si commenta da sè, l’unica cosa che posso far notare è l’utilizzo di un controllo .Net per l’upload del file, che nel nostro caso si chiama FileUpload1.

Alla prossima.