我试图以编程方式在SharePoint 2010中创建日历列表,只要使用沙盒解决方案创建特定列表。我已经实现了一个ListAdded ListEventReceiver以运行代码来生成日历。在ListAdded列表中创建列表事件接收器
public class GenerateCalendar : SPListEventReceiver
{
public override void ListAdded(SPListEventProperties properties)
{
base.ListAdded(properties);
// Exit out if this is not a MyList type
if(!IsMyList(properties))
return;
string calendarTitle = properties.List.Title + " Calendar";
SPWeb spWeb = properties.Web;
SPListTemplateType type = new SPListTemplateType();
type = SPListTemplateType.Events;
// Execution breaks here:
Guid listGuid = spWeb.Lists.Add(calendarTitle, "Associated Calendar", type);
SPList newList = spWeb.Lists[listGuid];
newList.OnQuickLaunch = properties.List.OnQuickLaunch;
newList.Update();
}
}
当我打电话spWeb.Lists.Add(...),我得到一个SPException(沙盒代码执行请求被拒绝,因为沙盒代码主机服务是太忙,无法处理请求。)
从MSDN文档中,我可以看到在沙盒解决方案(https://msdn.microsoft.com/en-us/library/office/ms413986(v=office.14).aspx)中可用的SPListCollection.Add方法是。在这种事件接收器中创建列表是否有限制?有谁知道为什么这不起作用?
编辑添加的生成的Feature.xml和Elements.xml的文件
的Feature.xml:
<?xml version="1.0" encoding="utf-8"?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/"
Title="Calendar Generator"
Description="Generates a calendar"
Id="dfe3388c-c063-4873-a41b-5c066907c510"
Scope="Web">
<ElementManifests>
<ElementManifest Location="GenerateCalendar\Elements.xml" />
</ElementManifests>
</Feature>
Elements.xml的
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers >
<Receiver>
<Name>GenerateCalendarListAdding</Name>
<Type>ListAdding</Type>
<Assembly>MyListGenerator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5cff2198a602ec41</Assembly>
<Class>MyListGenerator.Event_Receivers.GenerateCalendar.GenerateCalendar</Class>
<SequenceNumber>10000</SequenceNumber>
</Receiver>
<Receiver>
<Name>GenerateCalendarListDeleting</Name>
<Assembly>MyListGenerator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5cff2198a602ec41</Assembly>
<Class>MyListGenerator.Event_Receivers.GenerateCalendar.GenerateCalendar</Class>
<SequenceNumber>10000</SequenceNumber>
</Receiver>
<Receiver>
<Name>GenerateCalendarListAdded</Name>
<Type>ListAdded</Type>
<Assembly>MyListGenerator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5cff2198a602ec41</Assembly>
<Class>MyListGenerator.Event_Receivers.GenerateCalendar.GenerateCalendar</Class>
<SequenceNumber>10000</SequenceNumber>
</Receiver>
</Receivers>
</Elements>
它似乎没有任何这些东西。事件接收器是声明式注册的。我让Visual Studio处理它,但我验证了在链接的文档中针对该示例生成的Feature.xml和Elements.xml,并且它匹配得相当好(除了元素的Receivers标记中缺少ListTemplateId属性.XML)。我编辑了我的问题,并将文件的输出添加到最后。 –
至于** WorkerProcessExecutionTimeout **,我测试了几次,看看我收到异常之前需要多长时间,并且一直持续10秒左右。我通过PowerShell验证了** WorkerProcessExecutionTimeout **(设置为30)的值,甚至尝试将其更改为60,但这没有什么区别。仅10秒后发生异常。资源使用量约为0.07(尽管这个数字似乎从0到0.15)。任何其他想法可能会导致这种情况? –