Bereiten Sie während der Funktionsaktivierung in einer Sandbox -Lösung einen Webpart auf einer Seite ein

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/3842

  •  16-10-2019
  •  | 
  •  

Frage

Ich habe in den letzten Tagen meinen Kopf gegen eine Wand geschlagen. Ich habe eine ziemlich einfache Anforderung, aber ich kann nicht sehen, wie es in einer Sandbox -Lösung erreicht werden kann. Ich bin depressiv, weil ich denke, dass es eine kritische Einschränkung ist, die mir auch in zukünftigen Lösungen Trauer verursacht.

Hier ist das Szenario.

Ich habe eine vorhandene Site und möchte in der Lage sein, eine Funktion zu aktivieren und dann als Teil dieser Aktivierung Web -Teile auf bestimmte Seiten zu fallen. In meinem Fall möchte ich es auf die Seite "Allitems.aspx" einer Liste fallen lassen, aber ich habe es ebenso Probleme, sie auf die Standard -Homepage zu fügen. Ich würde so oder so glücklich sein.

Hinweis: Ich möchte dies auf vorhandener Site aktivieren können, ich möchte keine neue Site -Definition erstellen.

Hier ist, was ich versucht habe:

  1. Feature Receiver: Nein Go. Sie können die klassifizierte WEBPartManager -Klasse nicht verwenden, und die SPWebPartManager -Klasse funktioniert nur im Kontext der Seite, auf der sie instanziiert ist. So können Sie dies auch im Code nicht tun.

  2. XML -Modul: Ich denke, dies ist der wahrscheinlichste Weg nach vorne, aber es scheint immer eine Datei auf der Website vorzustellen. Wenn ich beispielsweise der Startseite (Standard.aspx) einen Webpart hinzufügen möchte, scheint es keine Möglichkeit zu geben, nur einen Verweis auf die Seite zu erhalten, es stets will es mit einer neuen Datei überschreiben. Aber ich möchte das nicht, ich möchte nur einen Webpart zur vorhandenen Seite hinzufügen. Siehe meine Elemente XML unten, ich habe verschiedene Kombinationen von "ignoreifalreadyexists" ausprobiert und das Pfadattribut entfernt und leer eingestellt.

  3. Delegierregelung: Nicht in der Sandbox erlaubt.

  4. Ich möchte tatsächlich in der Lage sein, der Form einer Liste "Allitems.aspx" ein Webpart hinzuzufügen, daher habe ich auch versucht, das Webpart über die hier beschriebene Schema.xml -Datei hinzuzufügen: Fügen Sie Webpart über das schema.xml hinzu Aber das hat auch nicht funktioniert. Ich sollte es tun können, indem ich die Listendefinition stärker anpassen kann, aber das scheint etwas übertrieben zu sein, und ich zögere, dies zu tun, bevor ich die anderen Optionen ausschließe.

Also der einzige Sauber Ich kann es sehen, ist eine Art "Konfiguration", die es dann über die Webdienste erledigt. Dies ist jedoch ein Schmerz, bei dem der Benutzer die Funktion "aktivieren" und dann auf meiner Konfigurationsseite erneut "aktivieren".

Wie auch immer, es kann nur sein, dass mir etwas Offensichtliches fehlt. Es war eine Weile, dass XML für mich an SharePoint herumgespielt wurde, und dies ist meine erste Sandbox -Lösung. Ich hoffe wirklich, dass jemand anderes diese Nuss geknackt hat.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="Pages">
    <File Path="" Url="default.aspx">
      <AllUsersWebPart WebPartZoneID="Left" WebPartOrder="1">
        <![CDATA[
              <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2" xmlns:iwp="http://schemas.microsoft.com/WebPart/v2/Image">
                <Assembly>(Assembly), Version=1.0.0.0, Culture=neutral, PublicKeyToken=12baeb5f1600543c</Assembly>
                <TypeName>(Typename)</TypeName>
                <FrameType>None</FrameType>
                <Title>ListAnnouncement</Title>
              </WebPart>
            ]]>
      </AllUsersWebPart>
    </File>
</Module>
</Elements>
War es hilfreich?

Lösung

Angesichts der Tatsache, dass es sich um keine manuellen Schritte handelt, kann ich mir eine eher hackische Problemumgehung vorstellen, die möglicherweise funktioniert.

Verwenden ein <CustomAction Location="ScriptLink" ScriptBlock="..."> Um das Skript auf den Seiten automatisch hinzuzufügen. Verwenden Sie im in diesem Skript hinzugefügten Ladeereignis -Handler den Client OM, um über neue Web -Teile zur Seite hinzugefügt zu werden. Um herauszufinden, welche Webteile nach aktiviertem Feature hinzugefügt werden sollen, schreiben Sie einen Feature -Empfänger, um eine Registrierung in eine Liste "Webteile zum Hinzufügen" zu schreiben. In dieser Liste können Sie vier Spalten hinzufügen:

  • Seiten-URL
  • Web -Teil -Zone
  • Zonenindex
  • Web -Teil -Typ

Ich habe das Gefühl, dass dies eine kleine Problemumgehung ist.

Große Nachteile sind die Tatsache, dass Sie mit diesem Setup die Liste für neue Web -Teile jeder Anfrage befragen müssen oder intelligent sein und dem Lastskript eine Logik hinzufügen müssen, um die Umfrage mehr als einmal am Tag zu deaktivieren (HTTP -Cookie für Speicherplatz).

Soweit ich das beurteilen kann, wird es im Sandkasten funktionieren!

Ich hoffe es hilft,

Wouter Van VUGT SharePoint Hackmaster, aber auch eine vernünftige SharePoint -Software aufbauen ...http://blogs.code-counsel.net/wouter

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top