SharePoint 2010: Unable to see web parts deployment on a seperate server


Okay, we know SharePoint 2010 has a great feature of deployment where you can just press the F5 button to debug or right click and deploy the project on the local server BUT, how about when it comes to deploying the web parts on another server, lets say the production machine?! Well, when I did that for the first time, it was a really tiring and annoying experience. Here’s what happened: I packaged up the web part project, transported it to the other machine, ran the scripts for the deployment – everything was going so smooth until I found out that I just couldn’t see the damn web part anywhere when I tried to Insert them on a page there!!! Naturally, you’d think that okay I’m done deploying the web parts so let’s just add them up on the appropriate page and be done with it. After hours and hours of banging my head with this issue and chat with my friend here in office, Mathias Gustafsson. I finally found out that you need to go and enable the feature first in “The Site Collection Features” section in order to see those web parts. And to make things even worse, I had to to have higher administrative rights to do that, otherwise, you don’t even see the menu given in the screenshot here.

Sharepoint 2010 Site Collection Administration
Sharepoint 2010 Site Collection Administration

In the beginning I was able to install the web parts being the “Owner” of the site collection BUT NO!! To see those web parts in the SharePoint 2010 site and actually put them to some use, you need to be the “Site Administrator” not just the owner. YEAH RIGHT! Very intuitive!! That thing just cost me some 5-6 hours can you imagine that?! Anyways, I hope it helps relieve the pain of some of you out there.

Advertisements

SPGridView’s OnRowDataBound event returning nulls – Unable to FindControls


Earlier today I was just playing around with SharePoint 2010 and thought I should do a simple task with SPGridView, that is to display the data and show an appropriate image in the “Status” column instead of the text. Hmm, sounds quite simple doesn’t it! But no, it turned into a misery. Well, when I started it was quite natural to use the OnRowDataBound event on that to capture the data and do some modifications with the controls (I was using TemplateFields in the SPGridView by the way), so I did that and I tried  doing things like e.Row.FindControl(“xyz”), e.Row.Cells[2] and using RowIndex property which was returning -1 where e refers to an object of GridViewRowEventArgs and there was nothing to get over there. It was nulls all around!

So here’s a sample of the code in the visual webpart that I was writing:-

<SharePoint:SPGridView ID=”spGvWorkOrders”  runat=”server” >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID=”lbl_workOrderId” Text='<% # Bind(“Id”) %>’  runat=”server”></asp:Label>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField>
<ItemTemplate>
<asp:Label ID=”lbl_workOrderTitle”  runat=”server” Text='<% # Bind(“Title”) %>’ ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>

<asp:Image ID=”img_status” Width=”10px” ImageUrl='<% #StatusToImage(“\””+ Eval(“Status”)+”\””) %>’ runat=”server” />
</ItemTemplate>
</asp:TemplateField>

And here is the function:-

protected string StatusToImage(string status)
{
if ( ( rowcount++ % 2) == 0)
return “~/_layouts/Images/WorkOrders/add.png”;
else
return “~/_layouts/Images/WorkOrders/arrow_up_green.png”;
}

Notice that I had been using the Bind function earlier but when I tried using it to send the value to StatusToImage function it did not work. Eval is the better option anyway in case you’re just interesting in displaying the data.

So what I did was that instead of using the event I just put the function call inside the ascx code so that whenever a row is created that function is called with the value of Status from the Data Source and with that value sent to a function, we can return back a string to give the path to the image file. The syntax however, is quite tricky and it took me a while to figure that out correctly but it worked in the end. Hope it will save you some time though!

Assignment List Web Part generates an error during configuration of SharePoint Learning Kit


Well, I started working with the SharePoint Learning Kit (SLK) 1.4 in MOSS 2007 and I was following the GettingStarted.pdf document that accompanies the package. So on Page 10 where you’re supposed to add the SLK Assignment List Web Part to a site, as I followed the instruction the site would not show anything, then I went back to the Site Actions –> Site Setting –> Web Parts and clicked on the AssignmentListWebPart.webpart. It showed the following message

“An error occurred. More information may be available in the server event log.”

Now it is important to note that the logs being referred to here are NOT the ones at C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\LOGS because these are the WSS logs.

The logs you need to see are the ones in the Administrative Tools –> Events Viewer. So when I checked that it said

SharePoint Learning Kit Error
System.Data.SqlClient.SqlException: Cannot open database “SharePointLearningKit” requested by the login. The login failed.Login failed for user ‘NT AUTHORITY\NETWORK SERVICE’.

So now I knew that all I need to do is to grant access to the SharePointLearningKit database to the user NT AUTHORITY\NETWORK SERVICE and to do that just fire up SQL Server Management Studio, go to Security node –>Logins –> right click NT Authority\Network Service –> Properties –> User Mappings –> check the database SharePointLearningKit and simply check the db_owner  role for it to give it maximum access for the time being –> Press the OK button and you should be able to see the Web Part now!