Friday, June 28, 2013

How to Display SharePoint Control in Display Mode in List Edit Page

I am facing the problem in which I need to display the SharePoint List Field in "Display" mode in List Edit Page. (This Problem works with SharePoint Default generated Page)

Step-1 : First of all please download the JavaScript file from here.

Step-2 : Add this JavaScript file in your project StyleLibrary.

Step-3 : Now Open your List Default Edit Page.

Step-4 : Find PlaceHolderMain tag. and after this tag insert you desired code as below:
<script type=text/javascript>
function MyCustomExecuteFunction()
{
//to hide the field Title=Field Display Name
     SPUtility.GetSPField('Title').Hide();
//enable to control in display mode
SPUtility.GetSPField()
   
}
_spBodyOnLoadFunctionNames.push("MyCustomExecuteFunction");
</script>

Other examples images are inserted below:

Image

Image

Image

Image

If you have any doubt in this article feel free to mail me or comment here.

Wednesday, June 19, 2013

Custom Code for send Mail in SharePoint using C# .net code

Create new project in Visural Studio create new Project by following the below step:

File -> New -> Project -> Visual C# -> Windows in Installed Template -> Select Console Application. Give your desire name to the application.

Add Following Reference in your code:
Microsoft.SharePoint

Add Following Name Space in you code:
using Microsoft.SharePoint;
using System.Net.Mail;

Replace Program.cs code with below code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using Microsoft.SharePoint.Administration;
namespace SendEmail
{
    class Program
    {
        static void Main(string[] args)
        {
            SPWebApplication webApp = SPWebApplication.Lookup(new Uri("https://serverName/"));
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress("abc@xyz.com");
            mail.To.Add("pqr@xyz.com");
            mail.Subject = "Subject Test";
            mail.Body = "Body Test";
            // SmtpClient class sends the email by using the specified SMTP server
            SmtpClient smtp = new SmtpClient(webApp.OutboundMailServiceInstance.Server.Address);
            smtp.UseDefaultCredentials = true;
            smtp.Send(mail);
        }
    }
}

This will send mail from abc@xyz.com to pqr@xyz.com user. Subject of the mail is "Subject Test" and Body of the mail is "Body Test"

How to check current user in particular group in JavaScript using SPServices

Add two JavaScript file in your Style Library.

1. Javascript 1.7.1.js (Download from here)

2. jquery.SPServices-0.7.1a.min.js (Download from here)
<script type="text/javascript" src="/Style%20Library/js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="/Style%20Library/js/jquery.SPServices-0.7.1a.min.js"></script>
<script language="javascript" type="text/javascript">

$(document).ready(function () {        
        $().SPServices({
            operation: "GetGroupCollectionFromUser",
            userLoginName: $().SPServices.SPGetCurrentUser(),
            async: false,
            completefunc: function (xData, Status) {
                if ($(xData.responseXML).find("Group[Name='SPGroup1']").length == 1) {
                    location.href = location.href.replace('/EditFormMKT.aspx', '/EditFormUW.aspx');
                }
                else if ($(xData.responseXML).find("Group[Name='SPGroup2']").length == 1) {
                    location.href = location.href.replace('/EditFormMKT.aspx', '/EditFormLegal.aspx');
                }
                else if ($(xData.responseXML).find("Group[Name='SPGroup3']").length == 1) {
                    location.href = location.href.replace('/EditFormMKT.aspx', '/EditFormDesigner.aspx');
                }
                else if ($(xData.responseXML).find("Group[Name='SPGroup4']").length == 1) {
                    location.href = location.href.replace('/EditFormMKT.aspx', '/EditFormRequester.aspx');
                }
            }
        });
    });
</script>

Group1, Group2 and Group3 etc are SharePoint Groups. Replace your group name with this group name and what ever you want to do write your code below of it.

Here I am replacing the URL and redirect the user based on his role. You can also call particular JavaScript function based on user's group.

Hope this is helpful to you.

Tuesday, June 18, 2013

Using PowerShell to deploy SharePoint Solutions and Features

The STSADM command line application worked well with previous versions of SharePoint. But the world is progressing and PowerShell will be the new administrative tool for SharePoint. In previous articles, I already showed some amazing powerful scripts that otherwise would require more lines of code. PowerShell offers some great advantages in large farms, as they can be run remotely on target machines, can be signed and therefore be controlled. Building up a repository of scripts or cmdlets to execute common tasks would be worthwhile in the long run.

First off an important thing to note here that this will only work with SharePoint 2010. There are no PowerShell snapins available for 2007, although you could create your own off course. And when run from a SharePoint 2010 Management Shell, the snapins are loaded automatically. But what if you just use the ‘normal’ console? Well, then you would have to register the snapin yourself. Fortunately, MS has already created the PowerShell script that is needed, located at:
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Config\PowerShell\Registration\SharePoint.ps1

You could include this script in your scripts to be run first, or just include the command that registers the snapin:
Add-PSSnapin Microsoft.SharePoint.PowerShell

This article covers one of the most basic tasks one would do when administrating SharePoint: Deploy SharePoint solutions (WSP) and enable/disable features.

Working with Solutions


