Showing posts with label MOSS2007. Show all posts
Showing posts with label MOSS2007. Show all posts

Friday, June 20, 2008

Bind a custom List to a DropDownList

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Microsoft.SharePoint;
using System.Configuration;
namespace TrackingClassLib.Sharepoint
{
public class Clients
{
public static DataTable GetClients()
{
DataTable dtClients;
using (SPSite site = new SPSite(ConfigurationManager.AppSettings["ClientListSiteName"].ToString()))
//Get the url of the site from web.config
{
using (SPWeb web = site.OpenWeb())
{
SPList clientsList = web.Lists["Clients"];
if (clientsList != null)
dtClients = clientsList.Items.GetDataTable();
else
dtClients = null;
return dtClients;
}
}
}
}
}
-------------------------------------------------------------------------------
private void LoadCompanies()
{
ddlCompany.DataSource = Clients.GetClients();
ddlCompany.DataTextField = "Title";
ddlCompany.DataValueField = "Id";
ddlCompany.DataBind();
}


Regards

Tuesday, April 22, 2008

Attaching Event to Custom List

I have a 2 custom Lists “Projects” and “Project Folders Type”
Projects have the following columns: Project Name, Project Description
Project Folders Type has the following columns: Title

I have a document library called “Project Details” with a column “Name”

Problem: The moment I add new project to Projects List, I need to create a folder with name of the projects and sub folders (from Project Folders Type List) in Project Details.

Solution: Create an Item Added event and attach it to Projects List


First:
Create a class Library, Add reference to Microsoft.Sharepoint.dll, and Inherit from SPEventItemReceiver


namespace EventRecieverDemo
{
public class DemoListEvents : SPItemEventReceiver
{
public override void ItemAdded(SPItemEventProperties properties)
{
string toolTipFieldInternalName = "";

using (SPWeb web = properties.OpenWeb())//Open the web you want to use
{
//Get a reference to the "Project Name" Column in "Projects" List
toolTipFieldInternalName = web.Lists[properties.ListId].Fields["Project Name"].InternalName;

//Get the projectTitle just Added
string projectTitle = properties.AfterProperties[toolTipFieldInternalName].ToString();

//Get the "Project Details" document Library where you want to add the folders
SPList myList = web.Lists["Project Details"];

//Create a folder in "Project Details" document library with the name of the project
SPFolderCollection projectFolder = web.GetFolder("Project Details").SubFolders;
projectFolder.Add(projectTitle);

//Get a refernce where you want to add subfolders
SPFolderCollection subfolders = web.GetFolder("Project Details/" + projectTitle).SubFolders;

//Get a reference to "Project Folders Type" where the names of the folders exist
SPList folderNames = web.Lists["Project Folders Type"];

//Loop through "Project Folders List"
foreach (SPListItem folderType in folderNames.Items)
{
//Add Sub Folders
subfolders.Add(folderType["Title"].ToString());
}
}
}
}
}

Build your solution and throw the dll in GAC (c:\windows\assembly), to get the publictoken key right click your dll in the GAC and hit properties

Second: Add another class to the class library and inherit from SPFeatureReceiver
namespace EventRecieverDemo
{
class FeatureReciever :SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWeb web = properties.Feature.Parent as SPWeb;
try
{
SPList list = web.Lists["Projects"];
list.EventReceivers.Add(SPEventReceiverType.ItemAdded, "EventRecieverDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a1942c85f62a2b8d", "EventRecieverDemo.DemoListEvents");
list.Update();
}
finally
{
web.Dispose();
}
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPWeb web = properties.Feature.Parent as SPWeb;
try
{
SPList list = web.Lists["Projects"];
list.EventReceivers[0].Delete();
list.Update();
}
finally
{
web.Dispose();
}

}
}
}
Build your solution again and throw the dll in GAC




Third:
Add an XML file to the class library named Feature.XML, click on the properties tab/Schemas and press ADD and browse to C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML and select wss.xsd, now you can have intellisense in your XML File


<?xml version="1.0" encoding="utf-8" ?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/"
Id="0491ECA8-2ED8-4e9c-B5CF-8E8FCDFFBF16"
Title="Projects Feature"
Description="Create Folders and sub folders for the project"
ReceiverAssembly="EventRecieverDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a1942c85f62a2b8d"
ReceiverClass="EventRecieverDemo.FeatureReciever"
Scope="Web"/>

The Id of the feature is GUID, you can get it from the Create GUID tool in visual studio

Forth:
Browse to “C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES” and create a folder “ProjectsFeature” and throw feature.XML inside it


Fifth:
Now we need to install the feature
Open command prompt and browse to:” C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN”
stsadm –o installfeature –name ProjectsFeature

Reset your IIS
Open you portal go to Site settings/Site Features and activate ProjectsFeature.

Test it :)

Monday, April 21, 2008

Code Behind in Sharepoint Designer

Create a new class Library
namespace CodeBehindTest
{
public class Sample : Page
{
protected Label lblText;//the same name as in SPD
protected Button btn;//the same name as in SPD

protected override void OnInit(EventArgs e)
{
btn.Click += new EventHandler(btn_Click);//Attach the event to the button
}
protected void btn_Click(object sender, EventArgs e)

{
lblText.Text = "Testing successfully";
}

}
}
Sign you assembly using the signing tool in VS
Build your solution, and drag drop the dll to GAC (c:\windows\assembly)
restart your IIS iisreset /noforce
Register you assembly as safe control in the web.config of the site
<SafeControl Assembly="CodeBehindTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eef1ac0da5ab2a1f" Namespace="CodeBehindTest" TypeName="*" Safe="True" />
Create your ASPX Page in Sharepoint Designer
<%@ Page Language="C#" MasterPageFile="~masterurl/default.master"Inherits="CodeBehindTest.Sample,CodeBehindTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eef1ac0da5ab2a1f" %>
<asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server"> <asp:Label ID="lblText" runat="server"></asp:Label> <asp:Button runat="server" Text="Click Me" ID="btn"></asp:Button> </asp:Content>

Regards



Saturday, April 12, 2008

Get "Currently Logged in" Manager

I posted in my earlier posts a sample on creating a custom webpart .
Today im gonna write a sample on how to use sharepoint object model to get the manager of the currently logged in user.
------------------------------------------------------------------------
Create a class library and inherit WebPart, check creating a custom webpart .

Add the following references to your class library:
using Microsoft.Office.Server;
using Microsoft.SharePoint;
using Microsoft.Office.Server.UserProfiles;

Create a label to hold the value of the manager:
Label lbl;
protected override void CreateChildControls()
{
lbl = new Label();
lbl.Text = GetManager();
this.Controls.Add(lbl);
}

Get Manager
private string GetManager()
{
using (SPSite site = new SPSite("
http://moss"))
{
string manager=string.Empty;
ServerContext context = ServerContext.GetContext(site);//Get the context for this site
UserProfileManager profileManger = new UserProfileManager(context);
SPUser user=SPContext.Current.Web.CurrentUser; //Get the current logged in user
try
{
UserProfile prof=profileManger.GetUserProfile(user.LoginName); //Get the profile for the current logged in user
manager = (prof[PropertyConstants.Manager].Value == null)
? "" : prof[PropertyConstants.Manager].Value.ToString(); //Get the manager
}
catch (Exception)
{
manager = "Manager was not found";

}
return manager;

}

Render the Label
protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
{
lbl.RenderControl(writer);
}


Friday, February 8, 2008

Create custom web part (part I)

Add a class library and set its output path (right click on the project name, properties, Built tab) to the bin folder of the sharepoint web site you want to deploy it on (wwwrootwss\VirtualDirectories\ [port#])

Add reference to System.Web
Add the following using statements
System.Web.UI
System.Web.UI.WebControls
System.Web.UI.WebControls.WebParts
Inherit your class from WebPart class
------------------------------------------------------------
Sample:

namespace BilalWebParts
{
public class MyWebPart : WebPart
{
GridView gv;
protected override void CreateChildControls()
{
gv = new GridView();
this.Controls.Add(gv);
BindStudents();
}
protected override void Render(HtmlTextWriter writer)
{
writer.Write("<table border='1' bordercolor='black'>");
writer.Write("<tr><td>");
writer.Write("Students List");
writer.Write("</tr></td>");
writer.Write("<tr><td>");
gv.RenderControl(writer);
writer.Write("</tr></td>");
writer.Write("</Table>");
}
protected void BindStudents()
{
string connectionString = "UID=sa;PWD=P@ssw0rd;Initial Catalog=test;Data Source=MOSS;";
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("select * from Students", con);
cmd.CommandType = CommandType.Text;

DataTable dt = new DataTable();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);

gv.DataSource = dt;
gv.DataBind();
}
}
--------------------------------------------------------------
Build your application
--------------------------------
Add the following line to safe control block in the web.config of the sharepoint website you want to add the webpart to.
<SafeControl Assembly="BilalWebParts" Namespace="BilalWebParts" TypeName="*" Safe="True" />
---------------------------------
Modify trust tag in web.config
<trust level="WSS_Medium" originUrl="" />
---------------------------------
Adding WebPart:
Open sharepoint site
Go to site settings, then go to webparts link under Galleries tab, click new and check BilalWebParts.MyWebPart then click populate gallery.
Go back to you site and Edit Page then Add a webpart, search for MyWebPart and click ok.Students List will apear
------------------------------------------------------------------

Best Regards