Wednesday, January 22, 2014

SharePoint 2007 - Modificare il Subject delle mail di Notifica/Alert con proprietà dell'item con AlertTemplate.xml

Il Cliente chiede di modificare il Subject delle mail di Alert che vengono inviate alla modifica di item di lista, in particolare di Task list personalizzate.

La modifica dei template è "semplice", secondo quanto si legge in giro, ma non è per nulla ben documentata.
In particolare per l'utilizzo di campi dell'item da utilizzare al di fuori del corpo della mail.

Per modificare il template, occorre andare sul server nella cartella C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML.

Eseguire una copia del file alerttemplates.xml: questo XML definisce tutti i template delle mail inviate alla sottoscrizione del servizio di Alert di liste e library.

Creare un nuovo file XML con un nome diverso, ad es, custom_alerttemplates.xml.

Nota: non modificate il file originale, ma solo questo.

Ora, apriamo il nuovo XML e cerchiamo il template da modificare, nel nostro caso devo cercare il blocco:

<AlertTemplate Type="List"  Name="SPAlertTemplateType.Tasks">

Vado nel blocco <immediate> che rappresenta il template delle mail che partono alla modifica di un item, quindi non quelle raggruppate per periodo (che per forza di cose non potranno avere un subject personalizzato per singolo item).

Modifichiamo ora il blocco (il primo) <Subject> in cui viene definito l'oggetto della mail.
Di default, lo troviamo così:

  <Subject>   
    <GetVar Name="AlertTitle" />      
    <HTML><![CDATA[ - ]]></HTML>
    <GetVar Name="ItemName" />      
  </Subject>

Che corrisponde ad un oggetto del tipo: "titolo dato all'alert" - "titolo dell'item"

Il cliente vuole ad esempio : "titolo dell'alert" - "priorità" - "stato" - "titolo dell'item".
Dove i campi "priorità" e "stato" sono quelli definiti nei task.
Poiché non è detto che le task list siano tutte uguali, potrebbero avere nomi interni (internal name) differenti.
Ad esempio, ho una task list che non ha il campo "stato", internal name "Status" (non era necessario ed è stato tolto), l'altra non ha il campo "priorità", internal name "Priority", ma un campo personalizzato con internal name "Issue_Priority". Le Task list standard hanno "Status" e "Priority".

Occorre quindi tenere conto di queste differenze poiché quanto stiamo facendo ha impatti su tutta la web application e non sul singolo sito.

Quindi inseriamo un blocco If all'interno del Subject, che diventa come segue:

<Immediate>
  <Subject>   
    <GetVar Name="AlertTitle" />      
    <IfEqual>
      <Expr1>
        <GetVar Name="RawValue#Status"/>
      </Expr1>
      <Expr2/>
      <Then/>
      <Else>
        <HTML><![CDATA[ - ]]></HTML>
        <GetVar Name="RawValue#Status" />
      </Else>
    </IfEqual>
    <IfEqual>
      <Expr1>
        <GetVar Name="RawValue#Issue_Priority"/>
      </Expr1>
      <Expr2/>
      <Then>
        <HTML><![CDATA[ - ]]></HTML>
        <GetVar Name="RawValue#Priority" />
      </Then>
      <Else>
        <HTML><![CDATA[ - ]]></HTML>
        <GetVar Name="RawValue#Issue_Priority" />
      </Else>
    </IfEqual>
    <HTML><![CDATA[ - ]]></HTML>
    <GetVar Name="ItemName" />      
  </Subject>

Nota: per richiamare il metadato desiderato dobbiamo utilizzare

<GetVar Name="RawValue#INTERNALNAME" />


Salviamo il file ed eseguiamo il comando seguente che imposta il nuovo file come template standard per tutta la web application:

stsadm -o updatealerttemplates -url http://URLWEBAPP -filename "c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML\custom_alerttemplates.xml"

Eseguiamo un iisreset e verifichiamo gli oggetti delle mail per modifiche ai task.

Nota: per ripristinare il file originale, eseguire lo stesso comando, ma con il file alerttemplates.xml e successivamente un iisreset.

stsadm -o updatealerttemplates -url http://URLWEBAPP -filename "c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML\alerttemplates.xml"