Die ID im Subject - Sharepoint Alerts
Allgemein Sharepoint Sharepoint 2010 .Net
hört sich nicht kompliziert an, wenn man im Netz schaut, gibt es z.B. den Vorschlag mittels <GetVar Name="ItemId" /> im Altert-Template diese anzuzeigen.
Hat zumindest bei mir nicht funktioniert.
Also eine kurze Anleitung wie einer meiner es gemacht hat....
Kategorie hört sich nicht kompliziert an, wenn man im Netz schaut, gibt es z.B. den Vorschlag mittels <GetVar Name="ItemId" /> im Altert-Template diese anzuzeigen.
Hat zumindest bei mir nicht funktioniert.
Also eine kurze Anleitung wie einer meiner es gemacht hat....
ont size=2 face="sans-serif">a) Ich kopiere das TEMPLATE\XML\ALERTTEMPLATES.XML
nach C:\ oder D:\ auf jeden Fall irgendwo in die Root von einem Volume
b) Mittels Notepad suche ich in meinem Falle nach immediate, ein wenig weiter unterhalb sollte etwas der folgenden Art zum Vorschein kommen:
<GetVar Name="ItemName" />
</Subject>
hier dieser Abschnitt wird zu:
<Subject>
<GetVar Name="AlertTitle" />
<HTML><!DATA[ - ></HTML>
<GetVar Name="ItemName" />
<HTML><!DATA[ - ##ID##></HTML>
</Subject>
geändert.
c) mittels stsadm -o updatealerttemplates -url .... -filename C:\altertemplates.xml wende ich meine Änderungen an.
d) Erstellen in einer Liste (Basis GenericListTemplate) einen Alert und bekomme nun eine Mail, welche am Ende - ##ID## enthält.
e) Werfe mein Visual Studio an und erzeuge ein neues Class Library Projekt, in den Eigenschaften gebe ich an, dass ich mein Assembly signieren möchte.
f) In dem Projekt setze ich eine Referenz zur Microsoft.Sharepoint.dll
g) Erstelle eine Klasse, welche wie folgt aussieht ->
public class MyAlertHandler : IAlertNotifyHandler
{
public bool OnNotification(SPAlertHandlerParams parameters)
{
string webUrl = parameters.siteUrl + parameters.webUrl;
using (SPSite site = new SPSite(webUrl))
using (SPWeb web = site.OpenWeb())
{
string to = parameters.headers/font>"To"
string subjectTemplate = parameters.headers/font>"Subject"
string itemId = parameters.eventDataitemId.ToString();
// Ersetzen der ID im Subject und im Body
string subject = Regex.Replace(subjectTemplate,"##ID##",itemId,RegexOptions.IgnoreCase);
string body = Regex.Replace(parameters.body, "##ID##", itemId, RegexOptions.IgnoreCase);
bool result = SPUtility.SendEmail(web,false,false,to,subject,body);
return result;
}
}
}
h) Kompilieren und auf dem Server in den GAC
i) Suche in der alerttemplates.xml nach <Properties>
und füge vor </Properties> ein:
<NotificationHandlerAssembly>
PeanutsSoft.SP2010.AlertUtilities,
Version=1.0.0.0,
Culture=neutral,
PublicKeyToken=4273dd8dc86f2654
</NotificationHandlerAssembly>
<NotificationHandlerClassName>
PeanutsSoft.SP2010.AlertUtilities.MyAlertHandler
</NotificationHandlerClassName>
j) Jetzt noch mal die c) und fertig.
Gruß JJR
b) Mittels Notepad suche ich in meinem Falle nach immediate, ein wenig weiter unterhalb sollte etwas der folgenden Art zum Vorschein kommen:
<GetVar Name="ItemName" />
</Subject>
hier dieser Abschnitt wird zu:
<Subject>
<GetVar Name="AlertTitle" />
<HTML><!DATA[ - ></HTML>
<GetVar Name="ItemName" />
<HTML><!DATA[ - ##ID##></HTML>
</Subject>
geändert.
c) mittels stsadm -o updatealerttemplates -url .... -filename C:\altertemplates.xml wende ich meine Änderungen an.
d) Erstellen in einer Liste (Basis GenericListTemplate) einen Alert und bekomme nun eine Mail, welche am Ende - ##ID## enthält.
e) Werfe mein Visual Studio an und erzeuge ein neues Class Library Projekt, in den Eigenschaften gebe ich an, dass ich mein Assembly signieren möchte.
f) In dem Projekt setze ich eine Referenz zur Microsoft.Sharepoint.dll
g) Erstelle eine Klasse, welche wie folgt aussieht ->
public class MyAlertHandler : IAlertNotifyHandler
{
public bool OnNotification(SPAlertHandlerParams parameters)
{
string webUrl = parameters.siteUrl + parameters.webUrl;
using (SPSite site = new SPSite(webUrl))
using (SPWeb web = site.OpenWeb())
{
string to = parameters.headers/font>"To"
string subjectTemplate = parameters.headers/font>"Subject"
string itemId = parameters.eventDataitemId.ToString();
// Ersetzen der ID im Subject und im Body
string subject = Regex.Replace(subjectTemplate,"##ID##",itemId,RegexOptions.IgnoreCase);
string body = Regex.Replace(parameters.body, "##ID##", itemId, RegexOptions.IgnoreCase);
bool result = SPUtility.SendEmail(web,false,false,to,subject,body);
return result;
}
}
}
h) Kompilieren und auf dem Server in den GAC
i) Suche in der alerttemplates.xml nach <Properties>
und füge vor </Properties> ein:
<NotificationHandlerAssembly>
PeanutsSoft.SP2010.AlertUtilities,
Version=1.0.0.0,
Culture=neutral,
PublicKeyToken=4273dd8dc86f2654
</NotificationHandlerAssembly>
<NotificationHandlerClassName>
PeanutsSoft.SP2010.AlertUtilities.MyAlertHandler
</NotificationHandlerClassName>
j) Jetzt noch mal die c) und fertig.
Gruß JJR