Wednesday 25 July 2012

What is a Solution Package?

What is a Solution Package?

A solution is a deployable, reusable package that can contain a set of Features, site definitions, and assemblies that apply to sites, and that you can enable or disable individually. You can use the solution file to deploy the contents of a Web Part package, including assemblies, class resources, .dwp files, and other package components. A solution file has a .wsp file extension.
How to add the solution to the sharepoint farm and then deploy it to a particular web application is discussed below.

1. Adding solution package to the server

stsadm.exe -o addsolution -filename myEventCalendarList.wsp
OR
Use the complete location of the file, for example:
stsadm.exe -o addsolution -filename “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN\Solution\myEventCalendarList.wsp”
Deploy solution package
Deploy solution package command

2. Deploying the Solution

Deploy the solution using the following command:
stsadm -o deploysolution -name myEventCalendarList.wsp  -url http://sp-dev/ -local  -force
Here( -url) means the web application where to deploy the solution.
OR
Goto, Central Administration > System Settings >Manage farm solutions
Now click your solution from the list (for example, myEventCalendarList.wsp).
Manage farm solutions
Manage farm solutions
a)  Now click Deploy Solution and select the web application where you want to deploy the solution (example, http://sp-dev here), Click OK when you are done.
select the web application
Click Deploy Solution
Select web application
Select web application where you want to deploy
b)  And finally you will have your solution deployed status like the following.
solution deployment status
solution deployment status
You are done with deployment.

Export DataTable to Excel in MOSS 2010 and Asp.Net without using excel interop




private void ExportToExcel(DataTable dt, string fileName, string worksheetName)
        {
            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename="+ fileName + "");
            Response.ContentType = "application/vnd.ms-excel";
            StringWriter stringWriter = new StringWriter();
            HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWriter);
            DataGrid dataExportExcel = new DataGrid();
            dataExportExcel.ItemDataBound += new DataGridItemEventHandler(dataExportExcel_ItemDataBound);
            dataExportExcel.DataSource = dt;
            dataExportExcel.DataBind();
            dataExportExcel.RenderControl(htmlWrite);
            StringBuilder sbResponseString = new StringBuilder();
            sbResponseString.Append("<html xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40/"> <head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=windows-1252\"><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>"+ worksheetName +"</x:Name><x:WorksheetOptions><x:Panes></x:Panes></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head> <body>");
            sbResponseString.Append(stringWriter + "</body></html>");
            Response.Write(sbResponseString.ToString());
            Response.End();
        }
        void dataExportExcel_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Header)
            {
                //Header Text Format can be done as follows
                e.Item.Font.Bold = true;
                //Adding Filter/Sorting functionality for the Excel
                int cellIndex = 0;
                while (cellIndex < e.Item.Cells.Count)
                {
                    e.Item.Cells[cellIndex].Attributes.Add("x:autofilter", "all");
                    e.Item.Cells[cellIndex].Width = 200;
                    e.Item.Cells[cellIndex].HorizontalAlign = HorizontalAlign.Center;
                    cellIndex++;
                }
            }
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                int cellIndex = 0;
                while (cellIndex < e.Item.Cells.Count)
                {
                    //Any Cell specific formatting should be done here
                    e.Item.Cells[cellIndex].HorizontalAlign = HorizontalAlign.Left;
                    cellIndex++;
                }
            }
        }

Wednesday 18 July 2012

Adding Paging in SPGridview

Many times we need to create custom SpGridview control and need to add paging in such control,Here I have gone through bit of code which facilitate to add paging in SPGridview Control.

SPGridView gv = new SPGridView();
gv.AutoGenerateColumns = false;
gv.AllowPaging = true;
gv.PageSize = 10;
gv.PageIndexChanging += new GridViewPageEventHandler(gv_PageIndexChanging);

gv.PagerTemplate = null; //You must add this line before binding the DataSource.
gv.DataSource = dv;//Here dv is an object of Dataview
gv.DataBind();

Now you need to add PageIndexChanging Event.

void gv_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gv.PageIndex = e.NewPageIndex;
gv.DataBind();
}

How to change language of an existing SharePoint site collection

Hi All,
Recently I had problem with SharePoint site. The problem was that the site was created in “English” and I want to change the language from ‘English’ to ‘Dutch’. Once site Collection has been created with any language, I was not able to change the language with existing site collection.
After doing some research I found solution.
Resolution:
The language of the site is stored at SP Web level. It is stored in database in Webs table. So you need to change the language in database whatever language you want. To change the language in database you need to fire following Query:

