Обзор

Импорт в Discussions читает классический список Доска обсуждений (Discussion Board, шаблон 108 или базовый тип Discussion Board — в него входят и списки обсуждений сайтов сообщества) и записывает его содержимое в два списка сайта продукта — Discussions Topics и Discussions Posts. Эта статья — справочник к мастеру, описанному в статье KB10417. Как импортировать классическую доску обсуждений SharePoint в Discussions: какое классическое поле попадает в какой столбец Discussions, как реконструируется дерево ответов, что вычисляется, что остаётся позади и как импорт распознаёт свою работу при повторном запуске. Сами столбцы описаны в статье KB10426. Справочник списков и столбцов Discussions.

Как классическая доска хранит цепочку

Классическая доска обсуждений хранит каждое обсуждение как папку списка, а каждый ответ — как элемент внутри этой папки. Папка содержит тему, текст, флаг Вопрос, флаг Рекомендуемое, число лайков и идентификатор лучшего ответа; каждый ответ содержит собственный текст, число лайков и ссылку Родительский элемент (ParentItemID), указывающую либо на само обсуждение (ответ верхнего уровня), либо на другой ответ (вложенный). Импорт читает список страницами по 2 000 элементов, упорядоченными по идентификатору, и отличает папки от сообщений по типу элемента.

Discussions использует другую модель — один элемент на тему, один элемент на ответ, с подстановками на тему и на родительское сообщение, — поэтому импорт является переводом между двумя структурами, а не копией списка.

Темы

Каждое классическое обсуждение становится одним элементом списка Discussions Topics:

Классическое обсуждениеСтолбец Discussions TopicsЗначение
ТемаНазваниеКопируется; обрезается до 255 символов
ТекстСодержимое (VtxBody)Копируется через HTML-санитайзер продукта: разрешённые теги и атрибуты остаются, скрипты, стили и небезопасные ссылки отбрасываются
—Доска (VtxBoard)Доска, выбранная в веб-части
ВопросТип (VtxTopicType)Question (вопрос), если флаг установлен, иначе Discussion (обсуждение)
—Статус (VtxStatus)Open (открыта); меняется на Answered (есть ответ), если найден лучший ответ (см. ниже)
РекомендуемоеРекомендуемая (VtxIsFeatured)Копируется
Число лайковЛайки (VtxLikeCount)Копируется
Ответы в папкеОтветы (VtxReplyCount)Подсчитывается импортом
—Просмотры (VtxViewCount)0
Дата создания последнего ответа или обсужденияПоследняя активность (VtxLastActivity)Вычисляется импортом
Лучший ответПринятый ответ (VtxAcceptedPostId)Идентификатор импортированного ответа
—Статус утверждения (VtxApprovalStatus)Approved (утверждено)
—Жалобы (VtxReportCount)0
Идентификатор списка и элементаПрежний идентификатор (VtxLegacyId){source list id}:{classic item id}
Кем создано, Кем изменено, Создан, ИзмененТе же системные столбцыВосстанавливаются с параметром Сохранить исходных авторов и даты
ВложенияВложения элементаКопируются с параметром Скопировать вложения

Ответы

Каждый классический ответ становится одним элементом списка Discussions Posts:

Классический ответСтолбец Discussions PostsЗначение
ТемаНазваниеКопируется; Re:, если пусто; обрезается до 255 символов
ТекстСодержимое (VtxBody)Копируется через санитайзер
Папка ответаТема (VtxTopic)Импортированная тема этой папки
Родительский элементРодительское сообщение (VtxParentPost)Импортированный родительский ответ; пусто для ответа верхнего уровня
—Путь (VtxPath)/ для ответа верхнего уровня; путь родителя плюс идентификатор родителя и / для вложенного, например /341/356/
—Уровень (VtxDepth)0 для ответа верхнего уровня, иначе уровень родителя + 1
Лучший ответ обсужденияПринятый ответ (VtxIsAccepted)Да для ответа, на который указывает обсуждение
Число лайковЛайки (VtxLikeCount)Копируется
—Статус утверждения, ЖалобыApproved, 0
Идентификатор списка и элементаПрежний идентификатор (VtxLegacyId){source list id}:{classic item id}
Кем создано, Кем изменено, Создан, ИзмененТе же системные столбцыВосстанавливаются с параметром Сохранить исходных авторов и даты
ВложенияВложения элементаКопируются с параметром Скопировать вложения

