Vue d'ensemble
L'importateur de Discussions lit une liste classique Forum de discussion (Discussion Board, modèle 108 ou type de base Discussion Board, qui inclut aussi les listes de discussion des sites de communauté) et écrit son contenu dans les deux listes de site du produit, Discussions Topics et Discussions Posts. Cet article est la référence qui accompagne l'assistant décrit dans KB10417. Comment importer un forum de discussion SharePoint classique dans Discussions : quel champ classique aboutit dans quelle colonne Discussions, comment l'arborescence des réponses est reconstruite, ce qui est dérivé, ce qui reste en arrière et comment l'importateur reconnaît son propre travail lorsqu'il est relancé. Les colonnes elles-mêmes sont décrites dans KB10426. Référence des listes et des colonnes de Discussions.
Comment le forum classique stocke un fil
Un forum de discussion classique conserve chaque discussion sous la forme d'un dossier de la liste et chaque réponse sous la forme d'un élément dans ce dossier. Le dossier porte l'objet, le corps, l'indicateur Question, l'indicateur À la une, le nombre de mentions J'aime et l'identifiant de la meilleure réponse ; chaque réponse porte son propre corps, son nombre de mentions J'aime et une référence Élément parent (Parent item, ParentItemID) qui pointe soit vers la discussion elle-même (réponse de premier niveau), soit vers une autre réponse (réponse imbriquée). L'importateur lit la liste par pages de 2 000 éléments, triées par identifiant, et distingue les dossiers des messages par le type d'élément.
Discussions utilise un modèle différent — un élément par sujet, un élément par réponse, avec des recherches vers le sujet et vers le message parent —, si bien que l'import est une traduction entre les deux structures, et non une copie de la liste.
Sujets
Chaque discussion classique devient un élément de Discussions Topics :
| Discussion classique | Colonne de Discussions Topics | Valeur |
|---|---|---|
| Objet | Title | Copié ; tronqué à 255 caractères |
| Corps | Body (VtxBody) | Copié au travers de l'assainisseur HTML du produit : les balises et attributs autorisés restent, les scripts, styles et liens non sûrs sont supprimés |
| — | Board (VtxBoard) | Le forum sélectionné dans le composant WebPart |
| Question | Type (VtxTopicType) | Question si l'indicateur est défini, sinon Discussion |
| — | Status (VtxStatus) | Open ; passe à Answered lorsqu'une meilleure réponse a été trouvée (voir ci-dessous) |
| À la une | Featured (VtxIsFeatured) | Copié |
| Nombre de mentions J'aime | Likes (VtxLikeCount) | Copié |
| Réponses dans le dossier | Replies (VtxReplyCount) | Compté par l'importateur |
| — | Views (VtxViewCount) | 0 |
| Date de création de la réponse la plus récente, ou de la discussion | Last activity (VtxLastActivity) | Calculé par l'importateur |
| Meilleure réponse | Accepted post (VtxAcceptedPostId) | L'identifiant de la réponse importée |
| — | Approval status (VtxApprovalStatus) | Approved |
| — | Reports (VtxReportCount) | 0 |
| Identifiant de la liste et de l'élément | Legacy id (VtxLegacyId) | {source list id}:{classic item id} |
| Créé par, Modifié par, Créé, Modifié | Les mêmes colonnes système | Restaurés avec Keep original authors and dates |
| Pièces jointes | Pièces jointes de l'élément | Copiées avec Copy attachments |
Réponses
Chaque réponse classique devient un élément de Discussions Posts :
| Réponse classique | Colonne de Discussions Posts | Valeur |
|---|---|---|
| Objet | Title | Copié ; Re: si vide ; tronqué à 255 caractères |
| Corps | Body (VtxBody) | Copié au travers de l'assainisseur |
| Dossier de la réponse | Topic (VtxTopic) | Le sujet importé de ce dossier |
| Élément parent | Parent post (VtxParentPost) | La réponse parente importée ; vide pour une réponse de premier niveau |
| — | Path (VtxPath) | / pour une réponse de premier niveau ; le chemin du parent suivi de l'identifiant du parent et de / pour une réponse imbriquée, par exemple /341/356/ |
| — | Depth (VtxDepth) | 0 pour une réponse de premier niveau, sinon profondeur du parent + 1 |
| Meilleure réponse de la discussion | Is accepted answer (VtxIsAccepted) | Oui pour la réponse vers laquelle pointe la discussion |
| Nombre de mentions J'aime | Likes (VtxLikeCount) | Copié |
| — | Approval status, Reports | Approved, 0 |
| Identifiant de la liste et de l'élément | Legacy id (VtxLegacyId) | {source list id}:{classic item id} |
| Créé par, Modifié par, Créé, Modifié | Les mêmes colonnes système | Restaurés avec Keep original authors and dates |
| Pièces jointes | Pièces jointes de l'élément | Copiées avec Copy attachments |

