SPUtility.CreateNewDiscussionReply创建一个讨论项目

时间:2013-01-02 13:57:05

标签: sharepoint sharepoint-2010

我有一个非常疏远的错误,当我调用SPUtility.CreateNewDiscussionReply()时,在我的一个 SharePoint 服务器场中,它创建了一个新项目,其中填充了回复的值,但带有讨论内容类型。但是,如果我从网上回复,它会正确创建讨论回复项目。

更新

调试更深入我发现SPUtility.CreateNewDiscussionReply()将项目内容类型设置为“消息”而不是ContentTypeId。添加项目时,SharePoint在查找邮件内容类型时遇到问题,并使用列表中找到的第一个内容类型进行解析。

这是我用来测试此问题的代码:

SPList list = web.Lists["Discussions"];
SPListItem discussion = list.GetItemById(11);

SPListItem reply = SPUtility.CreateNewDiscussionReply(discussion);
// At this point:
//   reply["ContentType"] = "Message"
//   reply["ContentTypeId"] = ""

reply["Body"] = "This is a test reply";

reply.Update();
// At this point:
//   reply["ContentType"] = "Message"
//   reply["ContentTypeId"] = "0x012002...." (Discussion content type)

解决方法: 我发现如果我在更新之前手动设置了回复的内容类型ID,则所有内容都能正常工作:

reply["ContentTypeId"] = list.ContentTypes.BestMatch(SPBuiltInContentTypes.Message);

1 个答案:

答案 0 :(得分:0)

讨论内容类型被视为文件夹(继承文件夹内容类型),因此您必须将回复添加到帖子文件夹。