Классическая цепочка и её импортированная копия

Классическая цепочка и её импортированная копия

Что не копируется

  • Оценки (звёздные рейтинги) и список людей, которым понравился элемент. Число лайков копируется; столбец Кому понравилось остаётся пустым, поэтому каждый пользователь может ещё раз поставить лайк импортированному элементу.
  • Категории: у классических досок их нет, и импорт оставляет столбец Категория пустым. Назначьте категории после импорта, если доска их использует.
  • Число просмотров: начинается с 0.
  • Последний ответ: остаётся пустым; веб-часть показывает автора последнего ответа только для ответов, написанных после импорта.
  • Оповещения, классические представления и формы списка: они принадлежат классическому списку и не имеют эквивалента в Discussions. Подписки пользователи создают заново — см. KB10404. Подписка на доски и темы: подписки и частота сводок.
  • Закреплённые темы: у классических досок такого флага нет; закрепите нужные темы после импорта.

Как восстанавливается дерево ответов

  1. Ответы сортируются по классической дате Создан, от самых старых, чтобы родитель всегда создавался раньше потомков.
  2. Для каждого ответа импорт находит его тему по папке, в которой лежит ответ. Ответ, папка которого не соответствует ни одной импортированной теме, пропускается с предупреждением Ответ пропущен: его тема не импортирована.
  3. Классический Родительский элемент ищется среди ответов, импортированных в этом запуске или ранее. Если он указывает на ответ, новое сообщение получает этот ответ как Родительское сообщение, наследует его Путь и получает Уровень + 1. Если он указывает на само обсуждение, пуст или указывает на элемент, неизвестный импорту, сообщение становится ответом верхнего уровня темы с путём / и уровнем 0. Если родительский ответ есть в классическом списке, но создать его в этом запуске не удалось, сообщение тоже помещается на верхний уровень, а в отчёт добавляется предупреждение Родительский ответ не импортирован; ответ помещён на верхний уровень: 419 (419 — классический идентификатор перенесённого ответа). Ответы, вложенные в такой ответ, прикрепляются к нему как обычно.

Вложенность не ограничена: классический ответ пятого уровня попадает на пятый уровень.

«Сплющенные» доски и ответы-сироты

Некоторые инструменты миграции копируют элементы классической доски, но не ссылки Родительский элемент между ними; доска тогда выглядит как список обсуждений, все ответы которых лежат на одном уровне, или ссылки указывают на идентификаторы элементов, которых больше нет. Пробный прогон считает последние в строке Ответы без известного родителя (станут верхнего уровня) и показывает предупреждение Часть ответов потеряла родителя (доска была «сплющена» миграцией). Такие ответы прикрепляются непосредственно к своей теме в хронологическом порядке. Ответы с пустым полем Родительский элемент в этой строке не учитываются, но обрабатываются так же. Импорт не пытается угадать исходного родителя по времени или темам.

❗ Важно
Иерархию можно восстановить только по ссылкам, которые существуют в классическом списке на момент импорта. Если у вас ещё есть исходная доска — например, в SharePoint Server, — убедитесь, что инструмент миграции, которым вы переносите её в SharePoint Online, переносит столбец Родительский элемент; см. KB10419. Перенос досок обсуждений из SharePoint Server в SharePoint Online с помощью Discussions.

Лучшие ответы, счётчики и последняя активность

После создания всех ответов импорт ещё раз проходит по темам (этап Обновление счётчиков и ответов) и записывает для каждой темы плана:

  • Ответы — число классических ответов в папке темы;
  • Последняя активность — дата Создан самого нового классического ответа или дата Создан обсуждения, если ответов нет;
  • Лайки — число лайков обсуждения;
  • Принятый ответ и Статус = Answered — если классический Лучший ответ указывает на импортированный ответ; сам ответ получает Принятый ответ = Да. Классический флаг Есть ответ без лучшего ответа игнорируется, и тема остаётся Open.

