Posts
98
Comments
152
Trackbacks
6
martedì 18 novembre 2008
Creare Workflow per SharePoint Services 3.0 con Visual Studio 2008


Oggi, da novizio programmatore di Workflow per SharePoint, mi sono imbattuto nel primo “ostacolo”.  Quello che volevo fare era semplicemente creare un workflow di esempio utilizzando Visual Studio 2008 e utilizzando il template apposito che viene messo a disposizione dai Visual Studio Tools for Office.

Niente di più semplice. Si crea il progetto scegliendo l’apposito template (nel mio caso un workflow sequenziale), si creano le attività, si compila e si testa andando in debug (o si rilascia direttamente).

Effettivamente risulta tutto molto semplice, ma se si sta lavorando con WSS 3.0 e non con MOSS 2007, ci sono delle piccole modifiche da fare. Prima di tutto il template fa riferimento all’assembly Microsoft.Office.Workflow.Tasks.dll che è disponibile solo in MOSS. Occorre quindi rimuovere la reference dal progetto.

Fatto questo e provando a fare il deploy (o debug) si ottiene però un altro errore:

Error    3    Feature '0837a41e-b8d2-43f5-87ae-94a35a018530' could not be installed because the loading of event receiver assembly "Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" failed: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. The system cannot find the file specified.

Anche in questo caso si fa riferimento ad un assembly e ad una caratteristica (feature receiver) presente solo in MOSS. Per rimuovere l’errore occorre editare il file feature.xml ed eliminare dal tag <Feature> i due attributi ReceiverAssembly e ReceiverClass.

A questo punto tutto funziona alla perfezione.

posted @ martedì 18 novembre 2008 14.52 | Feedback (1)
venerdì 14 novembre 2008
ASP.NET, UpdatePanel e Firefox Caching

In un'applicazione ASP.NET che sto sviluppando e che fa uso di Updatepanel, Ajax e quant'altro, si verificavano strani comportamenti in Firefox (più precisamente su Firefox 3).
Gli strani comportamenti erano dati dal refresh fatto da browser, mentre su IE 6 e 7 il problema non sussisteva.

Indagando un attimo ho scoperto che si tratta di un problema dovuto alla gestione della cache di Firefox. Questo semplice snippet ha risolto i miei problemi:

 

Private Sub _default_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit ' Verifico il browser If Request.Browser.MSDomVersion.Major = 0 Then Response.Cache.SetNoStore() End If End Sub

Ovviamente il controllo sul browser può essere fatto diversamente e in modo più preciso, ma nel mio caso va già bene così com'e'. Comunque l'idea è quella di disabilitare il caching della pagina nel caso in cui il browser corrente non sia IE (o nel caso in cui sia Firefox).

posted @ venerdì 14 novembre 2008 14.43 | Feedback (0)
lunedì 3 novembre 2008
WSS 3.0, Search Server 2008 Express e gli errori ricorrenti

Come già detto in un post precedente, sto provando WSS 3.0 in accoppiata con Search Server 2008 Express. Tutto funziona correttamente, ma dopo aver eseguito l’upgrade di un’installazione WSS 3.0 funzionante mi sono ritrovato nell’event viewer una serie di errori di questo tipo:

The Execute method of job definition Microsoft.SharePoint.Search.Administration.SPSearc hJobDefinition (ID
82c8c6fa-564f-4d43-877e-b4e549c6410e) threw an exception. More information is
included below.


Retrieving the COM class factory for component with CLSID
{629DA12E-9AD5-4FEC-B886-42C5982C5109} failed due to the following error:  80070422.

Cercando su internet si trovano tantissimi casi simili. Vengono proposte soluzioni varie, riconfigurazione di permessi sul DCOM, etc etc. Nel mio caso però non avevo situazioni strane: tutto installato sulla stessa macchina, uso di un unico account per la configurazione di tutti i servizi, account amministratore di macchina.

Gli errori nel log però continuavano a saltar fuori. Indagando meglio e cercando l’ID della componente sul registro ho notato che è il servizio di ricerca di SharePoint a generare tutti gli errori. Andando a verificare i servizi attivi ho notato che Search Server 2008 Express installa il suo servizio chiamato “Office SharePoint Server Search” (che dovrebbe essere lo stesso di MOSS 2007 se non ricordo male). Il servizio di ricerca di WSS invece si chiama “Windows SharePoint Services Search” e dopo l’installazione di Search Server 2008 viene disabilitato.

