Создайте комментарий блога Sharepoint в коде - PullRequest
1 голос
/ 19 марта 2010

Мне нужно создать комментарии блога Sharepoint по коду:

SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        sw.AllowUnsafeUpdates = true;

        SPList spList = SPContext.Current.Web.Lists["Kommentare"];
        SPListItem listItem = spList.Items.Add();
        listItem[listItem.Fields["Titel des Beitrags"].InternalName] = SPContext.Current.Item["Title"];
        listItem[listItem.Fields["Titel"].InternalName] = titlearea.Value;
        listItem[listItem.Fields["Textkörper"].InternalName] = CommentArea.Value;
        listItem[SPBuiltInFieldId.Author] = curUser;
        //listItem[SPBuiltInFieldId.Modified] = curUser;
        listItem.Update();
        //spList.Update();
        sw.AllowUnsafeUpdates = false;
    });

но я всегда получаю сообщение «Недопустимые данные были использованы для обновления элемента списка. Поле, которое вы пытаетесь обновить, может быть доступно только для чтения» *

Я попытался Systemupdate, и значения кажутся действительными.

Ответы [ 5 ]

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

Я думаю, что поле Author доступно только для чтения, а sharepoint автоматически присваивает зарегистрированному имени пользователя имя.

Так что вы можете попробовать после комментирования строки listItem[SPBuiltInFieldId.Author] = curUser;

0 голосов
/ 15 декабря 2011

Это работает, проверено

    public static void AddComment(string url)
    {
        using (SPSite site = new SPSite(url))
        {
            site.AllowUnsafeUpdates = true;
            using (SPWeb web = site.OpenWeb())
            {
                web.AllowUnsafeUpdates = true;
                SPList commentList = web.Lists["Comments"];
                SPListItem newItem = commentList.AddItem();
                newItem["Body"] = "body";
                newItem["Title"] = "title";
                newItem["PostTitle"] = "2;#post1";
                newItem.Update();
            }
        }
    }

Возможно, вы пишете поле только для чтения, например, Автор.

0 голосов
/ 23 марта 2010

Хорошо, Posttitle является SPLookupField и должен быть заполнен: "{ID} #; {Title}"

0 голосов
/ 20 марта 2010

listItem [listItem.Fields ["Titel des Beitrags"]. InternalName] = SPContext.Current.Item ["Title"];

Указывает ли SPContext.Current.Item на ссылку на сообщение в блоге, к которому вы добавляете комментарий?

Под этим я подразумеваю, работает ли ваш код в пользовательской веб-части, которая заменяет стандартную веб-часть "Добавить комментарии" в сообщении в блоге?

0 голосов
/ 19 марта 2010

Возможно, это не связано с вашей проблемой, но вы создаете объект SPWeb (или используете контекст) за пределами делегата, если пользователь без соответствующих прав запускает код, он не будет подниматься должным образом. Сделайте что-то вроде этого:

SPSecurity.RunWithElevatedPrivileges(delegate {
using (SPSite elevatedSite = new SPSite(SPContext.Current.Site.ID))
using (SPWeb elevatedSite = elevatedSite.RootWeb)
{

//impl

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