Эти значения записываются для каждой темы плана, включая темы, импортированные в предыдущем запуске, поэтому повторный запуск пересчитывает счётчики.

Авторы и даты

Элементы списка, созданные через REST API, всегда имеют автором пользователя, который их создаёт. Если выбран параметр Сохранить исходных авторов и даты, импорт делает второй вызов на элемент, который записывает Кем создано (логин классического автора), Кем изменено (классический редактор или автор, если редактора нет), Создан и Изменен. SharePoint принимает эти значения только от учётных записей, которым разрешено задавать системные поля, — на практике от владельцев сайта с полным доступом. Если поле отклонено, отчёт содержит строку Название темы: Поле — сообщение SharePoint; если отклонён весь вызов — Не удалось восстановить автора и даты. Элемент всё равно импортируется с вами в качестве автора и временем импорта в качестве даты.

Логин автора должен разрешаться в учётную запись клиента. Удалённые учётные записи или локальные учётные записи, которые инструмент миграции не сопоставил, восстановить нельзя, и они дают то же предупреждение.

Импортированные темы с прежним идентификатором в списке Discussions Topics

Импортированные темы с прежним идентификатором в списке Discussions Topics

Вложения

Если выбран параметр Скопировать вложения, импорт получает список файлов вложений каждой классической темы и ответа, скачивает каждый файл с исходного сайта и прикрепляет его к новому элементу под исходным именем. Символы, которые SharePoint не допускает в именах файлов (\ / : * ? " < > | # % & { } ~), заменяются подчёркиванием, а имена длиннее 120 символов сокращаются. Файл, который не удалось скопировать, даёт предупреждение имя файла: сообщение SharePoint, а остальные файлы всё равно обрабатываются. Встроенные изображения в тексте являются частью HTML и переносятся вместе с ним.

Прежний идентификатор и повторный запуск импорта

Каждая импортированная тема и каждый ответ хранят {source list id}:{classic item id} в индексированном столбце Прежний идентификатор — например 3f2a9c1e-…:418. Перед пробным прогоном и перед импортом мастер читает все прежние идентификаторы сайта, которые начинаются с идентификатора выбранного классического списка. Следствия:

  • тема, у которой уже есть прежний идентификатор, пропускается и учитывается в строке Темы уже импортированы (будут пропущены); её существующая копия используется как родитель для новых ответов;
  • ответ, у которого уже есть прежний идентификатор, тоже пропускается;
  • новые ответы на уже импортированную тему импортируются, поэтому доску, которой ещё пользуются, можно импортировать инкрементально;
  • авторы, даты и вложения восстанавливаются только для элементов, созданных в текущем запуске;
  • существующее содержимое целевой доски никогда не перезаписывается и не удаляется.

📝 Заметка
Прежний идентификатор включает идентификатор классического списка. Если классическую доску скопировать в новый список — например, повторным проходом миграции или копированием сайта, — у нового списка будет другой идентификатор, и импорт из него создаст второй набор тем. Всегда импортируйте из одного и того же списка или удалите первый набор перед импортом из копии.

Рекомендуемые статьи

Создание темы: обсуждения и вопросы

Как создать новую тему на доске Vitextra Discussions в SharePoint Online или Microsoft Teams: форма «Новая тема» с названием, типом, категорией, форматированным текстом и вложениями; чем обсуждение отличается от вопроса; что происходит после нажатия «Опубликовать», включая автоматическую подписку и доски, где требуется утверждение модератором, а также как изменить или удалить свою тему после публикации.

11 6 мин
Удаление продукта Vitextra из SharePoint Server

Как удалить решение уровня фермы Vitextra из локальной среды SharePoint с помощью установщика продукта — требования, разрешения и шаг Uninstall.

100 1 мин
Team Absence Calendar: представления «Таймлайн» и «Месяц»

Обзор веб-части Vitextra Team Absence Calendar для SharePoint Online и Microsoft Teams: блок «Сегодня отсутствуют», панель инструментов, представления «Таймлайн» и «Месяц», навигация по периодам и то, что входит в календарь.

38 4 мин

Поделиться