Gewusst wie: Anpassen der Logik für das Angebot auf der Variationsstammwebsite
Letzte Änderung: Freitag, 12. November 2010
Gilt für: SharePoint Server 2010
Wenn Sie eine Websitesammlung in Microsoft SharePoint Server 2010 bereitstellen und Variationen konfigurieren, passiert Folgendes:
Auf der Homepage für Variationen wird mithilfe des Seitenlayouts VariationRootPageLayout.aspx im Gestaltungsvorlagen- und Seitenlayoutkatalog eine Seite mit dem Namen VariationRoot erstellt.
Die standardmäßige Willkommensseite der Homepage für Variationen wird durch die Seite VariationRoot ersetzt.
Wenn Sie zur Homepage für Variationen navigieren, sucht SharePoint Server 2010 die WelcomePage-Eigenschaft der Website und führt die Seite VariationRoot aus. Diese Seite basiert auf VariationRootPageLayout.aspx, weshalb die Seitenlayoutdatei ausgeführt wird. Das Seitenlayout VariationRootPageLayout enthält einen Verweis auf die Datei VariationsRootLanding.ascx und ein Benutzersteuerelement, das in der Datei VariationsRootLanding.ascx definiert ist. Das Seitenlayout führt die Logik in der Datei VariationsRootLanding.ascx aus und leitet den Benutzer an eine Variationswebsite um.
Der Datei VariationsRootLanding.ascx liegt die Standardlogik zugrunde, den Benutzer an die Variationswebsite umzuleiten, die mit accept lang des Browsers übereinstimmt, oder mit dem Array von Sprachcodes, in denen das aktuelle Dokument verfügbar ist. Die Datei VariationsRootLanding.ascx wird im Pfad \<Program Files>\Common Files\Microsoft Shared Debug\Web Server Extensions\14\Template\ControlTemplates definiert.
Wenn mit der Standardlogik für das Angebot auf der Variationsstammwebsite der Benutzer an eine Variationswebsite umgeleitet werden soll, die nicht auf accept lang basiert, gibt es hierfür drei Möglichkeiten. Jede Option hat Vor- und Nachteile, und Sie sollten diese sorgfältig abwägen, bevor Sie sich für eine Vorgehensweise entscheiden:
Bearbeiten Sie die Datei VariationsRootLanding.ascx direkt.
Dies ist die schnellste Methode, um die Logik zu bearbeiten. Bearbeiten Sie die Logik in der Datei VariationsRootLanding.ascx im Dateisystem des Front-End-Webservers entsprechend Ihren Anforderungen.
Hinweis Sie müssen die Datei VariationsRootLanding.ascx auf jedem Front-End-Webserver aktualisieren. Alle Websitesammlungen in der Serverfarm sind an Ihre benutzerdefinierte Logik für das Angebot auf der Variationsstammwebsite gebunden.
Kopieren Sie den Inhalt der Datei VariationsRootLanding.ascx in das Seitenlayout im Gestaltungsvorlagen- und Seitenlayoutkatalog.
Weitere Informationen zum Implementieren dieser Vorgehensweise finden Sie im ersten Verfahren, So kopieren Sie den Inhalt der Datei "VariationsRootLanding.ascx" in das Seitenlayout. Wie bei der vorherigen Vorgehensweise wird auch in diesem Fall eine schnelle Anpassung über die direkte Bearbeitung ermöglicht, und zwar ohne Probleme mit der DLL-Kompilierung und -Bereitstellung. Und da jede Websitesammlung eigene Seitenlayouts verwendet, ermöglicht diese Vorgehensweise auch die Anpassung der Logik für das Angebot auf der Variationsstammwebsite auf der Websitesammlungsebene. Sie müssen die Datei web.config auf jedem Front-End-Webserver aktualisieren, um diesen Vorgang abzuschließen.
Vorsicht Gehen Sie beim Festlegen des AllowCompilation-Kennzeichens in der Datei VariationRootPageLayout.aspx vorsichtig vor. Bei Verwendung von Inlinecode könnte ein Benutzer bösartigen Code auf der Seite einschleusen.
Erstellen Sie eine vorkompilierte Assembly.
Weitere Informationen zum Implementieren dieser Vorgehensweise finden Sie im zweiten Verfahren, So erstellen Sie eine vorkompilierte Assembly. Diese Vorgehensweise stellt kein Sicherheitsrisiko beim Öffnen eines Elements des Gestaltungsvorlagen- und Seitenlayoutkatalogs für die Inlinecodeausführung dar. Wie bei der vorherigen Vorgehensweise erfolgt die Anpassung auf Websitesammlungsebene. Bei jeder Änderung der Logik für das Angebot auf der Variationsstammwebsite müssen Sie jedoch die Assembly erneut kompilieren. Der Zyklus zum Ändern/Testen/Bereitstellen ist deshalb bei dieser Vorgehensweise nicht so schnell. Sie müssen die Assembly im Dateisystem aller Front-End-Webserver bereitstellen.
Es gibt ein zusätzliches Szenario, bei dem Sie Code in der Datei VariationsRootLanding.ascx ändern. Falls Sie einen Bereichsbereitstellungsauftrag zum Bereitstellen einer Variationswebsite verwenden und mit dem Auftrag nicht alle Variationsbezeichnungen in der Variationshierarchie aus der Bereitstellungsquelle bereitgestellt werden, erhalten Benutzer, die normalerweise an diese Variationsbezeichnungen umleiten, den Fehler 404, wenn sie zur Variationsstammwebsite im Bereitstellungsziel navigieren. Angenommen, in der Variationshierarchie ist eine Variationsbezeichnung vorhanden, die das deutsche Gebietsschema zum Ziel hat, und diese Variationsbezeichnung ist nicht in Ihrer Bereichsbereitstellung vorhanden. In diesem Fall wird für Browser, für die die Verwendung des deutschen Gebietsschemas voreingestellt ist, der Fehler 404 gemeldet, wenn der Benutzer zur Variationsstammwebsite auf dem Zielcomputer navigiert. Mit der Logik für das Angebot auf der Variationsstammwebsite wird die Gültigkeit der verwendeten Umleitungs-URL standardmäßig nicht überprüft.
Dieses Problem können Sie unter anderem dadurch beheben, dass Sie die Logik für das Angebot auf der Variationsstammwebsite so ändern, dass erkannt wird, ob an der Zielumleitungs-URL eine funktionsfähige Website vorhanden ist. Informationen zur Vorgehensweise finden Sie im dritten Verfahren, So wird durch Ändern der Logik für das Angebot auf der Variationsstammwebsite erkannt, ob eine funktionsfähige Website vorhanden ist.
So kopieren Sie den Inhalt der Datei "VariationsRootLanding.ascx" in das Seitenlayout
Kopieren Sie den Code aus der Datei VariationsRootLanding.ascx, und fügen Sie ihn in die Seite VariationRootPageLayout.aspx im Gestaltungsvorlagen- und Seitenlayoutkatalog ein.
Nehmen Sie in der Datei VariationRootPageLayout.aspx die gewünschten Änderungen vor.
Entfernen Sie den Verweis auf die Datei VariationsRootLanding.ascx und das zugehörige Benutzersteuerelement in der Datei VariationRootPageLayout.aspx.
Ändern Sie die Datei web.config wie folgt auf jedem Webclient, um die Ausführung von Inlinecode für VariationRootPageLayout.aspx zuzulassen.
<SharePoint> <SafeMode ... > <!-- Marks VariationRootPageLayout.aspx for ASP.NET compilation. --> <PageParserPath VirtualPath= "/_catalogs/masterpage/VariationRootPageLayout.aspx" CompilationMode="Always" AllowServerSideScript="False" AllowUnsafeControls="False" IncludeSubFolders="True"/> </PageParserPaths> </SafeMode> </SharePoint>
So erstellen Sie eine vorkompilierte Assembly
Kopieren Sie den Code in der Datei VariationsRootLanding.ascx, um ein eigenes Steuerelement in Ihrer eigenen Assembly-DLL zu erstellen.
Nehmen Sie die gewünschten Änderungen an dem Steuerelement vor.
Fügen Sie der Datei VariationRootPageLayout.aspx im Gestaltungsvorlagen- und Seitenlayoutkatalog einen Verweis auf das Steuerelement hinzu.
Entfernen Sie den Verweis auf die Datei VariationsRootLanding.ascx und das zugehörige Benutzersteuerelement in der Datei VariationRootPageLayout.aspx.
So wird durch Ändern der Logik für das Angebot auf der Variationsstammwebsite erkannt, ob eine funktionsfähige Website vorhanden ist
Öffnen Sie die Datei VariationsRootLanding.ascx.
Suchen Sie im Abschnitt GetRedirectUrl() nach der folgenden Codezeile.
return (string.IsNullOrEmpty(matchedUrl) ? sourceLabelUrl : matchedUrl);
Ersetzen Sie die Codezeile in Schritt 2 durch den folgenden Code.
// Customization for handling matchedUrl not valid. // (For example, a content deployed target site collection, // without source hierarchy.) matchedUrl = (string.IsNullOrEmpty(matchedUrl) ? sourceLabelUrl : matchedUrl); using (SPSite site = new SPSite(matchedUrl)) using (SPWeb web = site.OpenWeb()) { // If matchedUrl is the same as the URL of the Web // that you just opened, then matchedUrl is valid. if (string.Compare(matchedUrl, web.Url, StringComparison.OrdinalIgnoreCase) == 0 && web.DoesUserHavePermissions(SPBasePermissions.Open)) { //Target URL is valid; return it. return matchedUrl; } else { //Target URL was NOT valid; the variation label is missing. //Perform logic here to redirect the user appropriately. //If nothing is done here, then this function returns null //and the landing behavior reverts to the //VariationsRootLandingRunTime control. //This control displays a simple error message that //indicates that it could not find an appropriate subsite to //redirect to. } }