Domanda

Ho una soluzione di SharePoint che distribuisce una aspx pagina in una cartella personalizzata in Layouts cartella.Ho bisogno di ottenere questa pagina Feature Event Receiver quindi posso aggiungere ad esso un WebPart.

Nel FeatureActivated metodo quando sto cercando di utilizzare questo codice:

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

Questo codice restituisce un File not found exception.

Come posso ottenere un riferimento a questa pagina?È questo errore che si verificano perché la pagina non è stata distribuita di sicurezza?

È stato utile?

Soluzione

Grazie per Spongeroberto Squarepantalones e SPArchaeologist aiuto, ho fatto la seguente:

  1. Ho creato un Module nella mia Soluzione di SharePoint e aggiunto un aspx pagina.
  2. In questo aspx pagina ho aggiunto un WebPartPages:SPWebPartManager e un WebPartPages:WebPartZone.
  3. Ho modificato la Elements.xml file nel modulo per distribuire la pagina in un Document Library.(Ho bisogno di accedere a questa pagina da un sito specificato solo).
  4. Nel FeatureActivated metodo di Feature Event Receiver Ho aggiunto il codice per creare un WebPart, ottenere questa pagina come SPFile e SPLimitedWebPartManager per aggiungere il mio creata WebPart.(Ho fatto questo e non aveva creato un WepPart nel aspx pagina direttamente perché la web part visualizza gli elementi di SharePoint da un Document Library e utilizzo di SharePoint View che sono distribuiti nella stessa soluzione, così i loro GUID sempre cambiare).

Altri suggerimenti

Gli articoli sono distribuiti PRIMA Il ricevitore dell'evento.Il problema è che stai cercando di leggere un file hive.Non funzionerà con il metodo SPWeb.GetFile.Questo metodo è pensato per i file memorizzati in quel web.

Puoi ancora leggere il file, tuttavia.Avevo bisogno di fare lo stesso e ho scritto un metodo come questo:

/// <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);
    }                                   
}
.

Quindi puoi leggere un file dall'alveare come questo:

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

Basato su altre risposte (vedere Questo o Questa ) spfile.getfile (stringa) non può essere utilizzata per contenere una" Spfile "nella cartella _Layout. Ci sono altri modi per leggere la pagina (come una risposta suggerita), ma alla fine si ottiene solo un flusso / bytearray o tali - stai cercando di aggiungere una web parte, quindi temo che non avrebbe davvero aiutato. Questo perché per quanto riguarda SharePoint, _Layout è una cartella Virtual IIS e il file all'interno non è visto come spfile.

Detto questo, aggiungendo una parte web a una pagina dell'applicazione per quanto ho noto non è nemmeno supportato: Se si tenta di aggiungere una fusa web part con una parte web all'interno, dovresti ricevere un errore simile a "" Sconosciuto server Tag WebPartZone "(vedi Questo blog o Questa risposta da Dave ). La pagina Web sulla pagina dell'applicazione è possibile solo se usato come controllo web standard (e anche lì ci sono alcuni problemi con la cache e tale).

Se tu devi , la tua scommessa migliore sembra aprire il file a livello programmatico come un file di testo e aggiungendo manualmente i tag richiesti - non sarai in grado di utilizzare Web Part Manager. Ad ogni modo, avrei provato a vedere se riesco a ridistribuire quella pagina a una libreria di pagine o tali e trasformarla in una pagina di pubblicazione standard.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top