Farbige Kalender in SharePoint 2010

In diesem wird beschrieben, wie man die Kalendereinträge farbig gestalten kann. Ich habe das Beispiel aufgegriffen und für ein deutsches Portal angepasst.

Zunächst wird im Kalender eine neue Spalte (berechnete Spalte) mit dem Namen CategoryTitle (der Name scheint egal zu sein, er muss aber zusammengeschrieben sein [kein Leerzeichen])hinzugefügt. Als Formel wird folgendes eingegeben:

="|||"&Kategorie&"|||"&Titel

Es wird also das Feld Kategorie (bestimmt später die Farbe) und Titel miteinander verknüpft. Es müssen im deutschen Portal die deutschen Bezeichnungen genommen werden (entgegen dem Blogeintrag). Die drei | Zeichen dienen im späteren Code als Separator.

Anschließend muss in der Definition der Ansicht "Kalender" folgendes eingestellt werden

Definition der Kalenderansicht
Definition der Kalenderansicht

Nun muss das anhängende Script in eine Bibliothek geladen werden. Das Script führt die Farbänderung durch. Es wird später in einem Content Editor WebPart verwendet. Alternativ zum Hochladen kann es auch direkt in dem Content Editor WebPart als HTML Quelle übergeben werden.


<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js"></script>
<script type="text/javascript">
_spBodyOnLoadFunctionNames.push('WaitForCalendarToLoad');
var SEPARATOR = "|||";
function WaitForCalendarToLoad() {
if(typeof SP.UI.ApplicationPages.CalendarNotify.$4a == 'undefined') {
// post SP1
var pwold$4b = SP.UI.ApplicationPages.CalendarNotify.$4b;
SP.UI.ApplicationPages.CalendarNotify.$4b = function () {
pwold$4b();
ColourCalendar();
}
SP.UI.ApplicationPages.SummaryCalendarView.prototype.renderGrids = function($p0) {
var $v_0 = new Sys.StringBuilder();
var $v_1 = $p0.length;
for (var $v_2 = 0; $v_2 < $v_1; $v_2++) {
this.$7t_2($v_2, $p0[$v_2]);
}
for (var $v_3 = 0; $v_3 < $v_1; $v_3++) {
$v_0.append('<div>');
this.$I_2.$7o($v_0, $p0[$v_3], $v_3);
$v_0.append(this.emptY_DIV);
$v_0.append('</div>');
}
this.setInnerHtml($v_0.toString());
ColourCalendar();
}
}
else
{
// pre SP1
var pwold$4a = SP.UI.ApplicationPages.CalendarNotify.$4a;
SP.UI.ApplicationPages.CalendarNotify.$4a = function () {
pwold$4a();
ColourCalendar();
}
SP.UI.ApplicationPages.SummaryCalendarView.prototype.renderGrids = function($p0) {
var $v_0 = new Sys.StringBuilder();
var $v_1 = $p0.length;
for (var $v_2 = 0; $v_2 < $v_1; $v_2++) {
this.$7r_2($v_2, $p0[$v_2]);
}
for (var $v_3 = 0; $v_3 < $v_1; $v_3++) {
$v_0.append('<div>');
this.$I_2.$7m($v_0, $p0[$v_3], $v_3);
$v_0.append(this.emptY_DIV);
$v_0.append('</div>');
}
this.setInnerHtml($v_0.toString());
ColourCalendar();
}
}
}

function ColourCalendar() {
if(jQuery('a:contains(' + SEPARATOR + ')') != null)
{
jQuery('a:contains(' + SEPARATOR + ')').each(function (i) {
$box = jQuery(this).parents('div[title]');
var colour = GetColourCodeFromCategory(GetCategory(this.innerHTML));
this.innerHTML = GetActualText(this.innerHTML);
jQuery($box).attr("title", GetActualText(jQuery($box).attr("title")));
$box.css('background-color', colour);
});
}
}

function GetActualText(originalText) {
var parts = originalText.split(SEPARATOR);
return parts[0] + parts[2];
}

function GetCategory(originalText) {
var parts = originalText.split(SEPARATOR);
return parts[1];
}

function GetColourCodeFromCategory(category) {
var colour = null;
var test = category.trim().toLowerCase();
switch (category.trim().toLowerCase()) {
case 'besprechung':
colour = '#4FDB51';
break;
case 'arbeitszeiten':
colour = '#4FB8DB';
break;
case 'geschäftlich':
colour = "#F08616";
break;
case 'feiertag':
colour = "#F55875";
break;
case 'treffen':
colour = "#E0F558";
break;
case 'geschenke':
colour = "#F558D5";
break;
case 'geburtstag':
colour = "#6E80FA";
break;
case 'jahrestag':
colour = "#FF4040";
break;
}
return colour;
}
</script>

Der untere Switch/Case Block ist der entscheidende. Hier werden die Farben zu den Kategorien zugewiesen. Werden andere Kategorien verwendet, muss hier entsprechend angepasst werden. Die Kategorien hier werden nur in Kleinbuchstaben eingegeben. Das Script kann als txt (UTF-8) gespeichert und in eine Bibliothek geladen werden.

Das Script lädt ein jquery aus dem Internet herunter. Bei Bedarf (SSL Warnung o.Ä.) kann das Script heruntergeladen und ebenfalls in die Bibliothek gelegt werden. In diesem Fall muss die erste Zeile entsprechend angepasst werden.

Anschließend wird auf der Kalenderseite (calendar.aspx) ein Inhaltseditor WebPart hinzugefügt. In der Konfiguration wird als Inhaltsquelle die hochgeladene TXT Datei ausgewählt.

Definition des Inhalts Editor WebPart
Definition des Inhalts Editor WebPart

Die Kalendereinträge werden nun abhängig von der gewählten Kategorie eingefärbt. Es können wie gewohnt neue Einträge hinzugefügt werden. Allerdings geht die Funktion zum Umschalten der Ansichten über die Titelleiste verloren, da durch das Hinzufügen eines WebParts die Seite nicht mehr als View behandelt wird.

Das Ergebnis, der eingefärbte Kalender
Das Ergebnis, der eingefärbte Kalender
Das Umschalten der Ansicht ist nicht mehr über die titelleiste möglich
Das Umschalten der Ansicht ist nicht mehr über die titelleiste möglich