Получите развернутую страницу .aspx в feature receiver для добавления веб-части

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

Вопрос

У меня есть решение SharePoint, которое развертывает aspx страница в пользовательской папке в Layouts папка.Мне нужно поместить эту страницу в Feature Event Receiver так что я могу добавить к этому WebPart.

В FeatureActivated метод, когда я пытаюсь использовать этот код:

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

Этот код возвращает File not found exception.

Как я могу получить ссылку на эту страницу?Возникает ли эта ошибка из-за того, что страница еще не была развернута?

Это было полезно?

Решение

Спасибо за Spongeroberto Squarepantalones и SPArchaeologist помогите, я сделал следующее:

  1. Я создал Module в моем решении SharePoint и добавил к нему aspx Страница.
  2. В этом aspx страница, которую я добавил WebPartPages:SPWebPartManager и еще WebPartPages:WebPartZone.
  3. Я отредактировал Elements.xml файл в модуле для развертывания страницы в Document Library.(Мне нужно получить доступ к этой странице только с указанного сайта).
  4. В FeatureActivated метод в Feature Event Receiver Я добавил код для создания WebPart, получить эту страницу в качестве SPFile и использовал SPLimitedWebPartManager чтобы добавить мой созданный WebPart.(Я сделал это и не создал WepPart в aspx страницу напрямую, поскольку веб-часть отображает элементы SharePoint из Document Library и использовать SharePoint View которые развернуты в одном и том же решении, поэтому их 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" (см. этот блог или этот ответ от Дэйва).Веб-часть на странице приложения возможна только в том случае, если используется в качестве стандартного веб-элемента управления (и даже там есть некоторые проблемы с кэшированием и тому подобным).

Если вы должны, по-видимому, лучше всего открыть файл программно, как текстовый файл, а затем добавить необходимые теги вручную - вы не сможете использовать диспетчер веб-частей.В любом случае, я бы попробовал посмотреть, смогу ли я повторно развернуть эту страницу в библиотеку страниц или что-то в этом роде и преобразовать ее в стандартную страницу публикации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top