Скрипт для обновления типа контента Sharepoint Online

У меня есть тип контента TestContentType с тремя столбцами:

  • тип документа
  • Категория
  • Подкатегория

Этот тип контента используется в 18 библиотеках документов в 3 семействах сайтов.

В столбец «Категория» необходимо добавить «описание», которое в настоящее время не имеет описания. Есть ли способ добиться этого с помощью сценария, чтобы мне не приходилось вносить изменения вручную через пользовательский интерфейс.

Пока что я придумал следующий сценарий, но пока он перечисляет только все библиотеки списков и документов. На самом деле мне нужно иметь возможность получить тип контента в данном случае «TestContentType», а затем обновить столбец «Категория», включив в него описание:

$loadInfo1 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
$loadInfo2 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
$webUrl = Read-Host -Prompt "HTTPS URL for the SP Online 2013 site" 
$username = Read-Host -Prompt "Email address login"
$password = Read-Host -Prompt "Password for $username" -AsSecureString


$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($webUrl)
$ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password)
$web = $ctx.Web
$lists = $web.Lists
$ctx.Load($lists)
$ctx.ExecuteQuery()

$lists| select -Property Title

Мы ценим любые предложения.


person Dev P    schedule 05.05.2014    source источник


Ответы (1)


Поскольку вам необходимо обновить столбец сайта, используемый в типе контента, Field.UpdateAndPushChanges. Он фиксирует измененные свойства поля и распространяет изменения на все списки, использующие это поле.

В следующем примере показано, как обновить поле Description и распространить это изменение на все списки:

$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($webUrl)
$ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securedPassword)

$field = $ctx.Site.RootWeb.Fields.GetByInternalNameOrTitle($fieldTitle)
$field.Description = $fieldDesc
$field.UpdateAndPushChanges($True)
$ctx.ExecuteQuery()

Примечание. Указанный сценарий должен выполняться для каждого семейства сайтов.

person Vadim Gremyachev    schedule 05.05.2014
comment
Большое спасибо за это Вадиму. Я проведу быстрый тест на Dev tenant, но, надеюсь, это должно сработать. - person Dev P; 06.05.2014
comment
Должен ли я делать это для каждого поля, добавляемого к типу контента? - person bgmCoder; 04.03.2017
comment
Что, если я добавил поле к типу контента после, используя тип контента в списке? Это означает, что в списке еще нет этого столбца. Переместит ли это столбец в список? - person bgmCoder; 04.03.2017