In the ‘old’ days (let us not forget that the stsadm is still there and we have a lot of SharePoint 2007 installations across the globe), the following stsadm command could be used to add a SharePoint solution to SharePoint:
stsadm –o addsolution –filename “D:\Deploy\MySharePointSolution.wsp“

We used the following command to deploy the solution once installed to a specific web application:
stsadm –o deploysolution –name MySharePointSolution.wsp –url http://myspwebappp –allowgacdeployment –immediate

If we would upgrade an existing solution, we would use the following:
stsadm –o upgradesolution –name MySharePointSolution.wsp –filename “D:\Deploy\MySharePointSolution.wsp” -immediate

And finally, we used the following commands to retract and delete a specific solution from the web application:
stsadm –o retractsolution –name MySharePointSolution.wsp –url http://myspwebapp –immediate
stsadm –o deletesolution –name MySharePointSolution.wsp

Now, let us see how we could do above operations with PowerShell. For this, we use the following PowerShell commands:
Add-SPSolution “D:\Deploy\MySharePointSolution.wsp“
Install-SPSolution –Identity MySharePointSolution.wsp –WebApplication http://myspwebapp –GACDeployment

If you would like to add the solution as sandboxed, you would use the Install-SPUserSolution command instead. To upgrade a solution, we specify which solution is to be updated and with which new solution file:
Update-SPSolution –Identity MySharePointSolution.wsp –LiteralPath “D:\Deploy\MySharePointSolution.wsp” –GacDeployment

To retract and remove a solution, we use the following commands:
Uninstall-SPSolution –Identity MySharePointSolution.wsp –WebApplication http://myspwebapp
Remove-SPSolution–Identity MySharePointSolution.wsp

Working with features


Similarly, commands exist for working with features. The stsadm equivalents:
stsadm –o activatefeature –name MyFeatureName –url http://myspwebapp
stsadm –o deactivatefeature –name MyFeatureName –url http://myspwebapp

Needless to say, there are easy equivalents in PowerShell:
Enable-SPFeature –Identity MyFeatureNameOrGuid –url http://myspwebapp
Disable-SPFeature –Identity MyFeatureNameOrGuid –url http://myspwebapp

As you can see, PowerShell will completely replace stsadm as the administrative command line tool for SharePoint. Better to start using it as the next version of SharePoint will not have a stsadm command line tool I suspect. To conclude, let us take a look at a script that enables a certain feature across all site collections and sites in a farm. As an example, I have taken the SharePoint Server Enterprise Site Features feature with ID 0806d127-06e6-447a-980e-2e90b03101b8.
Add-PSSnapin Microsoft.SharePoint.PowerShell
$WebApplications = Get-SPWebApplication

foreach ($webapp in $WebApplications) {
  $Id = $webapp.Id
  Write-Host “Processing web application $Id …”
  $sites = $webapp.Sites
  foreach ($site in $sites) {
    Write-Host Processing site $site.Id
    $webs = $site.AllWebs
    foreach ($web in $webs) {
      Write-Host Processing web $web.Title
      if ($web.Features["0806d127-06e6-447a-980e-2e90b03101b8"] -eq $null) {
        Enable-SPFeature -Identity 0806d127-06e6-447a-980e-2e90b03101b8 -url $web.Url -Confirm:$false
      } else {
        Disable-SPFeature -Identity 0806d127-06e6-447a-980e-2e90b03101b8 -url $web.Url -Confirm:$false
      }
    }
  }
}

Please note though that above script will work for small site collections. But for larger object hierarchies, you will need to include proper memory management (SPAssignment) to ensure proper release of memory.

Friday, June 14, 2013

How to access user profile in Windows SharePoint Services + jquery

How to retrieve the SharePoint User profile in jQuery with use of SPServices.

Use below function for fetching the user information in jquery.

function getUserInfo(UserId){
wsBaseUrl = '/_vti_bin/';
var uiObj = {};
if(typeof(UserId)=="undefined" || UserId=='')UserId = _spUserId;
var arrOfFields = ['ID', 'Name', 'Title', 'EMail', 'Department', 'JobTitle', 'Notes', 'Picture',
'IsSiteAdmin', 'Created', 'Author', 'Modified', 'Editor', 'SipAddress', 'Deleted'];
var item = getItemById('UserInfo',UserId,arrOfFields);
    if(item != null){
        for(i=0;i<arrOfFields.length;i++){
            if(item[arrOfFields[i]]!=null){
                uiObj[arrOfFields[i]] = item[arrOfFields[i]];
            }else{
                uiObj[arrOfFields[i]] = '';
            }
        }
           return uiObj;
    }else{
        for(i=0;i<arrOfFields.length;i++){
            uiObj[arrOfFields[i]] = "User with id " + UserId + " not found.";
        }
        return uiObj;
    }
}

Tuesday, June 11, 2013

The process cannot access the file because it is being used by another process. (Exception from HRESULT: 0x80070020)

This problem is caused when another application runs on default port i.e. :80.

Most probably this issue occur because of Skype.

You can find the application which is running on that particular port by following command:

Open command prompt as administrator mode and type following command:
netstat -ano

This command list the process running on particular port. Please close that application and start your website from iis manager.

Now, You can able to access it as previously.