Активация возможности (feature) после полного создания сайта
По-умолчанию возможности SharePoint активируются в случайном порядке и могут вызываться до того момента, как сайт полностью воссоздан из шаблона.
Для того, чтобы выполнить код активации возможности после полного создания сайта можно использовать следующий пример класса обработчика активации:
public class MyFeatureReciever : SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
if (null == site)
return;
// Создать поток исполнения
ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork), new Pair(properties.Feature.Definition.RootDirectory, site.ID));
}static private void DoWork(Object obj)
{
String rootDirectory = (String)((Pair)obj).First;
Guid siteId = (Guid)((Pair)obj).Second;
// Пустой цикл пока не создастся сайт
while (true)
{
using (SPSite site = new SPSite(siteId))
{
using(SPWeb web = site.OpenWeb())
{
if(true == web.Provisioned)
break;
}
}
Thread.Sleep(100);
}
// Внести изменения
using (SPSite site = new SPSite(siteId))
{DoMyTasks();
}
}
}