SharePoint 2010

Modificare List View con PowerShell

Qualche giorno fa Barbara (collega, amica e sp-musa in Green Team) mi ha posto una domanda a cui, li per li, non ho saputo rispondere. La domanda era (più o meno) questa: devo effettuare una modifica alla vista di default di un totale di circa 120 document library suddivise in una dozzina di site collection, posso farlo con PowerShell, vero?

La mia risposta è stata abbastanza inutile. Si, si può fare, ma non avendolo mai fatto prima dovrei documentarmi un pò prima di esserti utile.

In realtà le operazioni necessarie sono molto semplici. Come prima cosa dobbiamo memorizzare in una variabile il web che contiene la lista.

$web = Get-SPWeb http://intranet

In altre due variabili, $list e $view, memorizziamo quindi gli oggetti lista e vista. In entrambi i casi utilizzeremo due metodi dell’oggetto web: GetList e GetViewFromUrl.

$list = $web.GetList(“/Shared Documents”)

$view = $web.GetViewFromUrl(“/Shared Documents/Forms/AllItems.aspx”)

Arrivati a questo punto dovremo richiamare l’istanza del campo da aggiungere nella visualizzazione, memorizzando anche in questo caso in una variabile. Nell’esempio seguente Amount è il nome del mio campo.

$amount = $list.Fields[“Amount”]

Se volessi aggiungere più di un campo mi basterebbe duplicare quest’ultima riga per tutti i campi da aggiungere alla vista, prestando attenzione a modificare il nome della variabile.

Fatto questo dovremo utilizzare il metodo Add della proprietà ViewFields riferita all’oggetto vista che abbiamo memorizzato nella variabile $view. (Perdonatemi quest’ultima frase, mi sembra una strofa della canzone “Alla fiera dell’est”…).

$view.ViewFields.Add($amount)

Anche in questo caso vale la considerazione fatta in precedenza. Se avete la necessità di aggiungere più campi potrete ripetere quest’ultima operazione, modificando adeguatamente il nome della variabile.

Nel caso doveste sbagliarvi eseguendo due volte lo stesso comando identico, il campo in questione verrà aggiunto alla visualizzazione tante volte quante volte è stato eseguito il comando. In questo caso basterà utilizzare il metodo Delete per rimuovere le istanze di campo in eccesso.

$view.ViewFields.Delete($amount)

In entrambi i casi, Add o Delete, per confermare l’operazione dovremo semplicemente aggiornare la configurazione della vista utilizzando il metodo Update.

$view.Update()

Tornando all’esigenza di Barbara queste poche righe non avrebbero aiutato molto, ma immaginatele combinate alla possibilità di creare un ciclo su una serie di dati letti da un file CSV, in pochi minuti avremmo potuto aggiornare tutti i siti.

Supponendo di avere già predisposto un file CSV le cui intestazioni di colonna si chiamano csvWeb, csvList, csvView e csvField, lo script completo potrebbe somigliare a questo.

Import-Csv “C:Scriptallitems-fields.csv” | ForEach-Object {

$web = Get-SPWeb $_.csvWeb

$list = $web.GetList($_.csvList)

$view = $web.GetViewFromUrl($_.csvView)

$field = $list.Fields[$_.csvField]

$view.ViewFields.Add($field)

$view.Update()

}

Vi ricordo che qualsiasi script troviate sul web, e a maggior ragione i miei, sarebbe doveroso testarli in ambienti di test prima di utilizzarli in produzione.

Un ultima segnalazione prima di salutarvi. Al link seguente (in inglese) trovate tanti altri esempi su come lavorare sulle liste con PowerShell, ve lo consiglio.

Happy PoSH
– Riccardo

Posted by sharepointpig in PowerShell, SharePoint 2010, 1 comment

Cambiare la pagina di Access Denied con Powershell

