Поделиться через


Применение уникальности значений столбцов

Дата последнего изменения: 9 марта 2015 г.

Применимо к: SharePoint Foundation 2010

В этой статье
Определение "уникальности"
Поддержка ограничений уникальности столбцов
Индексирование столбца с ограничениями уникальности столбцов
Программное задание ограничений уникальности
Перенос контента и ограничения уникальности столбцов
Операции копирования и перемещения для ограничений столбцов

Можно применить механизм обеспечения уникальности значений в списке или столбце библиотеки, что позволяет эффективно создавать первичные ключи. Раньше столбец идентификатора был единственным средством обеспечения уникальности в списке или библиотеке, а в Microsoft SharePoint Foundation 2010 представлен новый компонент, называемый ограничением уникальности столбцов, который позволяет применять уникальность.

Определение "уникальности"

Объявление уникальности не является тривиальной задачей, поэтому важно точно определить, что значит "уникальность". В SharePoint Foundation оцениваются значения столбцов и определяется уникальность на основе этой оценки значений, представленных в столбце. Для оценки в SharePoint Foundation используется порядок сортировки сайта (SPWeb), чтобы провести сравнение на уникальность. Обратите внимание, что сравнение не зависит от регистра, поэтому слова "hello world" и "Hello World" оцениваются как равнозначные.

Поддержка ограничений уникальности столбцов

Ключевым фактором в определении возможности поддержки ограничений уникальности столбцов является возможность проведения индексирования столбца. Затем, если уникальность применяется к столбцу "Lookup", элемент списка в целевом списке может иметь только один элемент списка, просматривающий его из дочернего списка (список, где размещаются столбцы "Lookup"). Другими словами, уникальность не применяется к проецируемым столбцам целевого списка, но вместо этого она применяется к столбцам идентификаторов. Типы столбцов, поддерживающие и не поддерживающие возможность индексирования, перечислены ниже.

Поддерживаемые типы столбцов

В следующем списке приведены типы столбцов, которые могут быть индексированы и для которых поддерживаются ограничения уникальности столбцов:

  • Одна строка текста.

  • Поле выбора (но не с несколькими вариантами выбора).

  • Число.

  • Денежные единицы.

  • Дата и время.

  • Поле просмотра "Lookup" (но не для нескольких значений).

  • Пользователь или группа (но не для нескольких значений).

  • Заголовок (но не в библиотеке документов).

Неподдерживаемые типы столбцов

В следующем списке приведены типы столбцов, которые не могут быть индексированы и для которых не поддерживаются ограничения уникальности столбцов:

  • Несколько строк текста.

  • Гиперссылки и рисунки.

  • Настраиваемые типы полей.

  • Вычисляемое поле.

  • Логическое значение (да или нет).

  • Автор изменений.

  • Время изменений.

  • Версия пользовательского интерфейса.

  • Время создания.

  • Извлечено.

  • Идентификатор типа контент.а

Индексирование столбца с ограничениями уникальности столбцов

Как сказано выше, столбец, к которому применяются ограничения уникальности, должен быть индексирован. При выборе пользователем параметра Применять уникальные значения и нажатии кнопки ОК будет отображено диалоговое окно предупреждения, если столбец уже индексирован. Затем пользователю представится возможность автоматического индексирования столбца. После настройки столбца для применения уникальности индексирование для него не может быть отключено. Однако можно отключить индексирование для этого столбца, если сначала отключить применение ограничений уникальности.

Программное задание ограничений уникальности

Для задания требования уникальности значений столбца используется свойство EnforceUniqeValues() объекта SPField. Это свойство получает и задает логическое значение для определения возможности повторяющихся значений. Значение по умолчанию — разрешить повторяющиеся значения. Поэтому необходимо явно задать свойство поля столбца в значение true.

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

SPSite site = new SPSite("https://localhost");
SPWeb web = site.OpenWeb();

SPList custList = web.Lists["Customers"];
SPField custPhone = custList.Fields["Phone Number"];

custPhone.Indexed = true;
custPhone.EnforceUniqueValues = true;

/// You must call the Update() method 
/// when you change the EnforceUniqueValues property
custPhone.Update();

Случаи возникновения ошибок — исключения

Существует два варианта ошибок, связанных с использованием свойства EnforceUniqueValues для применения уникальности:

  • Значение EnforceUniqueValues = true задается для неиндексированного поля.
    Вызывается объект исключения (SPException) с сообщением: "Для применения уникальных значений поле сначала должно быть индексировано".

  • Значение EnforceUniqueValues = true задается для списка, в котором существуют повторяющиеся значения.
    Вызывается объект исключения (SPException) с сообщением: "Данное поле содержит повторяющиеся значения. Удалите все повторяющиеся значения и повторите операции снова".

Перенос контента и ограничения уникальности столбцов

При переносе контента с использованием интерфейсов API в пространстве имен Microsoft.SharePoint.Deployment поддерживается как частичный (выборочный), так и полный перенос семейства сайтов с использованием функций экспорта и импорта. При использовании интерфейсов API развертывания в сценариях полного переноса необходимо убедиться в том, что если в экспортируемой исходной системе для поля списка задано свойство уникальности (то есть если свойству EnforceUniqueValues присвоено значение true), то этот параметр должен быть и в целевой системе импорта.

Однако при выполнении частичного (выборочного) переноса, при котором производится объединение файлов из исходного семейства сайтов с файлами целевого семейства сайтов, операция будет автоматически учитывать состояния уникальности, как это описано в данном разделе.

Столбцы с уникальностью в исходной системе, столбцы без уникальности в целевой системе

  1. Элементы импортируются в целевую систему.

  2. Затем в целевой системе свойству EnforceUniqueValues присваивается значение true.

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

Уникальные столбцы в исходной системе, уникальные в целевой системе

Выполняется экспортирование и импортирование элементов списка в обычном режиме.

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

Неуникальные столбцы в исходной системе, уникальные в целевой системе

  1. Сначала необходимо отключить уникальность в столбце целевого списка, задав свойству EnforceUniqueValues значение false в целевой системе.

  2. Импортирование элементов списка в целевую систему в обычном режиме.

ПримечаниеПримечание

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

Операции копирования и перемещения для ограничений столбцов

Особые требования предъявляются при копировании и перемещении элементов в библиотеку документов, в которой применяются ограничения уникальности столбцов, и для выполнения этой операции используются методы CopyTo(String) и MoveTo(String) класса SPFile. Необходимо иметь их в виду при реализации сценариев перемещения или копирования файла в такую библиотеку.

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

Copy To operation

Move To operation

В одной и той же библиотеке документов

Проверка нарушений уникальности на уровне документа. Не проверяются папки библиотеки.

Перемещение без проверки.

Между библиотеками документов

Значения преобразуются в null.

Перемещение блокируется, если в целевом списке применяются уникальные значения.

Из библиотеки документов

Не влияет.

Не влияет.

В библиотеку документов

Значения преобразуются в null.

Значения преобразуются в null.

См. также

Ссылка

EnforceUniqueValues

RetainObjectIdentity

SPFile.CopyTo(String)

SPFile.MoveTo(String)