For changing the language of all sites in to ‘Dutch’ language:
UPDATE dbo.Webs SET Language = 1043

Changing the language of one site collection: (Dutch language)
UPDATE dbo.Webs SET Language = 1043 WHERE SiteId = [[SiteCollectionId]]

Changing the language of a single web or subsite: (Dutch language)
UPDATE dbo.Webs SET Language = 1043 WHERE Id = [[WebId]]

Note:
Before applying the new language, you need to verify that the language pack for the language that you want to apply is installed on your machine or not. If language pack is not installed then follows the below steps:

1. Go to link:
http://www.microsoft.com/downloads/details.aspx?FamilyID=2447426b-8689-4768-bff0-cbb511599a45&displaylang=en
2. Change the language for what you want to install the pack. Click on Download.
3. SharePoint Products and Technologies Configuration Wizard will open after installing language pack. On the completing the SharePoint Products and Technologies Configuration Wizard, click Next.
4. On the Configuration Successful page, click Finish.
5. The new language’s folder is available at ‘C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\template’. (I.e. for English it would be ‘1033’, for Dutch it would be ‘1043’).

After installing language pack, you can apply different language with SharePoint site.
Hopefully it will helpful to you.

Tuesday 17 July 2012

How to Check Workflow Status programmatically

How to Check Workflow Status programmatically
Today I'll show checking all workflow statuses in SharePoint site programmatically. Sometimes you may want to check workflow statuses are error or not.







You need workflow status name (list column) when you get a item's workflow status. But you can't get workflow status name from SPWorkflow properties directly. You need to use SPWorkflow.AssociationId property and SPList.WorkflowAssociations property to get workflow status.


using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Workflow;

// This is Console Application //

SPSite site = new SPSite("http://sharepoint-site");
SPWeb web = site.OpenWeb();

foreach (SPList list in web.Lists)
{
foreach (SPListItem item in list.Items)
{
foreach (SPWorkflow workflow in item.Workflows)
{
try
{
Console.WriteLine("item url : " + item.Url);
Console.WriteLine("workflow name : " + list.WorkflowAssociations[workflow.AssociationId].Name);
Console.WriteLine("workflow status : " + item[list.WorkflowAssociations[workflow.AssociationId].Name]);
Console.WriteLine();
}
catch (ArgumentException)
{
//ArgumentException is throwed if the workflow is not exist in the list column.
Console.WriteLine("Workflow name : {0} is already not exist in List title : {1}.",
list.WorkflowAssociations[workflow.AssociationId].Name, list.Title);
}
}
}
}

Thursday 1 March 2012

Creating a Contact Form Web Part for SharePoint

See Link

http://www.codeproject.com/Articles/31594/Creating-a-Contact-Form-Web-Part-for-SharePoint


Introduction

SharePoint is a powerful application that enables an organization to quickly implement a web based portal for managing and sharing information among groups of people. Out of the box, it offers many components such as document libraries and configurable lists. For more advanced requirements, SharePoint provides the ability to create web parts, which are custom components that can plug into and interact with a SharePoint site. Web parts are a simple, yet powerful way to extend the capabilities of SharePoint to meet your organization’s unique requirements.
This article will show, step-by-step, how to create a simple SharePoint web part that implements a contact form. A contact form is typically used on a public website to provide a way for customers, business partners, and others outside the company to submit questions or request information by filling out fields on a web page and clicking a Submit button. This web part will collect the user’s name, email address, phone number, and message, and send the information to an email address when the user clicks Submit.
Contact Form Web Part

Requirements

The web part created in this article will use Windows SharePoint Services (WSS) 3.0. It will also work with MOSS 2007, which is a more advanced version of SharePoint built on the same infrastructure as WSS 3.0. To create the web part, we will be using Visual Studio 2008 installed on Windows Server 2003, along with Windows SharePoint Services 3.0 Tools: Visual Studio 2008 Extensions, Version 1.2, which is a free download from the Microsoft Download Center.

Creating a Web Part Project

