Bei der Entwicklung eigener Komponenten trifft man als Entwickler früher oder später immer auf die Anforderung, dem Anwender Informationen über ausgeführte Aktionen mitzuteilen. In der Web-Entwicklung werden diese Anwender-Informationen oft direkt in das Control geschrieben oder via JavaScript in einem Alert-Fenster dargestellt. Beide Wege sind allerdings in Punkto Optik nicht sehr charmant.

In SharePoint 2010 wurde daher mit einer ECMA-Script Bibliothek (SharePoint Client API) und der Klasse SP.UI.Notify ein Instrument geschaffen, um anwenderrelevante Informationen angemessen zu präsentieren. Grundlegende Informationen zu dieser Klasse findet man im Internet unter “http://msdn.microsoft.com/en-us/library/ff408137.aspx”.

Nachfolgend möchte ich in einem schlanken Beispiel zeigen, wie mit diesem Instrument gearbeitet werden kann. In der SharePoint 2010 UI werden die Benachrichtigungen in einem festen Bereich unterhalb der Navigation angezeigt.

image

oder

image

Für diese kleine Demo habe ich via Standardvorlage von Visual Studio 2010 ein einfaches Visual Webpart erstellt, welches mit Hilfe einiger Steuerelemente die Anwender-Benachrichtigung ansteuert. Um Benachrichtigungen aus dem C#-Code zu erzeugen, habe ich folgende Klasse und Methode implementiert:

using System;
using System.Text;
using System.Web.UI;

namespace Demo.SPNotification
{
    public class NotificationManager
    {
        public static void AddSharePointNotification(Page page, string text, string color)
        {
            try
            {
                //build up javascript to inject at the tail end of the page 
                StringBuilder stringBuilder = new StringBuilder();

                stringBuilder.AppendLine("<script>");

                //First wait until the SP.js is loaded, otherwise the notification doesn’t work 
                //gets an null reference exception 
                stringBuilder.AppendLine("ExecuteOrDelayUntilScriptLoaded(ShowNotification, \"sp.js\");");

                stringBuilder.AppendLine("function ShowNotification()");
                stringBuilder.AppendLine("{");

                //create notification
                stringBuilder.AppendLine(string.Format("SP.UI.Notify.addNotification(\"<span>{0}</span>\",true);", text));
                // may be replace by JQuery Code!
                stringBuilder.AppendLine(string.Format("document.getElementById(\"notification_1\").childNodes[0].childNodes [0].style.backgroundColor = \"{0}\";",color));
                stringBuilder.AppendLine("document.getElementById(\"notification_1\").childNodes[0].childNodes [0].style.backgroundImage = \"none\";");
                
                stringBuilder.AppendLine("}");

                stringBuilder.AppendLine("</script>");

                //add to the page 
                page.Controls.Add(new LiteralControl(stringBuilder.ToString()));
            }
            catch (Exception ex)
            {
                //Logging 
            }
        }
    }
}

Da eine Benachrichtigung out-of-the-box nur mit einem gelben Hintergrund angezeigt wird, habe ich die Anpassung der Farbe mit zwei Zeilen JavaScript-Code noch ergänzt. Dies ist möglich, da die DOM-Struktur innerhalt des Benachrichtigungsbereiches immer identisch ist. Um die Funktionalität etwas aufzupeppen, könnte an dieser Stelle auch JQuery verwendet werden.

Die Manager-Klasse kann wiederum von dem jeweiligen User Control oder Webpart aufgerufen werden.

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace Demo.SPNotification.NotificationWebPart
{
    public partial class NotificationWebPartUserControl : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        //Called by onClick of button
        public void NotifyUi(object sender, EventArgs e)
        {
            NotificationManager.AddSharePointNotification(this.Page, NotificationText.Text,DDlColor.SelectedItem.Text);
        }

    }
}

Eine derartige Anwenderbenachrichtigung macht definitiv mehr Eindruck beim Kunden, als eine schlichte Textnachricht direkt in der Komponente.   

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.