CRM 2013 – AddNotification – (mehrere) Benachrichtigung auf Form hinzufügen

Hallo Leute,

heute möchte ich euch zeigen, wie Ihr ganz einfach eine Notification in einem CRM Form hinzufügen könnt. Das nachfolgende Beispiel ist für CRM 2013, wenn man den ReleaseNotes glauben schenken darf, dann sollte das Beispiel auch für 2011 funktionieren, das habe ich jedoch nicht getestet.

Was verwende ich? Nachdem ich nicht direkt ins DOM gehen wollte, habe ich auf das XrmServiceToolkit zurückgegriffen. Dieses bietet die Funktion „AddNotification“ an:

var addNotification = function(message, level) {
        /// <summary>
        /// Add a notification bar message with CRM 2011 style
        /// </summary>
        /// <param name="message" type="string">
        /// Details of the message
        /// </param>
        /// <param name="level" type="int">
        /// The warning level of the message: [1 critical, 2 information, 3 warning]
        /// </param>
        /// <returns type="void" />

.....
}

Diese Methode ruft man dann einfach auf, z.B. mit

XrmServiceToolkit.Common.AddNotification(message, severity);

Jetzt gibt es aber noch ein Problem: Möchte man mehrere Notifications, zur selben Severity, auf einem Form anzeigen, so wird immer nur die letzte angezeigt. Weitergeholfen hat mir Sy’s Blog, aus dem hervor geht, dass CRM 2013/11 durchaus mehrerer solcher Notifications darstellen kann. Sieht man sich den Code des XrmServiceToolkits genauer an, sieht man, dass je nach Severity hardcoded ID’s für eine Notification erstellt werden. Severity 1 = „mep1“, Severity 2 = „mep2“, Severity 3 = „mep3“:

var addNotification = function (message, level) {
        /// <summary>
        /// Add a notification bar message with CRM 2011 style
        /// </summary>
        /// <param name="message" type="string">
        /// Details of the message
        /// </param>
        /// <param name="level" type="int">
        /// The warning level of the message: [1 critical, 2 information, 3 warning]
        /// </param>
        /// <returns type="void" />
        var notificationsArea = document.getElementById('crmNotifications');
        if (notificationsArea === null || notificationsArea === undefined) {
            alert('Cannot find the notification area'); return;
        }
        if (typeof notificationsArea.AddNotification !== "undefined" && typeof notificationsArea.control.AddNotification !== "undefined") {
            alert('Add Notification is no longer supported'); return;
        }
        if (level === 1) {
            //critical
            if (typeof notificationsArea.AddNotification !== "undefined") {
                notificationsArea.AddNotification('mep1', 1, 'source', message);
            } else if (typeof notificationsArea.control.AddNotification !== "undefined") {
                notificationsArea.control.AddNotification('mep1', 1, 'source', message);
            }
        }

        if (level === 2) {
            //Info
            if (typeof notificationsArea.AddNotification !== "undefined") {
                notificationsArea.AddNotification('mep3', 3, 'source', message);
            } else if (typeof notificationsArea.control.AddNotification !== "undefined") {
                notificationsArea.control.AddNotification('mep3', 3, 'source', message);
            }
        }
        if (level === 3) {
            //Warning
            if (typeof notificationsArea.AddNotification !== "undefined") {
                notificationsArea.AddNotification('mep2', 2, 'source', message);
            } else if (typeof notificationsArea.control.AddNotification !== "undefined") {
                notificationsArea.control.AddNotification('mep2', 2, 'source', message);
            }
        }
        if (message === "") {
            if (typeof notificationsArea.SetNotifications !== "undefined") {
                notificationsArea.SetNotifications(null, null);
            } else if (typeof notificationsArea.control.SetNotifications !== "undefined") {
                notificationsArea.control.SetNotifications(null, null);
            } else {
                alert('Set Notification is no longer supported');
            }
        }
    };

Es ist also durchaus möglich mehrere Notifications zu setzen, jedoch nur eine pro Severity. Das hat in meinem Fall jedoch nicht ausgereicht. Ich habe die Methode einfach umgebaut, so dass man dem Aufruf eine ID mitgeben kann. Wird diese nicht mitgegeben, wird weiterhin „mep1“, „mep2“, etc. verwendet.

var addNotification = function(message, level, uniqueName) {
        /// <summary>
        /// Add a notification bar message with CRM 2011 style
        /// </summary>
        /// <param name="message" type="string">
        /// Details of the message
        /// </param>
        /// <param name="level" type="int">
        /// The warning level of the message: [1 critical, 2 information, 3 warning]
        /// </param>
        /// <returns type="void" />

        if (uniqueName == undefined) {
            uniqueName = "mep" + level;
        }

        var notificationsArea = document.getElementById('crmNotifications');
        if (notificationsArea === null || notificationsArea === undefined) {
            alert('Cannot find the notification area'); return;
        }
        if (typeof notificationsArea.AddNotification !== "undefined" && typeof notificationsArea.control.AddNotification !== "undefined") {
            alert('Add Notification is no longer supported'); return;
        }
        if (level === 1) {
            //critical
            if (typeof notificationsArea.AddNotification !== "undefined") {
                notificationsArea.AddNotification(uniqueName, 1, 'source', message);
            } else if (typeof notificationsArea.control.AddNotification !== "undefined") {
                notificationsArea.control.AddNotification(uniqueName, 1, 'source', message);
            }
        }

        if (level === 2) {
            //Info
            if (typeof notificationsArea.AddNotification !== "undefined") {
                notificationsArea.AddNotification(uniqueName, 3, 'source', message);
            } else if (typeof notificationsArea.control.AddNotification !== "undefined") {
                notificationsArea.control.AddNotification(uniqueName, 3, 'source', message);
            }
        }
        if (level === 3) {
            //Warning
            if (typeof notificationsArea.AddNotification !== "undefined") {
                notificationsArea.AddNotification(uniqueName, 2, 'source', message);
            } else if (typeof notificationsArea.control.AddNotification !== "undefined") {
                notificationsArea.control.AddNotification(uniqueName, 2, 'source', message);
            }
        }
        if (message === "") {
            if (typeof notificationsArea.SetNotifications !== "undefined") {
                notificationsArea.SetNotifications(null, null);
            } else if (typeof notificationsArea.control.SetNotifications !== "undefined") {
                notificationsArea.control.SetNotifications(null, null);
            } else {
                alert('Set Notification is no longer supported');
            }
        }
    };

Das Resultat ist nun folgendes:

2014-04-29 10_29_15-Preiserhebung_ Neu_ Preiserhebung - Microsoft Dynamics CRM

Cheers,
Chris

Leave a reply