Sunday, April 29, 2012

Content Organizer in SharePoint 2010

The Content Organizer feature is a new routing feature that allows you to automatically route documents to different libraries and folders within a site collection. The document can be automatically routed to various document libraries based on the metadata.
Simply put it allows us to create rules that examine the content type and site columns of a document that was uploaded and move it someplace else.

It can also be used to do some housekeeping activities for the document Library for e.g. making sure that not any folder in a document Library contain more than specified no of records. If this happens it will create another folder and move the records to the new folder.

The requirement which came to me by a client was to develop a page where Legal department will upload the entire document and based on the metadata I will be pushing them in their respective document libraries. This will solve also the problem where sometime user don’t put the metadata on the document and just upload them. Hence now with this technique if they don’t provide the metadata the files will not reach the destination and will be just there sitting in the drop library.

How to Setup the Document Library

Now first we need to activate the Content Organizer Site Feature.


Once you activate this feature, there are three things get added to the site
-    A document Library called “DropOffLibrary”
-    Two new Links in Site Setting: Content Organizer Settings and Content Organizer Rules

The “Content Organizer Rules” link will take you to the rules List where you can add a new rule based on the content type and then you can specify condition based on the site column of the content type.

Lets see this with an Example.

Lets first see the high level diagram of what we are trying to achieve.
a)   We created a Content Type based on Document Content Type called “Support Request”.
       There we included new columns
                Support Name (Text Column)
                Support Type (Choice Column) whose option is IT Support and HR Support

b)    Then we created two documents Library based on the above content Type called HR Support and IT Support.

c)    Then we create Two Content Organizer Rule. Check out below how I have created “HR Document Rule”

d) In a similar way create a second rule called “IT Document Rule” where just change the condition to the one as shown below.

e) Now when we upload the document in a document library and from the Support Type dropdown column if we select HR Support the document will auto redirect to HR Support Library and we will get a similar message like the one shown below.


This is really a cool feature of SharePoint as we don’t require bothering where to push the document. If the rules are well placed just upload the document and it will reach its place.

Saturday, April 28, 2012

Creating hyperlink to display New List Form as Popup Dialog

Sharepoint 2010 Popup Dialogue
Someday back while designing a site I was required to have a New Form Link on the Home page and on clicking, it should show the popup Dialog window with the gray background.

Now first thing what came to my mind was to copy the same code from the “Add new Item” Link in List view. I was using IE to see the SharePoint site where I had developer Toolbar or in your case you case if you use Firefox can download firebug or just use view Source. So I Just pressed F12 on the page and the developer toolbar opened through which i coped the code of the link.


 After getting the link, remove the class and id attribute, so finally what I used is the snippet provided below. We can use the same code for any list. We just need to remove the List Id attribute with the correct List Id and the Site Name.

  <a onclick="javascript:NewItem2(event, &quot; http://Sitename /_layouts/listform.aspx?PageType=8&amp;ListId={88D74540-C80B-41BF-B325-EEAED6565385}&amp;RootFolder=&quot;);javascript:return false;" href="/_layouts/listform.aspx?PageType=8&amp;ListId={88D74540-C80B-41BF-B325-EEAED6565385}&amp;RootFolder=" target="_self">
Add New List Item
</a>

So the changes you need to make in the code before use are a)SiteName b)ListId.   In the below screenshot I have used with a content Editor web-part.   

I have added this screenshot showing how I added it to the CEWP and created the link

Saturday, April 14, 2012

Automating SharePoint site backup using PowerShell and windows Task Scheduler (Part 2)

Task Scheduler
In the Part 1 we created the script which will take the backup of a site collection and will store it in new folder based on the current date. This script has been saved as .ps1 (PowerShell script) file. Now we want this script to run every day at 10:00 PM when I am taking rest at home. This automation can be achieved easily by windows task scheduler.



How to use windows scheduler to automate the Backup on a daily basis

a) First load the Task Scheduler from Start >> All Programs >> Accessories >> System    Tool>> Task Scheduler. I am using the version which ships with windows server 2008 R2 edition, but the   concept should be same for other release.

b) To create a new Task, click Create Task from the right hand side “Actions Panel”.