Ce qui n'est pas copié
- Les évaluations (notes en étoiles) et la liste des personnes qui ont aimé un élément. Le nombre de mentions J'aime est copié ; la colonne Liked by reste vide, si bien que chaque utilisateur peut aimer une nouvelle fois un élément importé.
- Les catégories : les forums classiques n'en ont pas, et l'importateur laisse Category vide. Attribuez des catégories après l'import si le forum en utilise.
- Les compteurs de vues : ils partent de 0.
- Last reply by : reste vide ; le composant WebPart n'affiche l'auteur de la dernière réponse que pour les réponses publiées après l'import.
- Les alertes, les affichages classiques et les formulaires de liste : ils appartiennent à la liste classique et n'ont pas d'équivalent dans Discussions. Les abonnements sont recréés par les utilisateurs — voir KB10404. Suivre des forums et des sujets : abonnements et fréquence des résumés.
- Les sujets épinglés : les forums classiques n'ont pas cet indicateur ; épinglez les sujets voulus après l'import.
Comment l'arborescence des réponses est reconstruite
- Les réponses sont triées par leur date classique Créé, de la plus ancienne à la plus récente, afin qu'un parent soit toujours créé avant ses enfants.
- Pour chaque réponse, l'importateur retrouve son sujet grâce au dossier dans lequel elle se trouve. Une réponse dont le dossier ne correspond à aucun sujet importé est ignorée avec l'avertissement Reply skipped: its topic was not imported.
- L'Élément parent classique est recherché parmi les réponses importées jusque-là dans cette exécution ou auparavant. S'il pointe vers une réponse, le nouveau message reçoit cette réponse comme Parent post, hérite de son Path et obtient Depth + 1. S'il pointe vers la discussion elle-même, est vide ou pointe vers un élément inconnu de l'importateur, le message devient une réponse de premier niveau du sujet, avec le chemin
/et la profondeur 0. Lorsque la réponse parente existe dans la liste classique mais n'a pas pu être créée lors de cette exécution, le message est lui aussi placé au premier niveau, et le rapport reçoit l'avertissement Parent reply failed to import; the reply was placed at the top level: 419 (419 est l'identifiant classique de la réponse déplacée). Les réponses imbriquées sous la réponse déplacée lui sont rattachées comme d'habitude.
L'imbrication est illimitée : une réponse classique de cinquième niveau arrive au cinquième niveau.
Forums aplatis et réponses orphelines
Certains outils de migration copient les éléments d'un forum classique mais pas les références Élément parent qui les relient ; le forum ressemble alors à une liste de discussions dont toutes les réponses sont sur un seul niveau, ou bien les références pointent vers des identifiants d'éléments qui n'existent plus. La simulation compte ces dernières dans Replies without a known parent (imported as top-level) et affiche l'avertissement Some replies lost their parent (a flattened board). Ces réponses sont rattachées directement à leur sujet, par ordre chronologique. Les réponses dont l'Élément parent est vide ne sont pas comptées dans cette ligne mais sont traitées de la même manière. L'importateur n'essaie pas de deviner le parent d'origine d'après les horodatages ou les objets.
❗ Important
La hiérarchie ne peut être reconstruite qu'à partir des références présentes dans la liste classique au moment de l'import. Si vous disposez encore du forum d'origine — par exemple dans SharePoint Server —, vérifiez que l'outil de migration que vous utilisez pour le déplacer vers SharePoint Online transporte la colonne Élément parent ; voir KB10419. Migrer des forums de discussion de SharePoint Server vers SharePoint Online avec Discussions.
Meilleures réponses, compteurs et dernière activité
Une fois toutes les réponses créées, l'importateur reparcourt les sujets (la phase Updating counters and answers) et écrit, pour chaque sujet du plan :
- Replies — le nombre de réponses classiques dans le dossier du sujet ;
- Last activity — la date Créé de la réponse classique la plus récente, ou la date Créé de la discussion lorsqu'elle n'a pas de réponses ;
- Likes — le nombre de mentions J'aime de la discussion ;
- Accepted post et Status = Answered — lorsque la Meilleure réponse classique pointe vers une réponse qui a été importée ; la réponse elle-même reçoit Is accepted answer = Oui. Un indicateur classique Répondu sans meilleure réponse est ignoré, et le sujet reste Open.
Ces valeurs sont écrites pour chaque sujet du plan, y compris les sujets importés lors d'une exécution précédente, de sorte qu'une seconde exécution recalcule les compteurs.
Auteurs et dates
Les éléments de liste créés via l'API REST ont toujours pour auteur l'utilisateur qui les crée. Lorsque Keep original authors and dates est coché, l'importateur effectue un second appel par élément qui écrit Créé par (l'identifiant de connexion de l'auteur classique), Modifié par (l'éditeur classique, ou l'auteur s'il n'y en a pas), Créé et Modifié. SharePoint n'accepte ces valeurs que des comptes autorisés à définir les champs système — en pratique les propriétaires du site disposant du Contrôle total. Lorsqu'un champ est refusé, le rapport contient la ligne Titre du sujet: Champ — message de SharePoint ; lorsque tout l'appel est refusé, Author and dates could not be restored. L'élément est tout de même importé, avec vous pour auteur et l'heure de l'import pour date.
L'identifiant de connexion de l'auteur doit correspondre à un compte du locataire. Les comptes supprimés, ou les comptes locaux qu'un outil de migration n'a pas mis en correspondance, ne peuvent pas être restaurés et produisent le même avertissement.

Pièces jointes
Lorsque Copy attachments est coché, l'importateur liste les fichiers joints de chaque sujet et réponse classiques, télécharge chaque fichier depuis le site source et le joint au nouvel élément sous son nom d'origine. Les caractères que SharePoint n'autorise pas dans les noms de fichiers (\ / : * ? " < > | # % & { } ~) sont remplacés par un trait de soulignement, et les noms de plus de 120 caractères sont raccourcis. Un fichier qui ne peut pas être copié produit l'avertissement nom du fichier: message de SharePoint et les autres fichiers sont tout de même traités. Les images incorporées dans le corps font partie du HTML et voyagent avec lui.
Le Legacy id et la relance de l'import
Chaque sujet et chaque réponse importés stockent {source list id}:{classic item id} dans la colonne indexée Legacy id — par exemple 3f2a9c1e-…:418. Avant la simulation et avant l'import, l'assistant lit tous les identifiants hérités du site qui commencent par l'identifiant de la liste classique sélectionnée. Les conséquences :
- un sujet qui possède déjà un identifiant hérité est ignoré et signalé dans la ligne Topics already imported (skipped) ; sa copie existante sert de parent aux nouvelles réponses ;
- une réponse qui possède déjà un identifiant hérité est ignorée aussi ;
- les nouvelles réponses sur un sujet déjà importé sont importées, de sorte qu'un forum encore en usage peut être importé de façon incrémentielle ;
- les auteurs, dates et pièces jointes ne sont restaurés que pour les éléments créés dans l'exécution en cours ;
- le contenu existant du forum cible n'est jamais écrasé ni supprimé.
📝 Remarque
L'identifiant hérité inclut l'identifiant de la liste classique. Si le forum classique est copié dans une nouvelle liste — par exemple par une seconde passe de migration ou une copie de site —, la nouvelle liste a un identifiant différent, et un import depuis celle-ci crée un second jeu de sujets. Importez toujours depuis la même liste, ou supprimez le premier jeu avant d'importer depuis la copie.