Blog Stats
  • Posts - 171
  • Articles - 1
  • Comments - 197
  • Trackbacks - 5

 

InfoPath 2007 e Forms Services

E' stata una settimana intensa, dedicata allo studio di InfoPath ed in particolare al suo utilizzo integrato con MOSS 2007 tramite Form Services.

InfoPath 2007 puo' essere molto utile quando si ha la necessità di realizzare delle form più o meno complesse di raccolta dati e si vuole dare la possibilità di costruzione o quantomeno di rifinitura di tali maschere ad utenti non propriamente "tecnici".

Il prototipo in sviluppo presupponeva questi requisiti:

  • Portale Sharepoint (Publishing Site di MOSS 2007)
  • FBA (Forms Based Authentication), con Web Services, verso l'applicazione remota
  • BDC (Business Data Catalog), con Web Service, verso l'applicazione remota
  • Compilazione di un modulo InfoPath 2007, integrato all'interno diin una pagina del portale

Mi riprometto di scrivere qualche post di approfondimento sui punti riguardanti FBA e BDC, ma per il momento mi voglio soffermare su InfoPath e la sua integrazione con Sharepoint.

In particolare durante lo sviluppo ho dovuto affrontare diverse problematiche che vorrei qui elencare sperando che possano semplificare la vita a chi si trova a sviluppare soluzioni simili.

 

1) Devo pubblicare su una lista Sharepoint un template InfoPath ed il portale utilizza FBA

Il sistema di Publish dal client InfoPath non riconosce i Forms Services se pubblico su un sito che ha attivata la Form Authentication.
Per ovviare al problema è sufficiente estendere il sito principale, creandone uno secondario, su una porta differente. Su questo secondo sito  lasciamo attiva l'autenticazione tradizionale Windows.
Il Publish lo facciamo a questo punto su questo sito.

Estendere un sito che usi FBA è utile anche indipendentemente dallo scenario appena descritto, in quanto ci permette di utilizzare la nostra utenza di dominio, per esempio, per poter accedere a determinate operazioni di amministrazione.

 

2) Devo pubblicare su una lista Sharepoint un template InfoPath che contiene del codice C# e VB.NET

Se utilizzo del codice C# o VB.NET per aggiungere logica di business alla form di InfoPath, per pubblicare il template su Form Services è necessario procedere con quello che si chiama "Administrator-approved form template":

  • pubblichiamo il template su uno share di rete
  • dal sito Central Administration eseguiamo l'upload del template
  • attiviamo il template per il Site Collection in cui vogliamo utilizzarlo

Qui c'e' un video della serie "Office Visual How to" che spiega bene proprio questo scenario.

 

3) Devo visualizzare il modulo di InfoPath in una web part all'interno del portale

Di default un form InfoPath viene visualizzato nel portale con una pagina a tutto schermo. Questa soluzione non è quasi mai quella ideale dal momento che si vuole che la compilazione di un modulo sia consistente con quello che è il layout del portale.

Il rendering web di un modulo InfoPath avviene per merito di un controllo web, XmlFormViewer, che si trova nell'assembly Microsoft.Office.InfoPath.Server.

Quindi sono 2 le possibili soluzioni per il rendering web di InfoPath:

  • includendo XmlFormViewer all'interno di una pagina aspx personalizzata, da integrare all'interno di Sharepoint, come spiegato qui.
  • includendo XmlFormViewer all'interno di web part, come spiegato qui.

Il vantaggio della pagina aspx e della web part è di poter comunicare con il controllo XmlFormViewer e quindi potergli passare dei parametri.

Se non si ha questa esigenza particolare, è possibile attivare direttamete XmlFormViewer come web part, dato che è a tutti gli effetti una web part.
Qui è descritto come fare.

 

4) Devo passare dei parametri al modulo InfoPath che voglio visualizzare in una web part del portale

Puo essere necessario dover passare dei dati al modulo InfoPath, in particolare per eseguire delle operazioni di inizializzazione.

InfoPath può ricevere parametri in due modi, via Command Line piuttosto che via Querystring. Dal momento che ci stiamo occupando di deploy via Forms Services, è chiaro che a noi interessa il sistema di passaggio dei parametri via QueryString.

I parametri sono recuperati via codice all'interno dell'evento FormEvents_Loading associato al template InfoPath.

Qui e qui viene descritto brevemente quanto appena scritto.

Technorati Tags: ,

5) Il modulo InfoPath deve precaricare dei dati relativi all'utente che lo sta utilizzando

L'esigenza primaria della mia soluzione era quella di precaricare dei dati relativi all'utente e di visualizzarli nel momento della compilazione di un nuovo documento.

La soluzione adottata è stata la seguente:

  • creare un nuovo Data Source che "punti" ai dati da precaricare(nel mio caso attraverso un Web Service recupero i dati dell'utente tramite il filtro per username)
  • nel Load della Form recuperare il filtro(lo username nel mio caso) e filtrare il Data Source creato
  • nella Form ci saranno dei campi che avranno un Binding diretto con questa Data Source

Recuperare il filtro significa ottenerlo dal parametro LoadingEventArgs e dell'evento di Loading della Form.

Nel caso serva lo username dell'utente correntemente loggato, abbiamo una variabile di sistema che ci ritorna il suo nome:

this.Application.User.LoginName oppure this.Application.User.Name.

Qui c'e' un bell'esempio su come sfruttare questa caratteristica ed implementare la soluzione che ho descritto.

 

6) Ho un errore di sicurezza quando via codice cerco di leggere con XPath un elemento del template

Il problema è descritto in questo articolo del supporto di Microsoft.

Da notare che se per il template InfoPath specifico nelle Form Options --> Security and Trust il livello di sicurezza Full Trust, il problema non si presenta.

 

 

Sono stato abbastanza breve nel descrivere i 6 punti, indicando per maggiori dettagli i links ad articoli e post che mi sono stati di grande aiuto.

Per concludere, mi sono registrato ieri alla Sharepoint Conference di Milano del 19/20 Settembre. Qualcuno di UGI sarà presente ?

Comments have been closed on this topic.
 

 

Copyright © Luca Mauri