Apparentemente tutto corretto, ma andando a verificare i servizi attivi sull’Amministrazione Centrale di SharePoint si nota che è stato anche qui aggiunto il nuovo servizio di ricerca, ma quello vecchio non è stato stoppato. Nella pratica ogni volta che WSS tenta di indicizzare i contenuti con il suo servizio (nel mio caso ogni 5 minuti), parte il job relativo, ma il servizio di Windows è disabilitato e da qui gli errori sull’Event Viewer.

Stoppando il servizio di ricerca di WSS anche su SharePoint tutto torna alla normalità e gli errori spariscono.

posted @ lunedì 3 novembre 2008 21.04 | Feedback (0)
Creare web part Ajax Enabled per SharePoint 2007

Al giorno d’oggi un’applicazione web che si rispetti non può più fare a meno di Ajax. Anche su SharePoint vale la stessa cosa e andando a sviluppare web part è quasi “d'obbligo” utilizzare un qualche framework Ajax. Volendo utilizzare le Ajax Extension di Microsoft e volendo anche utilizzare il nuovo Framework 3.5 è necessario compiere alcuni piccoli passi.
La prima cosa da fare è modificare il web.config di SharePoint affinchè includa tutte le entry necessarie a supportare il Framework .NET 3.5. E’ possibile editare a mano il web.config di SharePoint e riportare tutte le modifiche, ma esiste anche un metodo più rapido descritto in questo post. Qui i punti salienti:

  1. Da Visual Studio 2008 creare un progetto web temporaneo;
  2. Selezionare come target il Framework 2.0;
  3. Copiare il web.config di SharePoint nel nuovo progetto;
  4. Cambiare il target del progetto selezionado il Framework 3.5;
  5. Copiare il web.config modificato nella virtual directory di SharePoint.

Fatto questo il nostro web.config avrà tutto il necessario per supportare LINQ, le Ajax Extensions, e compagnia varia.
A questo punto potremo creare le nostre web part Ajax-Enabled. L’unica accortezza è quella di verificare che nella pagina ci sia sempre uno ScriptManager. Volendo è possibile modificare direttamente la master page, ma in caso di redistribuzione della nostra web part potrebbe essere scomodo.

Possiamo però verificare da codice la presenza dello script manager e nel caso non fosse presente possiamo andare ad aggiungerlo in automatico:

   1: protected override void OnInit(EventArgs e)
   2: {
   3:   base.OnInit(e);
   4:   try
   5:   {
   6:     // Verifico se lo script manager è già presente
   7:     ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
   8:     if (scriptManager == null)
   9:     {
  10:       scriptManager = new ScriptManager();
  11:       scriptManager.ID = "ScriptManager1";
  12:       scriptManager.EnablePartialRendering = true;
  13:       // Aggiungo lo script manager alla pagina
  14:       this.Page.Form.Controls.AddAt(0, scriptManager);
  15:     }
  16:   }
  17:   catch (Exception ex)
  18:   {
  19:     error = ex.ToString();
  20:   }
  21: }

Per finire nel caso ci fossero problemi di postback con gli update panel, questo KB della Microsoft mostra il work-around da utilizzare.
Alla prossima!

posted @ lunedì 3 novembre 2008 10.21 | Feedback (2)
venerdì 31 ottobre 2008
Estendere la ricerca di Windows SharePoint Services con Search Server 2008 Express


Di ritorno dal 7° Workshop dotnet Marche dedicato al mondo SharePoint, mi sono subito dedicato a testare quello che è emerso durante le varie sessioni (a proposito un evento ben riuscito, ottimi gli Speaker e le sessioni tutte molto interessanti).

Tra le prime cose che ho verificato è quella dell’estensione delle funzionalità di ricerca di WSS 3.0 integrando quelle messe a disposizione dal recente Search Server 2008 Express.  Chi ha lavorato un po’ con WSS saprà sicuramente che le funzionalità di ricerca non sono proprio così estese (per usare un eufemismo). Search Server 2008 Express mette a disposizione le stesse funzionalità della ricerca di MOSS, con il vantaggio però di essere “gratuito” (o meglio compreso nella licenza di Windows Server).

