17 February 2011
Sandbox Solution: Overview
26 January 2011
List of Content Managment Systems.
For all CMS lovers here is consolidated list fro all the management systems present till dated.
Click Here By Wiki
25 November 2010
WSP Process stuck in "Deploying"
However this does not actually deploy but only status is populated as "Deployed".
To Overcome this solution since you are on Farm Servers you need to Execute stsadm -o execadmsvcjobs on all the servers
23 November 2010
SharePoint 2010 Database Naming Standards
Database Naming conventions for SharePoint 2010 well defined by John W Powell -Click Here to view!
--------
15 November 2010
FBA : Change Password
( Click Here )
Many were interested in password management for the users. A complete package ready to use is uploaded on codeplex.
However here I’m attaching a custom strip down to users change Password code snippet for the same.
There are two options while password management
1. Just to change Password
2. to provide Question & Answer along with Password change
Note : for Option (2) please add/updated web.Config file within Membership provider
------------------------------------------------------------------
///save button functionlity
void btnChangePassword_Click(object sender, EventArgs e)
{
if (Validate(true))
{
try
{
string AppName = Membership.ApplicationName;
if (.Text.Trim().ToString() != .Text.Trim().ToString())
{.Text = " New and Confirm password Mismatch ! " ; }
else
{
if (Membership.Provider.ChangePassword(.Text, .Text, .Text))
{ //membership provider has Change Password checked in Web.Config
if (Membership.Provider.ChangePasswordQuestionAndAnswer(.Text, .Text, .Text, .Text))
{
//Message: " Your Password Has Been Sucessfully Changed.."
return;
}
}
catch (MembershipPasswordException ee)
{//Exception Message}
}
}
---------------------------------------------------------------------
Let me know your comments/ exceptions etc.
Will be glad to get back to you.
Active Directory: Password Management using SharePoint Webpart.
Here below is the code snipplet to achieve this functionality.
I have implemented using SharePoint Webpart.
please specify you validation accordingly.
-:Core Code:-
------------------------------------------------------------------
SPSecurity.RunWithElevatedPrivileges(
delegate()
{
try
{
WindowsImpersonationContext aspContext = null;
WindowsIdentity identity = WindowsIdentity.GetCurrent();
aspContext = identity.Impersonate();
ContextOptions o = ContextOptions.Negotiate;
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, this._DomainName, this._DomainName Path);
UserPrincipal UPrinci = new UserPrincipal(ctx);
UPrinci = UserPrincipal.FindByIdentity(ctx, SPContext.Current.Web.CurrentUser.LoginName);
UPrinci.ChangePassword(_oldpassword.Text, _newpassword.Text);
_labelmsg.Text = "Password changed successfully!" ;
} //Try
catch (PasswordException ex)
{ //ex.Message; Catch exception.}
} //Delegate
---------------------------------------------------------------------
Let me know your comments/ exceptions etc.
Will be glad to get back to you.
02 November 2010
SharePoint WebPart & ASP.Net Coding workarounds
Few important note I would like add for my developer Friends
For Output : http://akshaya-m.blogspot.com?k=akshaya
Asp .Net Code
Response.Redirect("http://akshaya-m.blogspot.com?k=akshaya");
SharePoint Webpart Code Needs:
HttpContext.Current.Response.Redirect("http://akshaya-m.blogspot.com?k=akshaya");
Get akshaya from the browser URL (http://akshaya-m.blogspot.com?k=akshaya)
Asp .Net Code
Request.SubString["k"]
SharePoint Webpart Code Needs:
Context.Request["k"].ToString();
29 October 2010
SharePoint Excel Error: Unable to Load WorkBook
"The workbook that you selected cannot be loaded because it contains the following features are not supported by Excel Services"
Many blog suggested for Excel Services Trusted Site Entry for the excel file referring.
However the solution that worked for me:
Give "Read permissions" to the users and they will be able to open the file using excel client.
Steps :
For more info on how to see permissions you have for users and groups in your site go to: Site Actions > Site Settings > Advanced Permissions.
Edit User Permissions to Read
Also make sure the permission are inherited to the Document Library permissions.
Revert with your Comments on the same.
12 October 2010
Warning: Super user account!
"The super user account utilized by the cache is not configured...."
Temporary Solution :: execute- 'stsadm -o setproperty -propertyname portalsuperuseraccount -propertyvalue account -url webappurl'.
Furthermore, there is the caveat:
The account should be any account that has Full Control access to the SharePoint databases but is not an application pool account. What have people done - create a special account?
After doing an extensive research i found solution as stated by Mirjam van Olst
http://sharepointchick.com/archive/2010/10/06/resolving-the-super-user-account-utilized-by-the-cache-is.aspx
07 October 2010
SharePoint Installation steps
Over view on Installing Sharepoint 2007by dataSprings
Over view on Installing Sharepoint 2010by SharePoint Knowledge
Custom Welcome Control
Here I'm providing couple of best link for the same.
- Having fun with the SharePoint Welcome ascx control by Wictor Wilén
- customize welcome username control by Avinash
- fba and user display names by Sridhara
- Automatically logging into and out of FBA SharePoint site
20 July 2010
Create WebPart Properties with Drop Down Items.
Dealare field
protected WeekDays _daysWeek = WeekDays.Sun;
/// Days of the Week to be appended in the Dropdown List
public enum WeekDays
{
Mon,
Tue, Web, Thur, Fri, Sat, Sun
};
/// Properties
[Personalizable(PersonalizationScope.Shared)]
[WebBrowsable(true)] [System.ComponentModel.Category("My Zone")]
[WebDisplayName("My DropDown Property")] [WebDescription("Get webpart properties
with DropDown")]
public WeekDays SelectedDay
{
get
{ return _daysWeek; }
}
26 June 2010
Print WebPart Content Area :Sharepoint
Here is a script added at SharePoint Forum (Click Here)
12 May 2010
PARENT-CHILD RELATION USING J-SCRIPT
Create two list in the web application which needs this functionality to be implemented.
- Category: create list named “CATEGORY “ with default Title field in it.
- Sub-Category: Create list named “SUB-CATEGORY” with Title & a lookup from the Category List (Title Column).
Note: For adding script get the List GUID and Default View GUID of the Sub Category List
<script type="text/javascript"> _spBodyOnLoadFunctionNames.push("PageOnLoad");
function PageOnLoad()
{ // This function will add onchange event to the Country DropDown field and call
OnChanged function. var lookupElement = GetElementByTypeAndTitle('SELECT','Category');
if ( lookupElement != null)
{
lookupElement.onchange = function()
{
OnChanged(lookupElement.options[lookupElement.selectedIndex].text)
};
} }
function OnChanged(FilterValue)
{ // siteName - the root / and possibly sub site you are working on
// lookupListName - the guid for the list you want to use as lookup
// lookupViewName - the guid for the view filtering the content of the list
// NOTE: TO DERIVE THE GUID FOR THE LIST NAME AND VIEW NAME
// Open the List -> Settings -> List Settings -> Click on "All Items" view,
// From the URL you can get the ListName GUID and ListView GUID.
// textField - the field you want to show to the user
// valueField - this is most of the time the internal ID field
// FilterField - the field you want to be a filter
// FilterValue - the filter's value var
siteName="
var lookupListName="{90533341-04F8-4353-BBEB-D6D9A0BAAC1F}";
var lookupViewName="{C6C467A6-C04D-448D-8015-D4A622784745}";
var FilterField ="Category";
var textField ="ows_LinkTitle";
var valueField ="ows_ID";
var filterElement = GetElementByTypeAndTitle('SELECT','Sub-Category');
filterElement.innerHTML = ""; var reqstring = siteName + "/_vti_bin/owssvr.dll?CS=109&XMLDATA=1&RowLimit=0&List=" + lookupListName +"&View=" + lookupViewName;
if (FilterValue != "") reqstring= reqstring +
"&FilterField1=" + escape(FilterField) + "&FilterValue1=" + escape(FilterValue);
var req = new ActiveXObject("MSXML2.XMLHTTP"); req.open("GET",reqstring,false);
req.send();
// -- loading response in XML Document
var doc = new ActiveXObject("MSXML2.DOMDocument"); doc.loadXML(req.responseText); var data = doc.documentElement.childNodes(1);
for (i=0;i<data.childNodes.length;i++)
{
var optionText = data.childNodes(i).attributes.getNamedItem(textField).value;
var optionValue = data.childNodes(i).attributes.getNamedItem(valueField).value;
var opt = document.createElement("OPTION");
filterElement.options.add(opt);
opt.innerText = optionText;
opt.value = optionValue;
} }
function GetElementByTypeAndTitle(elementType, elementTitle)
{
//get the Element by tag name.
var allElements = document.getElementsByTagName(elementType);
for (var i = 0; i < allElements.length; i++)
{
//compare the Title.
if (allElements[i].title == elementTitle) return allElements[i];
}
return null;
}
</script>
23 March 2010
Webpart :File Upload with Folder Drill Down
Custom webPart is created for specific document library which populates folders and sub-folder ina dropdown control showing the folder name and file control to upload file to the selected folder/sub-folder.
1. Control initialization is carried in the CreateChildControls()
Note: since the control needs to pertain existing values in on page I referred I have enabled drop Down values true for
-----Code-----
<DropDown_Control>.AutoPostBack = true;
<DropDown_Control>.EnableViewState = true;
-----------
2. Loading the Parent drop-down with all the parent Folders
-----Code-----
using(SPWeb myWeb = mysite.OpenWeb())
{
//before selecting the Folder
ListItem listItem = new ListItem();
listItem.Text = "Select Folder";
listItem.Value = "";
<DropDown_Control1>.Items.Add(listItem);
myWeb.AllowUnsafeUpdates =true;
SPFolder mylibrary = myWeb.Folders[<Document Library Name>.ToString()];
SPFolderCollection AllFolders = mylibrary.SubFolders;
foreach (SPFolder folderin AllFolders)
{
listItem = new ListItem();
listItem.Text = folder.Name.ToString();
listItem.Value = folder.Name.ToString();
<DropDown Control_1>.Items.Add(listItem);
}
}
-----------
3. Loading the Child DropDown with-in the selected parent folders
-----Code-----
void<DropDown Control_1>_SelectedIndexChanged(object
sender, EventArgs e)
{
//The code is much similar the mentioned above except few minor variations
using(myWeb = mysite.OpenWeb())
{
ListItem listItem = newListItem();
listItem.Text = "Select Sub-Folder";
listItem.Value = "";
<DropDown Control_2>.Items.Add(listItem);
myWeb.AllowUnsafeUpdates = true;
string_MainFolder = [<Document Library Name>.ToString();
SPFolder Mainlibrary = myWeb.Folders[_MainFolder];
SPFolder mylibrary = Mainlibrary.SubFolders[<DropDown Control_1>.SelectedValue.ToString()];
SPFolderCollection AllFolders = mylibrary.SubFolders;
foreach (SPFolder folder in AllFolders)
{
listItem = newListItem();
listItem.Text = folder.Name.ToString();
listItem.Value = folder.Name.ToString();
<DropDown Control_2>.Items.Add(listItem);
}
}
}
-----------
4. I have used a file upload control to get the local file to be uploaded
5. To upload my local file in the specified folder location selected on my Button control <Button_Control_Click Event>
-----Code-----
void < Button_Control>_Click(object sender,
EventArgs e)
{
if(<FileUpload_Control>.PostedFile !=null)
{
if(<FileUpload_Control>.PostedFile.ContentLength > 0)
{
System.IO.Stream strm = <FileUpload_Control>.PostedFile.InputStream;
byte[] FileContent = new byte[ Convert.ToInt32(<FileUpload_Control>.PostedFile.ContentLength)];
strm.Read(FileContent, 0, Convert.ToInt32(<FileUpload_Control>.PostedFile.ContentLength));
strm.Close();
// Open site where document library is created.
SPWeb myWeb = mysite.OpenWeb();
// Get the folder that should store the document In this case, there's a document library called "<Document Library Name>" within the Root Web of the Site Collection
SPFolder MainDocLib = myWeb.Folders[<Document Library Name>.ToString()];
// Within the "<Document Library Name>" library, add the document into its Parent Folder
SPFolder parent = MainDocLib.SubFolders[<DropDown Control_1>.SelectedValue.ToString()];
// Within the "<Document Library Name>" library, add the document into a Parent folder's Sub-Folder
SPFolder child =parent.SubFolders[<DropDown Control_2>.SelectedValue.ToString()];
// Upload document
myWeb.AllowUnsafeUpdates = true;
SPFile spfile = child.Files.Add(System.IO.Path.GetFileName(<FileUpload_Control >.PostedFile.FileName), FileContent,true);
child.Update();
myWeb.Dispose();
<Status_Control>.Text = "File Successfully Uploaded! @"+ child.Url.ToString();
}
}
else
{
<Status_Control>.Text = "Sorry! File Not Found!";
}
}
-----------
Bingo!
Special Thanks: Dhawal Mehta
18 February 2010
Domain Specific Master Page/CSS Loading...
Here is the simplest solution suggested & implemented by my friends which is really effective and fast to incorporate..
All my efforts were utilized in created CSS (style Sheet) and its adjacent master file..
These .CSS & .master file are uploaded on the portal’s style library.
For effective implementation I have added the following entries in the master page it self.
CSS initialization has been done in the head tag while domain checking and loading on masterpage is carried on the body.
If you want you can perform the same by using a content Editor Webpart Also.
/*.MASTER File/*
/* HEAD SECTION Tags*/
<link href="../../Shared Resources/custom.css" rel ="stylesheet" type ="text/css"
/>
< link rel ="stylesheet" type ="text/css" title = "MasterStyle01" href = "/Style
Library/MasterStyle01.css" />
< link rel ="stylesheet"type ="text/css" title = "MasterStyle02" href = "/Style Library/MasterStyle02.css" />
</HEAD>
Body must include the conditions to check the User Domain and to load its corresponding master file.
/*BODY SECTION Tags*/
<BODY scroll="yes" onload="javascript:if (typeof(_spBodyOnLoadWrapper) !=
'undefined') _spBodyOnLoadWrapper();">
<WebPartPages: contenteditorwebpart id="ContentEditorWebPart1" runat="server"
__webpartid="{453BF7D0-85B6-40F5-AB3F-7255E09E41D5}">
<WebPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/WebPart/v2>
<Content xmlns ="http://schemas.microsoft.com/WebPart/v2/ContentEditor"> <! [CDATA[<script>
var myLoginUser = '_LogonUser_'.toLowerCase();
if (myLoginUser.indexOf('Domain01') != "-1")
{
if(document.styleSheets)
{
for(var StyleSheetIterator = 0; StyleSheetIterator<document.styleSheets.length; StyleSheetIterator++)
{
if(document.styleSheets[StyleSheetIterator].title =="MasterStyle02")
{ document.styleSheets[StyleSheetIterator].disabled = false; }
if(document.styleSheets[StyleSheetIterator].title == "MasterStyle01") { document.styleSheets[StyleSheetIterator].disabled = true; }
</script>]]> </Content></WebPart> </WebPartPages:ContentEditorWebPart>
........
Note: check the tags existence in the master file itself before adding.
--
Special Thanks : Anshul Gagneja & Dhawal Mehta
17 February 2010
Sharepoint Session State
Here is a link I'm session state configuration in sharepoint.
Click Here blogged by Erick Kraus
Special Thanks : Erick
22 December 2009
Implementing Color Events in SharePoint Calendar
I have color coded event implemented in SharePoint calendar using simple steps and without coding.
All I have done is created a calculated field with input color segment column and a script to include this selected color.
1. Create a Choice type Field named Color .
2. Add the needed colors
3. Create a calculated field name Calendar text Insert formula :
=Color&"|||"&Title
4. Add a CEWP(Content Editor WebPart)
<script language="JavaScript">
var SEPARATOR = "|||";
var nodes, category;
nodes = document.getElementsByTagName("a");
for(var i = 0; i < nodes.length; i++)
{
if(nodes[i].innerText.indexOf(SEPARATOR) != -1)
{
UpdateCalendarEntryText(nodes[i]);
var foundNode = nodes[i];
var trap = 0;
while(foundNode.nodeName.toLowerCase() != "td") {
foundNode = foundNode.parentNode;
trap++;
if(trap > 10)
{
break; // don't want to end up in a loop
}
}
var colour = GetCalendarColour(category);
if(colour ! "")
foundNode.style.background = colour;
}
}
function UpdateCalendarEntryText(anchorNode)
{
var children = anchorNode.childNodes;
for(var i = 0; i < children.length; i++)
{
if(children[i].nodeType == 3 && children[i].nodeValue.indexOf(SEPARATOR)
!= -1)
{
var parts = children[i].nodeValue.split(SEPARATOR);
category = parts[0];
children[i].nodeValue = parts[1];
}
else
UpdateCalendarEntryText(children[i]);
}
}
function GetCalendarColour(desc)
{
var colour;
switch(desc.toLowerCase())
{
case "red":
colour = "#ff0000";
break;
case "blue":
colour = "#0000ff";
break;
case "yellow":
colour = "#ffff00";
break;
case "green":
colour = "#008000";
break;
case "orange":
colour = "#ff8040";
break;
default:
colour = "";
}
nbsp;
return colour;
}
</script>
Bingo
--------
23 October 2009
Simple SharePoint Code Snippets
Added / Updating SharePoint List
osite =SPContext.Current.Site;
oweb = osite.OpenWeb();
oweb.AllowUnsafeUpdates = true;
SPList olist = oweb.Lists["LIST NAME"];
SPListItem newTask = olist.Items.Add();
newTask["Title"] = TextBox1.Text.ToString();
newTask["Comments"] = txtComments.Text.ToString();
newTask.Update();
lbstatus.Text = "Comments Added successfully";
txtComments.Text = "";
lbstatus.Visible = true;
oweb.AllowUnsafeUpdates = false;
oweb.Close();
24 September 2009
KPI : custom Code WebPart
Here i'v developed a webpart for showing KPI indicators which are binded as desired
i have used a literal control and binded a my display structure in this literal control.
Code
//inialization
private LiteralControl Literal1;
SPSiteoCurrentSite = null;
SPWeb oweb =null;
int count;
DataTable dt =new DataTable();
string strStruct;
In CreateChildControls()
Literal1 = new LiteralControl();
Literal1.Load += new EventHandler(Literal1_Load);
Controls.Add(Literal1);
-------
on load event of Literal Control i'll be calling my Core functionlity which will be binded with this literal control.
MyFunction()
{
try {
count = 0;
//oCurrentSite = new
SPSite("http://syngdcds0138:1111");
oCurrentSite = SPContext.Current.Site;
oweb = oCurrentSite.OpenWeb();
oweb.AllowUnsafeUpdates = true;
SPList oProjectName = oweb.Lists["Tasks"];
SPQuery Query1;
DataTable Dtable;
DataView Dview;
SPListItemCollection items1;
SPUser currentUser = oweb.CurrentUser;
string UNAme = currentUser.Name;
Query1 = new SPQuery();
Dtable = new DataTable();
Dview = new DataView();
Query1.Query = "<Where><Eq><FieldRef Name='AssignedTo' /><Value Type='User'>" +
currentUser.Name + "</Value></Eq></Where>";
items1 = oProjectName.GetItems(Query1);
strStruct = "<div>" + "<table>";
foreach (SPListItem objItem in items1)
{//Pending Completed Overdue
string picture = string.Empty;
if (objItem["Status"].ToString() == "Overdue")
{ picture = @"~/_LAYOUTS/Images/ico-task-overdue.jpg";
}
else if (objItem["Status"].ToString() == "Completed")
{ picture = @"~/_LAYOUTS/Images/ico-task-Completed.jpg";
}
else
{picture = @"~/_LAYOUTS/Images/ico-task-Pending.jpg";
}
string[] CreatedBy = objItem["Created By"].ToString().Split('#');
string AssignedBY = CreatedBy[1];
string DDt = Convert.ToDateTime(objItem["DueDate"].ToString()).ToShortDateString();
strStruct += "<tr>" + "<td colspan=2 align='left'>" + "<img src='" + ResolveUrl(picture) + "'
/> " + "<a style='text-align:right; font-size:12px;' href='" + oweb.Url +
"/Lists/" + oProjectName.Title + "/DispForm.aspx?ID=" + objItem["ID"].ToString() + "&Source=" + oweb.Url + "'>" + objItem["Title"].ToString() + "</a>" + "</td></tr>" + "<tr><td colspan=2 style= 'font-family:Arial; font-size:xx-small;'>Due Date:" + DDt + " Assigned By:"
+ AssignedBY + " </td></tr>";
}
strStruct += "<tr><td></td><td> <a href='" + oweb.Url + "/Lists/" + oProjectName.Title + "/Allitems.aspx'>More>></a>" + "</td></tr>" + "<tr>" + "<td><img
src='~/_LAYOUTS/images/ico-task-Completed.jpg'> Completed " + "<img
src='~/_LAYOUTS/images/ico-task-Pending.jpg'> Pending " + "<img
src='~/_LAYOUTS/images/ico-task-overdue.jpg'> Overdue </td>"
+ "</tr>" + "</table></div>";
Literal1.Text = strStruct;
}
catch (Exception ee) { //Error}
}
Revert your comments for this article
22 September 2009
Meeting WorkSpace Webpart :- Gets All Meeting Task
hence a custom WebPart was developed by my associate.
Initially all the related reference /namespaces are added , despite of Microsoft.sharepoint;
We also be needing :
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Meetings;
//Core Code for WebPart.
public class MeetingWorkspace : System.Web.UI.WebControls.WebParts.WebPart
{
//Initilization
SPGridView m_grid;
SPWeb web1 = SPContext.Current.Web;
ObjectDataSource objDataSource = new ObjectDataSource();
//Override Methods
protected override void CreateChildControls()
{
try
{
Type type = this.GetType();
objDataSource.ID = "mTaskDS";
objDataSource.TypeName = type.AssemblyQualifiedName;
objDataSource.SelectMethod = "GetListItems";
objDataSource.ObjectCreating += new ObjectDataSourceObjectEventHandler(objDataSource_ObjectCreating);
this.Controls.Add(objDataSource);
#region SPGridView Details
m_grid = new SPGridView();
m_grid.AutoGenerateColumns = false;
m_grid.Columns.Clear();
HyperLinkField meetingName = new HyperLinkField();
meetingName.HeaderText = "Meeting Name";
meetingName.DataTextField = "MeetingName";
string[] strmeetingName = { "MeetingSiteUrl" };
meetingName.DataNavigateUrlFields = strmeetingName;
meetingName.DataNavigateUrlFormatString = "{0}";
m_grid.Columns.Add(meetingName);
BoundField t = new BoundField();
t.DataField = "Title";
t.HeaderText = "Task Title";
m_grid.Columns.Add(t);
BoundField b = new BoundField();
b.DataField = "Status";
b.HeaderText = "Status";
b.HtmlEncode = false;
b.SortExpression = "Status";
m_grid.Columns.Add(b);
BoundField colStartDate = new
BoundField();
colStartDate.DataField = "StartDate";
colStartDate.HeaderText = "Start Date";
colStartDate.HtmlEncode = false;
m_grid.Columns.Add(colStartDate);
BoundField colDueDate = new
BoundField();
colDueDate.DataField = "DueDate";
colDueDate.HeaderText = "Due Date";
colDueDate.HtmlEncode = false;
m_grid.Columns.Add(colDueDate);
m_grid.DataSourceID = "mTaskDS";
m_grid.AllowGrouping = true;
m_grid.AllowGroupCollapse = true;
m_grid.GroupField = "MeetingName";
m_grid.GroupFieldDisplayName = "MeetingName";
m_grid.AllowSorting = true;
m_grid.AllowPaging = true;
Controls.Add(m_grid);
m_grid.DataBind();
m_grid.PageSize = 3;
m_grid.PageIndexChanging += new GridViewPageEventHandler(m_grid_PageIndexChanging);
m_grid.PagerTemplate = null;
#endregion
base.CreateChildControls();
}
catch(Exception ex) { //Error }
}
//Data View Method
public DataView GetListItems()
{
DataView dv = new DataView();
DataTable dt = new DataTable();
try
{
string rowFilter = "AssignedTo = '" + SPContext.Current.Web.CurrentUser.Name + "'";
foreach (SPWeb web in web1.Webs)
{
if (SPMeeting.IsMeetingWorkspaceWeb(web))
{
SPMeeting meeting = SPMeeting.GetMeetingInformation(web);
// A Meeting Workspace has a Meeting Series list with information about all meetings in the workspace.
SPList meetings = web.Lists["Meeting Series"];
// Get the meeting items that fit the criteria.
SPListItemCollection items = meetings.Items;
// Now extract useful information about each meeting.
foreach (SPListItem item in items)
{
int instanceID = (int)item["InstanceID"];
SPQuery query =new SPQuery();
query.MeetingInstanceId = instanceID;
query.Query = @"<Query> <Where><IsNotNull> <FieldRefName='ID' /> </IsNotNull></Where></Query>" ;
SPList list = web.Lists["Tasks"];
DataTable dtMItems = list.GetItems(query).GetDataTable();
if (dtMItems.Columns["MeetingName"] == null)
{
dtMItems.Columns.Add("MeetingName");
dtMItems.AcceptChanges();
}
if (dtMItems.Columns["MeetingSiteUrl"] == null)
{
dtMItems.Columns.Add("MeetingSiteUrl");
dtMItems.AcceptChanges();
}
foreach (DataRow dr in dtMItems.Rows)
{
dr["MeetingName"] = item.Title;
dr["MeetingSiteUrl"] = web.Url + "/default.aspx?InstanceID=" + instanceID.ToString();
dtMItems.AcceptChanges();
}
dt.Merge(dtMItems);
} } }
dv = new DataView(dt, rowFilter, null, DataViewRowState.CurrentRows);
}
catch (Exception ex) {//Error}
return dv;
}
//Handler
private void objDataSource_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
e.ObjectInstance = this;
}
private void m_grid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
try
{
m_grid.PageIndex = e.NewPageIndex;
m_grid.AllowGrouping = true;
m_grid.AllowGroupCollapse = true;
m_grid.GroupField = "MeetingName";
m_grid.GroupFieldDisplayName = "MeetingName";
m_grid.DataBind();
}
catch (Exception ex) {//Error }
}
}
Addin Your Comments for the Same.
Special Thanks: Ganesh Bankar
18 September 2009
KPI in WSS
Here I have selected a task list in which I have added a calculated field named “Indicator” and these indicators are calculated from the priority field which is categorized (high, Medium & Low).
Here is the code snippet for calculated field.
="<DIV><IMG
src='/_layouts/images/kpipeppers-"&(3-RIGHT(LEFT(Priority,2),1))&".gif'
/></DIV>"
Now added the following script in content editor webpart
<script type="text/javascript">
var theTDs = document.getElementsByTagName("TD");
var i=0; var TDContent = " ";
{
try
{
TDContent = theTDs[i].innerText theTDs[i].textContent;
if ((TDContent.indexOf("<DIV") == 0) && (TDContent.indexOf("</DIV>") >= 0))
{
theTDs[i].innerHTML = TDContent;
}
}
catch(err){}
i=i+1;
}////
ExpGroupRenderData overwrites the default SharePoint function// This part is needed for collapsed groupings
//function ExpGroupRenderData(htmlToRender, groupName, isLoaded)
{
var tbody=document.getElementById("tbod"+groupName+"_");
var wrapDiv=document.createElement("DIV");
wrapDiv.innerHTML="<TABLE><TBODY id=\"tbod"+ groupName+"_\"
isLoaded=\""+isLoaded+ "\">"+htmlToRender+"</TBODY></TABLE>";
var theTBODYTDs = wrapDiv.getElementsByTagName("TD"); var j=0; var TDContent = " ";
while (j < theTBODYTDs.length) {
try {
TDContent = theTBODYTDs[j].innerText theTBODYTDs[j].textContent;
if ((TDContent.indexOf("<DIV") == 0) && (TDContent.indexOf("</DIV>") >= 0))
{
theTBODYTDs[j].innerHTML = TDContent;
} }
catch(err){}
}
tbody.parentNode.replaceChild(wrapDiv.firstChild.firstChild,tbody);
}
</script>
Special thanks: Christophe
10 September 2009
Changing Welcome Page in SharePoint.
Since altering default home page in publishing site is easily possible, however altering the home page for TEAM site is much trick than we can imagine.
Here is a solution that can be adopted to retain a custom or user defined home to be populated as default page after login to a SharePoint portal.
>> Follow these steps for achievement.
1. Check the Content Database of the web application via.
Central Administration >> Application Management >>SharePoint Web Application Management Tab >> Conect Database
4. Go to MS SQL management Studio.
a. Browse to database table named “WelcomeNames”
b. Add the Page name (ex: Myhomepage in my case) in LeafName Column and change its rank to 1.
Special Thanks: Abhijeet Tidke
07 September 2009
Connecting Sharepoint 2007 to your Domino LDAP server
Here is a userful link provided by Mobile Viking, that will help to connect to Domino LDAP server to fetched login users for sharepoint.
The User connection and provider steps are similar as performed during FBA with slight alteration please follow the steps provided >> Click here
Special thanks: Mobile Viking(blog)
21 August 2009
SharePoint Timer Job/Scheduler
This Article target's on development and deployment of timer job in SharePoint.
Lets begin creating a blank project and calling references of SPJobDefinition for assigned timer that will execute the functionality as needed by the timer job to execute. Along with this we are also creating a feature which will specify the trigger schedule.
Here I’m specifying the code snippet for the same.
Create a Class library project include all the SharePoint related references needed.
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
DEFINE JOB
Inherit the SPJobDefinition class which is a member for Sharepoint Administration
class ClassName:SPJobDefinition
{
internal const string TASK_NAME = "MYTimer" ;
public ClassName() : base(){
}
public ClassName (string jobName, SPService service, SPServer server, SPJobLockType targetType): base(jobName, service, server, targetType){
}
public ClassName (string jobName, SPWebApplication webApplication)
: base((jobName, webApplication, null, SPJobLockType.Job) {
this.Title = "MYTimer" ;
}
//Override the Execute function
public override void Execute(Guid targetInstanceId) {
//Calling our function which needs to be executed
MYfunction();
//base.Execute(targetInstanceId);
}
public void MYfunction() {
try
{
SPSite osite = new SPSite( "SiteURL" );
//SPSite osite = SPContext.Current.Site;
SPWeb oweb = osite.OpenWeb();
oweb.AllowUnsafeUpdates = true;
if (oweb.Lists[ "Tasks" ] != null)
{
SPList olist = oweb.Lists[ "Tasks" ];
SPListItem newTask = olist.Items.Add();
newTask[ "Title" ] = DateTime.Now;
newTask.Update();
}
}
catch (Exception ee) { //Add you Exceptions catch }
}
}
Add a new class item for Feature Creation
//Feature creation
class MyclassInstaller:SPFeatureReceiver {
internal const string TASK_NAME = "MYTimer" ;
public override void FeatureInstalled(SPFeatureReceiverProperties properties) {
}
public override void FeatureUninstalling(SPFeatureReceiverProperties properties) {
}
public override void FeatureActivated(SPFeatureReceiverProperties properties) {
// register the the current web
SPSite site = properties.Feature.Parent as SPSite;
// make sure the job isn't already registered
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == TASK_NAME)
job.Delete();
}
TaskLoggerJob taskLoggerJob = new TaskLoggerJob(TASK_NAME, site.WebApplication);
// For Minute Trigger
SPMinuteSchedule schedule = new SPMinuteSchedule();
schedule.BeginSecond = 0;
schedule.EndSecond = 59;
//Intervals define the Minute Time Gap between triggers ex-2= min gap for timer trigger
schedule.Interval = 2;
taskLoggerJob.Schedule = schedule;
taskLoggerJob.Update();
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
// delete the job
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == TASK_NAME)
job.Delete();
}
}
}
DEPLOYMENT
The best way to deploy the time project is by creating a WSP either can use WSP builder or NANT for creating a WSP.
But Before we deploy this solution we need to add its FEATURE.XML in 12 hives feature folder with naming Feature conventions as here i have termed "MyTimer". You can manually add this file in this folder structure with following tags in it :
Feature xmlns="http://schemas.microsoft.com/sharepoint/"
Id="DA1B534E-08D9-41ef-B2C4-B656E9389D80"
Title="MYTimer" Description="Installs the task MY timer job feature to the current site collection."
Scope="Site"
Hidden="TRUE"
Version="1.0.0.0"
ReceiverAssembly="MYSite, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3aeda64f0b993534"
ReceiverClass="MYSite.MyclassInstaller
>
Once a WSP is created you follow the same procedures as recommended i.e
1. Add Solution
2. Deploy Solutions
3. Install Feature
4. Activate Feature.
STSADM Commands for WSP Deployment
pushd %programfiles%\common files\microsoft shared\web server extensions\12\bin
@Echo ------Adding Sol------
stsadm -o addsolution -filename file://wsppath%20/MyTimer.wsp
stsadm -o execadmsvcjobs
@Echo ------deploy Sol----
stsadm -o deploysolution -name MyTimer.wsp -allowGacDeployment -local -force
stsadm -o execadmsvcjobs
iisreset
@echo -----Feature added-----
stsadm -o installfeature -filename MyTimer\feature.xml -force
stsadm -o activatefeature -filename MyTimer\feature.xml -url siteURL -force
stsadm -o execadmsvcjobs
iisreset
There goes you can check timer execution in Timer job status & Timer job definitions in central administration which details the execution time and its status for success.
Just a Quick information of all the inbuilt Timer in sharepoint Sorted by Neil Click here
Here are the snipplets for Weekly, Monthly & Annual.
Hourly(Triggers @ Every Hour 01.Min)
SPHourlySchedule JobSchedule = new
SPHourlySchedule();
JobSchedule.BeginMinute = 1;
JobSchedule.EndMinute = 2;
Weekly (Triggers @ Thursday 04:01:00PM)
SPWeeklySchedule JobSchedule = new SPWeeklySchedule();
JobSchedule.BeginDayOfWeek = DayOfWeek.Thursday;
JobSchedule.EndDayOfWeek = DayOfWeek.Thursday;
JobSchedule.BeginHour = 16;
JobSchedule.EndHour = 16;
JobSchedule.BeginMinute = 01;
JobSchedule.EndMinute = 05;
JobSchedule.BeginSecond = 00;
JobSchedule.EndSecond = 00;
taskLoggerJob.Schedule = JobSchedule;
SPMonthlySchedule JobSchedule = new SPMonthlySchedule();
JobSchedule.BeginDay = 1;
JobSchedule.EndDay = 1;
JobSchedule.BeginHour = 10;
JobSchedule.EndHour = 10;
JobSchedule.BeginMinute = 15;
JobSchedule.EndMinute = 25;
JobSchedule.BeginSecond = 00;
JobSchedule.EndSecond = 00;
Annually (Triggers @ April 21, at 10:15 AM)
SPYearlySchedule JobSchedule = new SPYearlySchedule();
JobSchedule.BeginMonth = 4;
JobSchedule.EndMonth = 4;
JobSchedule.BeginDay = 21;
JobSchedule.EndDay = 21;
JobSchedule.BeginHour = 10;
JobSchedule.EndHour = 10;
JobSchedule.BeginMinute = 15;
JobSchedule.EndMinute = 25;
JobSchedule.BeginSecond = 00;
JobSchedule.EndSecond = 00;
Addin your comments for this article.
Special Thanks: Andrew Connell, Ganesh Bankar.

