1

を呼び出すと、 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);
4

1 に答える 1

0

ディスカッション コンテンツ タイプはフォルダーのように扱われる (フォルダー コンテンツ タイプを継承する) ため、投稿フォルダーに返信を追加する必要があります。

于 2013-01-03T04:20:21.060 に答える