The first step is to create a new web part project using Visual Studio 2008. To do this, open Visual Studio 2008, and choose New – Project from the file menu. Select Visual C# - SharePoint from the Project Type list, and select the Web Part template from the list on the right. Enter ContactFormWebPart as the name and the solution name, and choose a directory where you want the solution files to be saved. When you click OK, an empty web part project will be created and opened in Visual Studio.
The empty project has one web part, called WebPart1, but this isn’t what we want to call our web part, so the first step is to delete WebPart1 from the project by right clicking on the WebPart1 folder in the Solution Explorer in Visual Studio and choosing Delete.
Next, let's add a new web part to the project, called ContactForm. Right click on the ContactFormWebPart project in the Solution Explorer, and choose Add – New Item from the context menu. Select SharePoint from the categories list, and Web Part from the templates list. Enter ContactForm for the name, and click Add.
Adding a New Web Part
This gives you a new source file called ContactForm.cs that has an empty class inheriting from WebPart, with some TODO comments. In the next section, we are going to replace the CreateChildControls() function and add some additional code to this class.
After Adding the ContactForm Web Part

Adding Code to Create the Controls

Now, we are ready to begin writing code that will display the web part. Open ContactForm.cs, and you will see a function called CreateChildControls(). This function is where we will add labels, textboxes, and a button to allow the user to interact with our web part.
But first, let's create some class-level variables for the controls that we will create. Declaring them at the class level as opposed to within the CreateChildControls() function will allow us to reference these controls from the button event handler later on.
TextBox txtContactName;
TextBox txtEmailAddress;
TextBox txtPhone;
TextBox txtMessage;
Button btnSendMessage;
Label lblMessageSent;
Now, let's add the code to CreateChildControls to build the display. In order to keep it simple, an HTML table will be used to align the controls in a consistent manner. Each table row will have two cells: one for the field label, and the other for the text boxes. Controls are created one at a time and added to a table cell, which is then added to a table row.
protected override void CreateChildControls()
{
    base.CreateChildControls();

    Table t;
    TableRow tr;
    TableCell tc;
    
    // A table that is used to layout the controls
    t = new Table();

    // Label with instructions for the user
    tr = new TableRow();
    tc = new TableCell();
    tc.ColumnSpan = 2;
    tc.VerticalAlign = VerticalAlign.Top;
    Label lblInstructions = new Label();
    lblInstructions.Text = "Please enter your contact" + 
                           " information and message below.";
    tc.Controls.Add(lblInstructions);
    tr.Controls.Add(tc);

    t.Controls.Add(tr);

    // Contact Name label
    tr = new TableRow();
    tc = new TableCell();
    tc.Style["padding-top"] = "7px";
    tc.VerticalAlign = VerticalAlign.Top;
    Label lblContactName = new Label();
    lblContactName.Text = "Name:";
    tc.Controls.Add(lblContactName);
    tr.Controls.Add(tc);

    // Contact Name textbox
    tc = new TableCell();
    tc.VerticalAlign = VerticalAlign.Top;
    txtContactName = new TextBox();
    txtContactName.ID = "txtContactName";
    txtContactName.Width = Unit.Pixel(300);
    tc.Controls.Add(txtContactName);
    tr.Controls.Add(tc);

    t.Controls.Add(tr);

    // Email Address label
    tr = new TableRow();
    tc = new TableCell();
    tc.Style["padding-top"] = "7px";
    tc.VerticalAlign = VerticalAlign.Top;
    Label lblEmailAddress = new Label();
    lblEmailAddress.Text = "Email Address:";
    tc.Controls.Add(lblEmailAddress);
    tr.Controls.Add(tc);

    // Email Address textbox
    tc = new TableCell();
    tc.VerticalAlign = VerticalAlign.Top;
    txtEmailAddress = new TextBox();
    txtEmailAddress.ID = "txtEmailAddress";
    txtEmailAddress.Width = Unit.Pixel(300);
    tc.Controls.Add(txtEmailAddress);
    tr.Controls.Add(tc);

    t.Controls.Add(tr);
    
    // Phone Number label
    tr = new TableRow();
    tc = new TableCell();
    tc.Style["padding-top"] = "7px";
    tc.VerticalAlign = VerticalAlign.Top;
    Label lblPhone = new Label();
    lblPhone.Text = "Phone Number:";
    tc.Controls.Add(lblPhone);
    tr.Controls.Add(tc);

    // Phone Number textbox
    tc = new TableCell();
    tc.VerticalAlign = VerticalAlign.Top;
    txtPhone = new TextBox();
    txtPhone.ID = "txtPhone";
    txtPhone.Width = Unit.Pixel(300);
    tc.Controls.Add(txtPhone);
    tr.Controls.Add(tc);

    t.Controls.Add(tr);
    
    // Message label
    tr = new TableRow();
    tc = new TableCell();
    tc.Style["padding-top"] = "7px";
    tc.VerticalAlign = VerticalAlign.Top;
    Label lblMessage = new Label();
    lblMessage.Text = "Message:";
    tc.Controls.Add(lblMessage);
    tr.Controls.Add(tc);

    // Message textbox
    tc = new TableCell();
    tc.VerticalAlign = VerticalAlign.Top;
    txtMessage = new TextBox();
    txtMessage.ID = "txtMessage";
    txtMessage.Height = Unit.Pixel(100);
    txtMessage.Width = Unit.Pixel(400);
    txtMessage.TextMode = TextBoxMode.MultiLine;
    txtMessage.Wrap = true;
    tc.Controls.Add(txtMessage);
    tr.Controls.Add(tc);

    t.Controls.Add(tr);
    
    // Empty table cell
    tr = new TableRow();
    tc = new TableCell();
    tr.Controls.Add(tc);    

    // Label for telling the user the message was sent
    tc = new TableCell();
    tc.VerticalAlign = VerticalAlign.Top;
    lblMessageSent = new Label();
    lblMessageSent.Text = "Your message has been sent. Thank you.";
    lblMessageSent.Font.Bold = true;
    lblMessageSent.Visible = false;
    tc.Controls.Add(lblMessageSent);
    tr.Controls.Add(tc);

    t.Controls.Add(tr);

    // Empty table cell
    tr = new TableRow();
    tc = new TableCell();
    tr.Controls.Add(tc);

    // Send Message button
    tc = new TableCell();
    btnSendMessage = new Button();
    btnSendMessage.Text = "Send Message";
    btnSendMessage.Click += new EventHandler(btnSendMessage_Click);
    tc.Controls.Add(btnSendMessage);
    tr.Controls.Add(tc);

    t.Controls.Add(tr);

    this.Controls.Add(t);
}
Finally, we need to add an event handler to send the message as an email when the Send Message button is clicked by the user. In the code above, the event handler was already wired up with the line btnSendMessage.Click += new EventHandler btnSendMessage_Click);, so now we just need to create the btnSendMessage_Click function. This function simply builds an email message using text that was entered into the text boxes, and sends the email using SharePoint's SPUtility.SendEmail() function.
You will need to change the "to" and "from" fields in the message header for your specific situation. The "to" field specifies where the email will be sent, and the "from" field is the email address that the email should appear to be from. The "from" field isn't too important, but some mail servers may require this to be a valid email address.
protected void btnSendMessage_Click(object sender, EventArgs e)
{
    // Build the email subject string
    System.Text.StringBuilder subject = new System.Text.StringBuilder();
    subject.Append("Contact Form Message from ");
    subject.Append(txtContactName.Text);

    // Build the email message string
    System.Text.StringBuilder message = new System.Text.StringBuilder();
    message.Append("Contact Name: ");
    message.AppendLine(txtContactName.Text);
    message.Append("Email Address: ");
    message.AppendLine(txtEmailAddress.Text);
    message.Append("Phone: ");
    message.AppendLine(txtPhone.Text);
    message.AppendLine();
    message.AppendLine("Message:");
    message.AppendLine(txtMessage.Text);

    // Construct the message header
    System.Collections.Specialized.StringDictionary messageHeader = 
    new System.Collections.Specialized.StringDictionary();
    // TODO: Where to send the email
    messageHeader.Add("to", "CustomerService@example.com");
    // TODO: Who the email should be "from"
    messageHeader.Add("from", "ContactForm@example.com");
    messageHeader.Add("subject", subject.ToString());
    messageHeader.Add("content-type", "text/plain");

    // Send the email
    Microsoft.SharePoint.Utilities.SPUtility.SendEmail(
    SPContext.Current.Web, messageHeader, message.ToString());

    // Let the user know the message was sent
    lblMessageSent.Visible = true;

    // Clear out the input fields
    txtContactName.Text = "";
    txtEmailAddress.Text = "";
    txtPhone.Text = "";
    txtMessage.Text = "";
}

