October 2008 - Posts
Abbiamo appena reso disponibile su GreenPoint una nuova release del progetto (1.0.1.0) che contiene due custom field type, anch'essi rielaborazione (più che altro cosmetica) del materiale della SharePoint Conference 2008: gp_RegExpField e gp_CoordinatesField.
Per una disquisizione sullo sviluppo di custom field per SharePoint vi rimando ad MSDN, qui.
Mi soffermo, invece, molto rapidamente sul primo dei due esempi disponibili in GreenPoint (inutile dire che la parte due è in arrivo ASAP :-P)
gp_RegExpField
Esempio classico, che più classico non si può.
Definisce un field di tipo text (derivato da SPFieldText, dal punto di vista della gerarchia di classi) che aggiunge alle funzionaliltà di base il supporto alla validazione parametrica, affidata ad una regular expression.
Se ne trovano molti, probabilmente perchè la realizzazione è semplice e l'utilizzabilità è discreta (al di là del fatto che, poi, le regular expressions piacciano o siano parte del bagaglio delle nostre competenze).
A fronte del deploy del solution package e a seguito dell'aggiunta di una colonna (su una lista o come site column a livello di web), tra le opzioni a disposizione c'è anche:
In fase di selezione del tipo di dato che deve essere configurato, SharePoint interroga la field definition per verificare:
- L'esistenza di un field editor control (al quale verrebbe delegato il rendering della sezione di pagina utilizzata per le proprietà specifiche di ogni campo)
- L'esistenza di field properties (aka metadata properties) per le quali è possibile fornire un rendering out-of-the-box che non faccia affidamento su controlli custom
Nel caso di gp_RegExpField, il sistema estrae la definizione delle property custom è propone all'utente l'area di selezione seguente:
Non rimane che impostare il campo Regular Expression Pattern (e qui... vai di copia e incolla :-P) ed un campo atto a contenere il messaggio di errore che sarà visualizzato in caso di mismatch.
Voila, almeno relativamente alla configurazione della colonna.
In fase di editing, l'utente avrà di fronte un campo del tutto simile a quello di testo standard (non sono state effettuate personalizzazioni al di fuori della logica di validazione):
Ma in seguito all'inserimento di un valore "invalido", il salvataggio è inibito:
Dal punto di vista del funzionamento interno, qui trovate i sorgenti.
Il punto di intervento, in questo caso, è stato davvero minimo: per definire una logica di validazione è sufficiente effettuare l'override del metodo GetValidatedString, che riceve in input un generico object contenente il dato da validare e deve restituire la versione serializzata dello stesso (senza aggiunte relative alla logica di rendering, che nei custom field è delegata ad altri componenti).
Insomma, pochissimo sforzo e, tutto sommato, un buono spettro di utilizzo :-P
Direttamente dal blog dell'autore, Vincent Rothwell:
[...] it is a set of components which help with building your SharePoint site. ARF was initially designed to help with accessible SharePoint websites, but is also useful in other scenarios including XHTML compatibility [...]
e
ARF contains over 30 controls for you to use and it is entirely possible that you could develop a complete publishing site, conforming to XHTML and accessible without having to write a single line of code.
Controls include...
Compatibility Panel - Ensuring the HTML produced by its child controls are XHTML compliant
SiteQuery - Allow you to develop complex queries to list content
QSVisibility Panel - Allowing you to show and hide content based upon query string values
Calendar View - Allowing to to show calendar entries in your chosen format
Contact Form - Creating a contact form without writing any code
Nei mesi scorso ho avuto modo di discutere un po' di accessibilità e XHTML compliance applicate ai siti SharePoint (ehm... effettivamente ho avuto modo di *ascoltare* Betta e Barbara che ne parlavano!!).
Il progetto è estremamente interessante, e poi il mio "lato dev" è felice del fatto che ci siano i sorgenti a disposizione, giusto per "rubare" qualche buona idea, o semplicemente per la curiosità di indagare :-P
Inizia la serie "vera" (le premesse le potete leggere qui).
Vi illustro brevemente il primo "artifact" che trovate in GreenPoint.
E' una custom extension per STSADM che abbiamo mostrato (molto rapidamente) alla SharePoint Conference.
Un po' di ordine :-)
STSADM
Non credo abbia bisogno di presentazioni, è *il* tool di amministrazione di SharePoint da riga di comando. Ok, è altro, se lo vogliamo vedere dal punto di vista architetturale/developer. Ma per ora accontentiamoci. Anche perchè possiamo scrivere delle...
STSADM Extensions
Sono classi .NET che implementano l'interfaccia Microsoft.SharePoint.Administation.ISPStsadmCommand, definendo quindi i metodi GetHelpMessage e Run.
Condizione, questa, necessaria ma non sufficiente a renderle utilizzabili "come fossero" operazioni out-of-the-box.
La condizione numero due è che il sistema sia reso edotto della loro presenza.
Occorre semplicemente distribuire in [12]\CONFIG un file xml, con i seguenti requisiti:
- Sintassi opportuna :-)
- Nome rispondente ad un pattern preciso: stsadmcommands.*.xml (dove * deve essere sostituito da un identificatore univoco
Provare per credere :-)
Questo il link ad un breve tutorial su MSDN.
gp-getalloc
L'esempio che trovate su CodePlex è realizzato con un duplice obiettivo:
- Illustrare le genericità di una custom extension
- Essere utile anche a chi le extension non le scrive, ma le usa :-)
Tipicamente, nel momento in cui si iniziano a sviluppare extension, l'appetito vien mangiando e il refactoring è il dolce a fine pasto :-) Si estrae una classe di base che esponga funzionalità di validazione dei parametri o helpers di contesto, si astrae la generazione dell'help message, ...
In questo caso la custom extension è "nuda", cosa significativa forse solamente a scopo didattico... ma almeno così si vede bene che "non c'è trucco, non c'è inganno".
Utile, si diceva, forse anche senza doverne per forza ispezionare il codice.
Eseguendo stsadm -o gp-getalloc (ehm... eseguendo il deploy della extension e poi stsadm!!) la console suggerisce i parametri di invocazione:
GREENPOINT Extensions: Get Storage Allocation
(Display the storage space for the specified files)
Parameters:
-url (the url of the web site)
[-user] (a string which contains the user display name)
[-outputFile] (the file you want your output to be stored in)
gp-getalloc ritorna all'utente (in standard output o, se specificato, anche memorizzando un outputFile su file system) un documento XML che descrive lo spazio allocato dai documenti delle document library di un sito. Quello che segue è un frammento generato sulla mia macchina di sviluppo:
<?xml version="1.0" encoding="utf-8"?>
<Allocation Web="http://spdemo.devlizard.inc/areas/sb" User="none" Space="4684274" Files="120">
<Web Title="Site Builders" Url="http://spdemo.devlizard.inc/areas/sb" Space="231523" Files="72">
<List Name="Converted Forms" Space="0" Files="0" />
<List Name="Form Templates" Space="0" Files="0" />
...
<Web Title="Virtual Earth" Url="http://spdemo.devlizard.inc/areas/sb/dataviews/virtualearth" Space="22665" Files="2">
...
</Web>
</Web>
</Allocation>
L'esecuzione prosegue in maniera ricorsiva, riportando lo spazio occupato per ogni sottosito e, ovviamente, i totali ad ogni livello, memorizzati come attributi della struttura XML restituita in output.
La versione attuale *non* tiene in conto il versioning (aspettatevelo in una prossima release) e non discrimina tra library "utente" e library di sistema (master page gallery, data sources, ...).
Ma è già uno strumento mediamente indicativo :-)
(continua...)
Prossimamente su questi schermi: custom fields e utilities :-)
John Holliday ha pubblicato un diagramma che illustra le dipendenze tra i permessi utilizzabili nella configurazione dei permission level.
Seguire le frecce :-)
Come anticipato da Igor, abbiamo appena pubblicato su Codeplex il progetto GreenPoint.
Il nome dovrebbe essere abbastanza indicativo, quindi tralascio la sezione "who should read this book" e vi segnalo solamente alcune informazioni.
Innanzitutto i requirements. Trovate tutto descritto nelle Setup Instructions disponibili qui.
L'installazione del package non si discosta dal procedimento classico.
Leggete, invece, con attenzione la sezione dedicata alla procedura di build, se intendete utilizzare il codice sorgente per test o modifiche (occhio in particolare alla versione e al percorso di installazione di STSDEV, che utilizziamo per la generazione del wsp).
GreenPoint è un progetto in itinere. Il significa che, in particolar modo nella prima fase, è passibile di modifiche anche abbastanza frequenti.
Tra le prime "feature" disponibili troverete buona parte del codice demo che abbiamo utilizzato durante la Microsoft SharePoint Conference 2008 di ottobre.
Stay tuned :-P
Leggo con piacere sul blog di Brian Harry che si stanno muovendo un po' di cose relativamente all'Application Lifecycle Management applicato a soluzioni SharePoint.
Su MSDN è stata pubblicata una pagina di overview che si pone come punto di accesso per una serie di articoli a riguardo, tenendo presente che:
[...] SharePoint application development and practices can differ from Web and Windows-based development processes and procedures [...]
Mi spiace non aver potuto seguire la sessione di RoB alla SharePoint Conference, ma mi fa piacere constatare che l'argomento è "caldo" e che iniziano ad esserci guideline "ufficiali" :-)
Mamma mia quanta gente!
Venerdì scorso si è conclusa la Microsoft SharePoint Conference 2008 e il primo, più evidente parametro di successo dell'evento è la quantità di persone che hanno partecipato.
"Dire" quattrocento (arrotondato per difetto) fa una certa impressione, ma è un numero scritto.
"Sentire" quattrocento è un'altra cosa. E' stato quasi difficile muoversi tra una sessione e l'altra!
Tantissime domande, segno anche queste dell'interesse verso una piattaforma che, ormai, non ha più bisogno di presentazioni. Spero di essere riuscito a dedicare il tempo sufficiente a chi mi ha chiesto consigli o suggerimenti (una voce c'è stata per tutti, purtroppo in alcuni casi troppo sintetica per essere esaustiva... beh, dai, sapete dove scrivermi!).
Tantissimi commenti e considerazioni più "tecniche" da fare... ma proverò a dar seguito a questo post nei prossimi giorni.
Per ora, visto che la stanchezza si fa sentire, mi limito a ringraziare tutti (uno per uno :-P) perchè il successo di queste manifestazioni è fatto anche da chi partecipa in maniera entusiasta e dinamica, come è stato questa volta.
E infine grazie a Igor e a Paolo, che con Microsoft hanno reso possibile tutto questo. Perchè in fondo, pensateci un po', senza di loro ci si ritrovava in 400 a giocare a pallone al parco :D