Tuesday, February 28, 2012

Get and Renaming SPFolder c#

This is how you can rename a SPFolder. There is no need to use MoveTo() as suggested by others.
The user has to have rights to do it, or enclose the whole thing inside a

var siteId = "Guid of my site";
var webUrl= "Server relative path to my web";
SPSecurity.RunWithElevatedPrivileges(delegate(){
    using (SPSite elevatedSite = new SPSite(siteId))
   {
       using (SPWeb elevatedWeb = elevatedSite.OpenWeb(webUrl))
      {

          string requestFolderUrl = webUrl+ "/MYLIST/OldFolderName";
          SPFolder requestFolder = elevatedWeb.GetFolder(requestFolderUrl);

          if (requestFolder.Exists)
          {

               requestFolderItem[SPBuiltInFieldId.Title] = "NewName"; //not really needed for renaming
               //requestFolderItem[
SPBuiltInFieldId.BaseName] =  "NewName"; //this Fails.don't know why
               requestFolderItem["BaseName"] =  "NewName"; //this Works!
               //don't want to update the Modified time nor the modified by Info
              //If you want to modify this info use Update, and avoid being in a RunWithElevatedPrivileges
             ///because else you would have the System User registered
               requestFolderItem.SystemUpdate(false);

           }
      }
   }
}

Thursday, February 16, 2012

Remove Event Handlers from SPList Powershell

This is how you can  delete Event handlers from a SPList

$webUrl= "http://yoursite.com/subsite"
$listName = "myList"

$site = Get-SPSite($siteUrl)
$web = $site.OpenWeb()
$listWithEventHandlers = $web.Lists[$listName]

#you can find out the index of the eventhadler through a selector, or just beeing lazy
#and loop the eventhanlders


 $allEvenReceivers  = $list.EventReceivers
foreach($ev in $allEvenReceivers  )
{
   write-host $ev.Name;
}
$index = 0
$eventHandlerToDelete = $listWithEventHandlers.EventReceivers[$index]$eventHandlerToDelete.Delete()
$listWithEventHandlers.Update()

$web.Dispose()
$site.Dispose()

Access MasterPage catalog with Powershell

To acces the Masterpage catalog via Powershell, and then use it as a list the following script might help

if(-not(Get-PSSnapin | Where { $_.Name -eq "Microsoft.SharePoint.PowerShell"}))
{
    Add-PSSnapin Microsoft.SharePoint.PowerShell;
}

clear
$siteUrl = "http://yourserver.com"

$masterPageCatalog = "_catalogs/masterPage"

$site = Get-SPSite $siteUrl

$rootWeb = $site.RootWeb;

$folder = $rootWeb.GetFolder($masterPageCatalog)

$masterPageCatList = $rootWeb.Lists[$folder.ParentListId]

#do some list operations on it


$rootWeb.Dispose()
$site.Dispose()

Wednesday, January 25, 2012

Reorder field in existing Contentype withPowershell

if(-not(
Get-PSSnapin | Where { $_.Name -eq "Microsoft.SharePoint.PowerShell"}))
{
    Add-PSSnapin Microsoft.SharePoint.PowerShell;
}
clear
$dirURL = "Url of the Content Type"
$contentTypeName = "ContentTypeName"
$fieldInternalName= "Internal name of the field to reorder"
$field0BasedIndex = 8 #Position on the contentytpe this field is wanted

