ottobre 2006 - Posts
Non so se sia un bug temporaneo o una cosa normale, ma inserendo un ModalPopupExtender all'interno di una pagina ASPX ottengo uno spiacevole effetto: caricando la pagina per la prima volta, il pannello che dovrebbe essere visualizzato come PopUp rimane visibile per un attimo causando un effetto di flickering.
Per evitare questo spiacevole side-effect, è possibile usare un semplice trucchetto: basta aggiungere allo stile del pannello l'attributo
visibility:hidden e rimuoverlo (da Javascript) poco prima di visualizzare il PopUp!
Attenzione a non utilizzare la proprietà
Visible="False" dell'ASP Panel, altrimenti il controllo diventa "inesistente" per Javascript e si ottiene un errore quando si tenta di settarne la visibilità.
Nel post precedente avevo sottolineato l'errore che si ha con la PageMethods e con la nuova Beta 1 di AJAX.
Effettivamente sono cambiate diverse cose e, per le mie necessità, in peggio. Il cambiamento prinicipale è appunto il fatto di dover definire i metodi server da richiamare lato client come Shared (o Static in C#). Il che implica che non si potrà più accedere ai controlli definiti a livello di pagina.
Un esempio molto banale di metodo server è il seguente:
<Microsoft.Web.Script.Services.ScriptMethod(),
System.Web.Services.WebMethod()> _
Public Shared Function ServerMethod() As Integer
Return 10
End Function
Da notare che, oltre all'attributo WebMethod, occorre aggiungerne un altro, lo ScriptMethod.
A questo punto se si procede come prima, andando a mettere il metodo precedente nel codebehind e richiamandalo da javascript con la PageMethods si ottiene un bell'errore! In questo caso, che dovrebbe essere quello più utilizzato, la variabile globale PageMethods non viene definita e quindi il meccanismo non funziona più.
Questo problema è dovuto ad un bug della Beta 1 e può essere aggirato, mettendo il metodo server direttamente nella pagina ASPX e non nel codebehind. In definitiva il codice finale (Javascript+VB) a livello di ASPX sarà il seguente:
<script
language="javascript">
function Test()
{
PageMethods.ServerMethod(onComplete);
}
function onComplete(argv)
{
alert(argv);
}
</script>
<
script runat="server">
<Microsoft.Web.Script.Services.ScriptMethod(),
System.Web.Services.WebMethod()> _
Public Shared Function ServerMethod() As Integer
Return 10
End Function
</script>
Stamattina, fiducioso delle prove precedenti, ho aggiornato i miei progetti passando dalla CTP di Atlas a questa prima Beta 1 di ASP.NET AJAX.
Come sottolineato nel post precedente, esiste una Migration Guide che indica quali sono i passi da fare.
La conversione è abbastanza semplice, ci sono alcune proprietà rinominate, ma il funzionamento è sempre lo stesso. Ma non tutto è andato liscio.... Una delle funzionalità che sto utilizzando maggiormente non funziona! Nella pratica il metodo precedente con cui si richiamavano i metodi lato server direttamente da Javascript non funziona. Spulciando nel
sito ufficiale, mi sono imbattuto in questo
post, che da altre indicazioni proprio su questo argomento.
Anche seguendo queste semplici istruzioni il problema non scompare. Infatti quello che accade con questa release è un errore quando si richiama la PageMethods da Javascript. Più precisamente PageMethods non è definito.
Lo stesso errore si ha anche creando un nuovo ASP.NET Ajax Enabled Web Site, quindi credo non credo sia un problema di conversione.
Al momento non ho ancora risolto e sono dovuto tornare alla vecchia versione. Aspetto delucidazioni e maggiori informazioni. Vi terrò aggiornati.
Durante l'interfacciamento e la programmazione di SharePoint può capitare di dover eseguire una serie di operazioni con credenziali amministrative o con le credenziali di un altro utente.
Come fare? In MOSS07 possiamo utilizzare uno dei nuovi overload della classe SPSite:
Dim site As New SPSite(siteURL, user.UserToken)
La variabile user è di tipo SPUser e può essere istanziata con uno degli utenti definiti nel sito o nella sitecollection.
Fatto ciò possiamo recuperare tutte le informazioni che vogliamo utilizzando la "vista" dell'utente impersonificato.
Finalmente ci siamo! Dal sito ufficiale è possibile scaricare la Beta 1 di ASP.NET AJAX, che molti conosceranno sotto il nome di Atlas.
Le novità e le modifiche fatte dovrebbero essere tante, prima fra tutte l'installazione degli assembly core nella GAC. Domani inizierò a migrare i miei progetti e a fare le modifiche opportune. Per chi avesse la mia stessa necessità è possibile scaricare una Migration Guide che spiega tutti i passi da fare per il passaggio dalle CTP Atlas a questa Beta 1.
Microsoft ha rilasciato da poco un
template che aggiunge a Visual Studio 2005 una nuova tipologia di progetti: i Web Application Project. Sostanzialmente si tratta dei vecchi progetti Web presenti anche nella versione 2003.
Questi nuovi progetti saranno inclusi nell'SP1 di Visual Studio 2005. Installando la beta dell'SP1 ci si potrebbe aspettare di trovarli lì belli pronti.... E così dovrebbe essere... Ma non sempre le cose vanno come ci si aspetta!
Se anche voi come me, non li trovate, in questo
link è spiegato come fare a risolvere il problema.
Chi ha lavorato con SharePoint 2003 sicuramente si sarà scontrato con il problema della doppia versione. In pratica, utilizzando il modello degli oggetti di SPS 2003, è impossibile uploadare un file e impostarne le proprietà del profilo in un'unica operazione. Occorre fare due operazioni distinte che generano due versioni distinte del documento. E' vero che è possibile utilizzare altri sistemi, ma non sono esenti da problemi e di sicuro sarebbe stato meglio prevedere questa possibilità direttamente nel modello degli oggetti.
Per fortuna in SharePoint 2007 sono stati ampliati gli overloads della funzione di aggiunta di un file, e quindi è possibile passare come parametro anche l'elenco delle proprietà del profilo da valorizzare.
Un piccolo esempio di utilizzo è il seguente:
' Recupero l'oggetto SPWeb
spsobj = New SPSite(folderURL).OpenWeb
' Recupero la directory selezionata
objFolder = spsobj.GetFolder(folderURL)
spsobj.AllowUnsafeUpdates = True
'Aggiungo il file con le proprietà
objFile = objFolder.Files.Add(folderURL & "/" & fileName, fileContent, props)
spsobj.AllowUnsafeUpdates = False
La variabile props è un'hashtable e quindi sarà sufficiente riempirla aggiungendo le coppie chiave/valore con la chiave uguale al nome della proprietà da valorizzare.
Come ben sappiamo utilizzando il modello degli oggetti di SharePoint si può eseguire qualsiasi tipo di operazione.
In questi giorni mi sono trovato a dover aggiungere un elemento ad una lista di Links. Di per se la cosa è banale, ma ho avuto qualche difficoltà nell'impostare l'URL e il Nome del link. Le proprietà dell'oggetto infatti o sono a ReadOnly o non hanno effetto in fase di update. Come fare? Il codice seguente mostra come inserire un nuovo Link impostando URL e Nome descrittivo:
Dim spsObj As SPWeb = Nothing
spsObj = New SPSite(listURL).OpenWeb
spsObj.AllowUnsafeUpdates = True
' Aggiungo un elemento alla lista i-esima
item = spsObj.Lists(i).Items.Add
' Assegno Nome e URL
item("URL") = itemURL & " , " & itemName
' Faccio l'update
item.Update()
spsObj.AllowUnsafeUpdates = False
Il trucco è quello di impostare la proprietà URL assegando, in un'unica stringa, sia l'URL sia il nome descrittivo con i due campi separati da una virgola.
Alla prossima!