Skip to main content

How to create a custom field type in SharePoint 2010 using visual studio 2010?



There are default field types like Text, Note, Boolean, Integer, Number, Decimal, DateTime, Choice, Lookup etc. We can also make our custom field types by using visual studio 2010.
Why Necessary?

For initialization and format field values.
Also used for data validation on user inputs.
Some points to remember:

Field types cannot be deployed in sandbox solution.
Might cause problem with Microsoft office products.
Might cause problem while viewing list items through data grid ir whenever trying to program against list using LINQ.

The structure should look like the below figure:



Steps to create custom field types:
1.     First create a new SharePoint project using the Empty SharePoint project template.

2.   Inside the project you need to add a public class for each custom field type.
3.     You need to add a special xml file namely fldtypes_{project name}.xml, to deploy the field type.
For each custom field type, you must create a field type class that inherits from one of the built-in field type classes, such as SPFieldText, SPFieldNumber, SPFieldDateTime, and SPFieldMultiColumn.
Then you required to add two public constructor. Here you don’t need to add any code within that constructor, only need to define the parameter list and pass these parameters on to the base class constructor with a matching parameter list. The code is below.
public class EmployeeStartDate : SPFieldDateTime
    {

        public EmployeeStartDate(SPFieldCollection fields, string fieldName)
            : base(fields, fieldName) { }

        public EmployeeStartDate(SPFieldCollection fields, string typeName, string displayName)
            : base(fields, typeName, displayName) { }


        // configure field to display date but not time
        public override void OnAdded(SPAddFieldOptions op)
        {
            this.DisplayFormat = SPDateTimeFieldFormatType.DateOnly;
            this.Update();
        }
}
The next step is to override whatever base class methods and properties make sense for your particular scenario. Here is the code sample that I have done here:
// add logic to create default date as first Monday
        public override string DefaultValue
        {
            get
            {
                DateTime startDate = DateTime.Today;
                while (startDate.DayOfWeek != DayOfWeek.Monday)
                {
                    startDate = startDate.AddDays(1);
                }
                return SPUtility.CreateISO8601DateTimeFromSystemDateTime(startDate);
            }
        }

        // add validation to ensure start date is a Monday
        public override string GetValidatedString(object value)
        {
            DateTime input = System.Convert.ToDateTime(value);
            if (input.DayOfWeek != DayOfWeek.Monday)
            {
                throw new SPFieldValidationException("Employee start date must be a monday");
            }
            return base.GetValidatedString(value);
        }

Here we have completed the creation of the custom field type and now we need to deploy.
Deployment:

For this we need to create a XML file. The naming convention is very much important, it must start with fldtypes then _  and then the project name.xml. For example fldtypes_FieldTypeDemo.xml.
Within that XML file each field type is created using a FieldType element, which must reside inside top-level FieldTypes element. The Field elements are required to provide information about the custom field type, its parent type, its display name, the field class name, the name of the assembly etc. Below is the code sample.



  
    EmployeeStartDate
    DateTime
    Employee Start Date
    Employee Start Date (demo)
    TRUE
    
      FieldTypeDemo.EmployeeStartDate,FieldTypeDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2a494da19a21cf85
    
  



TypeName and FieldTypeClass name are very much important.
Now deploy the solution and enjoy.

Popular posts from this blog

How to deal with SharePoint 2010 exception "An exception occurred when trying to issue security token: The server was unable to process the request due to an internal error"

Scenario: You receive the below exception when you try to logon to a site that has been configured to use Claims Based Authentication with a custom membership provider using FBA credentials: Event ID from Event Log  - 8306 An exception occurred when trying to issue security token: The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.. Explanation: This error started to appear in our QA environment which does not have Visual Studio installed. I have tried starting the service "Claims to Windows Token Service" but that did not help either. I have made sure that all config...

Custom Form Base Login Web Part With Sharepoint 2010

In my  Last Post , I talked about creating a Form based authentication web application with Active Directory LDAP. After implementing that you have surely noticed that, when you try to sign in after creating a site collection from FBA web application, you get the following sign in page: Surely, it does not look pretty at all. So, you might want to change this default login page. In order to do this, first let us create an empty SharePoint project in Visual Studio 2010. After that, add an application page by right click-selecting “Add New Item” and you will get like the following window in Solution Explorer: Notice that, when you add any application page to your project, Visual Studio automatically creates a Layouts  folder. To keep things simple enough for your understanding, you may keep your application page under a folder where you might name it as same as your project like the figure above. Now, add a reference for  Microsoft.SharePoint.IdentityModel...

Migrating from Skype for Business to Microsoft Teams: A Step-by-Step Guide

Do you still use Skype for Business to meet the communication and collaboration needs of your business? If so, now is the perfect time to think about switching to Microsoft Teams, a cutting-edge platform with cutting-edge capabilities and seamless connectivity with other Microsoft services. But if you're unfamiliar with the procedure, switching to a new platform can seem like a difficult task. I'll walk you through the process of switching from Skype for Business to Microsoft Teams in this article. Plan the migration in Step 1 You must make a plan before you start the relocation procedure. Set a deadline, make a list of all the Skype for Business capabilities you presently use, and choose whether to migrate gradually or all at once. Step 2: Set up your surroundings. Make sure your network and infrastructure fulfil Microsoft Teams' standards. Upgrades to your hardware, software, and licences might be necessary. Additionally, confirm that you have the right permissions to ca...