Showing posts with label SharePoint List; Sort ContentTypes. Show all posts
Showing posts with label SharePoint List; Sort ContentTypes. Show all posts

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



Followers