Tra i feed RSS letti negli ultimi giorni, uno ha colpito particolarmente la mia attenzione (tralasciando le notizie in arrivo dalla #SPC11). In questo post viene mostrato come cambiare la pagina di accesso negato di SharePoint 2010 programmaticamente, sostituendola con una personalizzata.

Essendo interessato all’argomento, ma NON essendo decisamente uno sviluppatore, mi sono chiesto come potere girare a mio vantaggio queste poche righe di codice. Da qui a pensare a Powershell il passo è breve.

Non ci vuole un genio per capire capire che l’oggetto a cui si riferisce il codice è la web application. Di conseguenza ho memorizzato in una variabile la mia web application di prova e in una seconda variabile il path della mia pagina di accesso negato personalizzata. Inutile dire che questa pagina deve esistere su file system.

$webapp = Get-SPWebApplication http://sp-2010
$adpage = “/_layouts/MyCustomLayout/AccessDenied.aspx”

Per capire se l’oggetto web application memorizzato nella variabile $webapp disponesse o meno di un metodo più o meno simile a quello visto nell’esempio, ho utilizzato la cmdlet get-member in pipeline con l’oggetto web application.

$webapp | Get-Member

Bingo! Abbiamo proprio lo stesso metodo, UpdateMappedPage. A questo punto ho commesso un errore che mi è stato d’aiuto per arrivare alla soluzione. Ho cioè pensato che per il passo successivo fosse necessario passare un oggetto e ho quindi scritto quanto segue:

$webapp.UpdateMappedPage(‘SPWebapplication.SPCustomPage.AccessDenied’,”/_layouts/MyCustomLayout/AccessDenied.aspx”)

L’errore che ne è derivato è stato significativo.

Access Denied

Risulta infatti chiaro che UpdateMappedPage accetta un set predefinito di valori testuali, tra i quali quello che ci interessa direttamente: AccessDenied. E’ interessante notare anche le altre opzioni, dovrebbero farvi venire in mente un po’ di prove interessanti da fare. Almeno per me è stato così :) Ho quindi corretto lo script in questo modo.

$webapp.UpdateMappedPage(“AccessDenied”,$adpage)

Per confermare l’impostazione è necessario eseguire l’update dell’oggetto web application ed infine il riavvio di IIS. Sinceramente non ho provato con il semplice recycle dell’application pool della web application. Se qualcuno dovesse provarlo me lo faccia sapere :)

$webapp.Update()
iisreset

Il gioco è fatto. Si, ma non ho ancora finito. Dovendo ripristinare la configurazione originale basterebbe passare un valore null al posto della pagina (ripeterò solo le ultime tre righe).

$webapp.UpdateMappedPage(“AccessDenied”,$null)
$webapp.Update()
iisreset

E se volessimo leggere la configurazione corrente? Ancora una volta la cmdlet Get-Member è stata fondamentale. Dall’elenco prodotto in precedenza ho infatti notato la presenza del metodo GetMappedPage. Nonostante MSDN parli anche della possibilità di  utilizzare questo metodo passando come valore il tipo della pagina, cioè AccessDenied, io non so riuscito. Ho ottenuto il risultato sperato passando il path della pagina standard di accesso negato.

$webapp.GetMappedPage(“/_layouts/AccessDenied.aspx”)

Se poi volessimo…. No, scherzo, ho finito. E poi è appena resuscitato Optimus Prime, devo proprio andare :)

– Riccardo

UpdateMappedPage: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebapplication.updatemappedpage.aspx
GetMappedPage: http://msdn.microsoft.com/en-us/library/ee551363.aspx
Il post originale: http://www.anmolrehan-sharepointconsultant.com/2011/08/how-to-use-custom-access-denied-page-in.html

Posted by sharepointpig in Amministrazione, PowerShell, SharePoint 2010, 2 comments

SharePointCommunity.it nuovo articolo

Vi segnalo un mio nuovo articolo pubblicato sul sito di SharePointCommunity.it: Come leggere proprietà del profilo utente in moduli InfoPath 2010.

