Обновление внутреннего имени с использованием базы данных контента - PullRequest
0 голосов
/ 24 сентября 2010

В настоящее время у нас есть поле с неправильным идентификатором.идентификаторы и внутренние имена полей Sharepoint доступны только для модели домена.Мне было интересно, если есть способ обновить их, даже используя базу данных контента.

Один верный способ - удалить поле и воссоздать его.но у него уже есть данные и тысячи страниц.Мне было интересно, если есть способ просто обновить идентификаторы и внутреннее имя, не делая сброс и воссоздание полей.

Спасибо

Ответы [ 3 ]

2 голосов
/ 24 сентября 2010

Даже если это может работать, не делайте этого.
Это:

  • Опасно, так как вы можете пропустить зависимости
  • Не поддерживается

Воссоздание поля с использованием некоторого сценария для сохранения данных безопаснее.

0 голосов
/ 27 сентября 2010

Я бы не предлагал изменять базу данных контента, так как это:

  • не поддерживается (если вы это сделаете, Microsoft не поможет вам, когда у вас возникнут реальные проблемы, даже если у вас есть поддержка MS Premier)
  • очень сложно сделать. Вам нужно будет обновить несколько таблиц, и вы никогда не будете уверены, действительно ли вы обновили все необходимые вещи.

Что вы можете попытаться сделать - посмотрите, действительно ли свойство внутреннего имени «только для чтения» или определено как «друг», и вы не можете вызвать его из другой сборки кода. Если это последний случай, вы можете использовать .Net отражение, чтобы установить значение свойства. Подробнее см. Ссылка на документацию MSDN .

0 голосов
/ 27 сентября 2010

Мы столкнулись с той же проблемой.Возиться с БД не было возможным для нас ( и не должно быть для вас ), но вы можете обойти это.К сожалению, для обновления метаданных потребуется прикоснуться к каждой странице.

Сначала создайте столбец так, как он должен быть в списке.Затем вы можете копировать данные из старого столбца в новый столбец различными способами:

  1. Представление таблицы данных
  2. Программно через веб-службы (не требуется доступна сервер)
  3. Программно через консольное приложение (нужно будет запускать локально на сервере)

Честно говоря, написание небольшого консольного приложения будет самым быстрым.Например:

string siteUrl = "http://server/sitecollection/";
string webUrl = "subsite1/subsite2/";
string listName = "Your List Name";
using (SPSite site = new SPSite(siteUrl))
{
    using (SPWeb web = site.OpenWeb(webUrl))
    {
        SPList list = web.Lists[listName];
        foreach (SPListItem item in list.Items)
        {
            item["New_x0020_Column_x0020_Name"] = item["Old_x0020_Column_x0020_Name"];
        }
    }
}

Кроме того, он НАСТОЯТЕЛЬНО рекомендует сначала попробовать это в среде DEV.Просто выполните восстановление STSADM из производственной среды и протестируйте консольное приложение.Затем подтвердите свои данные и удалите старый столбец!

...