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.




Webpart verwendet nur manchmal die Website-Vorlage, um eine neue Website zu erzeugen

Geprüfte Antwort Dieser Beitrag hat 26 Antworten

Ohne Rang
242 Beiträge
Peter Oswald erstellt 17 Okt. 2013 11:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

gerade beobachte ich mal wieder ein Phänomen, das ich mir nicht erklären kann. Szenario:

  • Ein Webpart soll auf Knopfdruck eine neue Website erzeugen.
  • Als Ressource für die neue Website dient eine Website-Vorlage, die in den Lösungen der Collection abgelegt ist.

Fehlerbild:

  • Wird die Vorlage geändert und neu in die Solutions eingestellt, meldet das Webpart "List Feature {GUID} nicht vorhanden", und erstellt keine Seite.
  • Wird daraufhin das Webpart aber neu eingespielt, funktioniert es wieder.

Nun sollte man meinen, das liegt eben daran, dass das Webpart mit einer Version der Solution fest verdrahtet ist und sich somit eben immer auf eine bestimmte GUID bezieht. Das ist leider nicht so, denn beim o. g. Knopfdruck bekommt SPWeb.Webs.Add(..) nichts anderes als den Namen der Vorlage mitgeliefert.

Erstaunlich ist auch noch eine andere Sache:

  • die Vorlage enthält eine Aufgabenliste
  • beim Erzeugen der neuen Website werden zwar alle Listen brav angelegt, aber die Erweiterten Einstellungen werden nicht übernommen.

Gilt für die Aufgabenliste nicht, was für andere Listen auch gelten müsste? Eigentlich schon. Aber im Moment stehe ich auf dem berühmten Schlauch, wo ich noch suchen soll...

VG

P.

Alle Antworten

Ohne Rang
508 Beiträge
Tom Scheuermann Als Antwort am 18 Okt. 2013 08:24
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Evtl. fehlt einfach nur ein aktiviertes Feature ?

Nimm mal die GUID aus der Meldung "List Feature {GUID] nicht vorhanden" und vergleiche es mal mit dem Ergebnis des PS Befehls'

Get-SPFeature (muss am Server ausgeführt werden)

Auf welches Feature bezieht sich die Meldung ?

Greets

Tom

ts (-at-) computer-kreativ.de

Microsoft Certified IT Professional: SharePoint 2010 Administration
Microsoft Certified Technoligie Specialist: SharePoint 2010 Configuring

Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 18 Okt. 2013 08:37
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

das ist genau das Kuriosum, denn wenn ich Get-SPFeature laufen lasse, wird nichts gefunden!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 18 Okt. 2013 08:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wenn man eine Website als Vorlage speichert, werden die Komponenten dieser Website (Inhaltstypen, Listen usw.) in Features gepackt und diese dann in der WSP-Datei abgelegt. Irgendwo in diesem Bereich muß es hier ein Problem geben. Wenn Ihr eine neue Vorlage erzeugt, solltet ihr der einen neuen Namen geben, sonst kommt sie sich mit der alten in die Quere.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 18 Okt. 2013 11:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nun, ich hätte jetzt eigentlich erwartet, dass wenn ich eine Listenvorlage in den Lösungen deaktiviere und lösche(!), dass dann auch alle übrigen Referenzen gelöscht sind, denn was macht es für einen Sinn, eine Referenz auf ein Feature zu behalten, wenn es die initiierende Komponente gar nicht mehr gibt?

Das mit dem neuen Namen ist hier leider so nicht möglich, denn wie gesagt: das entwickelte Webpart greift nur mit dem TemplateName auf die Vorlage zu. Ändert man den Namen, nur weil sich die Vorlage ändert, müsste man auch jedes Mal den Code anfassen.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 18 Okt. 2013 12:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Peter Oswald"]Nun, ich hätte jetzt eigentlich erwartet, dass wenn ich eine Listenvorlage in den Lösungen deaktiviere und lösche[/quote]

Bei Listenvorlagen ist das auch kein Problem. Bei eigenen Websitevorlagen aber schon. Wenn Du eine Websitevorlage deaktivierst, dann werden in den daraus erzeugten Websites z.B. die Inhaltstypen entfernt (nur vom Web, nicht von den Listen). Und das ist nur ein Beispiel, es gibt noch mehr Probleme. Im Grunde ist das dasselbe, wie wenn man einfach eine eigene Solution aus der Farm entfernt. Man kann dann auch nicht erwarten, daß alles was über die Solution bereitgestellt wurde problemlos weiter funktioniert.