if($site -ne $null){
    $web = $site.RootWeb
    if($web -ne $null){
        $ct = $web.ContentTypes[$contentTypeName]
        if($ct -ne $null){
            write-Host "content Type Found"  -foregroundcolor green
           
            $fields = New-Object 'System.Collections.Generic.List[string]' ;
            [Microsoft.SharePoint.SPFieldLinkCollection]$flinks = $ct.FieldLinks;
            #Read all the InternalNames of the FieldLinks into a list
            foreach($fieldLink in $flinks){
             $fields.Add($ct.Fields[$fieldLink.ID].InternalName);
            }
            if($fields.Contains($fieldInternalName)){           
                write-Host "Field found in Content Type" -foregroundcolor green;
                $indexFound = $fields.IndexOf($fieldInternalName)
                if($indexFound -ne $field0BasedIndex )
                {
                    $fields.RemoveAt($indexFound)
                    #insert or append the field
                    if($field0BasedIndex -le $fields.Count -1){
                        $fields.Insert( $field0BasedIndex,$fieldInternalName)
                    }
                    else{
                        $fields.Add($fieldInternalName);
                    }
                    #Add the array to the reorder
                    $flinks.Reorder($fields.ToArray());
                    #Update the ContentYpe
                    $ct.Update($true)
                 }
            }
            else{
               write-Host "Field not found in Content Type" -foregroundcolor red;
            }
        }
        else{
            write-Host "Content type not found"  -foregroundcolor red
        }
        $web.Update()
        $web.Dispose();
    }
    $site.Dispose();
}

Insert new Site Column in existing Contentype with PowerShell

# Check if Snap-in is loaded
if(-not(
Get-PSSnapin | Where { $_.Name -eq "Microsoft.SharePoint.PowerShell"})
) {
Add-PSSnapin Microsoft.SharePoint.PowerShell;
}

$dirURL = "Type here the abolute Url to the Sitecollection where the contentytpe is defined"
$contentTypeName = "Traktandum"
$fieldId = [Guid]"{516ae749-c8b4-4a9b-858f-50881aae4165}"  
#fieldId mus match the one on the fieldXML

$site = Get-SPSite -Identity $dirURL
if($site -ne $null){
    $web = $site.RootWeb
    if($web -ne $null){
        #Assign fieldXML variable with XML string for site column
        $fieldXML = '<Field
    Description="$Resources:MyCustom,Field_MyPortalOtherGuest_Description"
    DisplayName="$Resources:MyCustom,Field_MyPortalOtherGuest_DisplayName"
    Hidden="FALSE"
    Name="SomeName"
    Title="SomeName"
    Required="FALSE"
    Sealed ="FALSE"
    Sortable="FALSE"
    List="UserInfo"
    ShowField="ImnName"
    Mult="TRUE"
    Type="UserMulti"
    UserSelectionMode="0"
    UserSelectionScope="0"
    ID="{516ae749-c8b4-4a9b-858f-50881aae4165}"
    Group="$Resources:MyCustom,Field_Group"
    StaticName="SomeName" />'
    
        #Add the field to the web
        $web.Fields.AddFieldAsXml($fieldXML)
        $web.Update()

        $field = $web.AvailableFields[$fieldId]
        $ct = $web.ContentTypes[$contentTypeName]
        if($field -ne $null -and $ct -ne $null){
            #Delete any existing Field with that ID from the ContentType
            $ct.FieldLinks.Delete($fieldId)
            #Update the Contentype includeing childs
            $ct.Update($true, $true)
            #Creat a new SPFieldLink for that field and insert it to the ContentType
            $link = new-object Microsoft.SharePoint.SPFieldLink $field            
            $ct.FieldLinks.Add($link)
            $ct.Update($true, $true)
        }
        $web.Update()
        $web.Dispose()
    }
$site.Dispose()
}

Tuesday, June 14, 2011

Swithc DB to Simple Recovery Mode

http://vstoolsforum.com/blogs/sqlserver/archive/2007/05/11/setting-the-recovery-model-of-a-database-to-simple.aspx

Simple and works perfectly.

Tuesday, May 3, 2011

GAC (Global Assebly Folder) empty- Trick to reenable

As my work is, I have to deploy x-times some assembly in my GAC and test it.

Well once in a while my assembly folder just seems empty, And then I can't  build / deploy my solution anymore.

Here is the trick: (It is not mine.. but the more places it is published, the easier you guy find it:)

Start your  windows services management console (services.msc) and restart the Indexing Service  and everything is back to normal.!

Cool... once agian.. it was not our fault... we where just working!