Distribuiti .pagina aspx in funzione di ricevitore per aggiungere la web part
-
10-12-2019 - |
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?
Soluzione
Grazie per Spongeroberto Squarepantalones
e SPArchaeologist
aiuto, ho fatto la seguente:
- Ho creato un
Module
nella mia Soluzione di SharePoint e aggiunto unaspx
pagina. - In questo
aspx
pagina ho aggiunto unWebPartPages:SPWebPartManager
e unWebPartPages:WebPartZone
. - Ho modificato la
Elements.xml
file nel modulo per distribuire la pagina in unDocument Library
.(Ho bisogno di accedere a questa pagina da un sito specificato solo). - Nel
FeatureActivated
metodo diFeature Event Receiver
Ho aggiunto il codice per creare unWebPart
, ottenere questa pagina comeSPFile
eSPLimitedWebPartManager
per aggiungere il mio creataWebPart
.(Ho fatto questo e non aveva creato unWepPart
nelaspx
pagina direttamente perché la web part visualizza gli elementi di SharePoint da unDocument Library
e utilizzo di SharePointView
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.