Обнаружение пользовательских типов содержимого папки в MOSS2007 - PullRequest
2 голосов
/ 18 ноября 2009

Учитывая SPListItem, представляющий папку, мне нужно выяснить, имеет ли она тип содержимого встроенной папки или пользовательский тип содержимого папки (с дополнительными полями).

Вот что я делаю

    SPContentType folderType = aFolderItem.Web.AvailableContentTypes[SPBuiltInContentTypeId.Folder];
    SPContentType contentType = aFolderItem.ContentType;

    if ( contentType != folderType )
       ...

Однако для папок по умолчанию я по-прежнему получаю другой тип контента, чем встроенный. У них есть идентификаторы, такие как 0x0120007C34D9760794FA43AB267F4E1A1BF460. Я не уверен, откуда взялся этот конкретный суффикс GUID, я не могу найти его ни в одном из определений моей папки \ features.

Мое лучшее предположение заключается в том, что экземпляры папок всегда получают пользовательский тип. Если это так, какие-либо предложения о том, как я могу отличить встроенные папки от пользовательских папок?

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Предполагая, что aFolderItem является переменной типа SPListItem , приведенный ниже, код должен получить то, что вы хотите.

if(aFolderItem.ContentType.Id.IsChildOf(SPBuiltInContentTypeId.Folder))
          ...this is a Folder
else
          ...this is not a Folder
1 голос
/ 18 ноября 2009

Если тип содержимого прикреплен к списку, он не будет прикреплен напрямую, а будет создана и прикреплена его копия. Исходный идентификатор типа контента затем присоединяется к Guid и становится идентификатором «нового» типа контента.

Если вы придерживались руководящих указаний для определения идентификаторов типов содержимого , то идентификатор типа содержимого пользовательской папки должен выглядеть примерно так: 0x0120 + 00 + <Guid>.

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

В отличие от этого идентификатор пользовательской папки будет выглядеть примерно так: 0x0120 + 00 + <Guid> + <Guid> ==> Тип содержимого базовой папки + Guid для вашего пользовательского типа содержимого + Guid для присоединения его к списку.

Чтобы сделать сравнение немного проще, вам не нужно сравнивать фактический идентификатор типа контента, а взгляните на идентификатор типа контента родительский идентификатор . Для пользовательской папки родительский идентификатор - 0x0120, для пользовательской папки - 0x0120 + 00 + <Guid>.

...