Testing the Web Part

Now, we are ready to test the web part. The easiest way to do this is to choose Deploy Solution from the Build menu in Visual Studio 2008. After it has built and deployed successfully, open a web browser and navigate to the SharePoint website. From the Site Actions menu, choose Edit Page. This will place the page into Edit Mode, where web parts can be added, removed, and configured.
For testing purposes, we don't care about the exact placement of the web part, so just click Add a Web Part in the main left zone. This will open up a dialog box listing all of the web parts that are available for use on this SharePoint server. If you scroll down the list, you should see the ContactForm web part. Put a checkbox next to this web part, and click the Add button.
Adding the Web Part to SharePoint
You should now see the contact form displayed on the page. While still in Edit Mode, you can change other settings such as the title that is displayed above the web part, or the height and width. For testing, we are going to leave everything as the default, so just click the Exit Edit Mode button. The page will now show the contact form, and we are ready to test it. Enter a name, email address, phone number, and message, and click Send Message. If all is successful, you will see a message saying your message has been sent, and within a few minutes, receive the email that was generated by btnSendMessage_Click().
Testing the Web Part in SharePoint

Checking the Outgoing E-Mail Settings

If your receive an error message when you click Send Message, or if the email does not arrive within 5 or 10 minutes, it could be that the outgoing email settings have not been configured in SharePoint. This can be done by a SharePoint administrator using the Central Administration website. In Central Administration, go to the Operations tab, and select Outgoing E-Mail Settings. Make sure the Outbound SMTP Server is configured with the name of the mail server.
Configuring Outgoing E-mail Settings for SharePoint

