SharePoint 2010 : URL Mapping issue

At times, when you are writing some code or accessing your site and want to use IP address to locate your SharePoint but you see the error below. Follow the steps mentioned to resolve your issue:

The Web application at http://your IP address could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application

  • Add the IP in the Access mapping in SharePoint Central Admin.
  • Select Alternate Access Mapping Collection as your team site.
  • Add Internal URL as your IP and select zone as Intranet.


Resizing an Image for consistency in SharePoint

While implementing intranet within our organization, we configure MySites within SharePoint, upload the user profiles from Active Directory and give users the ability to upload their own picture. Also, while implementing any News, or any company information, updates on the home page of Intranet, we tend to put pictures beside the text we write. Now, the image for several notifications can be of several size if you don’t have an in-house designer who trims/resizes your pictures to be uploaded to SharePoint. So, here comes my solution to resize images as we upload them to a definitive size which can then be uploaded and shown to users on the SharePoint.

I have created Synchronous event receiver to my Notification list where I am adding the image and the code resizes the image and uploads it to the list for a nice and consistent look and feel of your website.
Copy and paste the code below into your ItemAdded method.

       public override void ItemAdded(SPItemEventProperties properties)
{
int _imageWidth = 0;
int _imageHeight = 0;

if (properties.ListTitle.ToLower().Equals("intranet pictures"))
{
try
{
string _width = properties.ListItem.File.Properties["vti_lastwidth"].ToString();
string _height = properties.ListItem.File.Properties["vti_lastheight"].ToString();

if (Int32.TryParse(_width, out _imageWidth) && Int32.TryParse(_height, out _imageHeight))
{
//checking if the image height and weight is 120 (for the sake of example)
if (_imageWidth != 120 || _imageHeight != 120)
{
SPFile _imageFile = properties.ListItem.File;

MemoryStream _inputStream = new MemoryStream(_imageFile.OpenBinary(), true);
MemoryStream _outputStream = new MemoryStream();

Image _resizedImage = Image.FromStream(_inputStream).GetThumbnailImage(120, Int32.Parse(_height), null, IntPtr.Zero);
_resizedImage.Save(_outputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

_imageFile.SaveBinary(_outputStream, false);

}
}
}
catch (Exception ex)
{
properties.ListItem.Delete();
properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
//You can give the location of your custom error page here
properties.RedirectUrl = "/_layouts/Intranet_PictureRestrict/IntranetPicError.aspx";
}
}
}

Let me know if you want to customize it more or have any queries.

SharePoint 2013 : Introduction to Event Receivers

I installed the beta version of SharePoint 2013 recently and played around with it. The first impression I had after creating team sites and community sites was “WOW, it looks amazing”. I guess that’s how you react every time you see a new offering of SharePoint J
This is my first post on SharePoint 2013; dedicated to something I use the most within SharePoint implementations, the Event Receivers.
As SharePoint 2013 offers App development as part of Office 365 development suite, which also replaces the traditional sandboxed solutions available in SharePoint 2010, it becomes very easy to create apps and maintain them within SharePoint 2013.
Event receivers are somewhat modified for SharePoint 2013 into two parts, namely 
  • Remote event receivers and
  • App Event receivers 
I will write separately about how to create both of these event receivers in my future posts. In this blog I will explain what they are and how they can be used to suit our business needs.
Remote Event Receivers
These event receivers signify events that occur on items within any list or library. Say addition of an item, update of an item or deletion of an item. They can be synchronous and asynchronous in nature. Microsoft has modified a bit in this version of SharePoint, the way we deal this nature of event receivers. We will see it how later in this post.
App Event Receivers
These event receivers signify the events that occur to the app we are creating. Say app installation, app uninstalling or app upgrading.
As we create a new remote event receiver or app event receiver in Visual Studio 2012, we need a web application where we would be deploying our app. By default the scope of the app will be the host web application mentioned. A web service is added to this web application to handle the events which contains two methods
ProcessEvent()
Handles events that occur before an action occurs, such as when a user adds or deletes a list item
ProcessOneWayEvent().ProcessEvent()
Handles events that occur after an action occurs, such as after a user adds an item to a list or deletes an item from a list
Like in SharePoint 2010, we had synchronous and asynchronous event receivers, in 2013; we have these two methods which deals with the nature of the event receivers.
Many other things remains same the way we used to deal with them in SharePoint 2010 and VS 2010 environment like adding more events within your event receiver solution, changing the event receiver to point to either Document Library or an Announcement list and so on.

I will write more as and when I try new things within SharePoint 2013.

SharePoint 2010 : Record Declaration

Record Declaration is one of the many new things introduced within SharePoint 2010. When implementing document management, we always come across scenarios where the final document is ready and we should lock it down so that no one can tamper with it and the document remains safe within the organization until it reaches its retention period. Such documents can be Staff files within an organization, any property related papers, insurance papers or so on. So, once we decide that the final version of any item within our SharePoint site is ready and we want to keep it for certain period of time without giving anyone the ability to change its content, we would prefer to lock it down and make it a RECORD.
Record declaration can be done manually or can be done as part of the Information Management policy within the document library. We will see how to create any item as record in this blog post. 
  • Manual declaration of Records

As we click on the Record declaration settings, we see three radio buttons:

Use the site collection default settings: Do not allow manual declaration of records
This will not allow users to declare the items as records manually from the ribbon button within the document library.
Always allow the manual declaration of records
This will introduce a ribbon button within the Document section (highlighted in the figure), clicking on this button will make the item as record and no more updates will be allowed on it any further.

Never allow the manual declaration of records
As name signifies, we cannot make the items as records by selecting this.
Also, we see the check box for automatically declare items as records as they are added to the list, checking this check box will make the items are records with no functionality to update the item in the future. This is very useful as we deal with documents which have just one version i.e., the final version.
Now we saw that either we can manually declare items as records which is very simple or we do it programmatically. But we can also declare records as part of the Information management policy within the document library.
  • Schedule the record declaration

We can schedule the record declaration by enabling the retention on the items. See Retention in SharePoint 2010 post for more details on how to implement retention to SharePoint items.
There may be a case where we would want to automatically declare items as records after a certain period (say Created Date + 2 years). This can be automated by the following way:
  • Click on Information management policy setting under Permissions and management in library settings.
  • Click on the content type of the document, you want to declare records.
  • Check the Enable Retention checkbox
  • Click on Add a retention Stage
  • Select Time period as Created + 2 years
  • Select Declare record in the Action drop down
  • Click Ok and save your retention schedule for the particular content type.

Similarly, as we applied the rule on content types, the same can be done to the folders as well if you have folders in your library.

SharePoint2010 : Calculated Columns

SharePoint calculated columns often become very useful while doing simple or I should say not so complex calculations within SharePoint fields. I have had requirements which are not an easy one and not even so complex that I should be writing some kind of custom code to implement them, where I find the use of SharePoint calculated columns very useful. While implementing the calculations, I browsed many books, blogs and MSDN forums and found the below mentioned link very useful.

I am sure this post will encourage you more to use SharePoint calculated columns where ever required as they are easy to implement and no maintenance required. 

Happy SharePointing !!

SharePoint2010 : Creating Surveys

Creating surveys and recording response in SharePoint is a very useful feature of any intranet or internet facing site. Surveys can be recorded periodically every quarter or monthly based on organizations. This blog post shows how to create a survey and record responses from the audiences. 
  • You must log on to your SharePoint site with admin rights.
  • Click on View All Site Content and click on Create 
  • Select Lists from the left and select Surveys from the list
  • Enter the name of your survey and click on Create.


Now that our list is created, it’s time to enter the questions for the survey. 
  • Enter your question and click on Next Question until you finish entering all your questions one by one. While filling in the questions, you can select the field type for each question and proceed. You can also branch your users according to their responses, how to do that, we will see later in this post.

Now that you have finished entering all your questions, you should click on Finish which will take you to the list settings page where you can see all your questions listed. Now, you can click on the question you want to put branching on and enter the branching criteria. Finally when all this is done, you are good to test your survey. Click on the survey list from the left hand navigation which will take you to the survey list. Click on Respond to survey for filling in the answer to the questions and submit your survey. Now, if you want the audiences to have only the survey submission rights and they should not be able to view what others are submitting, restrict access to the library accordingly.

Hope this helps