c) This will open a Create Task window which will have first tab as General; here we need to provide the following basic information.

    General Tab

  1. Name of the Task like “SharePoint Backup”. A Description which is not mandatory
  2. Select the User Account under which the following task will run. Ensure that the user account has the necessary permissions to use the PowerShell on the SharePoint farm, permission to perform script action on the SharePoint.
  3. Select Run whether the user is logged in or not and tick the Do not store password checkbox. This is necessary because at the time of backup being taken you may not be logged in.
  4. Also enable the Run with highest privileges option. I would recommend testing the script from Task Scheduler with the option disabled and only enable if the script does not work without it.

d)  In the “Triggers Tab
  1. Click New and in the “New Trigger”
  2. In “Begin the Task” dropdown select “On a Schedule”
  3. Under Setting radio button choose “Daily” also choose the time at 10:00 PM (according to your wish).
  4. Don’t change advanced settings for now.



e)  In the “Actions Tab
  1. Click “New” in the Actions Tab.
  2. In the “New Action” window ensure the “action” is set to Start a program.
  3. Under settings Program/Script write “Powershell.exe”
  4. In Add Arguments (optional) type &'d:\Backup-SiteCollections.ps1'. Note: Wrapping the file path and name in single quotation marks allows you to specify spaces in the text.



You should now see your script in the Task Scheduler Library (if not, click Refresh in the right-hand panel). To test the script, highlight it in the console and click Run from the right-hand panel.


Automating SharePoint site backup using PowerShell and windows Task Scheduler (Part 1)

Powershell Backup

SharePoint administrators need to run regular backups using PowerShell, the STSADM tool or in Central Administration. But taking these backups on a daily basis can be a tedious process, hence either we can sit back and take backup, waiting for it to get over or we can go home and sleep on the couch, while the PowerShell and Task Scheduler take cares of the rest.

So in this series we will see
  1. How to write a PowerShell script to take Backup. (Part 1)
  2. How to use windows scheduler to automate the Backup on a daily basis. (Part 2)
Creating PowerShell script to take Backup

I have included the whole script first which i have then explained below in phases
Add-PsSnapin Microsoft.SharePoint.Powershell –ErrorAction SilentlyContinue
try
 {
    $today = (Get-Date -Format dd-MM-yyyy)
    $backupDirectory = "D:\Backup\DailySiteCollectionBackUp\$today"
  # Backup file Location
    $backupFile = "D:\Backup\DailySiteCollectionBackUp\$today\Backup.dat"
  # Log file location
    $logFile = "$backupDirectory\BackupLog.log"    
  # Address of the Site Collection to backup
    $Site = "http://a4md03082:10000/"
  
 # Location of the Backup Folder
    if (-not (Test-Path $backupDirectory)) 
    { 
      [IO.Directory]::CreateDirectory($backupDirectory)
      #New-Item $logPath -type $backupDirectory
    } 
 
 # Get backup start date and time 
    $backupStart = Get-Date -format "MM-dd-yyyy HH.mm.ss"
  
  # creates a log file  Start-Transcript -Path 
    Start-Transcript -Path $logFile
    
 # This will actually initiate the backup process. 
      Write-Host    
      Write-Host    
      Write-Host "Backup starting at $backupStart for $Site "    
      Write-Host "******************************************"
     Backup-SPSite -Identity $Site -Path $backupFile -Force
     $backupComplete = Get-Date -format "MM-dd-yyyy HH.mm.ss"
      Write-Host    
      Write-Host    
      Write-Host "Backup Completed at $backupComplete for $Site "    
      Write-Host "******************************************"
 
 Stop-Transcript 
 }
Catch
 {
  $ErrorMessage = $_.Exception.Message
  write "$today BackUp Failed   $ErrorMessage  ">>$logFile

 }

a) It will load the SharePoint snap IN
Including Powershell SnapIn
Including PowerShell SnapIN
b) It will create a folder with the current Date if not present.

Creating BackUp Folder
Note: Do change the path according to the place where you want to store the backup.

c) Then we will run the “Start Transcript/Stop-Transcript” block command. This will log all command that the user types and all output that appears on the console. Here we will require to pass the log file name. Between the “Start Transcript/Stop-Transcript” we will take the backup with the Backup-SPSite which will take the backup of the specified site

Create Backup Folder

Note: Start Transcript/Stop-Transcript command does not runs on the PowerShell ISE, this will run only on the console, which is the way we are going to do while running it from windows task scheduler.

d) Now after the whole script is created save it with a .ps1 extension.



Now in the Part 2 we will understand on how to run this script at a particular time of the day automatically.