DateTimeControl und Zugriff verweigert

Wenn man das SharePoint-DateTimeControl in einem eigenen Webpart oder in einer eigenen Anwendungsseite verwendet, kann es passieren, daß man beim Aufklappen des Kalenders eine Zugriff verweigert / Access Denied Meldung bekommt. Das passiert, wenn man sich in einer Unterwebsite befindet und wenn der Benutzer auf die Root-Websitesammlung keine Zugriffsrechte hat.

Man sollte dieses Szenario ohnehin vermeiden und immer dafür sorgen, daß alle Benutzer auf die Root-Websitesammlung zumindest minimale Berechtigungen besitzen. Es kann sonst zu weiteren unerwarteten Fehlern kommen, weil innerhalb von SharePoint immer wieder Dateien Server-relativ von dort referenziert werden.

Beim DateTimeControl wird der aufklappende Kalender ebenfalls Server-relativ als <iframe> gerendert und deshalb bekommen Benutzer ohne Berechtigungen auf die Root-Websitesammlung eben die Zugriff verweigert Meldung. Als Entwickler kann man das umgehen, indem man die Eigenschaft DatePickerFrameUrl mit dem richtigen Pfad innerhalb der aktuellen Website belegt.

Wenn das Control z.B. innerhalb eines Webparts per Code generiert wird, fügt man einfach folgende zusätzliche Codezeile ein:

myDateTimeControl.DatePickerFrameUrl = SPUrlUtility.CombineUrl(SPContext.Current.Web.ServerRelativeUrl, "_layouts/iframe.aspx");

Wenn das Control z.B. innerhalb einer Anwendungseite deklarativ generiert wird, kann man es ebenfalls wie oben im Code-behind der Seite erledigen oder auch gleich deklarativ beim Erzeugen des Controls:

<SharePoint:DateTimeControl DatePickerFrameUrl="<% $SPUrl:~Site/_layouts/iframe.aspx %>" ID="myDateTimeControl" runat="server" />

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s