2012-02-17 3 views
1

У меня есть «список проектов» (название, название, участники, URL-адрес сайта), который должен ссылаться на сайты команды под сайтом, имеющим список проектов. Поэтому я добавил SPItemEventReceiver в свою функцию в решении для песочницы, чтобы сделать это.Sharepoint: Создайте суборд из обработчика событий элемента

В ItemAdding(properties) я призываю следующее:

string projectName = properties.AfterProperties["Title"].ToString(); 
SPWeb currentWeb = properties.Web; 
SPWeb subweb = currentWeb.Webs.Add(projectName, projectName, 
    "Project site for " + projectName, (uint) currentWeb.Locale.LCID, 
    Microsoft.SharePoint.SPWebTemplate.WebTemplateSTS, true, false); 

Но при отладке, вызов Добавить бросает SPException Обертывание COMException для HRESULT кода FAILED с сообщением запрос песочницы выполнение кода было отказано потому что служба узла с изолированным кодом была слишком занята для обработки запроса.

Есть ли что-то не так с параметрами, или я должен делегировать фактическое создание в рабочий процесс вместо этого?

ответ

0

После попытки с этим: общественных переопределений недействительного ItemAdding (SPItemEventProperties свойство) { base.ItemAdding (свойства);

  // Get the web where the event was raised 
      SPWeb spCurrentSite = properties.OpenWeb(); 

      //Get the name of the list where the event was raised   
      String curListName = properties.ListTitle; 

      //If the list is our list named SubSites the create a new subsite directly below the current site 
      if (curListName == "SubSites") 
      { 
       //Get the SPListItem object that raised the event 
       SPListItem curItem = properties.ListItem; 
       //Get the Title field from this item. This will be the name of our new subsite 
       String curItemSiteName = properties.AfterProperties["Title"].ToString(); 
       //Get the Description field from this item. This will be the description for our new subsite 
       string curItemDescription = properties.AfterProperties["Description"].ToString(); 
       //Update the SiteUrl field of the item, this is the URL of our new subsite 
       properties.AfterProperties["SiteUrl"] = spCurrentSite.Url + "/" + curItemSiteName; 

       //Create the subsite based on the template from the Solution Gallery 
       SPWeb newSite = spCurrentSite.Webs.Add(curItemSiteName, curItemSiteName, curItemDescription, Convert.ToUInt16(1033), "{8FCAD92C-EF01-4127-A0B6-23008C67BA26}#1TestProject", false, false); 
       //Set the new subsite to inherit it's top navigation from the parent site, Usefalse if you do not want this. 
       newSite.Navigation.UseShared = true; 
       newSite.Close(); 


      } 
     } 
+0

Ну, он быстрее выходил с «Язык не поддерживается на этом сервере» :) Изменение этого параметра на текущийWeb.Language дает та же ошибка; другое изменение, которое я делал, - это использовать OpenWeb() вместо того, чтобы просто получить веб-свойство и помещать вызов create в оператор _using_. Также попытался со строкой «STS # 0», которую состояние docs является строковым значением для сайта команды ... –

0

Кажется, что ситуация в тупике; Я решил свой конкретный случай, используя вместо этого пост-событие ItemAdded (изменяя значение параметра в AfterProperties на обновление ListItem). Там по какой-то причине вызов в Webs.Add() завершается нормально ...

+0

Привет, У меня такая же проблема. Могли бы вы показать, как был конечный результат? Запускается вызов Webs.Add(), но не завершается. Просмотр списка подсайтов в SP Designer показывает мне сайт с URL-адресом, но без заголовка и содержимого. Мой код очень похож на этот: http://sharepoint247.com/sharepoint2010/sharepoint-2010-event-handler-to-create-subsites/ – miracules

+0

К сожалению, этот код был заменен на вызов SPSite.SelfServiceCreateSite (), чтобы избежать проблем с тем, что пользователь запускает соответствующий код (рекомендуется Microsoft). Обратите внимание, что в этом случае вам необходимо передать двух пользователей, которые станут начальными и вторичными админами семейства сайтов. Также было обнаружено, что если вы используете RunWithElevatedPrivileges(), вам нужно создать новые объекты для SPSite и т. Д. Вместо повторного использования объектов, созданных вне этого кода. –

Смежные вопросы