2014-11-19 8 views
0

Мы строим сайт Sitecore, который будет извлекать некоторые данные о продукте из внешней базы данных. В ночное время мы будем запрашивать внешнюю базу данных и добавлять, обновлять или архивировать/удалять/удалять элементы контента продукта в Sitecore по мере необходимости. В нашем шаблоне данных есть несколько полей, которые будут заполняться непосредственно из внешней базы данных (и будут доступны только для чтения для авторов контента) и других полей, которые они будут заполнять. В наши пользовательские поля входит SKU элемента из внешней базы данных. Возможно, что со временем продукт может исчезнуть из внешней базы данных. В этом случае мы хотели бы, чтобы Sitecore каким-то образом удалил этот элемент из нашего списка продуктов, но не полностью удалил его. Причина этого в том, что продукты, которые были удалены, могут появиться в будущем, и мы не захотим потерять все данные, которые были добавлены в другие настраиваемые поля в элементе. Я могу придумать несколько различных подходов для этого:Какие стратегии я могу использовать в Sitecore для архивирования элементов, а затем восстановить позже через код?

  1. Использование функций архивирования/повторного использования Sitecore. Когда мы обнаруживаем, что в Sitecore есть элемент продукта, который больше не отображается во внешней базе данных, мы можем его заархивировать. Это хорошо работает. Однако я не могу понять, как восстановить этот элемент позже, если он появится во внешней базе данных. У меня нет доступа к каким-либо настраиваемым полям при архивировании элемента (из того, что я читал в Интернете). Поэтому, когда я сталкиваюсь с SKU во внешней базе данных, которая отсутствует в Sitecore, я не могу понять, есть ли заархивированный элемент с этим SKU.

  2. Используйте настраиваемое поле статуса для каждого элемента контента продукта. Я могу установить для каждого элемента контента продукта «активный» или «неактивный». Это упростит повторную активацию элементов, которые появятся во внешней базе данных. Однако я беспокоюсь о таких вещах, как поиск и публикация. Мне кажется бесполезным иметь некоторые элементы контента, которые неактивны в папке всех продуктов в основной базе данных. Это может запутать авторов контента, и я волнуюсь, что они найдут свой путь в веб-базу данных и т. Д. Кажется, мне пришлось бы делать много настраиваемого кодирования, чтобы убедиться, что эти продукты не отображаются на каких-либо страницах и т. д.

  3. Когда продукт отправляется из внешней базы данных, я мог перемещать эти элементы контента в другое место в Sitecore. Затем, когда они снова появятся, я смогу вернуть их обратно. Это также кажется грязным.

Мне просто интересно, есть ли лучшее решение, которое мне не хватает. Заранее благодарю за любую помощь.

ответ

1

Я бы с вариантом 2 «Настройка поля состояния каждого продукта„Активный“или„Inactive“, так как его более ясным и сохранить данные в одном месте.

Дополнительная вещь, чтобы сделать (как это было предложено Vasiliy) заключается в том, чтобы установить флажок «Опубликованный» на продукте на «False», таким образом продукт исчезнет из веб-базы данных, следовательно, в ваших методах поиска не будет добавлен дополнительный фильтр.

Вы можете осуществлять предупреждение редактора пользовательских контента информировать редактор контента, что текущий продукт «неактивный»:

Creating Custom Content Editor warnings

Надеется, что это помогает

+0

Спасибо за вход, это помогает. Мне нравится этот подход наряду с предупреждением пользовательского редактора. Я думаю, что я попытаюсь реализовать это и посмотреть, как это работает. –

1

Просто подумайте, что если вы просто не опубликовали элементы, которые были удалены из внешней базы данных, и установите их в авторском db, не опубликованные, пока они снова не появятся снова. В этом случае у вас также может быть задача, выполняющая архивирование элементов, которые были неопубликованны и не переизданы в течение определенного периода времени.

Лучшее решение действительно зависит от количества и частоты появления/исчезновения элементов, а также издержки, связанные с сохранением этих элементов в базе данных разработки и их удалением.