[quote user="Peter Oswald"]Ändert man den Namen, nur weil sich die Vorlage ändert, müsste man auch jedes Mal den Code anfassen[/quote]

Dann muß eben das Webpart flexibler werden. Man kann z.B. den Namen einstellbar machen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 21 Okt. 2013 11:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das mit dem einstellbar ist eine gute Idee. Nun dachte ich, um das umzusetzen, würde mir

  • SPSite.GetCustomWebTemplates(LCID)

die Liste der benutzerdefinierten Website-Vorlagen liefern. Eigenartigerweise kommt da nix zurück, obwohl es ja meine im Lösungskatalog gibt. Lasse ich mir mit

  • site.RootWeb.GetAvailableWebTemplates(LCID)

alle Vorlagen liefern, steht meine Vorlage mit drin, und zwar mit der Eigenschaft isCustomTemplate = false.

Aber müsste eine selbst hochgeladene Lösung in den Lösungskatalog nicht automatisch das Kennzeichen isCustomTemplate erhalten?

Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 22 Okt. 2013 10:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

weiß das niemand?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Okt. 2013 10:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Offenbar nicht. Ich würde mich aber auch nicht weiter drum scheren, ob das jetzt true oder false ist. Hauptsache es funktioniert.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 22 Okt. 2013 10:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"] Hauptsache es funktioniert[/quote]

lol, ja eben halt nicht so wie ich es bräuchte:

  • Gib mir alle Custom Templates ohne die Standard Templates

möchte ich umsetzen.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Okt. 2013 11:41
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Naja, der Standard ist ja bekannt und läßt sich einzeln ausfiltern. Manchmal helfen einfach nur solch schlimme Workarounds :-(

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 22 Okt. 2013 14:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ok, jetzt habe ich mal geworkarounded und die Website-Templates werden nun aufgelistet. Und schon laufe ich in das nächste Problem:

  • ich habe jetzt die alten Custom Templates alle deaktiviert und gelöscht und ein neues Template erstellt und aktiviert

Wenn ich mein Webpart neu lade, zeigt das mir prompt die alten Templates an!?

Habe ich da jetzt noch ein Caching-Problem? Selbst wenn die alten Templates aus dem Websitesammlung-Papierkorb lösche, zeigt das Webpart die noch an...!?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Okt. 2013 15:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich weiß nicht, wie Du die Vorlagen ermittelst, aber SPWeb.GetAvailableWebTemplates() sollte die nicht mehr liefern.

[quote user="Peter Oswald"]ich habe jetzt die alten Custom Templates alle deaktiviert und gelöscht[/quote]

Das solltest Du in einer produktiven Umgebung später niemals tun. Du machst damit die aus den Vorlagen erstellten Websites kaputt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 22 Okt. 2013 15:15
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

die aus den alten Vorlagen erstellten Websites gibt es nicht mehr. Selbst wenn, welche Auswirkung auf das Lesen des Website-Katalogs sollte das haben? Wenn ich GetAvailableWebTemplates() aufrufe, erwarte ich jetzt unabhängig davon die aktuelle Liste der Vorlagen. Aber im Moment sieht es ja so aus, als könnte das Webpart nur die Templates sehen zum Zeitpunkt des Einspielens des Webparts.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Okt. 2013 15:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Peter Oswald"]die aus den alten Vorlagen erstellten Websites gibt es nicht mehr[/quote]

Das sollte nur eine freundliche Warnung sein das nicht auf einem Produktivsystem zu machen :-)

[quote user="Peter Oswald"]Selbst wenn, welche Auswirkung auf das Lesen des Website-Katalogs sollte das haben?[/quote]

Auf den katalog hat das natürlich keinerlei Auswirkungen.

[quote user="Peter Oswald"]Aber im Moment sieht es ja so aus, als könnte das Webpart nur die Templates sehen zum Zeitpunkt des Einspielens des Webparts[/quote]

