2010-03-08 33 views
2

我希望SharePoint为“坚持”对象的名单SPPersistedObject和列表<T>

我写了从SPPersistedObject类SPAlert至极继承:

public class SMSAlert: SPPersistedObject 
{ 
     [Persisted] 
     private DateTime _scheduledTime; 

     [Persisted] 
     private Guid _listId; 
     [Persisted] 
     private Guid _siteID; 
} 

然后我写了一个类至极继承SPJobDefinition附加我以前的对象的列表:

public sealed class MyCustomJob: SPJobDefinition 
{ 


     [Persisted] 
     private List<SMSAlert> _SMSAlerts; 
} 

的问题是:

当我打电话ŸMyCustomJob的更新方法

myCustomJob.Update(); 

它抛出一个异常:

消息:

中的SharePoint 管理框架的对象,取决于其他 对象哪些不存在。 确保创建所有对象 依赖关系并重试 此操作。

在 Microsoft.SharePoint.Administration.SPConfigurationDatabase.StoreObject(SPPersistedObject OBJ,布尔storeClassIfNecessary, 布尔确保)在 Microsoft.SharePoint.Administration.SPConfigurationDatabase.PutObject(SPPersistedObject obj,Boolean确保)在 Microsoft.SharePoint.Administration.SPPersistedObject.Update() at Microsoft.SharePoint.Administration.SPJobDefinition .Update() 在 Sigi.Common.AlertBySMS.SmsAlertHandler.ScheduleJob(的SPWeb 网,SPAlertHandlerParams AHP)

内部异常

中的SharePoint 管理框架对象取决于 其他不存在的对象。

INSERT语句与 FOREIGN KEY约束 “FK_Dependencies1_Objects”冲突。

冲突发生于数据库 “SharePoint_Config,表 “dbo.Objects”,列 'ID',该 语句已终止。

谁能帮我与??

+0

你解决这个问题? – Mauro 2010-11-01 11:06:34

回答

1

您是否指定了SMSAlert的默认构造函数?

+0

不,我没有这样做 所以我加了它,我没有任何异常 但是当我检索我的“MyCustomJob”时,列表中有很多项目,但是每个项目都是空的 – Sam 2010-03-09 09:39:54

2

确保您的类使用[System.Runtime.InteropServices。Guid(“GUID”)]并确保持久化对象的类具有默认构造函数。希望这个帮助。

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

相关问题