in

DotNetMarche

.NET Framework User Group delle Marche

This Blog

Syndication

ExternalBlogs

February 2011 - Posts

  • Gues post sul blog di MSDN Italia: SharePoint 2010 e Azure

    Direttamente dal blog del team di MSDN Italia , è stato pubblicato un mio "guest post" riguardante l'integrazione tra SharePoint 2010 e la piattaforma Windows Azure. Ecco qua il link diretto: - Guest post: Integrazione tra SharePoint 2010...
  • Integrare i dati di SQL Azure all'interno di SharePoint 2010

    Ho interrotto un pò la serie di articoli sul Client Object Model all'interno di SharePointCommunity.it per parlare un pò di Azure e SharePoint 2010. Oggi, infatti, è stata pubblicata la prima parte (1 di 3) di un tutorial per imparare ad utilizzare...
  • transfert

    http://www.waydotnet.com
  • Una giornata all'insegna di Windows Azure

    Gli amici di DotNetLombardia stanno organizzando un evento grauito su Windows Azure, la piattaforma Microsoft per il cloud computing. L'evento sarà presso la sede Microsoft di Segrate (Milano) il giorno 7 marzo 2011. Assieme a Roberto e Matteo, ci...
  • NHibernate: utilizzare lo 0 per rappresentare l’assenza di entità


    Quando si ha a che fare con database legacy, potrebbe saltar fuori la necessità di non inserire nel database valori nulli per le relazioni many-to-one nulle, ma bensì il valore zero.

    Questo post su NHForge, discute la problematica e definisce una soluzione. Per chi avesse bisogno della versione in VB.NET ecco il codice convertito:

       1: Public Class NullableTuplizer
       2:     Inherits PocoEntityTuplizer
       3:  
       4:     Sub New(ByVal entityMetamodel As EntityMetamodel, ByVal mappedEntity As PersistentClass)
       5:         MyBase.New(entityMetamodel, mappedEntity)
       6:     End Sub
       7:  
       8:     Public Overrides Function GetPropertyValuesToInsert(ByVal entity As Object, ByVal mergeMap As IDictionary,
       9:                             ByVal session As NHibernate.Engine.ISessionImplementor) As Object()
      10:         Dim values() As Object = MyBase.GetPropertyValuesToInsert(entity, mergeMap, session)
      11:         ' Dirty hack 1
      12:         For i As Integer = 0 To values.Length - 1
      13:             If (values(i) Is Nothing AndAlso GetType(IEntity).IsAssignableFrom(getters(i).ReturnType)) Then
      14:                 values(i) = ProxyFactory.GetProxy(0, Nothing)
      15:             End If
      16:         Next
      17:         Return values
      18:     End Function
      19:  
      20:     Public Overrides Function GetPropertyValues(ByVal entity As Object) As Object()
      21:         Dim values() As Object = MyBase.GetPropertyValues(entity)
      22:         ' Dirty hack 2
      23:         For i As Integer = 0 To values.Length - 1
      24:             If (values(i) Is Nothing AndAlso GetType(IEntity).IsAssignableFrom(getters(i).ReturnType)) Then
      25:                 values(i) = ProxyFactory.GetProxy(0, Nothing)
      26:             End If
      27:         Next
      28:         Return values
      29:     End Function
      30:  
      31:     Public Overrides Sub SetPropertyValues(ByVal entity As Object, ByVal values() As Object)
      32:         ' Dirty hack 3
      33:         For i As Integer = 0 To values.Length - 1
      34:             If GetType(IEntity).IsAssignableFrom(getters(i).ReturnType) Then
      35:                 Try
      36:                     ' Provo ad accedere alla proprietà id
      37:                     If CType(values(i), IEntity).ID = 0 Then
      38:                         values(i) = Nothing
      39:                     End If
      40:                 Catch ex As Exception
      41:                     ' Errore. Il proxy ha restituito un errore
      42:                     values(i) = Nothing
      43:                 End Try
      44:             End If
      45:         Next
      46:         MyBase.SetPropertyValues(entity, values)
      47:     End Sub
      48:  
      49: End Class

    Due note: l’interfaccia IEntity è un’interfaccia base implementata dalle mie entità. Nel mio caso definisce solo la proprietà ID, ma potrebbe anche essere completamente vuota o avere altre proprietà comuni.

    La funzione SetPropertyValues è invece leggermente diversa da quella proposta sul post linkato in precedenza. In particolar modo, nel mio caso quando provavo ad accedere all’ID della mia entità, veniva sempre lanciata un’eccezione in quanto il proxy non riusciva a trovare l’entità con ID 0. Forse è un mio errore e forse la soluzione proposta (il try-catch) non è il massimo della vita, ma al momento la soluzione funziona.

  • Query LINQ tramite il Client Object Model di SharePoint 2010

    Continua la mia serie di articoli sul Client Object Model di SharePoint 2010 pubblicati all'interno di SharePointCommunity.it ! In questa puntata vedremo come è possibile utilizzare delle query LINQ per recuperare oggetti di contenuto filtrandoli...
  • Il product Champion

    Each product champion serves as the primary interface between members of a single user class and the project’s requirements analyst. Ideally, the champions will be actual users, not surrogates such as funding soponsors, procuring customers, marketing staff, user managers, or software developers pretending to be users. ……The best product champion have a clear visione of the new system and are enthusiastic about it because they see how it will benefit them and their peer.

    Da: Software requirements (2nd edition)

    Spesso infatti l’errore è raccogliere i requisiti da chi non userà il sistema. E’ chiaro che non solamente gli utenti possono essere ascoltati, pensiamo infatti ad un sistema di assicurazioni dove comunque esistono dei “domain expert” che conoscono le vere logiche alle basi dei processi assicurativi. L’importante però, è che siano ascoltati anche loro e che non venga fatta confusione tra veri utenti e chi invece pretende solo di esserlo.

    Alk.

  • [WCF 4.0] Default Endpoints

    Un’ approccio introdotto in WCF 4.0 è la “ Convention Over Configuration ”. Sostanzialmente essa permette di assegnare una configurazione predefinita ad un endpoint in assenza di una configurazione esplicita (cosa impossibile in WCF 3.x). Ciò avviene...
  • Personalizzare i Work Item di TFS, ancora qualche regola interessante

    1 – Tfs e customizzazione del process template
    2 – Customizzare il Process Template, le basi
    3 – Customizzare il process Template, aggiungere un campo ad un Work Item
    4 - Customizzare il process template, regole per i campi aggiuntivi dei WI

    Nella quarta puntata abbiamo iniziato ad esaminare le regole che possono essere aggiunte ai campi di un Work Item. In questo link potete trovarne la lista completa ed in questo post cercherò di spiegare brevemente le più interessanti. Dato che nella scorsa puntata abbiamo parlato della regola ALLOWEDVALUES, è doveroso ora citare la ALLOWEXISTINGVALUE che non ha parametri, ma indica a TFS la volontà di mantenere un valore per il campo anche se non è più presente nella lista degli ALLOWEDVALUES. Se ad esempio la lista di valori ammessi viene cambiata rimuovendo un elemento, senza questa regola se qualcuno edita un Work Item che ha per questo campo un valore rimosso, viene forzato a cambiarlo. Con la presenza di questa regola, è possibile mantenere un valore anche non valido, ma chiaramente se viene cambiato deve essere comunque preso dalla lista dei valori permessi.

    Analogamente alla ALLOWEDVALUES è presenta la PROHIBITEDVALUES che permette invece di specificare valori non permessi per il campo. Se ad esempio mettiamo nella lista il valore “blabla” e poi cerchiamo di salvare un workitem con quel valore abbiamo questo risultato.

    image

    Figura 1: Tentativo di salvataggio di un campo che ha un valore proibito.

    Un’altra regola correlata al possibile contenuto è la SUGGESTEDVALUES, che in maniera analoga alla ALLOWEDVALUES permette di specificare una lista di valori, che in questo caso però sono però solamente “suggeriti”. L’interfaccia presenterà per il campo sempre una combobox, ma si può comunque scrivere qualsiasi altro valore. La CANNOTLOSEVALUE indica invece che la proprietà, una volta valorizzata, non può più essere portata a NULL.

    La regola DEFAULT invece permette di specificare il valore di default, ed è decisamente molto flessibile.

    image

    Figura 2: Valore di default impostato come relativo ad un certo campo.

    In Figura 2 vediamo infatti che la regola DEFAULT richiede per prima cosa il campo from che indica da dove TFS deve prendere il valore di default. In questo esempio abbiamo scelto il valore “field” che indica di prendere il valore di default da un altro campo. Scegliamo ad esempio il System.ChangedBy ed osserviamo cosa accade al nostro WI. Creiamo un nuovo bug, assegnamo un titolo e tutti i campi che vogliamo e quando salviamo vediamo che il valore del nostro campo, se non valorizzato, assume come default il nome del nostro utente corrente.

    image

    Figura 3: Quando andiamo a salvare un bug, se non valorizziamo il campo viene usato come valore di default il campo System.ChangedBy

    Naturalmente è possibile specificare per il campo from della regola DEFAULT il valore value usato per specificare un valore di default testuale.

    image

    Figura 4: valore di default “classico”, in questo caso all’apertura del nuovo bug troverò già il valore “Default Value” indicato nel campo

    Altri valori possibili per il campo from sono “currentuser” e “clock” usati rispettivamente per indicare l’utente corrente ed il timestamp corrente. La regola COPY è analoga alla DEFAULT, ma copia il valore sempre, anche se l’utente ha già valorizzato il campo. Infine un altra regola interessante è la FROZEN, la quale impedisce, dopo averlo valorizzato, di cambiare il valore di un campo. Questo significa che dopo avere per la prima volta inserito un valore valido, l’utente non può più modificarlo, ma può solamente azzerarlo.

    Infine, un’altra regola utile è la MATCH, che permette di specificare un pattern per definire la validità del contenuto del campo.

    alk.

    DotNetKicks Image
  • On-line l'agenda della SharePoint Conference 2011 !

    Da pochi minuti è on-line l' agenda della SharePoint Conference 2011, che si terrà il 19,20 e 21 Aprile 2011 qui a Milano. Queste le sessioni fin'ora pubblicate: ALL302 Dall'analisi all'architettura delle informazioni: i segreti per un...
  • Come cancellare tanti elementi di una lista SharePoint in un colpo solo!

    Se vi è mai capitato da dover cancellare tutti gli elementi di una lista, o cmq una grossa quantità di questi elementi, è probabile che abbiate percorso la via di ciclare tutti questi elementi e richiamare il metodo Delete() su oguno di questi. Se è così...
  • Eh si… mi sono comperato The curse of monkey island

    Rigorosamente originale Smile sono amante del vintage e per farlo girare, una bella macchina Virtual Pc.

    image

    Alk.

    DotNetKicks Image
  • Solo per oggi: sconto del 50% sui libri su SharePoint 2010 di Microsoft Press

    O'Reilly Media, solo per oggi (08/02/2011), rilascia uno sconto del 50% su tutti gli e-book attualmente pubblicati relativi a SharePoint 2010. Questi i libri in questione: Managing and Implementing Microsoft SharePoint 2010 Projects Microsoft SharePoint...
  • Customizzare il process template, regole per i campi aggiuntivi dei WI

    1 – Tfs e customizzazione del process template
    2 – Customizzare il Process Template, le basi
    3 – Customizzare il process Template, aggiungere un campo ad un Work Item

    Nel post precedente si è mostrato come aggiungere un semplice campo di testo ad un Work Item, ora è venuto il tempo di capire come personalizzare il comportamento dei campi mediante l’aggiunta di “rules” o regole.

    image

    Figura 1: Aggiungere una regola ad un campo di un Work Item

    Per capire come operare con le “rules” prendiamo ad esempio la prima regola chiamata “ALLOWEDVALUES” che stabilisce i valori ammessi nel campo. Supponiamo ad esempio che le nostre note di revisione ammettano i valori: “Non effettuate”, “In lavorazione”, “approvata”. Per fare questo basta editare il campo, andare nel tab “rules”, selezionare ALLOWEDVALUES e poi premere il tasto OK (Figura 1), a questo punto si seleziona la regola appena inserita e premendo il tasto Edit si possono editarne i valori. (Figura 2)

    image

    Figura 2: Aggiungere i valori ammessi nella regola ALLOWEDVALUES

    Ora si può salvare il Work Item e verificare se le modifiche sono andate a buon fine semplicemente creando un nuovo Work Item di tipo Bug nel Team Project di test.

    image

    Figura 3: Come appare un campo con la regola ALLOWEDVALUES, invece di una casella di testo è ora presente una combo.

    L’aspetto interessante è che, senza cambiare la definizione dell’interfaccia, il Visual Studio propone una ComboBox come controllo per editare il campo, dato non è più possibile inserire del testo libero ma la scelta di valori è limitata (Figura 3).

    Le regole inoltre possono essere applicate solamente a dei ruoli. Complichiamo lo scenario e diciamo che solamente un amministratore del team project ha il diritto di impostare il valore “Approvate”, mentre i contributors possono solamente inserire o “non effettuate” oppure “In lavorazione”. Basta quindi aggiungere una ulteriore ALLOWEDVALUES rule e configurarla in modo che venga applicata al giusto gruppo.

    SNAGHTML263a0fc

    Figura 4: Applicare una stessa regola con parametri differenti a vari ruoli del team project

    Il concetto è avere due distinti set di valori permessi, uno valido per i Contributors, l’altro valido per gli amminsitratori. Fate attenzione che nel process template editor è presente per il campo For una combo per selezionare i possibili valori, ma sono listati solamente i gruppi [global] ovvero globali a tutta la ProjectCollection. Naturalmente voi potete editare direttamente il valore per scegliere anche i gruppi di tipo [project] ovvero specifici del team project, oppure un utente nella forma domain\username.

    Ora se siete un amministratore la combo vi presenterà i tre valori, mentre se siete un semplice contributor, potrete solamente inserire due valori e non avete quindi il diritto di impostare il valore “approvate”.

    Il gioco è fatto Smile.

    alk.

    DotNetKicks Image
Powered by Community Server (Commercial Edition), by Telligent Systems