Лучшие практики для типов контента в SharePoint - PullRequest
7 голосов
/ 04 января 2011

Недавно мы столкнулись с серьезной проблемой в рабочей ферме с типами содержимого.Сначала я хотел бы объяснить причину этой проблемы.

У нас есть хорошая рабочая функция для установки типов контента в рабочей и тестовой фермах.Мы разработали и развернули (используя wsps) эту функцию SharePoint в Visual studio.Мы используем публикации страниц , используя макеты страниц и типы контента, чтобы помочь редакторам контента быстро публиковать веб-страницы.К сожалению, некоторые типы контента и столбцы сайта были вручную обновлены / добавлены некоторыми людьми в производственной среде, поэтому всякий раз, когда я (разработчик) вносил некоторые изменения в существующие типы контента (используя Visual Studio и активацию / деактивацию функций), SharePoint удаляет один илидва столбца (во время активации / деактивации функции) из Типов контента;или столбцы, которые не были добавлены наилучшим образом.Я думаю, что лучше всего обновлять типы контента с помощью Visual Studio.

Теперь я хочу убедиться, что столбцы сайта не удаляются из типов контента при активации / деактивации функции.

Примечание: Наша функция активации / деактивации Content Type не содержит никаких зависимостей активации в файле feature.xml

Ответы [ 3 ]

5 голосов
/ 04 января 2011

Рекомендуемый подход

Исходя из всех этих факторов, я бы предложил:

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

• Исходная функция должна содержать CAML для столбцов сайта и типов контента.Это гарантирует, что идентификаторы были назначены перед типом и остаются постоянными.

• Если вы хотите обновить столбец сайта, изменив в нем почти все, кроме его типа поля, сделайте это с помощью Feature Receiver.Сделав это, вы можете вызвать метод Update и передать логическое значение, указывающее, хотите ли вы обновить все существующие ресурсы на сайте, которые наследуют от этого, (что вы не могли сделать через CAML.)

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

• В сценарии, подобном тому, который я только что упомянул в последнем пункте, необходимо деактивировать и активировать функцию CAML (чтобыпредоставление новых активов) до вызова вашего Feature Receiver.Что это будет значить для сайта?Поскольку все столбцы сайта и типы контента в списках на сайте используют те же идентификаторы, что и в корне семейства сайтов, удаление его родителя из семейства сайтов не изменит этого.Он может временно оставить его сиротским (т. Е. Не будет никакой связи между этим элементом и элементом в корне семейства сайтов, но он будет функционировать так же, как и всегда, поскольку это действительно полнофункциональная копия исходного элемента)пока вы не активируете функцию, которая возвращает элемент обратно в семейство сайтов.Как будто родители уезжают в отпуск, когда вы отключаете функцию, и возвращаетесь домой, когда вы снова активируете функцию.У вас есть выбор, когда вы будете поддерживать CAML и Feature Receiver, поскольку у вас есть два сценария: существующие семейства сайтов и новые.

• Вы можете создать политику, которая будет использоваться каждый раз при написании кода вВаш Feature Receiver для обновления столбца сайта или типа контента, вы также должны внести изменения в CAML.Это будет означать, что каждый раз, когда вы активируете функцию CAML в «новом» семействе сайтов, CAML будет обновленным и точным;не было бы необходимости запускать функцию «обновления».(В вашем Feature Receiver вы должны убедиться, что вы делаете дополнительную проверку, чтобы убедиться, что колонка сайта еще не принадлежит типу контента, прежде чем добавлять его и т. Д. В случае, если это изменение уже имеет место до выполнения кода.)Этот подход означает, что вам нужно выполнить только одну функцию при создании нового семейства сайтов, но это также означает, что вы сохраняете изменения в двух местах: в вашем Feature Receiver для внесения изменений в существующие сайты и в CAML для новых сайтов.Это более чистый подход, но он также содержит элемент избыточности, который всегда оставляет место для человеческой ошибки.

• Другой подход заключается в том, чтобы просто предполагать, что каждый раз, когда активируется базовая функция CAML, вы всегда будете работатьвыполнить Feature Receiver.Этот подход говорит, что единственный раз, когда вы меняете CAML, это добавление нового столбца сайта или нового типа контента;в противном случае все изменения происходят в Feature Receiver.Этот подход уменьшает избыточность, но также означает, что ваш код Feature Receiver может стать достаточно большим со всеми вашими изменениями с течением времени, и это может сделать ваш CAML очень «устаревшим» со временем.

Src: http://blog.beckybertram.com/Lists/Posts/Post.aspx?List=eb3e1762%2Dbab0%2D4e96%2D8bc5%2Dd67d6e6bfd44&ID=18

1 голос
/ 06 января 2011

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

Единственный элемент, который не доступен в API, это установкаидентификатор конкретного типа контента, поэтому для этого вам нужен файл caml, но это небольшой / простой файл, он не пытается обновляться и на него ссылаются только из функции, которая также запускает код обновления.

1 голос
/ 04 января 2011

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

Лучше всего в вашем случае всегда избегать внесения каких-либо изменений в типы контента с помощьюhand (с помощью пользовательского интерфейса)

Каждый раз, когда вы устанавливаете тип контента, убедитесь, что вы удалили предыдущий, а затем установите новый.(Иногда это невозможно из-за того, что из него уже созданы страницы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...