<script type="text/javascript">
ExecuteOrDelayUntilScriptLoaded(initialize, "sp.js");
var context = null;
var web = null;
var collWeb = null;
/*function initialize()
{
context = new SP.ClientContext.get_current();
web = context.get_web();
context.load(web);
context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), Function.createDelegate(this, this.onFailureMethod));
}
function onSuccessMethod(sender, args) {
var d = document.getElementById("list");
var l = document.createElement("LI");
l.innerHTML = "<span>" + web.get_title() + "</span>";
d.appendChild(l);
}*/
function initialize()
{
context = new SP.ClientContext.get_current();
this.collWeb = context.get_web().get_webs();
context.load(this.collWeb);
context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), Function.createDelegate(this, this.onFailureMethod));
}
function onSuccessMethod(sender, args) {
var d = document.getElementById("list");
var web = null;
for(var x=0; x < this.collWeb.get_count(); x++)
{
var l = document.createElement("LI");
web = this.collWeb.itemAt(x);
l.innerHTML = "<span>" + web.get_title() + "</span>";
d.appendChild(l);
}
var d2 = document.getElementById("test");
var d1 = document.createElement("DIV");
//d1.innerHTML = inspect(this.collWeb.itemAt(0),1,0);
d1.innerHTML = inspect(this.collWeb,1,0);
d2.appendChild(d1);
}
function onFaiureMethodl(sender, args) {
alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
}
function inspect(obj, maxLevels, level)
{
var str = '', type, msg;
// Start Input Validations
// Don't touch, we start iterating at level zero
if(level == null) level = 0;
// At least you want to show the first level
if(maxLevels == null) maxLevels = 1;
if(maxLevels < 1)
return '<font color="red">Error: Levels number must be > 0</font>';
// We start with a non null object
if(obj == null)
return '<font color="red">Error: Object <b>NULL</b></font>';
// End Input Validations
// Each Iteration must be indented
str += '<ul>';
// Start iterations for all objects in obj
for(property in obj)
{
try
{
// Show "property" and "type property"
type = typeof(obj[property]);
str += '<li>(' + type + ') ' + property +
( (obj[property]==null)?(': <b>null</b>'):( '' )) + '</li>';
// We keep iterating if this property is an Object, non null
// and we are inside the required number of levels
if((type == 'object') && (obj[property] != null) && (level+1 < maxLevels))
str += inspect(obj[property], maxLevels, level+1);
}
catch(err)
{
// Is there some properties in obj we can't access? Print it red.
if(typeof(err) == 'string') msg = err;
else if(err.message) msg = err.message;
else if(err.description) msg = err.description;
else msg = 'Unknown';
str += '<li><font color="red">(Error) ' + property + ': ' + msg +'</font></li>';
}
}
// Close indent
str += '</ul>';
return str;
}
</script>
<div id="test">
Elenco dei siti della site collection listati tramite ECMAScript Client Object
Model<br />
<ul id="list"></ul>
</div>
giovedì 2 settembre 2010
SharePoint 2010 - Esempio di ECMA Client Object Model
lunedì 30 agosto 2010
Rilasciati i primi updates per SharePoint 2010
martedì 24 agosto 2010
Feature upgrade
Shapoint Designer 2010 - Globally Reusable Workflows
Elenco novità in Sharepoint Designer 2010 sui workflow.
Nuove caratteristiche di SharePoint 2010 Workflow.
martedì 3 agosto 2010
Nuova certificazione su SharePoint
Mi sa che ormai mi tocca affrontare le certificazioni sulla nuova versione...
domenica 20 giugno 2010
SharePoint 2010 - Requested registry access is not allowed
Cercando in internet ho trovato che la soluzione è ridare i permessi a Network Service a queste 2 chiavi di registro.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\14.0\Secure\FarmAdmin
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates
Non ho ancora capito il motivo del mal funzionamento.
venerdì 11 giugno 2010
Finalmente la certificazione MCTS
E' con immenso piacere che posso annunciare di essere riuscito a passarlo con un punteggio di 964, quindi ora sono MCTS - Microsoft Office SharePoint Server 2007, Configuration.
giovedì 3 giugno 2010
SharePoint 2010 and Office Web Apps
Premetto che ho seguito fedelmente quanto riportato nell'articolo Technet di Microsoft Deploy Office Web Apps (Installed on SharePoint 2010 Products), ma in entrambe i casi le cose non sono andate per nulla liscie.
La prioma istallazione l'ho fatta su una macchina con SharePoint 2010 installato in standalone mode; in questo caso dopo aver installato i binari delle web apps ho lanciato il PSConfig che arrivato allo step 7 di 10 si è bloccato (suppongo stesse cercando di registrare l'avvenuta istallazione delle web apps in active directory, peccato che la macchina non fosse in dominio). Non sapendo come procedere ho stoppato il processo e sono andato a controllare fin dove era arrivato il configuratore; strano ma vero ho trovato tutti i servizi configurati e startati e le web service application anch'esse pronte all'uso. In definitiva le office web apps risultano funzionanti, anche se il processo PSConfig non ha mai visto la fine.
Di tutt'altro spessore il secondo caso. La situazione era una macchina di front end con sharepoint che punta a un server con SQL Server, questa volta in dominio. Dopo aver installato i binari ho lanciato PSConfig che questa volta è arrivato fino all'ultimo step ma con un bel FAILED! Pensando di essere fortunato come la prima volta sono andato a vedere lo stato dei servizi e delle web service application, ma questa volta la fortuna mi ha voltato le spalle. I servizi erano configurati ma stoppati e le web service application non erano state create. A questo punto ho pensato di lanciare gli script suggeriti nell'articolo e mi sono ritrovato con le web service application installate e configurate in stato di started, ma con i servizi in un limbo: starting.
Dopo essermi consultato con un po' di persone, Davide Colombo mi ha suggerito di eliminare i servizi rimasti appesi con il seguente comando STSADM: deleteconfigurationobject (Unable to delete Shared Services).
Use the following procedure to identify the Shared Services GUID:
- Login to SQL server.
- Open SQL Management Studio and expend Databases.
- Expand Configuration Database & Tables.
- Opened table for dbo.object.
- Executed following query in query analyzer: SELECT * FROM [MOSS_CFG_CA_01].[dbo].[Objects]where name like ‘Name of the Shared Services’.
- Copy the ID of object referenced in objects table of configuration database.
Per ora questo ultimo mistero non è ancora stato risolto, invito chiunque avesse un'idea di offrire il suo contributo. Aggiornerò il post qualora trovassi una soluzione.
lunedì 3 maggio 2010
Publishing Site con WSS 3.0 – 3
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
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

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
--
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
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
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
-
On the top navigation bar, click Application Management.
-
On the Application Management page, in the Application Security section, click Self-service site management.
-
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.
-
-
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).
-
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.
-
Click OK.
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
martedì 2 marzo 2010
Nuovi nomi in 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
Durante il test è incappato in questo errore:
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.



