概要
Discussions のインポーターは、クラシックの ディスカッション掲示板 リスト (Discussion Board、テンプレート 108 または Discussion Board 基本タイプ。コミュニティ サイトのディスカッション リストも含まれます) を読み取り、その内容を製品の 2 つのサイト リスト、Discussions Topics と Discussions Posts に書き込みます。この記事は、KB10417. クラシックの SharePoint ディスカッション掲示板を Discussions にインポートする方法 で説明しているウィザードの背後にあるリファレンスです。どのクラシック フィールドがどの Discussions 列に入るか、返信ツリーがどのように再構築されるか、何が導出され、何が残され、再実行時にインポーターが自身の作業をどのように認識するかを説明します。列そのものは KB10426. Discussions のリストと列のリファレンス で説明しています。
クラシック掲示板がスレッドを保存する仕組み
クラシックのディスカッション掲示板は、各ディスカッションをリストの フォルダー として、各返信を そのフォルダー内のアイテム として保持します。フォルダーには件名、本文、質問 フラグ、注目 フラグ、いいね数、ベスト返信の ID があり、各返信には独自の本文、いいね数、そしてディスカッション自体 (最上位の返信) または別の返信 (入れ子の返信) を指す 親アイテム (Parent item、ParentItemID) 参照があります。インポーターはリストを ID 順に 2,000 アイテムずつのページで読み取り、アイテムの種類でフォルダーとメッセージを区別します。
Discussions は異なるモデル、つまりトピックごとに 1 アイテム、返信ごとに 1 アイテムで、トピックと親投稿への参照列を持つモデルを使用するため、インポートはリストのコピーではなく、2 つの構造間の変換になります。
トピック
クラシックの各ディスカッションは Discussions Topics の 1 つのアイテムになります:
| クラシックのディスカッション | Discussions Topics の列 | 値 |
|---|---|---|
| 件名 | Title | コピー。255 文字で切り詰め |
| 本文 | Body (VtxBody) | 製品の HTML サニタイザーを通してコピー。許可リストにあるタグと属性は残り、スクリプト、スタイル、安全でないリンクは除去 |
| — | Board (VtxBoard) | Web パーツで選択した掲示板 |
| 質問 | Type (VtxTopicType) | フラグが設定されていれば Question、それ以外は Discussion |
| — | Status (VtxStatus) | Open。ベスト アンサーが見つかった場合は Answered に変更 (後述) |
| 注目 | Featured (VtxIsFeatured) | コピー |
| いいねの数 | Likes (VtxLikeCount) | コピー |
| フォルダー内の返信 | Replies (VtxReplyCount) | インポーターが集計 |
| — | Views (VtxViewCount) | 0 |
| 最新の返信またはディスカッションの作成日 | Last activity (VtxLastActivity) | インポーターが算出 |
| ベスト返信 | Accepted post (VtxAcceptedPostId) | インポートされた返信の ID |
| — | Approval status (VtxApprovalStatus) | Approved |
| — | Reports (VtxReportCount) | 0 |
| リスト ID とアイテム ID | Legacy id (VtxLegacyId) | {source list id}:{classic item id} |
| 登録者、更新者、登録日時、更新日時 | 同じシステム列 | Keep original authors and dates で復元 |
| 添付ファイル | アイテムの添付ファイル | Copy attachments でコピー |
返信
クラシックの各返信は Discussions Posts の 1 つのアイテムになります:
| クラシックの返信 | Discussions Posts の列 | 値 |
|---|---|---|
| 件名 | Title | コピー。空の場合は Re:。255 文字で切り詰め |
| 本文 | Body (VtxBody) | サニタイザーを通してコピー |
| 返信のフォルダー | Topic (VtxTopic) | そのフォルダーのインポート済みトピック |
| 親アイテム | Parent post (VtxParentPost) | インポートされた親返信。最上位の返信では空 |
| — | Path (VtxPath) | 最上位の返信は /。入れ子の返信は親のパスに親の ID と / を付けたもの (例: /341/356/) |
| — | Depth (VtxDepth) | 最上位の返信は 0、それ以外は親の深さ + 1 |
| ディスカッションのベスト返信 | Is accepted answer (VtxIsAccepted) | ディスカッションが指す返信は はい |
| いいねの数 | Likes (VtxLikeCount) | コピー |
| — | Approval status、Reports | Approved、0 |
| リスト ID とアイテム ID | Legacy id (VtxLegacyId) | {source list id}:{classic item id} |
| 登録者、更新者、登録日時、更新日時 | 同じシステム列 | Keep original authors and dates で復元 |
| 添付ファイル | アイテムの添付ファイル | Copy attachments でコピー |

