我有一个非常奇怪的错误,在我的一个SharePoint场中,当我调用 时SPUtility.CreateNewDiscussionReply()
,它会创建一个新项目,其中填充了回复的值,但具有讨论内容类型。但是,如果我从网络回复,它会正确创建一个讨论回复项目。
更新:
更深入地调试我发现 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);