L’installazione è abbastanza banale. Per i dettagli vi rimando a questo articolo di Technet. Al termine dell’installazione e della configurazione, ci ritroveremo con un nuovo sito WSS 3.0 su una nuova porta. Infatti Search Server 2008 Express è basato su WSS 3.0 e creerà un suo sito dedicato alla ricerca (estendibile a piacimento). Occorre però abilitare in qualche modo le funzionalità di ricerca avanzate sul sito WSS originario.
I passi da seguire sono i seguenti:

1) Abilitare le nuove features dall’amministrazione centrale di SharePoint

2) Andare nei settaggi della nostra site collection. Sotto al menu Site Collection Administration troveremo delle nuove voci. Clikkando su Search Settings, sarà possibile impostare il sito da utilizzare per la ricerca. Impostiamo il nuovo sito creato da Search Server Express

3) Fatto! A questo punto nel sito originario il box di ricerca dovrebbe essere come quello mostrato in figura:

 

Tutto a posto… Quasi. Cercando qualcosa o accedendo alla ricerca avanzata si viene portati infatti sul nuovo sito WSS perdendo il menu superiore e non avendo nessun link per tornare indietro. Non ho capito se sia possibile collegare la Top link bar del sito originario, ma comunque impostanto la Portal site connection o inserendo un link custom nella Top link bar sarà possibile avere un “collegamento” con il nostro sito originario.

Tutte le impostazioni della nuova ricerca saranno gestite negli SharedServices dell’amministrazione centrale e risultano sostanzialmente identiche a quelle messe a disposizione da MOSS 2007.

posted @ venerdì 31 ottobre 2008 14.22 | Feedback (2)
giovedì 23 ottobre 2008
Installare la Windows Live Wave 3 sui sistemi operativi non supportati

Come molti altri anche io ho deciso di utilizzare Windows 2008 come sistema operativo per la mia workstation.
Non potendo fare a meno di Live Writer e Messenger e scontrandomi con il fatto che le installazioni dei suddetti programmi, sostengono che Windows 2008 non è supportato, ho cercato un po’ di informazioni in giro.

Sostanzialmente lanciando direttamente i vari MSI è possibile installare il tutto anche sui sistemi operativi non supportati ufficialmente. Segnalo questo sito che mi sembra il più completo a livello di link: http://messengergeek.spaces.live.com/blog/cns!E3785B1281BBDA1!868.entry 

Interessante anche il Microsoft Office Outlook Connector tramite il quale finalmente riesco a controllare l’indirizzo di posta che ho su Hotmail direttamente da Outlook.

posted @ giovedì 23 ottobre 2008 21.06 | Feedback (2)
[Virtualizzazione] - Utility per cambiare il SID di un computer

Se come me, lavorate molto con la virtualizzazione, sicuramente avrete “clonato” una macchina virtuale semplicemente con un copia e incolla. Questo metodo è sicuramente il più semplice e veloce, ma può portare ad alcuni problemini soprattuto se si lavora in workgroup o in dominio. Questo perchè ogni macchina virtuale clonata avrà lo stesso Computer Security Identifier (SID).
Nel mio caso aggiungendo il primo “clone” al dominio, non si riusciva più a fare il login, neanche con l’utente amministratore.

La soluzione è molto semplice: Mark Russinovich e Bryce Cogswell hanno messo a punto questa utility, NewSID ormai giunta alla versione 4.10 (devo ammettere che non la conoscevo).  Devo dire che nel mio caso l’utility ha funzionato alla perfezione risolvendo ogni problema!

posted @ giovedì 23 ottobre 2008 20.56 | Feedback (0)
martedì 21 ottobre 2008
[OT] - Reborn

