This site is a self-contained low down on what's going on in my life, what I'm working on, what I'm thinking about, and how I'm feeling about life in general.
Thursday, 19 June 2008
I’ve been trying to create two webparts that communicate with each other in SharePoint. Looking around the web there are a number of good examples of how to create an asp.net 2.0 webpart that communicates with another but there are a couple of things that they don’t tell you.
If you want your webparts to be able to talk to each other, you have to develop them in the same project in Visual Studio, otherwise they won’t compile. Sounds obvious enough but no-one ever actually says to do this.
Once you’ve built the provider webpart, simply add a new webpart into the solution explorer and off you go.
Another thing that is never covered for SharePoint is how to link the webparts once they’ve been developed. Firstly, click edit page, and then click the edit button on either the provider or the consumer webpart.

From here you will see connections, select send ... to, or get ... from, depending on which webpart you’re looking at. Once this relationship has been established, your webparts should communicate perfectly.
Friday, 30 May 2008
I can honestly say that writing a .net 2.0 webpart for sharepoint 2007, that has the sole function of reading data from a database, has been the hardest thing I've ever done in my life!
It took me 14 hours through a combination of trail and error to get it working, finding very few resources online, and not being able to use the coveted visual tools available to asp.net developers. Anyway, I got there, and I'll share how with you.
To start with, the tools used. I'm using visual studio 2005, and have the wsssdk installed, the sharepoint 2007 sdk, and the wss 3.0 extenders for Visual Studio 2005.
Start up Visual Studio and create a new webpart. It'll be called webpart1 by default, lets leave it at that for now. First off, right click the project in the solution explorer, and click add reference. Scroll down and select System.Data. Once you've added this we're ready to begin.
Now, make your code look like this:
using System;
using System.Runtime.InteropServices;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Serialization;
using System.Data;
using System.Data.SqlClient;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
namespace WebPart1
{
[Guid("493c926d-f885-4965-b72d-ee18e0292630")]
public class WebPart1 : Microsoft.SharePoint.WebPartPages.WebPart
{
private string _sqlStatement = "SELECT * from tblTest";
[WebBrowsable(true),
Personalizable(PersonalizationScope.Shared),
WebDisplayName("SQL Statement"),
WebDescription("Query to return a set of data")]
public string SQLstatement
{
get { return _sqlStatement; }
set { _sqlStatement = value; }
}
protected override void CreateChildControls()
{
if (string.IsNullOrEmpty(SQLstatement)
|| !SQLstatement.ToUpper().TrimStart().StartsWith("SELECT")
|| SQLstatement.Contains(";"))
{
Literal lit = new Literal();
lit.Text = "Only single SELECT statement allowed"; Controls.Add(lit); return;
}
DataGrid grid = new DataGrid();
//Attempt connection
try
{
using (SqlConnection conn = new SqlConnection("server=SP-TEST\\databasearea; Initial Catalog=spTest; User ID=sharepoint; Password=password; Trusted_connection=yes;"))
{
SqlCommand cmd = new SqlCommand(SQLstatement, conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
grid.DataSource = reader;
grid.AutoGenerateColumns = true;
grid.DataBind();
reader.Close();
conn.Close();
} Controls.Add(grid);
}
catch (Exception exp)
{
Literal errMessage = new Literal();
errMessage.Text = exp.ToString();
Controls.Add(errMessage);
}
}
}
}
Now just build the control and your webpart should be working well. Lets take a look at some of the key parts.
private string _sqlStatement = "SELECT * from tblTest";
[WebBrowsable(true),
Personalizable(PersonalizationScope.Shared),
WebDisplayName("SQL Statement"),
WebDescription("Query to return a set of data")]
public string SQLstatement
{
get { return _sqlStatement; }
set { _sqlStatement = value; }
}
This part sets the SQL query you're about to run.
using (SqlConnection conn = new SqlConnection("server=SP-TEST\\databasearea; Initial Catalog=spTest; User ID=sharepoint; Password=password; Trusted_connection=yes;"))
{
SqlCommand cmd = new SqlCommand(SQLstatement, conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
grid.DataSource = reader;
grid.AutoGenerateColumns = true;
grid.DataBind();
reader.Close();
conn.Close();
} Controls.Add(grid);
This part connects to the database and displays the results in a data grid. Note the server name SP-TEST\\databasearea has two backslashes, this is to counter the escape effect of a backslash.
So that's it really, tiny bit of code with big implications. Hope it opens some doors for you.
Monday, 26 May 2008
I thought that a new job and a new baby together would be a clean break all-round. As it turns out it's about the hardest thing I've ever been through, and on top of it all I've got a cold.
But enough moaning, on to some updates.
Firstly, week two at work is over, and things are getting better! More structure, more idea where things are going, more settled and more vision for the future.
On the back of work, I'm learning asp.net, amongst other things. I always knew it would be a huge leap going from asp 3.0 to .net, and there is that ever-present, inherent fear of the unknown to contend with. Now I have no choice but to learn it, and thankfully it's not as hard as I thought. In fact I'm enjoying it, which definitely helps.
Outside of work it's been a tough week. The amount of work that goes into raising a baby is starting to sink in and take its toll, and I'm only doing a quarter of the work (if that). Lisa has been amazing taking care of him, but it's still draining. You just don't have time for anything, and sometimes knowing that just eats away at you, even if you don't have anything to do anyway. I can only update my blog at crazy times of day. It's a tough lifestyle change but I'm getting used to it. Single parents have more than my admiration, they have my vote for sainthood.
The run of failing electrical items has progressed today as I ordered a replacement fridge freezer. The old one doesn't keep milk for more than a couple of days, bugger. That's now the Xbox, the Camcorder, The Tumble dryer, and the washing machine that have bitten the dust recently, as if things weren't strained enough.
Another positive is that I found a little motivation, and a little time to start working on a few project ideas. Unfortunately I have little of both and things haven't worked out very well so far, but progress is progress. I want to build something to help me save money, and will probably make it into a web service, all singing all dancing. I'm also working on a VLE of my own, probably open source. Hopefully it will be my first asp.net project release, although I plan a php version also.
Well the room is starting to rock back and forth which means one thing, need sleep.