Deploying the Web Part

Once you have tested the web part, it is ready to be deployed as a solution to the production SharePoint server. For this, we will create a SharePoint solution package, which is a .cab file that has a .wsp extension. The .wsp file is created automatically when you choose Deploy from within Visual Studio. Change the active configuration in Visual Studio from Debug to Release, and then choose Deploy Solution from the Build menu.
After it has successfully deployed the release version to your local SharePoint server, there will be a file called ContactFormWebPart.wsp in the /bin/Release subfolder of your project directory. Copy this file to a folder on your production SharePoint web server, or to a location that can be accessed from this server. Then, run the following commands from a command prompt on the production SharePoint web server. These commands will add the solution to SharePoint and then deploy the solution, making it available for use by all sites.
C:\>stsadm -o addsolution -filename ContactFormWebPart.wsp

C:\>stsadm -o deploysolution -name ContactFormWebPart.wsp -immediate 
           -allowgacdeployment -allcontenturls
Now, the web part is available for use on the production SharePoint server. Only one more thing is left to do. When you want to use it in a SharePoint site, you will need to add it to that site's web part gallery. To do this, navigate to your SharePoint site and go to Site Actions - Site Settings. Then, click on the Web Parts link under the Galleries section. This opens up a web page listing the web parts that are currently available for this site. Click New to add a new web part to the list. The next web page shows the deployed web parts. Check the box next to ContactFormWebPart.ContactForm, and then click the Populate Gallery button.
You should now see the Contact Form Web Part in the list of web parts in this site's gallery. Once the web part is in the gallery, you can edit a page in the site, and add the web part to the page, just as we did during testing.

Additional Improvements

There are some improvements that can be made to the Contact Form Web Part that we've created, but these are beyond the scope of this article. Here are some ideas for improving the Contact Form Web Part:
First, we could add validation to the fields to make sure that the required fields are filled in and that the data entered matches the expected format. For example, contact name should be required, message should be required, the email address should match the typical format of an email address, and the phone number should be in the format of a valid phone number.
Second, we could add properties to the web part to allow customization of the label text and the to and from addresses used for sending the email. These properties would allow changes to be made to the web part's appearance while editing the page in SharePoint, instead of requiring those changes to be made in the source code.

Tuesday 28 February 2012

C# - The Var Keyword as an Implicit Type and in LINQ Anonymous Classes - Software Tutorial by bidwx

Watch

http://www.youtube.com/watch?v=9SeUdSKCo2I

C# versions and their features

Each version of C# has a number of new features and generally a major theme. The major themes have been generics and nullable types in C# 2.0, LINQ in C# 3.0, and dynamic types in C# 4.0. The major features added in each release are generally considered to be the following:
·         C# 2.0 - Generics (.NET Framework support was added, and C# benefited from this); iterator pattern (the yield keyword); anonymous methods (the delegate keyword), nullable types, and the null coalescing operator (??).
·         C# 3.0 - Anonymous types, extension methods, object initializers, collection initializers, implicitly typed local variables (var keyword), lambda expressions (=>), and the LINQ query expression pattern.
·         C# 4.0 - Optional Parameters and Named Arguments, Dynamic typing (dynamic type), improved COM-Interop, and Contra and Co-Variance.