In perfetta sintonia con il nuovo UGI (un sentito ringraziamento a tutti quelli che ci hanno lavorato e che continuano a farlo) anche per me è iniziata una nuova vita: da una settimana circa ho iniziato l'avventura del libero professionista / consulente.
Di cosa mi occuperò? Bella domanda, al giorno d'oggi il campo d'azione è molto vasto, ma ho deciso di focalizzarmi su quelle che da sempre sono le tecnologie su cui mi sono specializzato: SharePoint (e qui devo un po' rientrare nel giro) e .NET con particolare orientamento al web.

In questi giorni ho una montagna di cose da fare e da sistemare, ma nel prossimo futuro spero di poter essere un po' più presente anche sul blog che ho "trascurato" nel corso degli ultimi mesi.

posted @ martedì 21 ottobre 2008 9.52 | Feedback (3)
mercoledì 24 settembre 2008
Compilare un template PDF in ASP.NET

Dopo mesi di assenza torno a postare nel mio blog e, complice un cambio di lavoro, spero di poterlo fare più assiduamente da qui in avanti.
Bando alle ciance: in una mia applicazione ASP.NET è nata una nuova esigenza e cioè quella di consentire agli utenti la stampa in PDF di vari moduli precompilati.
Come fare? I metodi sono tanti, le librerie PDF presenti sul mercato sono innumerevoli. La soluzione che propongo in questo post è quella di usare template PDF più la libreria gratuita iTextSharp. I template PDF possono essere realizzati con un qualsiasi strumento di editing e devono solo avere una serie di field nei punti in cui dovranno essere inseriti dinamicamente i dati dell'utente.

Una volta preparati i template PDF e aggiunto un riferimento alla libreria iTextSharp, il codice necessario alla compilazione dinamica è molto semplice:

   1: Imports System
   2: Imports System.IO
   3: Imports iTextSharp.text
   4: Imports iTextSharp.text.pdf
   5: ...
   6: ...
   7: ...
   8: Private Sub Stampa()
   9:    Dim memStream As New MemoryStream
  10:    Dim pdfTemplate As String = GlobalVars.TemplatesPath & "template.pdf"
  11:    Dim pdfReader As New PdfReader(pdfTemplate)
  12:    Dim pdfStamper As New PdfStamper(pdfReader, memStream)
  13:    pdfStamper.Writer.CloseStream = False
  14:    Dim pdfFormFields As AcroFields = pdfStamper.AcroFields
  15:    ' Setto i field che voglio valorizzare sul documento PDF
  16:    ' Checkbox
  17:    pdfFormFields.SetField("Check1", "1")
  18:    pdfFormFields.SetField("Check2", "0")
  19:    ' Campi testuali
  20:    pdfFormFields.SetField("Text1", "Nome")
  21:    pdfFormFields.SetField("Text2", "Cognome")
  22:    ' Rimuovo tutti i fields
  23:    pdfStamper.FormFlattening = True
  24:    pdfStamper.Close()
  25:  
  26:    ' Faccio direttamente la response del contenuto
  27:    Response.AppendHeader("content-disposition", "attachment; filename=modulo_utente.pdf")
  28:    Response.AppendHeader("Content-Length", memStream.Length.ToString)
  29:    Response.ContentType = "application/pdf"
  30:    Response.BinaryWrite(memStream.ToArray)
  31:    Response.Flush()
  32:    memStream.Close()
  33:  End Sub


Tutto qui. Da notare che il modulo generato non viene salvato da nessuna parte ma viene "sparato" direttamente nella response.

posted @ mercoledì 24 settembre 2008 11.30 | Feedback (3)
martedì 22 luglio 2008
[OT] - Gates vs Jobs: the Game!

Scusate l'off-topic, ma dovevo: http://i.current.com/swf/pods/supernews/mac_vs_pc.swf

posted @ martedì 22 luglio 2008 10.33 | Feedback (0)
giovedì 19 giugno 2008
Due cose che Microsoft dovrebbe "prendere" da Firefox

Colgo l'occasione dell'uscita della nuova versione di Firefox per scrivere un post che rimane comunque valido anche per la vecchia versione del browser.

Lavoro ormai nel mondo del web da parecchi anni, ma per la maggior parte del tempo ho lavorato esclusivamente su progetti Intranet che dovevano funzionare su IE6 o IE7. Adesso invece sono entrato nel fantastico mondo dei website multi-browser e ovviamente sono venuto a contatto massicciamente con Firefox.

Non voglio stare qui a dire se sia meglio Firefox, se sia meglio IE7 o se sia meglio Safari. Ci sono già abbastanza post di questo genere e non è certamente lo scopo di questo post.
Volevo solamente sottolineare due cose che a mio giudizio Internet Explorer dovrebbe "prendere" da Firefox:

  1. La velocità nell'esecuzione degli script Javascript. E' veramente abissale.... Non ho provato molto Firefox 3, ma la differenza tra Firefox 2 e IE7 è veramente enorme. Spero vivamente che IE8 sia stato notevolmente ottimizzato, ma dai pochi test che ho fatto non si nota molto.
  2. Firebug. Esistono tante alternative su IE, ma nessuna a mio giudizio è paragonabile a Firebug. Questo piccolo add-on risulta fondamentale per ogni web designer che non voglia impazzire nella costruzione di un sito web più o meno complesso. "Debuggare" HTML e CSS diventa veramente molto semplice su Firefox, mentre risulta molto ostico su IE.

Penso che basterebbero queste due piccole introduzioni, per far entrare Internet Explorer nel cuore di molti programmatori e nel cuore di molti utenti.
Non tutti infatti intraprendono "battaglie" filosofiche o di pensiero. Molti altri come me, preferiscono usare lo strumento più veloce, più leggero e più produttivo.

posted @ giovedì 19 giugno 2008 17.21 | Feedback (4)
mercoledì 18 giugno 2008
Rilasciata l'alpha 2 di NHibernate 2.0

Come annunciato da Fabio Maulo in questo post, è disponibile l'alpha 2 di NHibernate 2.0. Sorgenti ed eseguibili possono essere scaricati da qui.

Interessante la nota sulla beta 1 che è prevista per il prossimo 29/06/2008.

posted @ mercoledì 18 giugno 2008 15.08 | Feedback (0)
lunedì 21 aprile 2008
Disponibile l'alpha1 di NHibernate.Burrow 1.0.0

Come annunciato da Fabio nel newsgroup, riporto anche qui la notizia della disponibilità dell'alpha1 di NHibernate.Burrow. Ma cos'e' NHibernate.Burrow? Ecco un breve estratto preso direttamente dal wiki:

Why Is Burrow Needed?

Burrow is a light weight middleware developed to support .Net applications using NHibernate (maybe also referred as NH in this article) as ORM framework.
Using Asp.net with NHibernate could be a challenge because of the fact that NHibernate is a stateful environment while Asp.net is a stateless framework. Burrow can help solve this conflict by providing advanced and smart session/transaction management and other facilitates.
....
....
OpenSessionInView pattern isn't hard to implement, but the real power Burrow provides is that Burrow conversation can span over multiple http requests, in another sentence, Burrow Conversation allows end user to have a stateful business transaction with the system that spans over multiple http request and response

 
Per chi volesse scaricarlo il link è il seguente:

http://sourceforge.net/project/showfiles.php?group_id=216446

Molto interessante, soprattutto per chi come me lavora prevalentemente con ASP.NET.
Mi riprometto di testarlo al più presto!

Technorati Tags:


posted @ lunedì 21 aprile 2008 9.30 | Feedback (1)
mercoledì 16 aprile 2008
NHibernate e Oracle

Breve post per segnalare questo blog che potrebbe rivelarsi utile per chi è alle prese con NHibernate e Oracle.

Technorati Tags: ,


posted @ mercoledì 16 aprile 2008 10.34 | Feedback (2)
giovedì 10 aprile 2008
Forum italiano di NHibernate

So che esiste un gruppo dedicato ad ORM su UgiDotNet, so che esiste Guisa, ma questo forum, per chi non lo conoscesse, tratta esclusivamente NHibernate:

http://groups.google.it/group/nh-it

Cosa aspettate, se siete utilizzatori NHibernate accorrete numerosi!

posted @ giovedì 10 aprile 2008 14.54 | Feedback (1)
News
Se volete sapere con chi avete a che fare eccomi qui in uno "scatto" lavorativo.
La mia foto

Logo MCAD
Logo MCTS

Visite dal 16/03/2007:

Il mio stato su Messanger: