Frage

Ich habe eine SharePoint-Lösung, die eine bereitstellt aspx Seite in einem benutzerdefinierten Ordner in der Layouts Ordner.Ich muss diese Seite in die Feature Event Receiver also kann ich noch ein hinzufügen WebPart.

Im FeatureActivated Methode, wenn ich versuche, diesen Code zu verwenden:

SPFile file = web.GetFile("_layouts/My Folder/MyPage.aspx");  

Dieser Code gibt a zurück File not found exception.

Wie kann ich einen Verweis auf diese Seite erhalten?Tritt dieser Fehler auf, weil die Seite noch nicht bereitgestellt wurde?

War es hilfreich?

Lösung

Danke für Spongeroberto Squarepantalones Und SPArchaeologist Hilfe, ich habe folgendes gemacht:

  1. Ich habe eine erstellt Module in meiner SharePoint-Lösung hinzugefügt und eine hinzugefügt aspx Seite.
  2. In diesem aspx Seite, die ich hinzugefügt habe WebPartPages:SPWebPartManager und ein WebPartPages:WebPartZone.
  3. Ich habe das bearbeitet Elements.xml Datei im Modul, um die Seite in einem bereitzustellen Document Library.(Ich muss nur von einer bestimmten Site aus auf diese Seite zugreifen.)
  4. Im FeatureActivated Methode in der Feature Event Receiver Ich habe Code hinzugefügt, um einen zu erstellen WebPart, holen Sie sich diese Seite als SPFile und benutzte ein SPLimitedWebPartManager um meine erstellten hinzuzufügen WebPart.(Ich habe dies getan und keine erstellt WepPart im aspx Seite direkt, da das WebPart SharePoint-Elemente von a anzeigt Document Library und verwenden Sie einen SharePoint View die in derselben Lösung bereitgestellt werden, daher ändert sich ihre GUID immer).

Andere Tipps

Elemente werden bereitgestellt Vor der Ereignisempfänger.Das Problem besteht darin, dass Sie versuchen, eine Hive-Datei zu lesen.Das wird mit der SPWeb.GetFile-Methode nicht funktionieren.Diese Methode ist für Dateien gedacht, die in diesem Web gespeichert sind.

Sie können die Datei jedoch weiterhin lesen.Ich musste das Gleiche tun und habe eine Methode wie diese geschrieben:

/// <summary>
/// get the proper path to the hive
/// </summary>
private static string GetUtilPath(string path)
{
    return SPUtility.GetGenericSetupPath(@"TEMPLATE\LAYOUTS\MyModule\" + path);
}

/// <summary>
/// Access a file in the SharePoint hive
/// </summary>    
/// <param name="path">the path relative to the layouts folder</param>   
private static byte[] GetHiveFile(string path)
{
    string utilPath = GetUtilPath(path);
    using(FileStream fs = new FileStream(utilPath, FileMode.Open, FileAccess.Read))
    {
        BinaryReader br = new BinaryReader(fs);
        long numbytes = new FileInfo(utilPath).Length;
        return br.ReadBytes((int)numbytes);
    }                                   
}

Dann können Sie eine Datei aus dem Hive wie folgt lesen:

byte[] file = GetHiveFile(@"myfolder\myfile.txt");

Basierend auf anderen Antworten (siehe Das oder Das) SPFile.GetFile(string) kann nicht verwendet werden, um eine „SPFile“ im _layout-Ordner abzurufen.Es gibt andere Möglichkeiten, die Seite zu lesen (wie in einer Antwort vorgeschlagen), aber am Ende würden Sie nur einen Stream/Bytearray oder ähnliches erhalten – Sie versuchen, ein Webpart hinzuzufügen, also befürchte ich, dass das nicht wirklich helfen würde.Das liegt daran, dass _layout für SharePoint ein virtueller IIS-Ordner ist und die darin enthaltenen Dateien NICHT als SP-Datei angesehen werden.

Allerdings wird das Hinzufügen eines Webparts zu einer Anwendungsseite meines Wissens nicht einmal unterstützt:Wenn Sie versuchen, eine Webpartzone mit einem darin enthaltenen Webpart hinzuzufügen, sollten Sie eine Fehlermeldung ähnlich der „Unbekanntes Server-Tag WebPartZone“ erhalten (siehe dieser Blog oder diese Antwort von Dave).Webparts auf der Anwendungsseite sind nur möglich, wenn sie als Standard-Websteuerung verwendet werden (und selbst dort gibt es einige Probleme mit der Zwischenspeicherung usw.).

Wenn du müssen, Ihre beste Lösung scheint es zu sein, die Datei programmgesteuert wie eine Textdatei zu öffnen und dann die erforderlichen Tags manuell hinzuzufügen – Sie können den Webpart-Manager nicht verwenden.Wie auch immer, ich würde versuchen, diese Seite erneut in einer Seitenbibliothek oder ähnlichem bereitzustellen und sie in eine Standardveröffentlichungsseite umzuwandeln.

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