我希望sharepoint“持久化”对象列表
我写了一个继承自SPPersistedObject的SPAlert类:
public class SMSAlert: SPPersistedObject
{
[Persisted]
private DateTime _scheduledTime;
[Persisted]
private Guid _listId;
[Persisted]
private Guid _siteID;
}
然后我写了一个继承自SPJobDefinition的类,添加了我之前对象的List:
public sealed class MyCustomJob: SPJobDefinition
{
[Persisted]
private List<SMSAlert> _SMSAlerts;
}
问题是:
当我调用y MyCustomJob的Update方法时:
myCustomJob.Update();
抛出异常:
消息:SharePoint中的对象 行政框架,取决于 其他不存在的对象。 确保所有对象 创建依赖项并重试 这个操作。
堆
在 Microsoft.SharePoint.Administration.SPConfigurationDatabase.StoreObject(SPPersistedObject obj,Boolean storeClassIfNecessary, 布尔确保) Microsoft.SharePoint.Administration.SPConfigurationDatabase.PutObject(SPPersistedObject obj,布尔确保)at Microsoft.SharePoint.Administration.SPPersistedObject.Update() 在 Microsoft.SharePoint.Administration.SPJobDefinition.Update() 在 Sigi.Common.AlertBySMS.SmsAlertHandler.ScheduleJob(的SPWeb web,SPAlertHandlerParams ahp)
内部异常
SharePoint中的对象 行政框架取决于 其他不存在的对象。
INSERT语句与之冲突 FOREIGN KEY约束 “FK_Dependencies1_Objects”。
数据库中发生冲突 “SharePoint_Config,表格 “dbo.Objects”,列'Id'。该 声明已被终止。
任何人都可以帮我吗?
答案 0 :(得分:2)
使用[System.Runtime.InteropServices.Guid(&#34; GUID&#34;)]确保您的类标有唯一的GUID,并确保持久对象的类具有默认构造函数。希望这有帮助。
答案 1 :(得分:2)
以上建议都非常重要,添加了Guid属性并确保您拥有默认构造函数。不仅适用于持久的SMSAlert
对象,还要确保您的SPJobDefinition也适用。
此外,如果您创建SPPersistedObject的集合,则必须确保集合中的每个对象也都已更新。更好的选择是使SMSAlert
成为SPAutoSerializingObject。 SPAutoSerializingObject的集合,顾名思义,是自动序列化的。
有关持久对象的更多信息,请参阅此非常有用的帖子: http://www.chaholl.com/archive/2011/01/30/the-skinny-on-sppersistedobject-and-the-hierarchical-object-store-in.aspx
答案 2 :(得分:1)
您是否指定了SMSAlert
的默认构造函数?