コピーされないもの
- 評価 (星評価) と、アイテムにいいねした人の一覧。いいねの 数 はコピーされますが、Liked by 列は空のままなので、どのユーザーもインポートされたアイテムにもう一度いいねできます。
- カテゴリ: クラシック掲示板にはカテゴリがなく、インポーターは Category を空のままにします。掲示板でカテゴリを使う場合は、インポート後に割り当ててください。
- 閲覧数: 0 から始まります。
- Last reply by: 空のままです。Web パーツは、インポート後に投稿された返信についてのみ最後の返信者を表示します。
- 通知 (アラート)、クラシックの ビュー、リスト フォーム: これらはクラシック リストに属するもので、Discussions には相当するものがありません。サブスクリプションはユーザーが新たに作成します — KB10404. 掲示板とトピックのフォロー: サブスクリプションとダイジェストの頻度 を参照してください。
- ピン留め されたトピック: クラシック掲示板にはこのフラグがありません。必要なトピックはインポート後にピン留めしてください。
返信ツリーの再構築方法
- 親が常に子より先に作成されるよう、返信はクラシックの 登録日時 の古い順に並べ替えられます。
- 各返信について、インポーターは返信が入っている フォルダー からトピックを特定します。フォルダーがインポート済みのどのトピックにも一致しない返信は、警告 Reply skipped: its topic was not imported とともにスキップされます。
- クラシックの 親アイテム は、この実行または以前の実行でインポートされた返信の中から検索されます。返信を指している場合、新しい投稿はその返信を Parent post として受け取り、その Path を継承し、Depth + 1 になります。ディスカッション自体を指している、空である、またはインポーターが知らないアイテムを指している場合、投稿はパス
/、深さ 0 の、トピックの 最上位の返信 になります。親の返信がクラシック リストに存在するのに、この実行で作成できなかった場合も、投稿は最上位に配置され、レポートに警告 Parent reply failed to import; the reply was placed at the top level: 419 が追加されます (419 は最上位に配置された返信のクラシック ID です)。その返信の下に入れ子になっている返信は、通常どおりその返信に関連付けられます。
入れ子に制限はありません。クラシックで第 5 階層にあった返信は、第 5 階層に配置されます。
フラット化された掲示板と孤立した返信
一部の移行ツールは、クラシック掲示板のアイテムはコピーしても、アイテム間の 親アイテム 参照はコピーしません。その場合、掲示板はすべての返信が同じ階層にあるディスカッションの一覧のように見えるか、参照が既に存在しないアイテム ID を指した状態になります。ドライ ランは後者を Replies without a known parent (imported as top-level) として集計し、警告 Some replies lost their parent (a flattened board). を表示します。このような返信は、時系列順にトピックへ直接ぶら下がります。親アイテム が空の返信はこの行には集計されませんが、同じように扱われます。インポーターはタイムスタンプや件名から元の親を推測することはしません。
❗ 重要
階層は、インポート時にクラシック リストに存在する参照からしか再構築できません。元の掲示板がまだ残っている場合 (たとえば SharePoint Server 上)、SharePoint Online への移動に使う移行ツールが 親アイテム 列を引き継ぐことを確認してください — KB10419. Discussions を使って SharePoint Server から SharePoint Online へディスカッション掲示板を移行する を参照してください。
ベスト アンサー、カウンター、最終アクティビティ
すべての返信を作成した後、インポーターはトピックをもう一度巡回し (フェーズ Updating counters and answers)、プランの各トピックについて次を書き込みます:
- Replies — トピックのフォルダー内にあるクラシックの返信の数。
- Last activity — 最新のクラシック返信の 登録日時、返信がない場合はディスカッションの 登録日時。
- Likes — ディスカッションのいいね数。
- Accepted post と Status = Answered — クラシックの ベスト返信 がインポート済みの返信を指している場合。その返信自体は Is accepted answer = はい になります。ベスト返信のないクラシックの 回答済み フラグは無視され、トピックは Open のままです。
これらの値はプランのすべてのトピックについて、以前の実行でインポートされたトピックも含めて書き込まれるため、2 回目の実行でカウンターが再計算されます。
作成者と日付
REST API で作成されたリスト アイテムの作成者は、常にそれを作成したユーザーです。Keep original authors and dates を選択すると、インポーターはアイテムごとに 2 回目の呼び出しを行い、登録者 (クラシックの作成者のログイン名)、更新者 (クラシックの編集者、いなければ作成者)、登録日時、更新日時 を書き込みます。SharePoint はこれらの値を、システム フィールドを設定できるアカウント、実際にはフル コントロールを持つサイト所有者からのみ受け付けます。フィールドが拒否された場合、レポートに トピック タイトル: フィールド — SharePoint のメッセージ という行が含まれ、呼び出し全体が拒否された場合は Author and dates could not be restored が含まれます。アイテム自体はインポートされ、作成者はあなた、日付はインポート時刻になります。
作成者のログイン名はテナント内のアカウントに解決できる必要があります。削除されたアカウントや、移行ツールでマッピングされなかったオンプレミスのアカウントは復元できず、同じ警告が出ます。

