When you run below
script it will add a field to content type and set the order. For my field I want
to set the order next to ‘SAC Doc’ filed. For that I am reading existing index
of ‘SAC Doc’ field and setting to my new field.
For column order you can
refer this post as well
http://sharepointempower.com/2013/03/column-ordering-in-sharepoint-2010/
It will create a log file in your location where you are running your script
It will create a log file in your location where you are running your script
function SetColumnOrder([Microsoft.SharePoint.SPContentType]$contentType)
{
#Write-Host
$contentType.name
[Microsoft.SharePoint.SPFieldLinkCollection]$flinks = $contentType.FieldLinks;
#array object
$fieldsArray = New-Object 'System.Collections.Generic.List[string]';
#Read all the InternalNames of the
FieldLinks into a list
foreach($fieldLink in $flinks){
$fieldsArray.Add($contentType.Fields[$fieldLink.ID].InternalName);
}
$fieldchkboxInternalName =$contentType.Fields["SAC
DOC"].InternalName
# Write-Host $fieldchkboxInternalName
$fieldDDLInternalName =$contentType.Fields["ddlTest"].InternalName
if($fieldsArray.Contains($fieldchkboxInternalName)){
$indexChkbox = $fieldsArray.IndexOf($fieldchkboxInternalName)
#Write-Host "checkbox index:"
$indexChkbox
$indexDDL = $fieldsArray.IndexOf($fieldDDLInternalName)
#Write-Host "ddlindex:" $indexDDL
#Write-Host "fieldsArraycount"
$fieldsArray.Count
if($indexChkbox -ne $indexDDL )
{
$fieldsArray.RemoveAt($indexDDL)
if($indexChkbox -le $fieldsArray.Count -1){
$fieldsArray.Insert($indexChkbox,$fieldDDLInternalName)
Write-Host "SAC ddl
index:" $fieldsArray.IndexOf($fieldDDLInternalName)
$msg = ("{0},{1}" -f "SAC ddl
index order :", $fieldsArray.IndexOf($fieldDDLInternalName))
$msg | out-file -FilePath $logfile -append
}
#else{
# $fieldsArray.Add($fieldDDLInternalName);
#}
}
#Add the array to the reorder
$flinks.Reorder($fieldsArray.ToArray());
#Update the ContentYpe
$contentType.Update($true)
}
}
$URL = "http://spdev5:8002/sites/library"
$site = New-Object Microsoft.SharePoint.SPSite($URL)
$web = $site.openweb("")
#logging
$timestamp = get-date -format "yyyyMMdd_hhmmtt"
$filenameStart = "SAC_AddField2ContentTypes"
$logfile = ("{0}{1}.csv" -f $filenamestart, $timestamp)
$header = "S.No,Message"
$header | out-file -FilePath $logfile
$fieldName = "ddlTest"
$field = $web.Fields[$fieldName]
#$ct =
$web.ContentTypes[$contentTypeName]
Write-Host "Fieldname:" $field
$index=40
$ContentTypes = $web.ContentTypes
try{
foreach ($ContentType in $ContentTypes)
{
$contentTypeGroup = $ContentType.Group
$contentTypeName = $ContentType.Name
if ( $contentTypeGroup -like '*DMID*')
{
#if($ContentType.Fields["SAC
DOC"] -ne $null)
#{
#
write-host $ContentType.Name #$MyField.Id
#$MyField=$ContentType.Fields["SAC
DOC"]
#$ContentType.FieldLinks[$MyField.Id].Required=$true
# }
#if($ContentType.Name
-eq "Laboratory Normal
Ranges")
if($ContentType.Name -eq "CI" -or $ContentType.Name -eq "Lab" )
{
if($ContentType.Fields["ddlTest"] -eq $null)
{
$link = new-object Microsoft.SharePoint.SPFieldLink $field
$ContentType.FieldLinks.Add($link)
$ContentType.Update($true)
write-host "'SAC Doc'
dropdownlist added to: " $ContentType.Name
$msg = ("{0},{1}" -f "'SAC Doc'
dropdownlist added to:", $ContentType.Name)
$msg | out-file -FilePath $logfile -append
SetColumnOrder $ContentType
#break;
}
else
{
write-host "'SAC Doc' dropdownlist already
added to: " $ContentType.Name -BackgroundColor Red
$msg = ("{0},{1}" -f "'SAC Doc'
dropdownlist already added to:", $ContentType.Name)
$msg | out-file -FilePath $logfile -append
}
}
}
}
}
catch [System.Management.Automation.ExtendedTypeSystemException]
{
Write-Host $_.Exception.ToString()
$msg = ( "{0},{1}" -f "Error
occurred while reading list..:", $_)
$msg | out-file -FilePath $logfile -append
}
$web.Dispose()
$site.Dispose()
No comments:
Post a Comment