Sharepoint: целостность полей поиска после импорта списка - PullRequest
1 голос
/ 21 апреля 2010

У меня возник вопрос о поведении полей поиска при импорте данных.Интересно, как ведут себя поля поиска, когда список, на который они указывают, заменяется / импортируется.Чтобы объяснить проблему, я приведу краткий пример ниже:

В качестве примера предположим, что у нас есть два списка рассылки:

Product Types
-------------
+ Type Name
+ Code Nr
+ etc


Products
--------
+ Product Name
+ Product Type (Lookup field to list "Product Types")
+ etc

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

Теперь, после цикла разработки, разработчик хочет развернуть свои новые веб-части и свои новые данные (список типов продуктов).Разработчик выполняет следующую процедуру:

  1. На компьютере разработчика: Экспорт списка «Тип продукта» с помощью stsadm
  2. На рабочем компьютере: Удалить все элементы в списке «Тип продукта»
  3. На производственном компьютере: импортируйте список «тип продукта» с помощью stsadm

Это означает, что мы в основном заменяем список «тип продукта» на производственном сервере, сохраняя «продукт»список как есть.

Теперь вопрос:

  • Это безопасно?Не прекратятся ли ссылки на поиск при определенных обстоятельствах?
  • Есть ли какие-либо недостатки этой процедуры импорта / экспорта?
  • Что произойдет, если кто-то получит доступ к "продукту" во время импорта?Будет ли (теперь недействительной) ссылка очищать свое собственное содержимое (станет нулевым значением).
  • Что произойдет, если схема списка «Тип продукта» изменится (новый столбец)?Это вызовет какие-либо проблемы?

Спасибо за все отзывы и предложения!

Обновление 1 У импортированных элементов типа продукта есть те же идентификаторы, что и ранее удаленные.из них.

Обновление 2 Запущена награда, чтобы получить больше отзывов / мнений.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2010

У нас был точно такой же сценарий раньше.Это немного сложно, в зависимости от того, как вы к нему подойдете.

1) Удаление и воссоздание списка типов товаров через пользовательский интерфейс

Если вы удалите и заново создадите список поиска (тип продукта в вашем случае) через пользовательский интерфейс, то вы потеряете соединения, потому что идентификатор спискаGUID будет меняться при отдыхе.Так что не идите по этому пути.

2) Удаление и воссоздание типа продукта с помощью функции

Если у вас было , созданный список типов продуктов с помощью файла feature.xml, используяэлемент <ListInstance>, затем, если вы удаляете этот список и затем воссоздаете его, используя ту же функцию (в основном атрибут Id объекта ListInstance остается прежним, количество элементов списка, т. е. количество элементов <Row>, может измениться), связьбудет поддерживаться.Так что, если вы добавляете еще 5 типов продуктов, то, если бы вы создали список, используя функцию, вы могли бы просто удалить список и предоставить новый, используя ту же функцию, с дополнительной информацией для новых элементов, и все будет работать!

Как примечание, это лучший подход, потому что если вам нужно выполнить обновление на многих серверах, то вместо того, чтобы выполнять импорт списка экспорта через stsadm, деактивация и активация функций - это гораздо более рекомендуемое решение.,Вот как мы это сделали.

3) Удаление всех элементов списка из Типа продукта и добавление новых (список никогда не удаляется)

Если вы связываете поле поиска (в Списке продуктов)в поле идентификатора списка поиска (Тип продукта) необходимо запомнить, что идентификатор автоматически увеличивается, поэтому если вы удалите все элементы, а затем добавите новые, то их идентификаторы будут другими .Скажем, у вас было 5 элементов с идентификаторами (поле идентификатора не отображается в пользовательском интерфейсе при редактировании в виде таблицы) 1-5 в списке.Если вы удалите их и добавите новые элементы, их идентификаторы будут начинаться с 6, а не с 1.Таким образом, если в вашем поле поиска была ссылка на элемент с идентификатором 1, этот метод работать не будет, поскольку в списке Тип продукта больше нет элемента с идентификатором 1.Поэтому вы, возможно, захотите действительно попробовать это, прежде чем приступить к работе с этим методом.

