Wednesday, August 14, 2013

Create Content Types and Fields using Powershell

 Below script will work for

1.       1. Add Content Types to the web site
a.       Create a Content Type
b.      Add fields to Content Type
c.       Modify existing fields of  Content Type
d.      Delete fields from Content Type
e.      Create a new field and then add to the content type
2.       2. Add Content Type to the SharePoint List
3.       3. Sorting Content Types in the List

I referred below posts



Start-SPAssignment -Global

function  Sort-ContentTypes(
       [Microsoft.SharePoint.SPList]$list) {

         Write-Host $list.Title
$rootFolder = $list.RootFolder
$DefaultContentTypeName = "Document"  #setting "Document" as default content type.

 $rootFolder.UniqueContentTypeOrder = $null
 $rootFolder.Update()

#Get content types fromt the button
$contentTypesInPlace = New-Object 'System.Collections.Generic.List[Microsoft.SharePoint.SPContentType]'
$contentTypesInPlace = $rootFolder.ContentTypeOrder
 
#Has a default content type name been specified?
      if ($DefaultContentTypeName)
      {
            $contentType = $contentTypesInPlace | where { $_.Name -eq $DefaultContentTypeName }
            if ($contentType -ne $null)
            {
                  #Add the default content type
                  $sortedListOfContentTypes = New-Object 'System.Collections.Generic.List[Microsoft.SharePoint.SPContentType]'
                  $sortedListOfContentTypes += $list.ContentTypes[$DefaultContentTypeName]
                   
                  #Remove the default content type from the list
                  $contentTypesInPlace = $contentTypesInPlace | where {$_.Name -ne $DefaultContentTypeName}
            }
            else
            {
                  Write-Error "$DefaultContentTypeName was not found in the list, sorting by Name alone"
            }
      }
      else
      {
            Write-host "No default content type specified"
      }
       
      #sort the remaining content types and add the sorted list
      foreach ($contentType in $($contentTypesInPlace | Sort-Object -Property Name ))
      {
      #Add the content types
            $sortedListOfContentTypes = [Microsoft.SharePoint.SPContentType[]] $sortedListOfContentTypes + $contentType
      }

      $rootFolder.UniqueContentTypeOrder = [Microsoft.SharePoint.SPContentType[]] $sortedListOfContentTypes
       
      #Update the root folder
      $rootFolder.Update()
      Write-host "ContentType(s) sorted and added to the dropdownlist in list $($list.Name)"
     
 }



$url = "http://spdev5:8002/sites/library"
$web = get-spweb $url

#The Display Name of the Content Type
$ctypeName = "SuryaCT1"

try{

if($web.availablecontenttypes[$ctypeName] -eq $null)
{
      $ctypeParent = $web.availablecontenttypes["Document"]
      $ctypeTest = new-object Microsoft.SharePoint.SPContentType($ctypeParent, $web.contenttypes, $ctypeName)
      ##group name
      $ctypeTest.Group = "Custom Group"
      $web.contenttypes.add($ctypeTest)
     
#     $ctypeTest = $web.ContentTypes[$ctypeName]
     
      Write-Host "ctypeAgenda" $ctypeTest.id
     
      ##Add fields to the ContentType

      $field = $web.fields.getfield("Field1")
     
      if($ctypeTest.Fields["Field1"] -eq $null)
      {
            $fieldLink = new-object Microsoft.SharePoint.SPFieldLink($field)
            $ctypeTest.fieldlinks.add($fieldLink)
      }
     
      ##Update existing fields - as Required
      if($ctypeTest.Fields["Field2"] -ne $null)
      {
            $field = $ctypeTest.Fields["Field2"]
            $ctypeTest.FieldLinks[$field.Id].Required=$true
      }
       
     
      ##Delete fields from  ContentType
           
      if($ctypeTest.Fields["Field3"] -ne $null)
      {
         Write-Host "Field2"
        $field = $ctypeTest.Fields["Field3"]
        $fieldLink = new-object Microsoft.SharePoint.SPFieldLink($field)
        $ctypeTest.FieldLinks.Delete($fieldLink.id);
      }
     
      ##create new field and then add to the ContentType
       
      $web.fields.add("SuryaField", "Text", $false)
      $field = $web.fields.getfield("SuryaField")
      $field.Group = "Custom Columns"
      $fieldLink = new-object Microsoft.SharePoint.SPFieldLink($field)
      $ctypeTest.fieldlinks.add($fieldLink)


      $ctypeTest.Update($true)
       
}
else
{
      Write-Host $ctypeTest " Contentype is already avilable in the site."
}

#$ctypeTest = $web.ContentTypes[$ctypeName]
## Add ContentType to the SharePoint List
      if($ctypeTest -ne $null)
            {
           
            $list =  $web.Lists.TryGetList("suryadocs")
           
            if($list.ContentTypesEnabled -eq $false   )
            {
            $list.ContentTypesEnabled = $true;
                  $list.Update()
            }
             
              if ($list.ContentTypes[$ctypeTest.Name] -eq $null)
             {
               $list.ContentTypes.Add($ctypeTest);
                   Write-Host $ctypeTest.name " ContentType added"
                   Sort-ContentTypes $list
             }
            }
}
catch
{
      Write-Host "Error occurred while Updating:"  $_  -ForegroundColor Red
}

Stop-SPAssignment –Global



No comments:

Post a Comment

Followers