を呼び出すと、 SharePointファームの 1 つで非常に奇妙なエラーが発生しSPUtility.CreateNewDiscussionReply()
、返信の値で満たされた新しいアイテムが作成されますが、ディスカッション コンテンツ タイプが含まれます。ただし、Web から返信すると、ディスカッションの返信アイテムが正しく作成されます。
アップデート:
さらに深くデバッグすると、SPUtility.CreateNewDiscussionReply() がアイテムの contenttype を「Message」に設定するが、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);