Das kann ich nicht glauben. Du holst die verfügbaren Vorlagen ja per Code und der Code wird zu einem bestimmten Zeitpunkt ausgeführt. Mit dem Zeitpunkt des Erstellens des Webparts hat das nichts zu tun.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 22 Okt. 2013 15:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ja, dachte ich auch nicht zu glauben, aber es gibt Sätze wie

"In some instances, the specified custom site definition is not found because the custom site definition is not yet in the cache...."

auf http://msdn.microsoft.com/en-us/library/sharepoint/ms466366.aspx 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Okt. 2013 15:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das in dem Link Beschrieben gilt zwar nicht explizit für Vorlagen, die durch "Als Vorlage speichern" entstanden sind (die werden völlig anders abgelegt), aber möglich ist natürlich alles...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 23 Okt. 2013 08:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Interessanterweise ist dieser "Cache" jetzt über Nacht wohl aktualisiert worden, denn heute morgen werden auch die neuen Vorlagen aufgelistet, ohne dass ich programmatisch etwas verändert hätte. Kurioserweise meckert das System aber bei Auswahl einer neuen Vorlage, dass keine Rechte vorhanden wären. Die Lösung neu einspielen scheint auch reinigende Auswirkung auf alles zu haben, denn danach funkt alles...!?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 23 Okt. 2013 09:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sowohl das "über Nacht warten" als auch ein Neueinspielen der Lösung haben denselben Effekt, nämlich daß der Application Pool recycled und dadurch der Cache geleert wird. Steht auch in dem von Dir geposteten Link...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 23 Okt. 2013 09:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

hm, das mit dem über Nacht hätte ich jetzt so nicht herausgelesen, aber wenn du s sagst, wird s wohl so sein :-) Bisher bin ich noch über kein Caching dieser Art gestolpert. Eine Kleinigkeit, die nicht groß an die Wand gepinnt ist, aber in diesem Fall bei mir für viel Erstaunen gesorgt hat.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 23 Okt. 2013 09:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Peter Oswald"]das mit dem über Nacht hätte ich jetzt so nicht herausgelesen[/quote]

Das ist die Standardeinstellung. Kannst Du im IIS Manager beim Application Pool nachschauen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 25 Okt. 2013 08:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

leider muss ich nochmal daherkommen und eine Interna nachfragen. Folgender Sachverhalt

  • Webpart / Lösung wird eingespielt => Lösung funktioniert, kann alle Website-Vorlagen lesen und verwenden und daraus Webseiten erstellen
  • einen Tag später: die Funktion "Erstelle Website" meldet nur noch "Benutzer hat keine Zugriffsrechte..."; Berechtigungen haben sich aber nicht geändert
  • Lösung funktioniert wieder wenn
     ~ ein IIS Reset erfolgt bzw. Application Pool recycled wird
     ~ die Lösung neu eingespielt wird
  • einen Tag später funktioniert die Lösung wieder nicht

woran könnte das liegen?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Okt. 2013 09:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das kann Dir hier wahrscheinlich niemand sagen. Offenbar greifst Du auf irgendwas zu, das durch den nächtlichen App Pool Recycle ungültig wird. Seltsamerweise geht es dann aber wieder, wenn ein weiterer Recycle erfolgt.

Kannst Du hier relevante Codeausschnitte posten? Aber bitte nicht einfach viele hundert Zeilen Webpartcode - das liest keiner.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 25 Okt. 2013 09:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

könnte es so etwas ähnliches sein wie in

dass die Verwendung von statischen Objekte, die instanzabhängig sind, und so ihre Zuordnung verlieren? Aber was ist dann der Unterschied zwischen aktivem IIS Reset und Recycling Application Pool über Nacht...?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Okt. 2013 09:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Natürlich ist das das Problem. Wie kommst Du auf die Idee hier ein statisches Feld zu verwenden? Überlege mal was passiert, wenn das Webpart mehr als einmal verwendet wird!

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 25 Okt. 2013 09:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Auf die Idee kommt man, wenn man nebenbei noch Windows Forms Applications programmieren muss. Aber trotzdem danke für die Zurechtweisung.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Okt. 2013 14:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Bein Windows Forms bekommst Du aber genau dasselbe Problem, wenn ein Form innerhalb der Anwendung mehrfach geäffnet werden kann (also nicht nur einmal als Dialog)...

Viele Grüße
Andi
af @ evocom de
Blog