Molto spesso lavorando su progetti che prevedono l’utilizzo di form InfoPath mi viene chiesto di poter accedere ad alcune proprietà dello User Profile  dell’utente che sta compilando il modulo. In questo articolo vedremo come fare, come sempre senza scrivere codice.

Nelle prossime settimane seguirà una seconda parte, dove vedremo come poter leggere proprietà, sempre dagli User Profiles, ma di un un utente differente da quello correntemente loggato al sito SharePoint. Stay tuned ;).

– Riccardo

Posted by sharepointpig in SharePointCommunity.it, 0 comments

Learning SharePoint 2010

A volte mi sembra di essere un simpatico vecchietto quando faccio dei pensieri che cominciano con “ma vi ricordate quando…”, me lo dice persino mia moglie :)

Ad ogni modo: vi ricordate quando uscì SharePoint Portal Server 2003 e, successivamente MOSS 2007? I blog scarseggiavano e trovare materiale utile sul web era quasi un impresa epica.

Per SharePoint 2010 è decisamente tutta un’altra storia. Più volte Igor, Giuseppe, Romeo e molti altri hanno segnalato di corsi on-line o materiale formativo rilasciato direttamente da Microsoft. I formati sono dei più disparati, ho provato a raccoglierli in questa pagina. L’idea è quella di continuare ad aggiornare questa pagina, magari anche grazie alle vostre segnalazioni e commenti.

Sicuramente l’elenco non è completo, chissà quante altre cose mi saranno sfuggite, ma spero possa aiutare anche solo uno di voi a sviluppare la conoscenza di questo prodotto.

Video demos and training for SharePoint Server 2010

http://technet.microsoft.com/en-us/library/cc262880.aspx

Learn SharePoint Server 2010

http://technet.microsoft.com/en-us/sharepoint/ee410529

TechNet & MSDN Virtual Labs: SharePoint Products and Technologies

http://technet.microsoft.com/en-US/virtuallabs/bb512933.aspx

http://www.microsoft.com/events/series/sharepointserver.aspx?tab=virtuallabs

I Use SharePoint

http://sharepoint.microsoft.com/iusesharepoint/landing.aspx

SharePoint 2010 Productivity Hub (pre-SP1)

http://www.microsoft.com/download/en/details.aspx?id=7122

PerformancePoint Services SuperFlows

http://technet.microsoft.com/en-us/library/hh407292.aspx

SharePoint 2010 and Windows Azure Training Course

http://msdn.microsoft.com/en-us/SPAzureTrainingCourse

Learn SharePoint Development

http://msdn.microsoft.com/en-us/sharepoint/aa905692

TechNet Script Center Repository #SharePoint

http://gallery.technet.microsoft.com/ScriptCenter/site/search/?f%5B0%5D.Type=RootCategory&f%5B0%5D.Value=sharepoint&f%5B0%5D.Text=SharePoint

Office 365 for the IT Pro – Platform

http://www.microsoftvirtualacademy.com/tracks/office-365-for-the-it-Pro-Platform

Video demos and training for Duet Enterprise

http://technet.microsoft.com/en-us/library/gg185652.aspx

Buona lettura :)

-Riccardo

Posted by sharepointpig in Formazione, SharePoint 2010, 0 comments

Video how-to su Duet Enterprise

E’ da poco meno di un mese che Duet Enterprise si è affacciato sul mercato, ma intorno all’argomento c’è già un gran fermento, anche Igor ne ha già scritto due volte. Tra forum, blog e social network rimbalzano spesso notizie sulla pubblicazione di nuovi articoli o documenti tecnici.

Proprio oggi via Twitter ho letto della pubblicazione di un post, arricchito da un breve video how-to, su Duet vista dal lato di SharePoint. Per chi fosse interessato ecco il link: http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23127.

Riporto anche il link al sito Duet Enterprise Summit, nel quale potrete trovare molte altre informazioni e le registrazioni delle sessioni dell’evento di lancio del prodotto: http://www.duetenterprisesummit.com.

Buona visione e buona integrazione :)

– Riccardo

Posted by sharepointpig in SharePoint 2010, 0 comments