添付ファイル
Copy attachments を選択すると、インポーターはクラシックの各トピックと返信の添付ファイルを一覧にし、各ファイルをソース サイトからダウンロードして、元の名前で新しいアイテムに添付します。SharePoint がファイル名に許可しない文字 (\ / : * ? " < > | # % & { } ~) はアンダースコアに置き換えられ、120 文字を超える名前は短縮されます。コピーできないファイルは警告 ファイル名: SharePoint のメッセージ を出し、残りのファイルは引き続き処理されます。本文に埋め込まれたインライン画像は HTML の一部であり、本文と一緒に移動します。
Legacy id とインポートの再実行
インポートされたすべてのトピックと返信は、インデックス付きの Legacy id 列に {source list id}:{classic item id} を保存します (例: 3f2a9c1e-…:418)。ドライ ランの前とインポートの前に、ウィザードは選択したクラシック リストの ID で始まるサイト内のすべてのレガシー ID を読み取ります。その結果:
- 既にレガシー ID を持つトピックは スキップ され、Topics already imported (skipped) 行に報告されます。既存のコピーが新しい返信の親として使われます。
- 既にレガシー ID を持つ返信もスキップされます。
- インポート済みのトピックへの 新しい返信 はインポートされるため、まだ使用中の掲示板を段階的にインポートできます。
- 作成者、日付、添付ファイルは、今回の実行で作成されたアイテムについてのみ復元されます。
- ターゲット掲示板の既存のコンテンツが上書きまたは削除されることはありません。
📝 注
レガシー ID には クラシック リストの ID が含まれます。クラシック掲示板が新しいリストにコピーされると (たとえば 2 回目の移行パスやサイトのコピーによって)、新しいリストは別の ID を持つため、そこからのインポートは 2 組目のトピックを作成します。常に同じリストからインポートするか、コピーからインポートする前に 1 組目を削除してください。