SPPersistedObject и List <T> - PullRequest
       46

SPPersistedObject и List <T>

2 голосов
/ 08 марта 2010

Я хочу, чтобы sharepoint "сохранил" список объектов

Я написал класс SPAlert, унаследованный от SPPersistedObject:

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;
}

Проблема:

, когда я вызываю метод Update y MyCustomJob:

myCustomJob.Update();

Выдает исключение:

сообщение:

Объект в административной структуре SharePoint зависит от других объектов, которые не существуют.Убедитесь, что все зависимости объектов созданы, и повторите эту операцию.

stack

в Microsoft.SharePoint.Administration.SPConfigurationDatabase.StoreObject (SPPersistedObject obj, Boolean storeClassIfNeeded,Логическое обеспечение) в Microsoft.SharePoint.Administration.SPConfigurationDatabase.PutObject (SPPersistedObject obj, Логическое обеспечение) в Microsoft.SharePoint.Administration.SPPersistedObject.Update () в Microsoft.SharePoint.Administration.SPJobDefinition.Update () в SigS.SiSI.SmsAlertHandler.ScheduleJob (SPWeb web, SPAlertHandlerParams ahp)

внутреннее исключение

Объект в административной структуре SharePoint зависит от других объектов, которые не существуют.

Оператор INSERT конфликтует с ограничением FOREIGN KEY "FK_Dependencies1_Objects".

Конфликт произошел в базе данных "SharePoint_Config, таблица" dbo.Objects ", столбец" Id ". Оператор был прекращен.

Может кто-нибудь помочь мне с этим ??

Ответы [ 3 ]

2 голосов
/ 22 ноября 2010

Убедитесь, что ваш класс помечен уникальным GUID, используя [System.Runtime.InteropServices.Guid ("GUID")], и убедитесь, что класс сохраненного объекта имеет конструктор по умолчанию. Надеюсь, что это поможет.

2 голосов
/ 15 ноября 2011

Оба приведенных выше предложения очень важны, добавив атрибут 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

1 голос
/ 08 марта 2010

Вы указали конструктор по умолчанию для SMSAlert?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...