SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Geteilte Masterpage in mehreren SiteCollections verwenden.

Geprüfte Antwort Dieser Beitrag hat 4 Antworten

Ohne Rang
3 Beiträge
Gseagull erstellt 7 Jan. 2013 09:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut
Hallo Leute,

habe ein Thema bekommen, welches ansich nicht weiter kompliziert klingt, aber dennoch teuflisch ist.

Es geht um eine Sharepoint Farm. Auf dieser Farm sind mehrere Site Collections angelegt. Beispiel:

SERVER
- Root (Basis SiteCollection; also  http://servername)
- Community ( http://servername/sites/community)
- B2B ( http://servername/sites/b2b)
- etc. ( http://servername/sites/xyz)

Die SiteCollections werden alle mittels Power-Shell-Scripts erzeugt. Es ist geplant, dass ein Teil dieses Scripts ein .wsp-Paket (Feature) installiert, welches eine MasterPage enthält.

Diese MasterPage soll a) von allen SiteCollections verwendet werden und b) auf der Festplatte liegen (natürlich nur 1x), damit Änderungen sofort überallhin übernommen werden.

Nun habe ich bereits versucht ein (Site-)Feature mit Module und EventReceiver hinzuzufügen. Funktioniert für die Root-SiteCollection auch wunderbar. Dabei wird bei Installation des .wsp-Pakets die .master-Datei der Site-Master-Page-Collection (/_catalogs/masterpages) der Root-SiteCollection hinzugefügt und kann dann für diese eine SiteCollection (und alles was darunter ist) verwendet werden. Zudem habe ich in der Elements.xml das Type=GhostableInLibrary Attribut hinzugefügt, damit die das Paket auf der Festplatte im 14er Hive unter Features abgelegt wird.
Mit anderen Worten: Genau so, wie wirs haben wollen.

In den anderen SiteCollections (Community, B2B, etc.) scheint dann zwar das Feature unter "Site Collection Features" auf, lässt sich jedoch nicht aktivieren. Grund: Die URL kann nicht aufgelöst werden. Verwendet man SiteRelativeUrl so kommt etwas wie /sites/Community/_catalogs/masterpages raus. An dieser Stelle wird die Masterpage jedoch bei Installations des .wsp-Pakets nicht abgelegt. Das Überschreiben der URL, so dass diese immer auf /_catalogs/masterpages zeigt, funktioniert jedoch auch nicht. Vermutlich aus Sicherheitsproblemen (?). Hier bin ich mir jedoch nicht ganz sicher.

Was vielleicht noch interessant ist: Das Feature wird als "Farm Solution" in der Central Administration hinzugefügt.

Ich hoffe Ihr könnt mir weiterhelfen! Danke einstweilen!

LG
Chris

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 7 Jan. 2013 09:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Gib im Module als URL einfach _catalogs/masterpage an (ohne den führenden Schrägstrich), dann klappt es auch in den Subwebs.

[quote user="Gseagull"]Diese MasterPage soll a) von allen SiteCollections verwendet werden und b) auf der Festplatte liegen (natürlich nur 1x), damit Änderungen sofort überallhin übernommen werden[/quote]

Änderungen der Datei im Dateisystem werden keinerlei Auswirkungen auf die verwendeten Masterpages der einzelnen Site Collections haben. Dazu ist dann immer ein UpgradeSolution nötig.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
3 Beiträge
Gseagull Als Antwort am 7 Jan. 2013 10:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi,

das funktioniert so leider nicht...

Mein Code sieht wie folgt aus:

   var site = properties.Feature.Parent as SPSite;
               
                // Calculate relative path of site from Web Application root.
                string webAppRelativePath = site.ServerRelativeUrl;
                if (!webAppRelativePath.EndsWith("/"))
                    webAppRelativePath += "/";

                webAppRelativePath += "_catalogs/masterpage/test.master";

Wenn ich da den Slash weglasse, kommt "sites/community_catalogs/masterpage/test.master" heraus.

Oder meintest du, dass ich überhaupt nur "_catalogs/masterpage/test.master" verwenden soll? Also den "ServerRelativeUrl" weglassen?

LG
Christian

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 7 Jan. 2013 10:20
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich meinte in der elements.xml des Modules, mit dem die Masterpage im Katalog bereitgestellt wird. Ich hatte oben herausgelesen, daß es bereits dabei klemmt.

Und im Code kannst Du es Dir viel einfacher machen, indem Du SPUrlUtility.CombineUrl(...) verwendest. Du mußt Dich dann nicht drum kümmern, ob ein Teilstring mit einem Schrägstrich aufhört oder anfängt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
3 Beiträge
Gseagull Als Antwort am 7 Jan. 2013 12:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke, auf SPUrlUtility.CombineUrl(...) habe ich umgestellt. Sicher ist sicher.

Habe den Code etwas überarbeitet, dann hats geklappt.