lunedì 3 maggio 2010

Publishing Site con WSS 3.0 – 3

Riprendendo il discorso dell’ultimo articolo, analizzeremo le funzionalità aggiunte al sito, utili per l’editore e la soluzione adottata per la gestione della Quick Launch.

New Web Part Page

Per creare una nuova pagina di tipo web part con lo stesso template della pagina di default del sito, ho dovuto personalizzare l’application page che gestisce la creazione delle pagine. Per la pagina custom di creazione delle web part page ho seguito quanto riportato in questo articolo Creating Custom Web Part Page Templates for Microsoft SharePoint Products and Technologies; l’unico dettaglio, come riportato da me nel forum su SharePoint (Web Part Page Template ?!?!), è che se si vogliono aggiungere i propri template di pagina ad una custom site definition bisogna creare nella cartella 1033 o 1040 una cartella con il nome della propria site definition e aggiungere la sottocartella DOCTEMP con all’interno la cartella SMARTPGS e in questa porre i propri template.



Master Page


In questo sito volevo che le visualizzazioni pubbliche avessero una master page diversa dalla master page delle pagine di servizio, dove con pagine di servizio intendo le pagine di gestione delle liste, non solo le pagine amministrative (ad es. /_layouts/Settings.aspx). Per ottenere questo risultato ho sfruttato il concetto di ~masterurl/default.master e ~masterurl/custom.master offerto da SharePoint. L’argomento l’ho già affrontato nel post Custom Master Page. Per questo motivo nella pagina che consente l’associazione delle master page ci sono due voci, default e custom. Il check box “Set children master page” permette di impostare la master page scelta anche a tutti i sotto siti del sito a cui si sta cambiando la master page.




Welcome Page


L’ultima funzionalità utile per l’amministratore del sito, presente in MOSS, ma non in WSS è la pagina che permette di associare al sito una nuova welcome page, diversa dalla pagina default.aspx. Purtroppo la funzionalità è veramente minimale nella sua realizzazione, pertanto è necessario digitare a mano la url della nuova welcome page. Questa infine sarà un nuova web part page, memorizzata nella lista Pages del sito. Il codice per cambiare la welcome page usando l’Object Model di SharePoint è il seguente:

using (SPSite siteCollection = new SPSite(http://server/sites/sandbox)) {
using (SPWeb site = siteCollection.RootWeb) {
SPFolder rootFolder = site.RootFolder;
rootFolder.WelcomePage = "Pages/home.aspx";
rootFolder.Update();
}
}

Per onestà intellettuale vi posto anche l’url del blog che mi ha spiegato come fare: Setting the Welcome Page in WSS 3.0.



Quick Launch

Per risolvere il problema della Quick Launch ho deciso di affidarmi a un Event Handler (PagesReceiver) associato alla lista Pages del mio sito. Il compito dell’Event Handler è quello di intercettare le azioni compiute sugli item della lista e di reagire di conseguenza. L’Event Handler della lista Pages crea una nuova entry nella Quick Launch in una posizione predefinita, ovvero come figlia dell’heading Pages (un articolo utile HOW TO: Programmatically customize site navigation in WSS 3.0 and MOSS 2007). Possiamo dire che questa è la parte semplice dell’eserc izio, anche se un problemino invero c’è. Quando creo una pagina con la pagina descritta precedentemente i metadati dell’item non sono ancora stati valorizzati, pertanto il nome della pagina corrisponde al nome file, estensione compresa.




Per modificare la label associata all’item della Quick Launch è necessario rieditare l’item e impostare la proprietà Title, che all’atto della creazione sarà non valorizzato.






Un’altra semplice attività è la rimozione della voce di menu quando cancello una pagina dalla lista. La cosa difficile invece è gestire la possibilità di nascondere la pagina dalla Quick Launch, senza rimuoverla dalla lista Pages. Ho provato a creare un algoritmo che si basa sul metadato Visible, che ho aggiunto alla lista Pages, ma francamente, per il momento, ho ottenuto un risultato assai scarso. Se qualcuno avesse suggerimenti in merito sarei più che felice di riceverli, per trovare una soluzione migliore. Cercherò di descrivervi in breve l’idea: alla mia lista Pages personalizzata, oltre ad una colonna Visible ho aggiunto una colonna ParentIDs, in cui tengo traccia di tutti i Node ID che precedono il nodo corrente, ovvero la pagina appena inserita in quicklaunch; questa colonna contiene una stringa con i valori separati da punto e virgola.
Quando cancello una pagina questa viene semplicemente rimossa dalla quicklaunch (evento ItemDeleted), mentre se cambio la proprietà Visible da true a false, allora cancello il nodo dalla quicklaunch ma non dalla lista Pages, quando riporto la proprietà Visible al valore originale leggo la proprietà ParentIDs per stabilire la posizione in cui inserire il nodo. Di seguito il metodo che ri-aggiunge il nodo alla quicklaunch, come dicevo non è perfetto, ma per la maggior parte dei casi funziona bene.
private void AddNode2Navigation(SPWeb web, SPNavigationNode rootLink, SPNavigationNode node, string parentIDs)
{
string[] ids = null;
SPNavigationNode tmp = null;
if (!String.IsNullOrEmpty(parentIDs))
{
ids = parentIDs.Split(';');
for (int i = ids.Length; i > 0; i--)
{
tmp = web.Navigation.GetNodeById(Int32.Parse(ids[i - 1]));
if (tmp != null)
{
rootLink.Children.Add(node, tmp);
return;
}
}
}
// if parent ids are null.
if (rootLink.Children.Count > 1)
rootLink.Children.AddAsLast(node);
else
rootLink.Children.AddAsFirst(node);
}

Se qualcuno avesse suggerimenti da darmi per migliorare il metodo o per realizzarne uno migliore non si faccia scrupoli a contattarmi.

martedì 20 aprile 2010

Publishing Site con WSS 3.0 - 2

In questo secondo articolo, analizzeremo la soluzione adottata per generare il sito presentato nel precedente articolo.
Cominciamo con il presentare pregi e difetti di un sito fatto con WSS 3.0; prima di tutto la soluzione sfrutta l'utilizzo delle web part, come appunto i siti di WSS fanno normalmente, il alyout di pagina è a due colonne con due web part zone, come possiamo vedere nella figura sottostante.

La figura mostra la pagina in edit modo, come la vedrebbe il redattore. Questa soluzione consente all'utilizzatore di usare, per il proprio contenuto, tutte le webpart che vuole, sia OOTB che custom. Il difetto principale di una soluzione del genere è il motore di ricerca, praticamente inesistente e inefficace, proprio a causa delle web part. Comunque questo difetto si può risolvere installando Search Server 2008 Express, che mette a disposizione un servizio di ricerca più vicino a quello di MOSS 2007. Un altro problema derivante dalla mancanza delle publishing features è l'assenza di gestione della navigazione. Ovvero, diversamente da MOSS 2007, alla creazione di una pagina non viene creata una voce nella QuickLaunch. Inoltre la global navigation non può essere configurata, contiene solo siti. Per come è strutturato il sito si può intervenire solo sulla Top Navigation della site collection. Come vedremo, ho cercato di rimediare almeno alla problematica delle pagine in QuickLaunch, raggiungendo per il momento una soluzione parziale.

La solution

Premetto che per generare la solution in Visual Studio ho utilizzato WSPBuilder. La solution presente in Visual Studio viene presentata nell'immagine a fianco: si può notare la predisposizione alla localizzazione, dovuta alla presenza delle cartelle 1033 per l'inglese e 1040 per l'italiano; la presenza della site definition nella cartella SiteTemplates; l'utilizzo di JQuery per alcune tipologie di contenuto, che analizzaremo in seguito; l'utilizzo di pagine applicative custom, poste nella cartella apps ed infine l'utilizzo delle feature. Quello mostrato in figura è il progetto che si occupa di installa re la definizione (template) di sito, con tutta la struttura. Per i contenuti, ovvero per le web part custom, ho creato un altro progetto, ospitato nella medesima solution.
Alcune delle feature scritte per questo progetto, modificano l'interfaccia del sito, aggiungendo comendi utili all'interno del Site Actions e della pagine dei Settings del sito, come si può vedere nelle immagini sottostanti.
Le due voci "Create DGPoint Page" e "Set Master Page" sono state aggiunte tramite feature. La prima consente di aggiungere una pagina al sito con lostesso template di pagina della default. La seconda invece permette all'amministratore di cambiare la master page di un sito. Queste due funzionalità le vedremo meglio in dettaglio nel prossimo articolo.
A livello di settings del sito invece ho aggiunto la categoria "DGPoint Customization", che raccoglie degli shortcut verso le liste utilizzate per i contenuti.
Nella colonna "Look and Feel", sempre nella pagina dei settings, ho aggiunto la voce Welcome Page, che mi permette di cambiare la pagina di benvenuto (la default page) di un sito o sottosito.

Per il monento è tutto, nel prossimo articolo vedremo le altre personalizzazioni apportate a WSS. Se ci sono domande o commenti, mi raccomando non esitate.

sabato 17 aprile 2010

Publishing Site con WSS 3.0

Mi smentisco subito rivelando che quanto riportato nel titolo è un po' fantascentifico, a meno di non riscrivere MOSS 2007, ovvero non vi mostrerò realmente come creare un publishing site con WSS, anche perchè non ci sono gli strumenti OOTB per farlo; semplicemente sfrutterò le caratteristiche della piattaforma per creare una site definition che crea un sito graficamente più accattivante e non di collaboration, come mostrato nella figura sottostante.

A dire il vero esite un progetto chiamato CompleteSharepoint.NET, che promette di fare quanto annucciato nel titolo, mettendo a disposizione del programmatore un'infrastruttura simile a quella di Sharepoint Server 2007, con Content Type, Master Page e Page Layout, ma ho fatto delle prove con una versione precedente all'attuale e non sono rimasto soddisfatto (dovrei provare l'ultima versione - se qualcuno ha fatto delle prove me lo dica).
Un altro spunto per questo articolo mi è stato dato da un post di Paolo Pielorsi sul suo blog intitolato "Windows SharePoint Services 3.0 come CMS?" in cui parla della possibilità di usare WSS per creare siti graficamente accattivanti. Riporto le parole dell'autore "Mi permetto di postare a proposito di questo argomento perché credo sia utile a chi magari ha dubbi rispetto al potenziale, anche di impaginazione e grafica, di uno strumento come SharePoint. Anzi in questo caso non abbiamo nemmeno usato MOSS, ma solo WSS (quello gratuito insomma)."
Tutti questi argomenti più l'esigenza reale di realizzare un sito con WSS mi hanno portato ad affrontare la problematica, quindi ho deciso di farne argomento di una serie di articoli, una sorta di diario del cammini intrapreso e delle scelte fatte per raggiungere il risultato.

lunedì 12 aprile 2010

Primo giorno in Microsys

Eccomi ad incominciare una nuova avventura, piena di aspettative. Sicuramente positiva come giornata, subito proiettato verso attività in SharePoint 2010, che dovrò sicuramente assimilare al più presto.
 
Cominciamo, giovedì 15 Aprile, con un hands on lab "Office sharepoint 2010: la nuova piattaforma", in modo da cominciare ad operare sul nuovo prodotto. Sono molto impaziente, finalemente toccherò con mano il futuro.

--
Daniele Guarneri
My Profile: http://www.linkedin.com/in/danieleg
My Blog: http://dguarneri.blogspot.com

venerdì 9 aprile 2010

Ultimo giorno in Brain Force

Oggi è il mio ultimo giorno in Brain Force.
Esperienza breve ma intensa, che mi ha arricchito molto sia dal punto di vista personale che professionale. Ho avuto modo di conoscere tante valide persone, da cui ho potuto impare molte cose. In questi anni ho avuto il piacere di partecipare al progetto di rifacimento del sito ATM, che mi riempie d'orgoglio; soprattutto se penso alla fatica fatta per raggiungere il risultato. Tecnicamente parlando è stata un'impresa molto pesante e formativa.

Infine ringrazio tutti i miei colleghi, che mi hanno sopportato e supportato, in particolare Lino e Michelangelo con cui ho condiviso la maggior parte dell'esperienza.

domenica 4 aprile 2010

Buona Pasqua

Auguro a tutti coloro che mi seguono in questo blog una felicissima Pasqua.
Sono ormai parecchi giorni che non scrivo più nulla sul blog, ma a breve avrò novità degne di note e credo che avrò modo di parlare ancora di SharePoint. Se le cose vanno come devono, vi parlerò anche di SharePoint 2010, ma non riportando cose sentite da altri, bensì rifacendomi alla mia esperienza diretta con questo nuovo programma Microsoft.

Rinnovo gli Auguri di Buona Pasqua e vi invito a rimanere collegati.

Alla prossima.

venerdì 19 marzo 2010

SharePoint Community Italiana


Finalmente online la beta del sito della prima Community italiana su SharePoint.
Speriamo che si riempia al più presto e che diventi il fulcro degli scambi di opinioni, codice e trucchetti vari di tutti gli sharepointer del nostro paese.

Ci vediamo sulla community, appena sarà possibile.

sabato 6 marzo 2010

Self-Service Site Creation

Ho scoperto studiano per la certificazione, che in SharePoint (WSS compreso) è possibile abilitare alcuni utenti a crearsi in autonomia dei siti, diventandone autometicamente amministratori. Per fare questo è necessario che l'amministratore di SharePoint abiliti dalla Console Amministration la proprietà "Self-Service Site Creation". Il procedimento è illustrato di seguito.

  1. On the top navigation bar, click Application Management.

  2. On the Application Management page, in the Application Security section, click Self-service site management.

  3. On the Self-Service Site Management page, in the Web Application section, verify that the Web application you want to change is selected.

    • On the Select Web Application page, select the Web application for which you want to enable self-service site creation.

  4. On the Self-Service Site Management page, in the Enable Self-Service Site Creation section, select On.


    When you enable Self-Service Site Creation, an announcement will be added to the Announcements list on the home page of the top-level Web site in the root site collection for the Web application. The announcement provides a link to the site creation page (scsignup.aspx in the _layouts directory; for example, http://server_name/_layouts/scsignup.aspx).

  5. To require users of self-service site creation to supply a secondary contact name for sites that they create when using the sign-up page, select the Require secondary contact check box.

  6. Click OK.

Provando in WSS 3.0 su di una web application contenente già la site collection (creata con template Blank Site) ho notato che l'announcement non viene creato, quindi consigli di inserire a mano un link o sulla quicklaunch oppure in home page.

Gli utenti che possono creare siti sono, l'amministratore (ovvio) i members della site collection oppure tutti quegli utenti a cui è stato abilitato il livello di permessi "Use Self-Service Site Creation".
--
Daniele Guarneri
My Profile: http://www.linkedin.com/in/danieleg
My Blog: http://dguarneri.blogspot.com

giovedì 4 marzo 2010

Nuovo SharePoint Social Network

E' nato SPoint.me dalla mente di uno degli inventori di SharePoint Magazine. Io mi sono già registrato e sono già in ottima compagnia, venite anche voi ad arricchire la community italiana e registratevi al gruppo "SharePoint Italy".

martedì 2 marzo 2010

Nuovi nomi in SharePoint 2010

MOSS 2007------------> SharePoint 2010
BDC-----------------------> BCS (adesso si possono editare i dati)
SSP-----------------------> Service Applications. per esempio: Performance Point SA,Excel SA
SSO-----------------------> STS (Secured Token Service)
WSS----------------------> SFS (SharePoint Foundation Server)

mercoledì 17 febbraio 2010

ARF e WCF

In un recente progetto che ho realizzato in WSS con l'ausilio di ARF, un mio collega ha dovuto integrare delle chiamate a servizi WCF, nella fattispecie per recuperare un profilo utente da un applicativo propietario.

Durante il test è incappato in questo errore:

ARF: System.ApplicationException: This operation returned because the timeout period expired. (Exception from HRESULT: 0x800705B4)
at System.Threading.ReaderWriterLock.AcquireWriterLockInternal(Int32 millisecondsTimeout)
at ARF.Web.Utility.SPFileWatcher.Timer_Elapsed(Object sender, ElapsedEventArgs e)

Dopo averci speso una giornata, seguendo alcune mie considerazioni, Alberto ha scoperto che la connessione WCF va chiusa esplicitamente altrimenti va in conflitto con la cache di ARF (ARFCache.cs). Frugando nel codice di ARF si è anche accorto che la cache, utilizzata per cachare i template xslt, ha un timeout impostato a 30 secondi, di default.

mercoledì 10 febbraio 2010

Cosa cambia nel rendering di SharePoint 2010

Vi segnalo un post del blog di Andrew Connell in cui si parla del nuovo rendering di SharePoint 2010, decisamente più pulito ma non XHTML 2.0 compliant. Il link è: SharePoint 2010 Changes in Rendering.

martedì 26 gennaio 2010

Best Master Page

Facendo mente locale all'esperienza passata e ad alcuni studi recenti, con relativa sperimentazione, sono giunto alla seguente conclusione: se dovessi riscrivere una custoim master page userei solo codice html e placeholder. Detta così non c'è nulla di inaspettato, ma spiegando quanto ho in mente forse qualche perplessità potrebbe nascere. Vi invito quindi fin da subito a commentare quanto andrò a dire, concedendomi l'attenuante di una temporanea insanità mentale e del fatto che non propongo ciò come LA SOLUZIONE, ma semplicemente come uun'idea che mi è venuta in mente, o perlomeno una presa di coscienza.

L'invenzione dell'acqua calda consiste in questo: invece di mettere i controlli direttamente nella master page, soprattutto quelli custom (si pensi per esempio al rendering accessibile dei menu tramite l'utilizzo delle componenti di ARF, che ho menzionato in post precedenti), andrei a posizionarli in control template personalizzazati, posizionati in pagina tramite feature, utilizzando appunto i delegate control. Un vantaggio che mi viene in mente, e qui potrebbero scatenarsi i detrattori, è la possibilità di scrivere del codice runat server all'interno dei controlli ascx, cosa che nelle master page non è possibile fare; questo mi permetterebbe volendo (anche se non è il sistema più elegante dal punto di vista dei puristi dello sviluppo) di non generare codice compilato in DLL. Ovvero ad eventuali modifiche non dovrei ricompilare il codice per riportarlo o nella bin della web application oppure in GAC.

A questo punto sono pronto alla pubblica lapidazione. Ben venga se ne esce qualcosa di costruttivo che ci consenta di scrivere delle buone master page, facilmete manutenibili.

Aggiungo qualche link di approfondimento:
User Control in Master Page (Page Footer)
Sovrascrivere i DelegateControl

mercoledì 20 gennaio 2010

SPSecurityTrimmedControl no XHTML compliant

Leggendo un recente post di Barbara Falchi, ho scoperto che anche in SharePoint 2010 il controllo SPSecurityTrimmedControl viene renderizzato con il tag SPAN. Questo comportamento è molto noioso se si cerca di creare pagine XHTML, perchè si viene a generare del codice sintatticamente scorretto. Mi vado a spiegare: il controllo SiteActionMenu viene renderizzato come DIV con tutta la relativa struttura di anchor etc., se incluso in nel controllo SPSecurityTrimmedControl genererebbe un DIV contenuto in uno SPAN; ovvero un tag block contenuto in un tag inline, fortemente scorretto. Se invece si volesse utilizzare SPSecurityTrimmedControl per nascondere qualcosa contenuto nel tag HEAD (un css o un javascript per esempio) si andrebbe di male in peggio, in quanto i tag accettati nel tag HEAD non sono molti e se non erro tutti inline.

Il motivo per cui il controllo SPSecurityTrimmedControl genera uno SPAN e da ricercarsi nella sua implementazione; il controllo deriva da System.Web.UI.WebControl che di default crea proprio un tag SPAN:

// costruttore
protected WebControl() : this(HtmlTextWriterTag.Span) {}


A dire il vero il WebControl prevede altri due costruttori:

protected WebControl(string tag)
{
this.tagKey = HtmlTextWriterTag.Unknown;
this.tagName = tag;
}

public WebControl(HtmlTextWriterTag tag)
{
this.tagKey = tag;
}


Peccatto che il controllo SPSecurityTrimmedControl non li utilizzi.

public SPSecurityTrimmedControl()
{
}

internal SPSecurityTrimmedControl(HtmlTextWriterTag tag) : base(tag)
{
}


A mio parere sarebbe stato meglio avere la possibiltà di valorizzare una proprietà pubblica per poter scegliere il tag da renderizzare (tra SPAN e DIV) o semplicemente avere la possibilità di renderizzare solo il contenuto del controllo, comportamento che lo avrebbe reso utilizzabile a livello di HEAD. Logicamente è sempre possibile scrivere un proprio controllo, ma questo lo dedico alla prossima puntata. Intanto vi segnalo un post che tratta del controllo SPSecurityTrimmedControl, evidenziandone altri problemi. Ho comunque il sospetto che il post in questione faccia riferimento ad una versione del controllo precedente alla service pack 2.0 di SharePoint. Qualcuno me lo può confermare?

venerdì 15 gennaio 2010

SharePoint 2007 & XHTML

Per esperienza personale, oltre al fatto che è anche dichiarato da Microsoft, SharePoint 2007 non è in grado OOTB di generare codice XHTML valido, indipendentemente dal DOCTYPE utilizzato. Fortunatamente qualche espediante per raggiungere un buon grado di aderenza allo standard XHTML c'è.

Parlo principalmente della carateristica di publish del MOSS, di cui ho più esperienza. I problemi derivano per esempio dal rendering dei campi RitchImage, che aggiungono attributi deprecati e scrivono il tag in maiuscolo. Per risolvere questo problema si può ricorrere agli adapter. Molti progetti presenti in Codeplex inerenti all'accessibilità fanno ricorso a questo espediante; consiglio:
Tutti progetti che affrantano il problema della resa del codice conforme allo standard XHTML; dal mio punto di vista non esiste il progetto risolutore, un mix delle soluzioni è l'approccio migliore.

Un altro consiglio per generare del buon codice è di usare il più possibile le Content by Query WebPart, che generano il codice html tramite XSLT. Questo permette al programmatore di maggior controllo sul codice generato. L'unica accrotezza da tenere presente è che gli XSLT usati dalla CQWP generano HTML pertanto il consiglio è di modificarli per fargli generare in output del codice XML. Per avere un controllo maggiore, tramite browser, delle CQWP, ho usato una WebPart che le estende e che espone anche quelle proprietà che altrimenti sarebbero visibili solo esportando la webpart stessa; la webpart è la Extented CQWP di Waldek Mastykarz (Paging Content Query Web Part).

mercoledì 30 dicembre 2009

Blogs su SharePoint

Segnalo due nuovi blog in italiano si Sharepoint; uno più orientato ai site builder, mentre l'altro dedicato all'architettura di SharePoint e ai suoi aspetti sistemisitici.

http://nonsolosharepoint.wordpress.com/
http://sharepointpig.wordpress.com/

domenica 27 dicembre 2009

SharePoint 2007 e le risorse globali

Mi è stato detto che se si vuole creare una WSP che distribuisca in automatico le risorse globali è necessario che nel manifest.xml i file di risorse siano dichiarati ApplicationResourceFile nell'apposita sezione ApplicationResourceFiles (http://stackoverflow.com/questions/296003/deploy-a-resource-file-to-appglobalresource-folder-on-activation).

Siccome con WSPBuilder non è possibile ottenere un manifest così fatto è necessario procedere a mano, ma facendoci aiutare da WSPBuilder fin dove possibile.
Per prima cosa copiare nella root del progetto il file WSPBuilder.exe.config e impostare a true la proprietà BuildDDF: .

Mettere i file di risorse nella cartella Resources all'interno della cartella 12.

1 - Generare una wsp, copiarla e rinominarla con estensione .cab.
2 - Aprire il file cab ed estrarre il manifest.xml.

3 - Modificare il file cab aggiungendo sotto

<rootfiles>
<rootfile location="Resources\myResource.en-US.resx">
<rootfile location="Resources\myResource.resx">
</rootfile>

il codice seguente

<applicationresourcefiles>
<applicationresourcefile location="myResource.en-US.resx">
<applicationresourcefile location="myResource.resx">
</applicationresourcefile>

4 - Scaricare il "Microsoft Cabinet Software Development Kit" e creare il file CAB a mano con MakeCab.exe.
5 - Rinominare il file cab in wsp e installarla in sharepoint con stsadm.

Dopo aver fatto tutto questo, però, mi sono accorto che i file di risorse invece di essere compiati nella cartella App_GlobalResources, vengono copiati in un cartella "resources" sempre all'interno della web application di SharePoint ospistata da IIS nella quale la nostra wsp è stata deployata.

Dopo un po' di ricerche ho trovato questo articolo (http://www.mikhaildikov.com/2007/03/sharepoint-resources-types-use-and_2163.html) in un blog che spiega bene come in effetti gli elementi de manifest ApplicationResourceFiles e Resources siano inutili e suggerisce un modo per copiare a runtime i file di risorse nella cartella App_GlobalResources. Un altro utile articolo sui file di risorse è "SharePoint Internals: Resources".

Se qualcuno ha sperimentato altri modi ho ha trovato il sistema di usare i sopra citati elementi del manifest non abbia problemi a scrivere un commento. La stessa cosa vale se sapete come funziona il meccanismo delle risorse in SP 2010. Nella speranza che ci siano stati dei miglioramenti nella gestione delle risorse globali.

mercoledì 23 dicembre 2009

SharePoint 2010 Client Object Model

Fianalmente cominciano a trovarsi svariati video su SharePoint 2010 che entrano in dettaglio sulle novità di questo nuovo prodotto di Microsoft. Essendo molto attratto dalla nuova interfaccia e curioso di capire come poter sviluppare siti che si avvicinino sempre più all'esperiece degli utenti, mi sono concentrato sui video che mostravano una delle grandi novità della UI si SP 2010; il Client Object Model.

Vi segnalo due video in cui parla Andrew Connell:
Overview of the Client Object Model
ECMAScript Client Object Model

Nell'articolo seguente invece viene fatto un paragone tra le applicazioni client stile SP 2007 e quelle che saranno con SP 2010:
SharePoint 2010: Introducing the Client Object Model

Nel secondo in particolare, fate attenzione quando viene mostrato il controllo SharePoint:ScriptLink che ha un attributo nuovo LoadAfterUI. Questo attributo non viene spiegato ma immagini serva per indicare a SharePoint di caricare lo script sp.js in modo asincrono, dopo che la pagina è stata caricata completamente.

Il client object model faciliterà l'accesso ai dati. Esistono ancora i web service, ma il client object model ne è una valida alternativa.

Altra novità sono le REST API di SharePoint.

giovedì 10 dicembre 2009

Costruire un sito web - riflessioni

Costruire un sito web è come costuire una casa.

Bisogna avere un progetto, segliere i materiali e seguire gli standard. Gli architetti che disegnano la casa hanno anche le basi di ingegneria per sapere che quello che disegnano starà in piedi, poi si fanno aiutare per i calcoli delle forze, ma un'idea di base riescono a farsela da soli; almeno i più bravi. I problemi da affrontare nel progettare una casa sono sempre gli stessi, al massimo aumentano un po' le complessità se la casa è a più piani, in una zona sismica oppure un grattacielo. Di certo i materiali sono pressapoco sempre gli stessi: cemento, legno, ferro etc. Gli architetti più smalizziati e ripesttosi delle leggi si preoccupano dell'abbattimento delle barriere architettoniche e per endere più confortevole e abitabile la casa pensano a una serie di servizi utili a chi ci abiterà.

Se ci pensate progettare un sito web ha le stesse analogie, purtroppo la sua costruzione non sempre segue le stesse regole utilizzate per progettare una casa. Spesso i designer non parlano le lingue del web, ragionano solo con la carta e curano solo l'aspetto finale del sito. Usabilità (i confort della casa) o l'accessibilità (l'abbattimento delle barriere architettoniche) sono parole usate a puro titolo commerciale, ma non ne conoscono le basi. La stessa cosa spesso la si può dire anche per gli stessi sviluppatori. Conosco programmatori ASP.NET che non conoscono il protocollo HTTP, che non sanno come funzionano le FORM. Altri che ignorano il linguaggio CSS e non sanno che per scrivere uno script Javascript cross-browser è meglio affidarsi al DOM del W3C, usano ancora "document.all"! Come se un muratore non sapesse fare il cemento o riconoscere un mattone.
Ho parlato con grafici che non conoscevano le unità di misura del web, lavoravano solo in pixel. Altri che non conoscevano il significato delle misure in percentuale: "allora a 1024x768 la colonna destra la facciamo del 30%, mentre a 800x600 la facciamo del 25%"! Cosa? Fissiamo una percentuale e la teniamo per tutte le risoluzioni.

Nessuno di noi si cimenterebbe da solo a costruirsi la casa, mentre tutti bene o male abbiamo provato a fare un sito. Chi lo fa di professione dovrebbe approfondire i fondamentali e specializzarsi nel proprio ruolo, ma sempre più spesso questo non si fa.

sabato 5 dicembre 2009

Un po' di medicina per i nostri CSS

Ormai è chiaro a tutti che scrivere codice html cross-browser utilizzando XHTML e CSS in passato era come camminare in un campo minato, a causa delle implementazione più o meno fedele degli standard. Il libro che sto leggendo "Progettare libri web standard" riassume un decennio di storia dei browser motivando anche alcune scelte che hanno introdotto alcune volte delle errate interpretazioni degli standard css, si pensi per esempio al caso del Broken Box Model di IE. Nel leggere il libro mi sono accorto che nel corso della mia vita professionale, che è cominciata nel 1999, ho visto tutte le cose elencate nel libro, e ho anche scritto codice HTML usando quei mezzucci descritti nel libro come immondizia HTML. Per fortuna la scoperta dei css e di XHTML mi ha aperto gli occhi.

Vi riporto un po' di link utili menzionati nel libro di siti in cui vengono presentati i vari bug che affliggono i più comuni browser.

Oltre a descivere i vari bug vengono proposte anche delle soluzioni per poter scivere del codice HTML il più possibile cross-browser.