Francesco Geri

Il blog di Francesco Geri
posts - 94, comments - 165, trackbacks - 2

martedì 1 luglio 2008

Nel meraviglioso mondo di SharePoint!

Problema:

Se da codice imposto una proprietà di tipo data+ora di un documento contenuto in una Document Library di SharePoint mi ritrovo un valore diverso da quallo impostato. In particolare ho uno sfasamento di un'ora o due.

 

Soluzione:

Certo, direte voi, devi usare le date in formato UTC.

Allora vediamo coda succede in 2 casi, cioè se il file esiste e modifico la sua proprietà, oppure se il file è creato nuovo e la proprietà assegnata all'upload.

L'esempio suppone che:

  • ci sia un documento all'url http://myServer/mySite/myDocLib
  • la document library che contiene quel documento abbia una proprietà di nome myDateTimeProp

Il codice di esempio (inserito in un qualche button click) esegue l'update della proprietà del documento esistente, poi crea un nuovo documento (con il contenuto del precedente) assegnandogli un certo valore della proprietà di tipo Data.

Si noti che nel primo caso (update) si deve usare la data nel suo formato normale, nel secondo la si deve convertire in formato UTC.

Ogni altra combinazione non sembra funzionare.

 

    1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    2     ' Esegue l'update della data:

    3     Dim urlDoc As String = "http://myServer/mySite/myDocLib/myDoc1.tif"

    4     Dim objSite As SPSite = Nothing

    5     Dim objWeb As SPWeb = Nothing

    6     Try

    7       Me.Cursor = Cursors.WaitCursor

    8       ' Crea gli oggetti SPSite ed SPWeb

    9       objSite = New SPSite(urlDoc)

   10       objWeb = objSite.OpenWeb

   11       '' Cerca la document library

   12       Dim objItem As SPListItem = objWeb.GetListItem(urlDoc)

   13       objItem.Item("myDateTimeProp") = Now

   14       objItem.Update()

   15       Dim stream As IO.Stream = objItem.File.OpenBinaryStream()

   16       Dim props As New Hashtable

   17       props.Add("myDateTimeProp", Now.ToUniversalTime)

   18       objItem.File.ParentFolder.Files.Add("myDoc2.tif", stream, props)

   19       stream.Dispose()

   20     Catch ex As Exception

   21       MessageBox.Show(ex.ToString)

   22     Finally

   23       If Not objSite Is Nothing Then objSite.Dispose()

   24       If Not objWeb Is Nothing Then objWeb.Dispose()

   25       Me.Cursor = Cursors.Default

   26     End Try

   27   End Sub

 

Considerazioni finali

Si tratta di una mia personalissima ipotesi, ma secondo me i team di sviluppo della funzionalità di update e di quella di addnew sono distinti, separati e non comunicanti.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (4) | Filed Under [ MOSS07 Tips .Net ]

[OT] Aggiornamento Leopard

Queto post è veramente offfffffff topic!

Infatti è il classico post da macchista (passatemi il neologismo).

 

Ho aggiornato con soddisfazione Leopard nel mio macbook! :D

 

 

leopard-10.5.4

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (1) | Filed Under [ [OT] Relax ]

Testo che scompare dalle textbox multilinea in Windows Vista

Ho riscontrato in una mia applicazione uno strano comportamento.

Il testo di una textbox multilinea scompariva e riappariva passandogli sopra con il mouse. Oltre ad essere multilinea aveva anche una scrollbar verticale ed era inserita in un controllo SplitContainer che a sua volta era all'interno di una TabPage. Il comportamento si verificava solo con Windows Vista.

 

Per riprodurre il problema è sufficiente creare una applicazione Windows Forms, mettere un TabControl, dentro ad un suo TabPage mettere uno SplitContainer, dentro ad un pannello dello SplitContainer mettere un Textbox multilinea con Scrollbar verticale. Natuaralmente bisogna essere su un sistema con Windows Vista (su XP tutto OK...)

 

image

 

 

A questo punto basta mandare in esecuzione, scrivere del testo nella textbox muovere un po' il mouse ed osservare il comportamento.

 

Per risolvere il problema mi viene in auto questo post, in cui si suggeriscono due vie:

  1. Impostare a False la proprietà UseVisualStyleBackColor del TabPage

    Me.TabPage1.UseVisualStyleBackColor = False

  2. Sostituire la textbox con una RichTextBox
  3. Impostare la proprietà Backcolor del TabPage ad un valore diverso da Trasparent (nuova soluzione indicatami da Riccardo)

 

Da notare che per la prima soluzione occorre impostare la proprietà da codice, per esempio nella load della pagina, in quanto se la si imposta dalla finestra delle proprietà del TabPage la modifica non viene recepita da Visual Studio (succederà solo a me?).

Inoltre la prima soluzione funziona per l'esempio che ho proposto sopra, ma evidentemente non funziona sempre. Tant'è che per la mia applicazione originale non ha funzionato! Per cui ho adottato la seconda.

Tutte le soluzioni hanno delle conseguenze grafiche, nel senso che modificano l'aspetto originale della form (nel primo caso lo sfondo del TabPage diventa grigetto, nel secondo il bordo della RichTextBox ha una profondità più marcata rispetto a quello del textbox, nel terzo si deve impostare un colore di sfondo) per cui nessuna delle tre è "perfetta". Tuttavia meglio di niente...

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (4) | Filed Under [ Tips VS2005 .Net Vista ]

Powered by:
Powered By Subtext Powered By ASP.NET