Получите развернутую страницу .aspx в feature receiver для добавления веб-части
-
10-12-2019 - |
Вопрос
У меня есть решение SharePoint, которое развертывает aspx
страница в пользовательской папке в Layouts
папка.Мне нужно поместить эту страницу в Feature Event Receiver
так что я могу добавить к этому WebPart
.
В FeatureActivated
метод, когда я пытаюсь использовать этот код:
SPFile file = web.GetFile("_layouts/My Folder/MyPage.aspx");
Этот код возвращает File not found exception
.
Как я могу получить ссылку на эту страницу?Возникает ли эта ошибка из-за того, что страница еще не была развернута?
Решение
Спасибо за Spongeroberto Squarepantalones
и SPArchaeologist
помогите, я сделал следующее:
- Я создал
Module
в моем решении SharePoint и добавил к немуaspx
Страница. - В этом
aspx
страница, которую я добавилWebPartPages:SPWebPartManager
и ещеWebPartPages:WebPartZone
. - Я отредактировал
Elements.xml
файл в модуле для развертывания страницы вDocument Library
.(Мне нужно получить доступ к этой странице только с указанного сайта). - В
FeatureActivated
метод вFeature Event Receiver
Я добавил код для созданияWebPart
, получить эту страницу в качествеSPFile
и использовалSPLimitedWebPartManager
чтобы добавить мой созданныйWebPart
.(Я сделал это и не создалWepPart
вaspx
страницу напрямую, поскольку веб-часть отображает элементы SharePoint изDocument Library
и использовать SharePointView
которые развернуты в одном и том же решении, поэтому их GUID всегда меняется).
Другие советы
элементы развернуты до получатель события.Проблема в том, что вы пытаетесь прочитать файл улья.Это не будет работать с методом spweb.getfile.Этот метод предназначен для файлов, которые хранятся в этой сети.
Вы все еще можете прочитать файл, однако.Мне нужно было сделать то же самое и написал метод, как это:
.
/// <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);
}
}
Тогда вы можете прочитать файл из такого такого:
.byte[] file = GetHiveFile(@"myfolder\myfile.txt");
Основываясь на других ответах (см. это или это) SPFile.GetFile(строка) не может быть использована для получения доступа к "SPFile" в папке _layout.Есть другой способ прочитать страницу (как предложено в некоторых ответах), но в итоге вы просто получите stream / bytearray или что-то подобное - вы пытаетесь добавить веб-часть, поэтому я боюсь, что это действительно не поможет.Это связано с тем, что для SharePoint _layout - это виртуальная папка IIS, и файл внутри нее НЕ рассматривается как SPfile.
Тем не менее, добавление веб-части на страницу приложения, насколько мне известно, даже не поддерживается:если вы попытаетесь добавить зону веб-части с веб-частью внутри, вы должны получить сообщение об ошибке, подобное "“Неизвестный серверный тег WebPartZone" (см. этот блог или этот ответ от Дэйва).Веб-часть на странице приложения возможна только в том случае, если используется в качестве стандартного веб-элемента управления (и даже там есть некоторые проблемы с кэшированием и тому подобным).
Если вы должны, по-видимому, лучше всего открыть файл программно, как текстовый файл, а затем добавить необходимые теги вручную - вы не сможете использовать диспетчер веб-частей.В любом случае, я бы попробовал посмотреть, смогу ли я повторно развернуть эту страницу в библиотеку страниц или что-то в этом роде и преобразовать ее в стандартную страницу публикации.