4) Редактирование списка на месте

Если список не очень большой, и вам нужно только сделатьэто изменение одного или двух экземпляров, не могли бы вы просто отредактировать список непосредственно в виде таблицы на сервере Prod?При редактировании в виде таблицы не удаляйте элемент, а просто перезаписывайте значения его столбцов.И вы можете добавить больше элементов, если хотите.Это позволит убедиться, что ваши идентификаторы действительны.

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

Теперь по поводу ваших сомнений / вопросов: я не слишком уверен насчет импорта экспорта через stsadm для списка (никогда не делал это сам), но stsadm может быть сложнымтак как некоторые операции будут работать только на определенных областях.Поэтому вам лучше опробовать свой точный сценарий в среде разработчиков.

То, что происходит во время импорта, снова сложно, в зависимости от точного времени.Я уверен, что у SP есть свои собственные механизмы параллелизма, но вы не можете получить однозначный ответ, поскольку он может отличаться в зависимости от стадии импорта.Если возможно, рекомендуется выполнить импорт во время запланированного простоя.

Что касается изменения схемы списка, изменение схемы списка не повлияет на существующие экземпляры списка (по большей части). Если вы делаете это через пользовательский интерфейс, я считаю, что SP вносит изменения в базу данных контента напрямую. Я не уверен, как вы собираетесь это сделать, но если бы вы добавили столбец в существующий список, используя функцию, способ сделать это во время активации функции, добавив новый тип контента в список и добавив новый столбец к этому типу контента. Таким образом, вы добавляете столбец, но не затрагивает существующие элементы списка.

Удачи ...

1 голос
/ 21 апреля 2010

В конкретном поиске есть два компонента: поле и значение поля. Значение поля содержит только идентификатор элемента (ов), к которому оно относится, и поле отображения. Эта информация не имеет смысла без поля, которое указывает, какой список следует просматривать и какое поле использовать в качестве поля отображения.

  • Основная причина того, что Lookup ломается, возникает в области действия поля: либо список, на который он ссылается, больше не существует, либо список не содержит обязательного поля. Обычно это происходит, если вы удалили и заново создали список, но вы этого не делаете. Если вы разорвете ссылку на список поиска, единственное, что вы можете сделать, это заново создать поиск, потому что вы не можете настроить ссылку на список для поля поиска после его создания.
  • Недостатком вашей процедуры импорта / экспорта является то, что вы теряете действительность всех существующих в настоящее время значений поиска. Поиск поддерживает свою целостность на основе идентификатора элемента, на который он ссылается. Поэтому, когда поле дисплея изменяется, оно все равно ссылается на тот же элемент. Если вы удаляете элемент, то поиск больше не ссылается на него, даже если вы создаете новый элемент, который имеет то же значение для поля отображения. Таким образом, вам придется переназначить все продукты на новые типы продуктов.
    • Следует отметить, что если вы отмените удаление этого элемента, он вернется к поиску! Ссылка на этот идентификатор сохраняется до обновления фактического значения поиска (например, путем редактирования Прибора).
  • Все ваши недействительные ссылки теперь будут нулевыми для целей взаимодействия. Вы не увидите ничего в отображаемых формах, и у вас не будет вариантов при попытке обновить продукт. Когда вы обновляете продукт, вы обновляете его до того значения, которое вы только что установили, что, поскольку вы не можете установить несуществующие идентификаторы, означает, что больше нет ссылок на эти идентификаторы.
  • Любые изменения в схеме списка типов продуктов, которые не влияют на поле отображения, указанное для поиска, не влияют на целостность поиска. Если вы измените поле отображения каким-либо образом, и, конечно, если вы удалите его, оно будет повреждено так же, как и в случае ссылки на список. Однако вы можете установить поле отображения как в пользовательском интерфейсе, так и в объектной модели, так что это легко исправить.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...