Несколько советов о том как сделать код более надежным и устойчивым:

  1. Получайте списки только с помощью такой конструкции 
    web.GetList(SPUrlUtility.CombineUrl(web.Url, listUrl)

    Получение по Title списка ненадежно, так как Title может быть изменен пользователем без вашего ведома.
  2. При получении значений полей элементов списка используйте Id поля или его StaticName.
    listItem[FieldId] //Если вы деплоите это поле или это встроенное поле
    listItem[FiledStaticName] //Если поле нестандартное и не вы его деплоите

    Обращение по Title поля ненадежно, так как Title может меняться.
  3. Для стандартных полей используйте классы SPBuiltInFieldId и Microsoft.SharePoint.Publishing.FieldId
  4. Для обращения к стандартным типам контента используйте SPBuiltInContentTypeId и Microsoft.SharePoint.Publishing.ContentTypeId
  5. Используйте класс Convert для получения типизированного значения поля
    Convert.ToDateTime(listItem["Created"])
    Для разных типов полей SharePoint может возвращать разные типы данных. Например числа могут возвращаться как строки. Кроме того Convert корректно обрабатывает null. Даже если у вас Required поле, то все равно может вернуться null по многим причинам.
  6. Добавление элементов в список
    list.AddItem() //только так
    //list.Items.Add() - ТАК ДЕЛАТЬ НЕЛЬЗЯ
  7. Количество элементов в списке
    list.ItemCount //Только так
    //list.Items.Count – ТАК ДЕЛАТЬ НЕЛЬЗЯ
  8. AllowDeletion

    Используйте AllowDeletion=”false” для списков и полей, которые вы деплоите в своем решении
  9. Sealed

    Используйте Sealed=”true” для полей и типов контента, которые вы деплоите в своем решении
  10. Количество элементов в результатах

    Обязательно указывайте RowLimit свойство при получении элементов с помощью SPQuery или KeywordQuery
  11. Проверка активации фич

    В своем коде обязательно проверяйте, что необходимые для работы фичи активированы на узле\коллекции.
  12. Деплой веб-части вместе со списками

    Если вы создаете веб-часть, которая обращается к списку, в том же решении, то обязательно поместите в одну фичу уровня Site. Внутри веб-части получайте список с RootWeb (см пункт 1).
  13. Не использовать RunWithElevatedPriveleges

    Используйте конструктор SPSite с SPUserToken. Передавайте SPUserToken.SystemAccount.

    Использование RunWithElevatedPriveleges оправдано только когда вы хотите обратиться к веб-сервису\БД от имени учетной записи пула приложений.

    И не стоит забывать, что работает данный метод только в контексте веб-приложения.

  14. Не модифицировать SPPersistedObject в контексте веб-приложений

    Это просто не работает. Можно обойти, но не стоит.
    Все объекты, унаследованные от SPPersistedObject, должны создаваться\изменяться в фичах уровня Farm и WebApplication или в задачах таймера.

  15. Не обращаться к ресурсам компьютера

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

    Это касается фалов, вне тех что деплоятся в решении, ключей реестра, event source  в windows event log и другого.
  16. Не использовать параметры в web.config

    Код SharePoint может быть запущен не только в веб-приложении, но и в timerjob, powershell, процессе-домене службы поиска или в любом коде на сервере.

    Естественно не везде будет работать стандартный класс ConfigurationManager(WebConfigurationManager).

Если есть еще советы – пишите, обязательно дополним список.

Теги : SharePoint