tag:blogger.com,1999:blog-68312920262925426072024-02-06T19:57:14.873-08:00AvinashAvinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.comBlogger77125tag:blogger.com,1999:blog-6831292026292542607.post-83113653105990046282011-07-12T11:06:00.000-07:002011-07-12T11:06:14.954-07:00Undo "Add To Reject List" in Samsung MobileNavigate to following menu options to <b>Add/Edit/Delete</b> any number from reject list:<br />
<br />
<b>Settings > Application settings > Call > All calls > Auto reject > Reject list</b><br />
<br />
Here you can find the Reject list. <br />
You can Add/Edit/Delete number which you want to maintain in Reject List.<br />
<br />
Reference: <a href='http://forums.cnet.com/7723-13973_102-350106.html'>Samsung Forum</a>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-2968481658387761242011-07-11T21:38:00.000-07:002011-07-21T12:05:04.105-07:00Creating Custom Field in SharePoint 2010In this post basically I tried to answer following questions:<br />
A. What is Custom Field in SharePoint?<br />
B. What are the steps to implement Custom Field in SharePoint?<br />
C. How to override Save button while creating New Item in SharePoint's List?<br />
D. How to consume Custom Field?<br />
<br />
<br />
I explained the above questions with following scenario:<br />
1. Created a column based on custom field.<br />
2. Override the <b>Save button</b> of <b>New Item page</b>.<br />
3. In Save button click, beside performing normal operation, I am setting the another column value with concated value of custom field column and current <i>TimeStamp</i>.<br />
<br />
<br />
<b>A. What is Custom Field in SharePoint?</b><br />
=============================================<br />
Exceprt from MSDN site-<br />
<i>Although site columns provide users and developers with new capabilities in reuse, you can define a reusable column definition that is even more powerful. With Microsoft SharePoint Foundation 2010, you can drop down to a lower level by creating custom field types.</i><br />
Reference: <a href='http://msdn.microsoft.com/en-us/library/gg132914.aspx'>Creating Custom SharePoint 2010 Field Types</a><br />
<br />
<br />
Exceprt from Chak's blog-<br />
<i>In SharePoint, a site column is a reusable column definition, or template, that you can assign to multiple lists across multiple SharePoint sites. Site columns are associated to a particular Data Type. This Data Type is called a Field. For example, when you create a site column, you are also prompted to select the type of information, which is nothing but a Data Type or a Field.<br />
<br />
Sometimes, it is necessary for us to create our own custom field that does not conform to the field types included in SharePoint by default.<br />
<br />
All you have to do is – create a custom field which would result in creating a Field Class, Field Control and Field Type Definitions.<br />
1. The Field Class should inherit from any of the SPField classes.<br />
2. The Field Control should have Field Rendering Control and a Field Rendering Template.<br />
3. The Field Type Definitions is a XML file which contains some information about the custom field.</i><br />
<br />
Reference: <a href='http://www.chakkaradeep.com/post/SharePoint-Creating-a-custom-field.aspx'>SharePoint: Creating a custom field</a><br />
<br />
<br />
<br />
<br />
<b>B. What are the steps to implement Custom Field in SharePoint?</b><br />
=====================================================================<br />
<br />
Following Components/Files are required for creating Custom Field:<br />
<br />
1. Add Assembly reference of <b>PresentationFramework</b><br />
2. <b>UserControl/ASCX</b> in SharePoint Mapped CONTROLTEMPLATES folder of 14 hive<br />
3. XML in SharePoint Mapped XML folder of 14 hive<br />
4. XSL in SharePoint Mapped XSL folder of 14 hive [Optional]<br />
5. C# class for <b>CustomField</b><br />
6. C# class for <b>CustomFieldControl</b><br />
7. C# class for <b>CustomFieldValidationRule</b> [Optional]<br />
<br />
<br />
<br />
<b>1. Steps to Add PresentationFramework reference:</b><br />
=======================================================<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEWDgQGQIhU0WbY0YN-4ZlKSsTVChaRtTUYrmF1ZkDwu00THgxFrhYMpentIrndq3j_F_iDVfIgBy8ZGXRNkFK8C7XpAXLBR8dKsjZgSHFHEZSOOm7O71GrHr5JxOhQU3kxs4PBMirGMvx/s1600/AddReference.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="299" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEWDgQGQIhU0WbY0YN-4ZlKSsTVChaRtTUYrmF1ZkDwu00THgxFrhYMpentIrndq3j_F_iDVfIgBy8ZGXRNkFK8C7XpAXLBR8dKsjZgSHFHEZSOOm7O71GrHr5JxOhQU3kxs4PBMirGMvx/s400/AddReference.jpg" /></a></div>Solution Explorer > Project > References > .Net tab > Select PresentationFramework<br />
<br />
<br />
<b>2. Steps to add UserControl:</b><br />
==================================<br />
<br />
a. Add <b>CONTROLTEMPLATES</b> Mapped Folder:<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBSikGzdLd70phQ0r01NbO3AlKz2GjYNLj43yMwhmNI-wIViNilOHgrszj9KLKdz1stVLjn73zYude1h0tINV9BWyg3XtAvN1x3rPhp-y3HMI-Qpwbpyk8Qq3VSfUnNE-3-ZJgCPPd8in4/s1600/AddMappedFolder.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="225" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBSikGzdLd70phQ0r01NbO3AlKz2GjYNLj43yMwhmNI-wIViNilOHgrszj9KLKdz1stVLjn73zYude1h0tINV9BWyg3XtAvN1x3rPhp-y3HMI-Qpwbpyk8Qq3VSfUnNE-3-ZJgCPPd8in4/s400/AddMappedFolder.jpg" /></a></div>Solution Explorer > Project > Right-Click > Add > SharePoint Mapped Folder...<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk1sB8KN_YTTodcwFLGRHJdDh7xy9NZ7f50W-g9zwCevlbULK3sha8vfyRdwU-sVg64fkpIMEiWRyNLBf29kN47x3pzrY2cJB8g6oWsNNviPb40vRsUJly_YaO5Keio3HBUQI3bjD43aTu/s1600/AddMappedFolder2.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="400" width="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk1sB8KN_YTTodcwFLGRHJdDh7xy9NZ7f50W-g9zwCevlbULK3sha8vfyRdwU-sVg64fkpIMEiWRyNLBf29kN47x3pzrY2cJB8g6oWsNNviPb40vRsUJly_YaO5Keio3HBUQI3bjD43aTu/s400/AddMappedFolder2.jpg" /></a></div>Select desired folder in opened pop-up window. <br />
<br />
<br />
b. Add UserControl in Project:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2uoNVOAl7_vSgKvyK2w_DN4ubK9twSe2bWELaZiLvMIkJxXGDxfQ-atcN7eCL44otB7_js2vPdqp7Ov-OeDldi1H6pETDkt_SrwqZZiWR3YefnEcWS8djZ_ShST2ggaZogunhLQGx3DKX/s1600/AddNewItem.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="236" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2uoNVOAl7_vSgKvyK2w_DN4ubK9twSe2bWELaZiLvMIkJxXGDxfQ-atcN7eCL44otB7_js2vPdqp7Ov-OeDldi1H6pETDkt_SrwqZZiWR3YefnEcWS8djZ_ShST2ggaZogunhLQGx3DKX/s400/AddNewItem.jpg" /></a></div><br />
<br />
UserControl File:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP1dt89qZRKkW9NqbDAWOULQgCWCXIJzgT4AyDIDnL5rZL5DRWa15D6fLm5X5ZErF4JrYqkT1u55Karn0PG37TD_u9uQGrtDUzkdEHcVm8KtOvUrRUipVh4fAzJRt_INp5vNLPbVWP6Zkp/s1600/UserControlFile.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="225" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP1dt89qZRKkW9NqbDAWOULQgCWCXIJzgT4AyDIDnL5rZL5DRWa15D6fLm5X5ZErF4JrYqkT1u55Karn0PG37TD_u9uQGrtDUzkdEHcVm8KtOvUrRUipVh4fAzJRt_INp5vNLPbVWP6Zkp/s400/UserControlFile.jpg" /></a></div>Installed Templated > Visual C# > SharePoint > 2010 > User Control [Middle Pane] > Enter desired name<br />
<br />
<br />
Code snippet for User Control [e.g. AviCustomNameField.ascx]:<br />
<br />
<div style="BACKGROUND-COLOR: #ffffcc"><pre><%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral,
PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral,
PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities"
Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral,
PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI"
Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Register Tagprefix="WebPartPages"
Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint,
Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" %>
<SharePoint:RenderingTemplate ID="AviCustomNameFieldControl" runat="server">
<Template>
<table>
<tr>
<td>
<asp:TextBox ID="MyCustomNameText" runat="server"
Width="385px" />
</td>
</tr>
</table>
</Template>
</SharePoint:RenderingTemplate>
<SharePoint:RenderingTemplate ID="AviCustomNameFieldControlForDisplay"
runat="server">
<Template>
<table>
<tr>
<td>
<asp:Label ID="MyCustomNameLabel" runat="server"
Width="385px" />
</td>
</tr>
</table>
</Template>
</SharePoint:RenderingTemplate>
</pre></div><br />
<br />
<br />
<b>3. Steps to add XML in SharePoint Mapped XML folder of 14 hive:</b><br />
==================================================================<br />
a. Add SharePoint Mapped Folder for XML [as mentioned in earlier steps]<br />
b. Add new XML file [as mentioned in earlier steps]<br />
c. Code snippet for XML [e.g. fldtypes_AviCustomNameField.xml]<br />
<br />
<div style="BACKGROUND-COLOR: #ffffcc"><pre><?xml version="1.0" encoding="utf-8" ?>
<FieldTypes>
<FieldType>
<Field Name="TypeName">AviCustomNameField</Field>
<Field Name="ParentType">Text</Field>
<Field Name="TypeDisplayName">Avi Custom Name Field</Field>
<Field Name="TypeShortDescription">Avi Custom Name Field</Field>
<Field Name="UserCreatable">TRUE</Field>
<Field Name="ShowOnListCreate">TRUE</Field>
<Field Name="ShowOnSurveyCreate">TRUE</Field>
<Field Name="ShowOnDocumentLibraryCreate">TRUE</Field>
<Field Name="ShowOnColumnTemplateCreate">TRUE</Field>
<Field Name="FieldTypeClass">Avi.AviCustomNameField,$SharePoint.Project.AssemblyFullName$</Field>
</FieldType>
</FieldTypes>
</pre></div><br />
<b>Note: </b>Prefix the file name(s) for XML/XSL file as <b>fldtypes_</b><br />
<br />
<br />
<b>4. Steps to add XSL in SharePoint Mapped XSL folder of 14 hive:</b><br />
==================================================================<br />
a. Add SharePoint Mapped Folder for XSL [as mentioned in earlier steps]<br />
b. Add new XSL file [as mentioned in earlier steps]<br />
c. Code snippet for XSL [e.g. fldtypes_AviCustomNameField.xsl]<br />
<br />
<div style="BACKGROUND-COLOR: #ffffcc"><pre><xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema"
xmlns:d="http://schemas.microsoft.com/sharepoint/dsp"
version="1.0"
exclude-result-prefixes="xsl msxsl ddwrt"
xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:ddwrt2="urn:frontpage:internal">
<xsl:template match="FieldRef[@Name = 'AviCustomNameField']" mode="Text_body">
<xsl:param name="thisNode" select="." />
<span style="background-color:lightgreen;font-weight:bold">
<xsl:value-of select="$thisNode/@*[name()=current()/@Name]" />
</span>
</xsl:template >
</xsl:stylesheet>
</pre></div><br />
<b>Note: </b>Prefix the file name(s) for XML/XSL file as <b>fldtypes_</b><br />
<br />
<br />
<b>5. Steps to add C# class for CustomField:</b><br />
================================================<br />
a. Add new C# file as per following figure:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNvbcRNyFL4VsA9U8tRXnICtZdAjhudjGTXYx7tHzqHqqh9iCThkRC9cg_SJPT4rwlqb1D-yv7GDl4IvxMxVyDPkkg8KAaCXbSIdRHPM3-6xXTisxqeX6QDB5t-Wy-gNvpgdzuRR28rTNk/s1600/CSharpFile.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="225" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNvbcRNyFL4VsA9U8tRXnICtZdAjhudjGTXYx7tHzqHqqh9iCThkRC9cg_SJPT4rwlqb1D-yv7GDl4IvxMxVyDPkkg8KAaCXbSIdRHPM3-6xXTisxqeX6QDB5t-Wy-gNvpgdzuRR28rTNk/s400/CSharpFile.jpg" /></a></div><br />
Installed Templated > Visual C# > Class [Middle Pane] > Enter desired name<br />
<br />
b. Code snippet for CustomField [e.g. AviCustomNameField.cs]<br />
<br />
<div style="BACKGROUND-COLOR: #ffffcc"><pre>using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Security;
using System.Windows.Controls;
using System.Globalization;
using System.Security.Permissions;
namespace Avi
{
class AviCustomNameField : SPFieldText
{
public AviCustomNameField(SPFieldCollection fields, string fieldName)
: base(fields, fieldName)
{
}
public AviCustomNameField(SPFieldCollection fields, string typeName,
string displayName)
: base(fields, typeName, displayName)
{
}
public override BaseFieldControl FieldRenderingControl
{
[SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)]
get
{
BaseFieldControl fieldControl = new AviCustomNameFieldControl();
fieldControl.FieldName = this.InternalName;
return fieldControl;
}
}
public override string GetValidatedString(object value)
{
if ((this.Required == true) && ((value == null)
|| ((String)value == "")))
{
throw new SPFieldValidationException(this.Title +
" must have a value.");
}
else
{
AviCustomNameFieldValidationRule rule
= new AviCustomNameFieldValidationRule();
ValidationResult result
= rule.Validate(value, CultureInfo.InvariantCulture);
if (!result.IsValid)
{
throw new
SPFieldValidationException((String)result.ErrorContent);
}
else
{
return base.GetValidatedString(value);
}
}
}
}
}
</pre></div><br />
<br />
<b>6. Steps to add C# class for CustomFieldControl:</b><br />
================================================<br />
a. Add new C# file [as mentioned in earlier steps]<br />
b. Code snippet for CustomFieldControl [e.g. AviCustomNameFieldControl.cs]<br />
<br />
<div style="BACKGROUND-COLOR: #ffffcc"><pre>using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using System.IO;
using System.Collections;
namespace Avi
{
class AviCustomNameFieldControl : BaseFieldControl
{
protected TextBox MyCustomNameText;
protected Label MyCustomNameLabel;
protected override string DefaultTemplateName
{
get
{
if (this.ControlMode == SPControlMode.Display)
{
return this.DisplayTemplateName;
}
else
{
return "AviCustomNameFieldControl";
}
}
}
public override string DisplayTemplateName
{
get
{
return "AviCustomNameFieldControlForDisplay";
}
set
{
base.DisplayTemplateName = value;
}
}
protected override void CreateChildControls()
{
base.CreateChildControls();
this.MyCustomNameText =
(TextBox)TemplateContainer.FindControl("MyCustomNameText");
this.MyCustomNameLabel =
(Label)TemplateContainer.FindControl("MyCustomNameLabel");
if (this.ControlMode != SPControlMode.Display)
{
if (!this.Page.IsPostBack)
{
if (this.ControlMode == SPControlMode.New)
{
}
}
}
else
{
if (this.MyCustomNameLabel != null)
{
MyCustomNameLabel.Text = (String)this.ItemFieldValue;
//this.MyCustomNameLabel.Text =
SPContext.Current.ListItem["MyName"].ToString();
}
}
}
public override object Value
{
get
{
EnsureChildControls();
return base.Value;
}
set
{
EnsureChildControls();
base.Value = (String)value;
}
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// add save handler only in New and Edit modes
if ((SPContext.Current.FormContext.FormMode == SPControlMode.New)
|| (SPContext.Current.FormContext.FormMode == SPControlMode.Edit))
{
SPContext.Current.FormContext.OnSaveHandler
+= new EventHandler(MyCustomSaveHandler);
}
}
protected void MyCustomSaveHandler(object sender, EventArgs e)
{
Page.Validate();
if (Page.IsValid)
{
SPContext.Current.ListItem["SampleNameWithTimeStamp"]
= MyCustomNameText.Text
+ " - " + DateTime.Today.ToShortDateString();
SPContext.Current.ListItem["MyName"] = MyCustomNameText.Text;
SPContext.Current.ListItem.Update();
}
else
{
// do actions instead of save
}
}
}
}
</pre></div><br />
<br />
<b>7. Steps to add C# class for CustomFieldValidationRule:</b><br />
================================================<br />
a. Add new C# file [as mentioned in earlier steps]<br />
b. Code snippet for CustomFieldValidationRule[e.g. AviCustomNameFieldValidationRule.cs]<br />
<br />
<div style="BACKGROUND-COLOR: #ffffcc"><pre>using System;
using System.Windows.Controls;
using System.Globalization;
namespace Avi
{
public class AviCustomNameFieldValidationRule : ValidationRule
{
public override ValidationResult Validate(object value,
CultureInfo cultureInfo)
{
String CustomName = (String)value;
bool result = isValidCustomName(CustomName);
if (result != true)
{
return new ValidationResult(false, "Enter valid Name.");
}
else
{
return new ValidationResult(true, "Name Entered is correct.");
}
}
public static bool isValidCustomName(string CustomName)
{
//Logic to validate data
return true;
}
}
}
</pre></div><br />
<br />
<br />
<br />
<b>C. How to override Save button while creating New Item in SharePoint's List?</B><br />
===================================================================================<br />
a. Register custom method to Save button click in OnInit page event<br />
Excerpt code snippet:<br />
<div style="BACKGROUND-COLOR: #ffffcc"><pre>protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// add save handler only in New and Edit modes
if ((SPContext.Current.FormContext.FormMode == SPControlMode.New)
|| (SPContext.Current.FormContext.FormMode == SPControlMode.Edit))
{
SPContext.Current.FormContext.OnSaveHandler
+= new EventHandler(MyCustomSaveHandler);
}
}
</pre></div><br />
b. Implement custom method [e.g. MyCustomSaveHandler]<br />
Excerpt code snippet:<br />
<div style="BACKGROUND-COLOR: #ffffcc"><pre>protected void MyCustomSaveHandler(object sender, EventArgs e)
{
Page.Validate();
if (Page.IsValid)
{
// do actions in case of save
}
else
{
// do actions instead of save
}
}
</pre></div><br />
<b>Note: </b>For complete code refer AviCustomNameFieldControl.cs class [mentioned earlier].<br />
<br />
<br />
<br />
After adding all the mentioned files, this will be <b>Final View of Solution/Project Explorer</b>:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKvjuo4BZ8PPU_fVTUxfSupPYS_BfMC2U3pJCDYjQNwVl5g45cPJOQco_4DX14LUoX0Vf9DGMun0HGCIAjCMfLAc5s0OipWTQ_ucZ78KqBjwu2-trKbj-Ih4rpP7WK0c6mmuYA7Vof9NrT/s1600/SolutionExplorer.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="400" width="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKvjuo4BZ8PPU_fVTUxfSupPYS_BfMC2U3pJCDYjQNwVl5g45cPJOQco_4DX14LUoX0Vf9DGMun0HGCIAjCMfLAc5s0OipWTQ_ucZ78KqBjwu2-trKbj-Ih4rpP7WK0c6mmuYA7Vof9NrT/s400/SolutionExplorer.jpg" /></a></div><br />
<br />
<br />
<b>Miscellaneous:</b><br />
<b>Steps to change Assembly name and Default namespace:</b><br />
===========================================================<br />
Solution Explorer > Project > Right-Click > Properties > Change Assembly name and Default namespace as per requirement<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu45OSZ2bg4rTpmYGyvkc6h_CGy1QS0mPmxZrAxgGgi_d5-sjoHhpU9Xr46XKvTE-j2OWbTepB_iraH8VnN7jEDegtzAlL_19LNjmZ3253zbXU_Qh5iYJ-eO5LdeR85A0RBbjKccAfpCz5/s1600/AssemblyName.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="141" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu45OSZ2bg4rTpmYGyvkc6h_CGy1QS0mPmxZrAxgGgi_d5-sjoHhpU9Xr46XKvTE-j2OWbTepB_iraH8VnN7jEDegtzAlL_19LNjmZ3253zbXU_Qh5iYJ-eO5LdeR85A0RBbjKccAfpCz5/s400/AssemblyName.jpg" /></a></div><br />
<br />
<b>D. How to consume Custom Field?</B><br />
======================================<br />
1. Create a Custom List<br />
<br />
2. Create a new column and choose already created custom field [as per following figure]:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmR3Wv5a4WlCRV2olj2KKdCSdNZtQo65lo8KYYwAs_7fLKeOAS-r7jnRQq6sSFeV-Nytjk37uKOauoPSOC08XIaeRqknwmb5PIkIkbxlkXnocUtK5rlT1sFE_8me_xuWM9-HLqszssDway/s1600/CustomField_NewColumn.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="400" width="363" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmR3Wv5a4WlCRV2olj2KKdCSdNZtQo65lo8KYYwAs_7fLKeOAS-r7jnRQq6sSFeV-Nytjk37uKOauoPSOC08XIaeRqknwmb5PIkIkbxlkXnocUtK5rlT1sFE_8me_xuWM9-HLqszssDway/s400/CustomField_NewColumn.jpg" /></a></div><br />
3. Following would be list structure without any data:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoU8DI74086gU82w8rkC6PPJqko1h9cAJftfMX44q4WduR2tjyAzy0pM7uey4to3Vm7Wl_3xboP0tgGJfYt04Ot4BYVARmhIFGzZ1iamSQSYyhprgaNMc260AjFZ8b6XJJOKw9qr59_jmt/s1600/BlankList.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="57" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoU8DI74086gU82w8rkC6PPJqko1h9cAJftfMX44q4WduR2tjyAzy0pM7uey4to3Vm7Wl_3xboP0tgGJfYt04Ot4BYVARmhIFGzZ1iamSQSYyhprgaNMc260AjFZ8b6XJJOKw9qr59_jmt/s400/BlankList.jpg" /></a></div><br />
4. Add a new item to List:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSIP2CQTfFMmJD8WHKQURmL54tcM907cPYXuj5RHSqqafk0DR-duiRFU9GVwUOPhY5rCI06_59EeWTdfMgA_yKcJcr2EYq96V3qE_m9-eDwWWEo3hzaCkwPwZfsbcYQAzacw443z2mceWd/s1600/NewItemPage.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="240" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSIP2CQTfFMmJD8WHKQURmL54tcM907cPYXuj5RHSqqafk0DR-duiRFU9GVwUOPhY5rCI06_59EeWTdfMgA_yKcJcr2EYq96V3qE_m9-eDwWWEo3hzaCkwPwZfsbcYQAzacw443z2mceWd/s400/NewItemPage.jpg" /></a></div><br />
5. List with data:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUQn4EhU5SehDSAmWFqXhuvCR7DEQ9By_9aL4P4byvZ5MIqfzmonTzxSzQU82Ic2RSvq90SjKmlYgx6CG_O4EDnLmCygkIH3Ea9voiVqDSLGAdsF1LHn9Y1Tg45c0izog0sfSUEKIy5uNG/s1600/ListWithData.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="51" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUQn4EhU5SehDSAmWFqXhuvCR7DEQ9By_9aL4P4byvZ5MIqfzmonTzxSzQU82Ic2RSvq90SjKmlYgx6CG_O4EDnLmCygkIH3Ea9voiVqDSLGAdsF1LHn9Y1Tg45c0izog0sfSUEKIy5uNG/s400/ListWithData.jpg" /></a></div><br />
<br />
References:<br />
==================<br />
<a href='http://www.c-sharpcorner.com/UploadFile/Roji.Joy/5558/'>Creating a Custom Field Type for SharePoint 2010 (Email Validation Field)</a><br />
<br />
<a href='http://pholpar.wordpress.com/2009/12/09/how-to-override-the-default-item-save-event-using-custom-fields/'>How to override the default item save event using custom fields</a>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com5tag:blogger.com,1999:blog-6831292026292542607.post-34048200626224618922011-06-28T11:33:00.000-07:002011-06-28T20:11:04.783-07:00Configure Microsoft Office Outlook 2010 Profile<div dir="ltr" style="text-align: left;" trbidi="on"><table><tbody>
<tr><td><br />
* Open Microsoft Office Outlook Web Access<br />
</td></tr>
<tr><td><br />
* Click User Control Panel<br />
</td></tr>
<tr><td><br />
* Enter Credentials<br />
</td></tr>
<tr><td><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjncW9IGE0bE45i-wKG4Qo0gIBgecxJaoj0FKr98Iu9xtWoy_NdWFAMvyOme8PZplRk8imPIIy_w74-PHq5fsWkdkFLGf0yH9T8yudyjXITc3bSr6Hv3pnCg43W-C8l_6mc2Gs2-N2cQuKg/s1600/User+Control+Panel.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="103" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjncW9IGE0bE45i-wKG4Qo0gIBgecxJaoj0FKr98Iu9xtWoy_NdWFAMvyOme8PZplRk8imPIIy_w74-PHq5fsWkdkFLGf0yH9T8yudyjXITc3bSr6Hv3pnCg43W-C8l_6mc2Gs2-N2cQuKg/s320/User+Control+Panel.png" width="320" /></a></td></tr>
<tr><td><br />
* Go to – Downloads<br />
</td></tr>
<tr><td><br />
* Download Your Outlook Profile<br />
</td></tr>
<tr><td><br />
* Save it in Hard-disk [<i>in my case I saved it in C drive with following name C:\filename.prf</i>].<br />
</td></tr>
<tr><td><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXyLc4f8so3IGrji-u8TtmLXjPDIUJX3Kic4D48j5gP3l2dTHQgiHANl3gCXJkQB1sch1S_f3HXDn12a9dhqtrFJjBqAL-0wAxSlxrD03kGRcpMSLOV3aYTvniMv3BVFTpwtOZ_3RN5xqQ/s1600/User+Control+Panel+2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXyLc4f8so3IGrji-u8TtmLXjPDIUJX3Kic4D48j5gP3l2dTHQgiHANl3gCXJkQB1sch1S_f3HXDn12a9dhqtrFJjBqAL-0wAxSlxrD03kGRcpMSLOV3aYTvniMv3BVFTpwtOZ_3RN5xqQ/s320/User+Control+Panel+2.png" width="320" /></a><br />
</td></tr>
<tr><td><br />
* Open Window's Run and run following command (Windows > Start > Run) :<br />
<b>outlook.exe /importprf C:\filename.prf</b><br />
</td></tr>
<tr><td><br />
Reference : <br />
<a href="http://office.microsoft.com/en-us/office-2003-resource-kit/customizing-outlook-profiles-by-using-prf-files-HA001140258.aspx">customizing-outlook-profiles</a> </td></tr>
</tbody></table></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-31603182921565492252011-03-23T11:09:00.000-07:002011-03-23T11:09:22.050-07:00JavaScript in Elements.xml file of a SharePoint FeatureHere my requirement was to create a menu/link in SharePoint's <b>SiteActions</b>, on click of which it redirects to custom site page created under <b>Pages</b> folder [/Pages/MyPage.aspx].<br />
<br />
Challenges:<br />
1. To execute JavaScript code on menu/link click.<br />
2. Build the absolute URL of custom page.<br />
<br />
Solution:<br />
1. First create a SharePoint Feature to add a new menu/link in SiteActions.<br />
2. Modify the Elements.xml using CustomAction/URLAction to execute the JavaScript code.<br />
3. Write the required JavaScript code as per requirement [I have written a small piece of code to fetch the current server name and then build the absolute URL of custom page].<br />
4. Install and Activate the SPFeature.<br />
<br />
<br />
<br />
Following is the code snippet of Elements.xml file :<br />
<br />
<div style="BACKGROUND-COLOR: #ffffcc"><pre>
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction
GroupId = "SiteActions"
Location="Microsoft.SharePoint.StandardMenu"
Sequence="1000"
RequireSiteAdministrator="TRUE"
Title="My Links">
<UrlAction Url="javascript:function process()
{
var site='{SiteUrl}';
var pageurl = '';
var serverName = '';
var endindex = site.indexOf('/', '10');
if(endindex == -1) { serverName = site; }
else { serverName = site.substring(0, endindex); }
pageurl = serverName + '/Pages/MyPage.aspx';
window.location = pageurl;
};
process();"/>
</CustomAction>
</Elements>
</pre></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-72743715521475682452011-01-21T23:03:00.000-08:002011-07-02T05:32:51.366-07:00SharePoint 2010 Tips and Tricks<div dir="ltr" style="text-align: left;" trbidi="on"><b>1. Change Site Icon/Logo of all pages in SharePoint 2010 (Wiki pages and Web part pages)</b><br />
<br />
a. <b>Wiki Pages</b>:<br />
<br />
Navigate to following path-<br />
Site > Site Actions > Site Settings > Look and Feel > Title, description, and icon > URL<br />
<br />
In URL textbox we can specify either Site Asset’s Image or 14 hive image.<br />
Reference:<br />
<a href="http://sptwentyten.wordpress.com/2009/12/17/how-to-change-the-site-logo-in-sharepoint-2010/">Change Wiki Page Site Logo</a><br />
<br />
b. <b>Web Part Pages</b>:<br />
<br />
<ul style="text-align: left;"><li>Open Web Part page</li>
<li>Select Page ribbon Tab on top</li>
<li>Select Title Bar Properties</li>
<li>Scroll to the right and on the Web Part Page Title Bar properties</li>
<li>Specify either Site Asset’s Image or 14 hive image</li>
</ul><br />
Reference:<br />
<a href="http://sptwentyten.wordpress.com/2010/09/17/change-the-site-logo-on-web-part-pages/">Change Web Part Page Site Logo</a><br />
<br />
<br />
<br />
<b>2. Enable Anonymous in SharePoint 2010</b><br />
<br />
<br />
<ol style="text-align: left;"><li>Open SharePoint 2010 Central Administration</li>
<li>Navigate to following path:<br />
Central Administration > Application Management > Manage web applications</li>
<li>Select desired Web Application</li>
<li>Click Authentication Providers icon in ribbon tab</li>
<li>On the Authentication Providers pop-up window click on the Default zone.</li>
<li>Under Edit Authentication, check Enable anonymous access and click Save.</li>
<li>Go back to Web Application Management click on the Anonymous Policy icon in ribbon tab.</li>
<li>Under Anonymous Access Restrictions select your Zone and set the Permissions to None – No policy and click Save.</li>
<li>Now, open the desired web application in which we want to set anonymous access.</li>
<li>Navigate to your top level site collection for the web application.</li>
<li>Click the Site Actions > Site Settings > Users and Permissions > Site permissions.</li>
<li>Under Permission Tools ribbon, click Anonymous Access icon</li>
<li>Set the permissions to Entire Web site, or List and Libraries, or Nothing as per requirement</li>
<li>Click OK.</li>
<li>In case of Anonymous access at Web site level:</li>
</ol><ul style="text-align: left;"><li>Navigate to Web Site > Site Actions > Site Permissions</li>
<li>Click Stop Inheriting Permissions icon in Permission Tools ribbon tab</li>
<li>After that we can see Anonymous Access icon in ribbon, click it</li>
<li>In Anonymous Access pop-up select desired check box as per requirement</li>
<li>Click Ok</li>
</ul> In case of Anonymous access at List and Library level:<br />
<ul style="text-align: left;"><li>Navigate to List or Library > List Tool tab > List tab > List Settings icon in ribbon > Permissions and Management > Permissions for this list</li>
<li>Click Stop Inheriting Permissions icon in Permission Tools ribbon tab</li>
<li>After that we can see Anonymous Access icon in ribbon, click it</li>
<li>In Anonymous Access pop-up select desired check box as per requirement</li>
<li>Click Ok</li>
</ul><br />
Reference:<br />
<a href="http://www.logimindz.com/blog/enable-anonymous-access-in-sharepoint-2010">Enable Anonymous Access 1</a><br />
<a href="http://www.topsharepoint.com/enable-anonymous-access-in-sharepoint-2010">Enable Anonymous Access 1</a><br />
<br />
<br />
<b>3. Steps to use or consume SharePoint List or Libraries RSS functionality</b><br />
<br />
<ul style="text-align: left;"><li>If we are planning to use out-of-box RSS functionality of SharePoint’s List or Libraries using out-of-box RSS Viewer web part of SharePoint, then we have to enable Anonymous access at List or Library level.</li>
<li>If anonymous access is disabled at List or Library level then we will get following error: <br />
<b>“The RSS webpart does not support authenticated feeds”</b></li>
</ul><br />
To solve the above error there are following options:<br />
<br />
<ul style="text-align: left;"><li>Set anonymous access at List or Library level</li>
<li>Use 3rd party RSS Feed Reader [available in Codeplex site]</li>
<li>Set IIS Authentication from NTLM to Kerberos<br />
[Central Administration > Application Management > Manage web applications > Select desired Web application > Select Authentication Providers icon in ribbon tab > Click Default link in Authentication Providers pop-up > Edit Authentication pop-up > IIS Authentication Settings > Integrated Windows Authentication > Select Negotiate (Kerberos)]</li>
</ul><br />
<br />
<b>Note</b>: As per me first option i.e. set anonymous access is best one.<br />
<br />
<br />
<b>4. Master page branding or UI change in SharePoint 2010</b><br />
<br />
[Note: It’s was my personal experience]<br />
I tried to change the HTML code of default.master or V4.master page/file using SharePoint 2010 Designer (SPD).<br />
SPD reflected all changes, but when I browsed any content page, it didn’t displayed the desired changes.<br />
<br />
Solution [as per me]:<br />
I created a copy of default.master or V4.master and renamed it as per requirement. Made all the required HTML changes in it and saved it. Right clicked on the new custom master page and selected the Set as Default Master Page option. Changes get reflected in both SPD and all the browsed content pages.<br />
<br />
<br />
<b>5. How to hide first tab of SharePoint 2010 site</b><br />
<br />
We need to add following CSS class to hide first tab of SharePoint 2010 site:<br />
<br />
<div style="BACKGROUND-COLOR: #ffffcc"><pre>.s4-tn li.static:first-child{
display: none;
}
</pre></div><br />
Why we need to hide the first tab???<br />
Ans: There is well known tab selection issue in SharePoint 2010. When we select first tab, second tab always remain selected (wrong tab selection as per UI). To solve this issue, I made the first tab invisible and made the second tab as home page tab. So by this when user clicks the first visible tab, he actually clicks the second tab and hence there is no UI confusion regarding tab selection.<br />
<br />
<br />
<br />
<b>6. Error : </b><br />
Error occurred in deployment step 'Retract Solution': A deployment or retraction is already under way for the solution "MySolution.wsp", and only one deployment or retraction at a time is supported.<br />
<br />
<b> Solution: </b><br />
a. Enumerates all pending and active deployments in the farm using following command:<br />
stsadm -o enumdeployments<br />
<br />
b. Cancel the troublesome Solution that was causing problem [<i>specify the Solution GUID using above command</i>]:<br />
stsadm -o canceldeployment -id <solution GUID> <br />
<br />
<br />
Reference: <br />
<a href='http://msdnbangladesh.net/blogs/ferdous/archive/2009/02/16/sharepoint-service-error-a-deployment-or-retraction-is-already-under-way-for-the-solution-quot-xxx-wsp-quot-and-only-one-deployment-or-retraction-at-a-time-is-supported.aspx'>SharePoint deployment or retraction issue</a><br />
<br />
<br />
<br />
</div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-3135333784738203872010-10-22T06:25:00.000-07:002010-10-23T22:56:42.673-07:00Display SharePoint ListItem's AttachmentsSteps to create a separate page to display all the attachments of a particular SPListItem using SharePoint Designer:<br />
<br />
1. Create an ASPX page using SharePoint Designer (SPD).<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwSAvoIMIGTGXBF6AsDFPig5Y1xhljJ9WTfYd_0Cm9UrRxM1CYd-8ZqQ-dscscTpwKAT98dp5BMG6Od5ZAEbDaFdV4YXkoryntEbiaNlRtSF-RmHWYkMQp90Coq5XW6H__sKswkx5j4TZ4/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" nx="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwSAvoIMIGTGXBF6AsDFPig5Y1xhljJ9WTfYd_0Cm9UrRxM1CYd-8ZqQ-dscscTpwKAT98dp5BMG6Od5ZAEbDaFdV4YXkoryntEbiaNlRtSF-RmHWYkMQp90Coq5XW6H__sKswkx5j4TZ4/s1600/1.JPG" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjA8fLJgeKT8l1MBI1USIROEbFa_sgBPBAU8zrLOElwEziJ9U7xSLRAfaWhdR3-3_8xPvwkjE41VXKuV1SUY1KyI5_pd8jdQmq37J2RVawFVwR_OXWiyvih92VV43glHKoRcoKageOOORZ/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="227" nx="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjA8fLJgeKT8l1MBI1USIROEbFa_sgBPBAU8zrLOElwEziJ9U7xSLRAfaWhdR3-3_8xPvwkjE41VXKuV1SUY1KyI5_pd8jdQmq37J2RVawFVwR_OXWiyvih92VV43glHKoRcoKageOOORZ/s320/2.JPG" width="320" /></a><br />
<br />
2. Add a <b>DataView</b> control in page in-between HTML <b>form</b> tag.<br />
Note: First save the page then add control.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8pNSWVfO9GYpoHK4IiAa1zTVqSiBdp7dwFVYWGge_93ydijuxAYITbPGgp-qhYkV3CJjHHbwS7Xt3G-2wp4OQ9raBDdDig2vfg6Nv_tCcuW-OxP_mYJNywBP7ztVOVkMmP-Tt-OopUwKW/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" nx="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8pNSWVfO9GYpoHK4IiAa1zTVqSiBdp7dwFVYWGge_93ydijuxAYITbPGgp-qhYkV3CJjHHbwS7Xt3G-2wp4OQ9raBDdDig2vfg6Nv_tCcuW-OxP_mYJNywBP7ztVOVkMmP-Tt-OopUwKW/s320/3.JPG" width="320" /></a></div><br />
<br />
3. Select the <b>Data Source Library</b>.<br />
Select your SharePoint List (in my case it is MyTest SPList). Open its context menu and select <b>Show Data</b><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVHJghdIIyuYta7-39KG89G2x8n9XwvhkNo_e5gqe9BlEUxwahb5GvC-tLDmUWHfx5L_iIIaOveNIfuN0TDSmSdGzfBzvdgi330nvLfIIsqNdFJzdsWLRElzQcZ88IJjRjxOtoYEHNJeuQ/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" nx="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVHJghdIIyuYta7-39KG89G2x8n9XwvhkNo_e5gqe9BlEUxwahb5GvC-tLDmUWHfx5L_iIIaOveNIfuN0TDSmSdGzfBzvdgi330nvLfIIsqNdFJzdsWLRElzQcZ88IJjRjxOtoYEHNJeuQ/s320/4.JPG" width="205" /></a><br />
<br />
4. Select columns you want to keep in <b>Data Source Details</b>.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiazwwrpM2jTdp5R7WdXlF-usDcDSpd8vN2OYdq-fAr56NJN68lcF3ncwPNg3WocL4UjRgmutyCC8MN5dAK2ozuV6Vdvmk2BFaanQl4_sa1EurixPcusra0kWNQaC61bw2rxbZv8VZJCArh/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" nx="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiazwwrpM2jTdp5R7WdXlF-usDcDSpd8vN2OYdq-fAr56NJN68lcF3ncwPNg3WocL4UjRgmutyCC8MN5dAK2ozuV6Vdvmk2BFaanQl4_sa1EurixPcusra0kWNQaC61bw2rxbZv8VZJCArh/s320/5.JPG" width="153" /></a><br />
<br />
<br />
5. <b>Insert Selected Fields as</b> Single Item View<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2_9-bFotBb1SAzTCaBLGZNLMJjzHmcVDuQIp9SbTOXqsKwbhRZmCdmX-SP5lKWmNkLBQhTS6q6k6EX2xNHVKbEWRpJ_k_MscXJhiahJSuhvVrRTVUXLNjtNk6CvePh1hCW5Avq6GPgPrk/s1600/6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" nx="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2_9-bFotBb1SAzTCaBLGZNLMJjzHmcVDuQIp9SbTOXqsKwbhRZmCdmX-SP5lKWmNkLBQhTS6q6k6EX2xNHVKbEWRpJ_k_MscXJhiahJSuhvVrRTVUXLNjtNk6CvePh1hCW5Avq6GPgPrk/s1600/6.JPG" /></a> <br />
<br />
<br />
6. Now some code changes:<br />
a. Add some CSS style above closing <b>head</b> tag [optional]<br />
<div style="background-color: #ffffcc;"><pre><style type="text/css">
.ms-vb a
{
font-family:Verdana;
font-size:x-small;
}
</style>
</head>
</pre></div><br />
b. Place your selected columns/fields<br />
Location followig code snippet:<br />
<div style="background-color: #ffffcc;"><pre><xsl:template name="dvt_1.rowview">
<tr>
</pre></div><br />
and insert following code in-between them:<br />
<br />
<div style="background-color: #ffffcc;"><pre><xsl:template name="dvt_1.rowview">[Original code - 1]
<tr style="color:maroon;font-weight:bold; font-family:Tahoma; font-size:small;">
<td>
Attachments
</td>
</tr>
<tr class="ms-alternating" style="font-family:Tahoma; font-size:x-small;">
<td>
SharePoint ListItem ID - <b><SharePoint:FieldValue FieldName="ID" ControlMode="Display" runat="server" Visible="true" /></b>
</td>
</tr>
<tr class="ms-formbody" style="font-family:Tahoma; font-size:xx-small;">
<td>
<SharePoint:AttachmentsField ControlMode="Display" FieldName="Attachments" runat="server" Visible="true"/>
</td>
</tr>
<tr style="display:none;">[Original code - 2]
</pre></div><br />
<b>Note</b>-Here we are hiding the existing TR row<br />
<br />
<br />
c. Hide paging control<br />
Locate following code snippet:<br />
<br />
<div style="background-color: #ffffcc;"><pre><td nowrap="" class="ms-paging" align="right">
</pre></div><br />
and hide that TD.<br />
changed snippet:<br />
<br />
<div style="background-color: #ffffcc;"><pre><td style="display:none;" nowrap="" class="ms-paging" align="right">
</pre></div><br />
<br />
7. Now open the page in browser and passed SPListItem as query string.<br />
example: http://[server-name]:[port-number]/[page-name].aspx?ID=1<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdWA7B5DmmCBM0KNcjtNfZO9rc7Up1DmhGOF83Krz5uYpK6fgHsjndDQzUNgG_AbFAtLrg_wS8Sb1ewqVeZWulHjzAyhTKAO8FkDcYGvcMKekfm18xiJhE0hQCVZn6Ep9awGAIFoYhBOHx/s1600/7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" nx="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdWA7B5DmmCBM0KNcjtNfZO9rc7Up1DmhGOF83Krz5uYpK6fgHsjndDQzUNgG_AbFAtLrg_wS8Sb1ewqVeZWulHjzAyhTKAO8FkDcYGvcMKekfm18xiJhE0hQCVZn6Ep9awGAIFoYhBOHx/s320/7.JPG" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com2tag:blogger.com,1999:blog-6831292026292542607.post-13755833313638718232010-09-14T10:31:00.000-07:002010-09-14T10:33:02.384-07:00Code to search files with particular extension in SharePoint's Web ApplicationRequirement:<br />
To search files with particular extension [here *.doc as example].<br />
<br />
Here to achieve the above requirement I used SharePoint's Object Model. <br />
<br />
I downloaded those searched files to a particular folder. <br />
Beside printing the searched files result in console and I am also logging it in a Log file.<br />
<br />
<br />
<div style="background-color: #ffffcc;"><pre>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using System.IO;
using System.Collections;
namespace SearchFile
{
class Program
{
static void Main(string[] args)
{
//Get folder path
string directoryPath
= Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
, "MyFolder");
//Create directory if it not exist
if (!(Directory.Exists(directoryPath)))
Directory.CreateDirectory(directoryPath);
//SPFile myFile = null;
byte[] binFile;
string filename = string.Empty;
FileStream fs = null;
BinaryWriter bw = null;
SPDocumentLibrary library = null;
string fileExtension = ".doc";
string siteURL = "http://[server-name]:[port-number]";
StringBuilder filesLog = new StringBuilder();
using (SPSite site = new SPSite(siteURL))
{
foreach (SPWeb web in site.AllWebs)
{
foreach (SPList list in web.Lists)
{
if (list.BaseType == SPBaseType.DocumentLibrary)
{
library = (SPDocumentLibrary)list;
SPFolder folder = library.RootFolder;
ArrayList foldersList = new ArrayList();
foldersList.Add(folder);
foldersList = getFolders(folder, foldersList);
//foreach (SPListItem oListItem in library.Items)
foreach (SPFolder fold in foldersList)
{
foreach (SPFile myFile in fold.Files)
{
//Download file in file system
//myFile = oListItem.File;
if (myFile.Name.EndsWith(fileExtension,
StringComparison.InvariantCultureIgnoreCase))
{
binFile = myFile.OpenBinary();
//Generate file name
//filename = Path.Combine(directoryPath, myFile.Name);
filename
= Path.Combine(directoryPath,
myFile.Url.Replace("/", "_"));
//Do file write operation
fs
= new FileStream(filename,
FileMode.Create, FileAccess.ReadWrite);
bw = new BinaryWriter(fs);
bw.Write(binFile);
bw.Close();
filesLog.Append(string.Concat(web.Url, "/",
myFile.Url, ","));
Console.WriteLine(string.Concat(web.Url, "/",
myFile.Url));
}//End file extension check
}//End All SPFiles
}//End All SPFolders
}//End check DocumentLibrary
}//End All Lists
}//End AllWebs
}//End SPSite
string[] lines = filesLog.ToString().Split(new char[] { ',' });
System.IO.File.WriteAllLines(directoryPath + "/LOG_List.txt", lines);
Console.WriteLine("Press any key to Exit...");
Console.ReadLine();
}
//Recursive function to get all nested SPFolders
static ArrayList getFolders(SPFolder folder, ArrayList foldersList)
{
foreach (SPFolder subfolder in folder.SubFolders)
{
foldersList.Add(subfolder);
foldersList = getFolders(subfolder, foldersList);
}
return foldersList;
}
}
}
</pre></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-73908297560645471252010-08-19T01:33:00.000-07:002010-08-19T01:56:20.605-07:00Impersonation in Console/Windows ApplicationIn this post I tried to cover the way to implement Impersonation in Console or Windows application. In Web application by setting Impersonation="True" in web.config we can do Impersonation but in Windows/Console it is not that straight-forward. <br /><br />Here in Windows/Console we have to perform following steps [<i>as per me</i>]:<br />1. Write un-managed <b>LogonUser</b> function that will return UserToken based on passed input parameters<br />2. Get <b>UserToken</b> using LogonUser function<br />3. Pass UserToken to <b>WindowsIdentity</b>'s constructor<br />4. Do the Impersonation<br />5. Do the required stuff using Impersonated Identity<br />6. Undo the Impersonation [Important]<br /><br /><br />Code Snippet:<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />using System;<br />using System.Data;<br />using System.Data.SqlClient;<br />using System.Runtime.InteropServices;<br />using System.Security.Principal;<br /><br />namespace ImpersonationSample<br />{<br /> class Program<br /> {<br /> [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]<br /> public static extern bool LogonUser(String lpszUsername, <br /> String lpszDomain, String lpszPassword,<br /> int dwLogonType, int dwLogonProvider, ref IntPtr phToken);<br /><br /><br /> static void Main(string[] args)<br /> {<br /> IntPtr tokenHandle = new IntPtr(0);<br /><br /> const int LOGON32_PROVIDER_DEFAULT = 0;<br /> //This parameter causes LogonUser to create a primary token.<br /> const int LOGON32_LOGON_INTERACTIVE = 2;<br /><br /> tokenHandle = IntPtr.Zero;<br /><br /> string userName = "UserName";<br /> string domainName = "DomainName";<br /> string password = "UserPassword";<br /><br /> // Call LogonUser to obtain a handle to an access token.<br /> bool returnValue = LogonUser(userName, domainName, password,<br /> LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,<br /> ref tokenHandle);<br /><br /> // Retrieve the Windows identity using the specified token.<br /> WindowsIdentity windowsIdentity = new WindowsIdentity(tokenHandle);<br /><br /> // Create a WindowsImpersonationContext object <br /> // by impersonating the Windows identity.<br /> WindowsImpersonationContext impersonationContext =<br /> windowsIdentity.Impersonate();<br /><br /><br /> string connectionString =<br /> "Data Source=[Server-Name];" +<br /> "Initial Catalog=[Database-Name];" +<br /> "Trusted_Connection=True;" +<br /> "Integrated Security=SSPI;" +<br /> "User Id=[DomainName\\UserName];" +<br /> "password= [UserPassword]";<br /> <br /> using (SqlConnection cn = new SqlConnection(connectionString))<br /> {<br /> SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM MyTable", cn);<br /> cn.Open();<br /> SqlDataReader rdr <br /> = cmd.ExecuteReader(CommandBehavior.CloseConnection);<br /> rdr.Read();<br /> Console.WriteLine(rdr[0].ToString()); //read a value<br /> }<br /><br /> Console.WriteLine("Name of the identity after impersonation: "<br /> + WindowsIdentity.GetCurrent().Name + ".");<br /> Console.WriteLine(windowsIdentity.ImpersonationLevel);<br /> <br /> <br /> // Stop impersonating the user.<br /> impersonationContext.Undo();<br /><br /> // Check the identity name.<br /> Console.Write("Name of the identity after performing an Undo on the");<br /> Console.WriteLine(" impersonation: " +<br /> WindowsIdentity.GetCurrent().Name);<br /><br /> Console.ReadLine();<br /> }<br /> }<br />}<br /><br /></pre></div><br /><br /><br /><br />References:<br /><a href='http://msdn.microsoft.com/en-us/library/chf6fbt4.aspx'>MSDN Impersonation 1</a><br /><a href='http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx'>MSDN Impersonation 1</a><br /><a href='http://msdn.microsoft.com/en-us/library/w070t6ka.aspx'>MSDN Impersonation 1</a><br /><a href='http://www.connectionstrings.com/sql-server'>SQL Connection String Types</a>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com3tag:blogger.com,1999:blog-6831292026292542607.post-40839094905730592282010-03-18T07:17:00.001-07:002010-03-18T07:27:08.720-07:00SPFolder related operations in SharePoint1) Get SPListItem(s) of a particular SPFolder<br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />SPList splist;<br />SPFolder spfolder; //Get the required folder instance<br />SPQuery spquery = new SPQuery();<br />spquery.Query = string.Empty;<br />spquery.Folder = spfolder;<br />spquery.ViewAttributes = "Scope=\"Recursive\""; //For nested folder structure<br /><br />SPListItemCollection itemCol = splist.GetItems(spquery)<br /></pre></div><br /><br />2) Create a SPListItem based on a custom ContentType or SPFolder ContentType<br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />SPWeb spweb; //get the SPWeb instance<br />SPContentType myCType = splist.ContentTypes["Custom content type"];<br />SPList splist = spweb.Lists["My SPList"];<br />SPListItem splistitem = splist.Items.Add(); <br />splistitem["ContentTypeId"] = myCType.Id;<br />splistitem.Update();<br /><br />splistitem["Title"] = "New Item";<br />splistitem.Update();<br /></pre></div><br /><br />3) Add a SPListItem in a particular SPFolder<br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />SPWeb spweb; //get the SPWeb instance<br />SPContentType myCType = splist.ContentTypes["Custom content type"];<br />SPList splist = spweb.Lists["My SPList"];<br />//get folder instance<br />SPFolder spfolder = splist.Folders[1]; <br />SPListItem splistitem <br /> = splist.Items.Add(spfolder.ServerRelativeUrl<br /> , SPFileSystemObjectType.File, null);<br /><br />splistitem["ContentTypeId"] = myCType.Id;<br />splistitem.Update();<br /><br />splistitem["Title"] = "New Item";<br />splistitem.Update();<br /></pre></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com4tag:blogger.com,1999:blog-6831292026292542607.post-75545045103615306182010-03-18T06:42:00.000-07:002010-03-24T08:24:26.326-07:00Image Preview functionality in SharePointQuestion: <br />How to display the Image preview without actually uploading the file in SharePoint?<br /><br />Solution:<br />To check the image preview we can temporary move/place the file in Layout folder. Then pass URL in following format to Image control:<br /><b>"/_layouts/images/MYFOLDER/MyImageName.jpg</b> <br /><br />After checking the Image preview and final upload of image file, we can delete the temporary image file from 12 hive.<br /><br />Code snippet (comments are self-explanatory):<br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />FileUpload FileUploadImage; //FileUpload control to select image file<br />Image myImage; //Image control to be used for preview functionality<br /><br />//Getting 12 hive path through SPUtility.GetGenericSetupPath() function<br />string folderPath = <br />Microsoft.SharePoint.Utilities.SPUtility.GetGenericSetupPath("TEMPLATE") <br />+ "\\IMAGES\\MYFOLDER\\";<br /><br />//Check folder path<br />if (!Directory.Exists(folderPath))<br /> Directory.CreateDirectory(folderPath);<br /><br />//Copy the image file to a temporary folder in 12 hive<br />File.WriteAllBytes(folderPath + FileUploadImage.FileName,<br /> FileUploadImage.FileBytes);<br /><br />/* //File.Copy() will not work in case of remote image upload<br />File.Copy(FileUploadImage.PostedFile.FileName, <br /> folderPath + FileUploadImage.FileName, true);<br />*/<br /><br />//Set the URL of image control<br />myImage.ImageUrl = <br /> "/_layouts/images/MYFOLDER/" + FileUploadImage.FileName;<br /></pre></div><br /><br /><b>Note: </b>In a similar manner we can preview media file (like *.wmv) before actual upload in SharePoint.Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com2tag:blogger.com,1999:blog-6831292026292542607.post-51398660233714821082010-03-18T06:03:00.000-07:002010-03-18T06:36:36.069-07:00Custom RSS Feed in SharePointSharePoint provides SPList’s level RSS Feed url [<b><i>SPList Toolbar > Actions > View RSS Feed</i></b>]. <br />http://<server-name:port>/_layouts/listfeed.aspx?List=List_GUID<br /><br />In above URL by specifying List’s GUID we can get feeds for all records (irrespective of any SPView or of Default View). <br /><br /><b><u>Now consider a scenario where we want SPView specific feeds.</u></b> <br /><br />In File System, ListFeed.aspx file is placed at following:<br /><b>C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\ListFeed.aspx</b><br /><br /><b>ListFeed.aspx</b> refers <b>Microsoft.SharePoint.ApplicationPages.ListFeed.cs</b> class file. Using Reflector we can get the idea that ListFeed.aspx can accept 3 query strings as parameters: List GUID, Meeting Instance ID and View GUID. <br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />Guid guid = new Guid(base.Request.QueryString.GetValues("<b>List</b>")[0]);<br />string[] values = base.Request.QueryString.GetValues("<b>InstanceID</b>");<br />string g = base.Request.QueryString["<b>View</b>"];<br /></pre></div><br /><br />ListFeed.cs is using following function to get the feeds:<br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />base.spList.WriteRssFeed(base.Response.OutputStream, <br />base.meetingInstanceId, this.spView);<br /></pre></div><br /><br /><b>MSDN Description of WriteRssFeed function: </b><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />public void WriteRssFeed (<br /> Stream outputStream,<br /> int meetingInstanceId,<br /> SPView spView<br />)<br /></pre></div><br /><b>Parameters</b><br />outputStream : A Stream object that represents the document stream. <br />meetingInstanceId : An integer value that represents the meeting instance. <br />spView :An SPView object that represents the view.<br /><br /><br />WriteRssFeed supports 3 overload methods:<br /><b>SPList.WriteRssFeed(Stream) : </b> <br />Writes the RSS feeds from the list to the specified document stream.<br /><br /><b>SPList.WriteRssFeed (Stream, Int32) : </b><br />Writes the RSS feeds from the list that are associated with the specified meeting to the specified document stream.<br /><br /><b>SPList.WriteRssFeed (Stream, Int32, SPView) : </b> <br />Writes the RSS feeds from the list that are associated with the specified meeting and view to the specified document stream.<br /><br />So if we want View specific feed then we have to specify all 3 parameters, but here comes the issue: what does Meeting Instance ID mean and from where we get this value?<br /><br /><br /><br />Now to get the SPView specific feed, we can write custom RSS Feed. I referred this post- <a href='http://blah.winsmarts.com/2007-10-CQWP_Frustrations_-_Introducing_CARBURETUR.aspx'>blah.winsmarts.com</a>. I modified the original code little bit. I created a application page and instead of writing inline server code I created a class library so that I can debug the page.<br /><br />HTML Code:<br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><%@ Page Language="C#" <br />Inherits="MyNameSpace.MyFeed,MyNameSpace,<br />Version=1.0.0.0,Culture=neutral,PublicKeyToken=1d5ac09ccd41620f" %><br /></pre></div><br /><br />C# Code:<br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />using System;<br />using System.Web;<br />using System.Text;<br />using Microsoft.SharePoint;<br />namespace MyNameSpace<br />{<br /> public class MyFeed <br /> : Microsoft.SharePoint.WebControls.UnsecuredLayoutsPageBase<br /> {<br /> public void Page_Load()<br /> {<br /> try<br /> {<br /> Response.Write(GetRSSFromListView(<br /> Request.QueryString["List"],<br /> Request.QueryString["View"]));<br /> }<br /> catch (Exception ex)<br /> {<br /> Response.Write("<pre>");<br /> Response.Write(ex.ToString());<br /> Response.Write("</pre>");<br /> }<br /> }<br /> private static string GetRSSFromListView(string strListGUID, <br /> string strViewGUID)<br /> {<br /> StringBuilder sb = new StringBuilder();<br /> sb.Append("<?xml version=\"1.0\"?>");<br /> sb.Append("<rss version=\"2.0\">");<br /> <br /> using (SPSite site = new SPSite(SPContext.Current.Web.Url))<br /> using (SPWeb web = site.OpenWeb())<br /> {<br /> SPList list = web.Lists[new Guid(strListGUID)];<br /> SPView view = null;<br /> if (strViewGUID != null)<br /> view = list.Views[new Guid(strViewGUID)];<br /> else<br /> view = list.DefaultView;<br /><br /> sb.Append("<channel>");<br /> AddTag("title", list.Title, sb);<br /> AddTag("description", list.Description, sb);<br /> <br /> SPListItemCollection items = list.GetItems(view);<br /> foreach (SPListItem item in items)<br /> {<br /> sb.Append("<item>");<br /> AddTag("title", item["LinkTitle"].ToString(), sb);<br /> AddTag("link", list.RootFolder.Url <br /> + "/DispForm.aspx?ID=" + item.ID, sb);<br /> sb.Append("<description>");<br /> foreach (string viewField in view.ViewFields)<br /> {<br /> if (viewField != "LinkTitle")<br /> {<br /> AddTag(<br /> viewField.Replace("_x0020_", " "),<br /> HttpContext.Current.Server.HtmlEncode<br /> (item.GetFormattedValue(viewField)),<br /> sb);<br /> }<br /> }<br /> sb.Append("</description>");<br /> sb.Append("</item>");<br /> }<br /> sb.Append("</channel>");<br /> sb.Append("</rss>");<br /> }<br /> return sb.ToString();<br /> }<br /><br /><br /> private static void AddTag(string tagText, <br /> string tagValue, StringBuilder sb)<br /> {<br /> sb.Append("<");<br /> sb.Append(tagText.Replace(" ", "_"));<br /> sb.Append(">");<br /> sb.Append(HttpContext.Current.Server.HtmlEncode(tagValue));<br /> sb.Append("</");<br /> sb.Append(tagText.Replace(" ", "_"));<br /> sb.Append(">");<br /> }<br /> }<br />}<br /></pre></div><br /><br />Now if we use the above custom RSS Feed page URL and pass it to SharePoint’s out-of-box RSS Viewer Webpart, then we will get following error:<br /><br /><b>The RSS webpart does not support authenticated feeds.</b><br /><br /><b>Solution -</b><br />Changing to Kerberos authentication<br />1. On the Central Administration page, click Application Management.<br />2. Under the Application Security section, click Authentication Providers.<br />3. Click the Default provider, and change Integrated Widows authentication from <b>NTLM</b> to <b>Negotiate (Kerberos)</b>.<br /><br />OR <br />We can use custom RSS Viewer WebPart, which is already developed and uploaded at : <a href='http://philwicklund.com/freeware/rssreader/default.aspx'>philwicklund.com</a><br /><br /><br /><b>References: </b><br /><a href='http://blah.winsmarts.com/2007-10-CQWP_Frustrations_-_Introducing_CARBURETUR.aspx'>RSS Feed</a><br /><a href='http://jawaharlalls.blogspot.com/2006/12/how-to-get-moss-2007-rss-for.html'>how-to-get-moss-2007-rss</a><br /><a href='http://philwicklund.com/freeware/rssreader/default.aspx'>RSS Reader</a><br /><a href='http://social.technet.microsoft.com/Forums/en/sharepointadmin/thread/71aec136-928a-45d2-b4df-8582c9f3b402'>Technet</a><br /><a href='http://blogs.msdn.com/markarend/archive/2006/10/03/RSS-Viewer-web-part-and-authenticated-feeds.aspx'>MSDN</a>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-43742620850307728772009-11-25T00:29:00.001-08:002011-02-12T01:40:28.830-08:00Nice links related to SharePoint<div dir="ltr" style="text-align: left;" trbidi="on">Some nice links related to SharePoint<br />
<br />
<a href="http://msdn.microsoft.com/en-us/library/bb892189.aspx">SharePoint 2007 Architecture</a><br />
<br />
<br />
<a href="http://blogs.spikes.be/sharepoint/">SharePoint Server 2010 Search</a><br />
<br />
<br />
<a href="http://technet.microsoft.com/en-us/library/cc262410.aspx">Determine sites and subsites</a><br />
<br />
<br />
<a href="http://sharepoint.microsoft.com/blogs/GetThePoint/Lists/Posts/Post.aspx?ID=65">A preview of Office SharePoint Server site templates</a><br />
<br />
<br />
<a href="http://technet.microsoft.com/en-us/office/sharepointserver/bb736746.aspx">Best Practices Resource Center for SharePoint Server 2007</a><br />
<br />
<br />
<a href="http://darrenjohnstone.net/2008/07/22/examples-for-the-sharepoint-and-office-live-javascript-api/">SharePoint Object model code using JavaScript</a><br />
<br />
<br />
<a href="http://www.zimmergren.net/archive/2009/04/08/wspbuilder-walkthrough-of-the-visual-studio-add-in.aspx">WSPBuilder - Walkthrough of the Visual Studio Add-in</a><br />
<br />
<br />
<a href="http://geekswithblogs.net/evgenyblog/archive/2008/01/27/118966.aspx">Creating a SharePoint Solution Package (.wsp) in 5 steps</a><br />
<br />
<br />
<a href="http://www.davehunter.co.uk/Blog/Lists/Posts/Post.aspx?ID=95">SharePoint 2007 Escaped Column Names</a><br />
<br />
<br />
<a href="http://www.davehunter.co.uk/Blog/Lists/Posts/Post.aspx?ID=68">Delving into SharePoint 2007 Lists and their Features</a><br />
<br />
<br />
<a href="http://www.davehunter.co.uk/Blog/Lists/Posts/Post.aspx?ID=49">SharePoint 2007 Maximum Limitations</a><br />
<br />
<br />
<a href="http://www.davehunter.co.uk/Blog/Lists/Posts/Post.aspx?ID=36">Hosting UserControls vs Delegate Control</a><br />
<br />
<br />
<a href="http://www.davehunter.co.uk/Blog/Lists/Posts/Post.aspx?ID=35">SharePoint 2007 Supported Browsers and Languages</a><br />
<br />
<br />
<a href="http://blogs.technet.com/josebda/archive/2007/03/22/complete-reference-of-all-stsadm-commands-with-options-in-moss-2007.aspx">COMPLETE REFERENCE OF ALL STSADM OPERATIONS (WITH PARAMETERS) IN MOSS 2007</a><br />
<br />
<br />
<a href="http://blogs.technet.com/josebda/archive/2008/03/15/complete-reference-of-all-stsadm-operations-with-parameters-in-moss-2007-sp1.aspx">COMPLETE REFERENCE OF ALL STSADM OPERATIONS (WITH PARAMETERS) IN MOSS 2007 SP1</a><br />
<br />
<br />
<a href="http://www.davehunter.co.uk/Blog/Lists/Posts/Post.aspx?ID=27">STSADM Import / Export</a><br />
<br />
<br />
<a href="http://www.davehunter.co.uk/Blog/Lists/Posts/Post.aspx?ID=15">Tip Creating content types in SharePoint 2007</a><br />
<br />
<br />
<a href="http://www.davehunter.co.uk/Blog/Lists/Posts/Post.aspx?ID=111">Upload Masterpages and Page Layouts with STSADM Custom Command</a><br />
<br />
<br />
<a href="http://msdn.microsoft.com/hi-in/library/microsoft.sharepoint.administration.spwebconfigmodification(en-us).aspx">SharePoint, Features and web.config modifications using SPWebConfigModification</a><br />
<br />
<br />
<a href="http://weblogs.asp.net/soever/archive/2009/06/19/sharepoint-features-and-web-config-modifications-using-spwebconfigmodification.aspx">SharePoint, Features and web.config modifications using SPWebConfigModification</a><br />
<br />
<br />
<a href="http://mysharepointblog.com/post/2007/02/Suppress-Microsoft-Office-Document-Authentication-Prompt-In-SharePoint-WSS-30.aspx">Suppress Microsoft Office Document Authentication Prompt In SharePoint WSS 3.0</a><br />
<br />
<br />
<a href="http://bryantlikes.com/articles/592.aspx">Extending SharePoint using Global.asax - Who's Online</a></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-42916433748701599322009-11-25T00:12:00.000-08:002009-11-25T00:28:19.855-08:00Nice links<a href='http://www.manoli.net/csharpformat/'>Code formatter</a><br /><br /><a href='http://msdn.microsoft.com/en-us/library/87h5xz7x.aspx'>Walkthrough: Creating a Web Service Using Visual Basic or Visual C#</a>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-21121255003690055252009-11-24T21:49:00.000-08:002010-03-14T05:50:09.440-07:00Sharepoint Tips n Tricks - Part 2In continuation with earlier post -<br /><a href='http://avinashkt.blogspot.com/2009/06/sharepoint-tips-n-tricks.html'>Sharepoint Tips n Tricks</a><br /><br />1) Check whether a given SPField exist or not before fetching value from it: <br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />string columnValue = string.Empty;<br />string columnInternalName = string.Empty;<br />string fieldName = "Myfield";<br />SPListItem listItem; //Code to get SPListItem<br /><br />//Check required SPField exist or not<br />if (listItem.ParentList.Fields.ContainsField(fieldName))<br />{<br /> //Get internal name of SPField <br /> columnInternalName = listItem.ParentList.Fields[fieldName].InternalName;<br /><br /> //Fetch column value based on internal name<br /> if (listItem[columnInternalName] != null)<br /> columnValue = listItem[columnInternalName].ToString();<br />}<br /></pre></div><br /><br /><br />2) SharePoint 2007 recommended guidelines for managing site collections, site, lists, and documents according to business needs:<br /><br />· 50,000 site collections per content database<br /><br />· 500 MB per site collection (default quota maximum)<br /><br />· 50 MB file size limit (recommended) up to 2 GB (maximum)<br /><br />· 2000 items per list view<br /><br /><br />3) Check whether page is in Edit Mode or not<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.Display)<br />{<br /> // your code to support display mode<br />}<br />else if(Microsoft.SharePoint.SPContext.Current.FormContext.FormMode = SPControlMode.Edit)<br />{<br /> // your code to support edit mode<br />}<br /></pre></div><br /><br />OR<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />WebPartManager wp = WebPartManager.GetCurrentWebPartManager(Page);<br /> <br />if (wp.DisplayMode == WebPartManager.BrowseDisplayMode)<br /> btnLink.InnerText = "Edit Page";<br />else if (wp.DisplayMode == WebPartManager.DesignDisplayMode)<br /> btnLink.InnerText = "Exit Edit Mode";<br />else<br /> btnLink.Visible = false;<br /></pre></div><br /> <br /><br />Reference...<br />http://www.codeproject.com/KB/sharepoint/SwitchWPMode.aspx<br /><br />http://mystepstones.wordpress.com/2008/09/23/detecting-the-current-mode-displayedit/<br /><br /><br />4) SPFeature to deploy page in a SharePoint site<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><b>Feature.xml</b><br /><?xml version="1.0" encoding="utf-8"?><br /><Feature Id="f08674ee-2b0e-41aa-8d28-24e788d03c11"<br /> Title="PageDeployment"<br /> Description="Description for PageDeployment"<br /> Version="12.0.0.0"<br /> Hidden="FALSE"<br /> Scope="Web"<br /> DefaultResourceFile="core"<br /> xmlns="http://schemas.microsoft.com/sharepoint/"><br /> <ElementManifests><br /> <ElementManifest Location="elements.xml"/><br /> <ElementFile Location="MyPage.aspx" /><br /> </ElementManifests><br /></Feature><br /><br /><br /><b>Elements.xml</b><br /><?xml version="1.0" encoding="utf-8" ?><br /><Elements xmlns="http://schemas.microsoft.com/sharepoint/"><br /> <Module Name="Pages" Path="" Url=""><br /> <File Name=" MyPage.aspx" Url=" MyPage.aspx" IgnoreIfAlreadyExists="FALSE" NavBarHome="True"></File><br /> </Module><br /></Elements><br /></pre></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-25141105526061937492009-11-24T21:32:00.000-08:002009-11-24T21:45:01.581-08:00Code to download document from SharePoint Document LibraryFollowing code snippet demonstrate the way to download a MS Word document (or any file) from SharePoint SPDocumentLibrary-<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />string siteURL = "http://localhost:80/"; //Write valid site URL <br />//Get SPSite and SPWeb instance<br />using (SPSite spSite = new SPSite(sireURL))<br />{<br /> using (SPWeb spWeb = spSite.OpenWeb())<br /> {<br /> //Get time stamp to download file with unique name<br /> string strFileName = DateTime.Now.ToString("ddMMyyyy_HHmmss");<br /><br /> //Get folder path<br /> string directoryPath = <br /> Path.Combine(Environment.GetFolderPath<br /> (Environment.SpecialFolder.LocalApplicationData),<br /> "MyFolder");<br /><br /> //Create directory if it not exist<br /> if (!(Directory.Exists(directoryPath)))<br /> {<br /> Directory.CreateDirectory(directoryPath);<br /> }<br /><br /> //Get template url<br /> string documentUrl; //Write valid document URL<br /><br /> //Download file in file system<br /> SPFile myFile = spWeb.GetFile(documentUrl);<br /> byte[] binFile = myFile.OpenBinary();<br /><br /> //Generate file name<br /> filename = Path.Combine(directoryPath, strFileName + ".doc");<br /><br /> //Do file write operation<br /> FileStream fs = <br /> new FileStream(filename, FileMode.Create, FileAccess.ReadWrite);<br /> BinaryWriter bw = new BinaryWriter(fs);<br /> bw.Write(binFile);<br /> bw.Close();<br /> }<br />}<br /></pre></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com1tag:blogger.com,1999:blog-6831292026292542607.post-28250121936296055472009-11-24T21:01:00.000-08:002009-11-25T00:00:26.606-08:00MSMQ operations in C#Following code snippet demonstrate the way to do some common operations with Microsoft Message Queuing (MSMQ)-<br /><br />1) Send message in MSMQ -<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />string queueName = @".\Private$\MyMSMQ";<br />string myMessage = "Hello World"; <br />MessageQueue messageQueue = null;<br />Message oMsg = null;<br /><br />//Sending Messages to MSMQ<br />if (MessageQueue.Exists(queueName))<br />{<br /> messageQueue = new MessageQueue(queueName);<br /><br /> oMsg = new Message(myMessage);<br /> messageQueue.Send(oMsg); <br />}<br />else<br />{<br /> //Create the MessageQueue <br /> messageQueue = MessageQueue.Create(queueName);<br /> //Set Queue permission<br /> //messageQueue.SetPermissions("Everyone", MessageQueueAccessRights.FullControl,<br /> // AccessControlEntryType.Set);<br /> messageQueue.SetPermissions("Everyone",<br /> MessageQueueAccessRights.PeekMessage | <br /> MessageQueueAccessRights.ReceiveMessage | <br /> MessageQueueAccessRights.DeleteMessage | <br /> MessageQueueAccessRights.WriteMessage, <br /> AccessControlEntryType.Set);<br /><br /> oMsg = new Message(myMessage);<br /> messageQueue.Send(oMsg);<br />}<br /></pre></div><br /><br /><br />2) Receive Message from MSMQ -<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />string myMessage= string.Empty;<br />string queueName = @".\Private$\MyMSMQ";<br /><br />//Receiving Messages from MSMQ<br />MessageQueue messageQueue = new MessageQueue(queueName);<br /><br />//To keep a check that if no messages present in MSMQ,<br />//control should return back in 1 second. <br />TimeSpan timeout = new TimeSpan(1);<br />Message message = null;<br /><br />//Get all the messages present in the MSMQ and iterate through it.<br />MessageEnumerator enumerator = messageQueue.GetMessageEnumerator2();<br /><br />if (enumerator.MoveNext())<br /> message = enumerator.RemoveCurrent(timeout);<br /><br />if (message != null)<br />{<br /> messageBody = message.Body.ToString();<br />}<br /><br /></pre></div><br /><br /><br />3) Display all the messages present in the MSMQ (without removing messages from queue)<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />StringBuilder allMessages = new StringBuilder();<br />string queueName = @".\Private$\MyMSMQ";<br /><br />//Enumerating Messages from MSMQ<br />MessageQueue oMq = new MessageQueue(queueName);<br /><br />foreach (Message message in oMq)<br />{<br /> stringBuilder.Append(message.Body + ";");<br />}<br /></pre></div><br /><br /><br />4) Deletes all the messages contained in the MSMQ queue<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />string queueName = @".\Private$\MyMSMQ";<br /><br />//Deletes all the messages contained in the MSMQ queue<br />MessageQueue messageQueue = new MessageQueue(queueName);<br />messageQueue.Purge();<br /></pre></div><br /><br /><br />Nice link to refer - <br /><a href='http://articles.techrepublic.com.com/5100-10878_11-6170794.html'>Use Microsoft Message Queuing in C# for inter-process communication</a>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-75297964472011989942009-10-08T08:03:00.000-07:002009-10-08T08:08:02.964-07:00Code to add SPUser in SPGroupFollowing code snippet demonstrate the way to programmatically add SPUser in SPGroup...<br /><br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><br /><br />try<br />{<br /> SPSecurity.RunWithElevatedPrivileges(delegate()<br /> {<br /> using (SPSite spSiteTemp = new SPSite(SPContext.Current.Web.Url))<br /> using (SPWeb spWebTemp = spSiteTemp.OpenWeb())<br /> {<br /> spWebTemp.AllowUnsafeUpdates = true;<br /><br /> SPGroup spGroup = spWebTemp.SiteGroups["MySPGroup"];<br /><br /> SPUser spUser = spWebTemp.EnsureUser("DomainName\" + msUser.UserName);<br /><br /> //Adding group name in temporary arraylist to check SPUser's existing group.<br /> ArrayList arrayListGroups = new ArrayList();<br /> foreach (SPGroup tempGroup in spUser.Groups)<br /> {<br /> arrayListGroups.Add(tempGroup.Name.ToLower());<br /> }<br /><br /> if ((spUser.Groups.Count < 1) <br /> || ((spUser.Groups.Count > 1) <br /> && (!arrayListGroups.Contains("myspgroup"))))<br /> {<br /> spGroup.AddUser(spUser);<br /> }<br /><br /> spWebTemp.AllowUnsafeUpdates = false;<br /> }<br /> });<br />}<br />catch (SPException)<br />{<br /> throw;<br />}<br /><br /><br /></pre></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com2tag:blogger.com,1999:blog-6831292026292542607.post-15266737665626268632009-10-08T07:45:00.000-07:002009-10-08T07:56:46.326-07:00Populate SharePoint's SPList with records from MSExcel fileIn this post, I will focus on the way to retrieve the records from MS Excel file and then populate it in SPList of SharePoint.<br /><br /><br />Code snippet(comments are self-explainatory)...<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />int count = 0;<br />try<br />{<br /> SPUserToken sysToken = SPContext.Current.Site.SystemAccount.UserToken;<br /> using (var spSite = new SPSite(SPContext.Current.Site.ID, sysToken))<br /> {<br /> using (var spWeb = spSite.OpenWeb(SPContext.Current.Web.ID))<br /> {<br /> //Get Interviewers SPList<br /> SPList oList = spWeb.Lists["ListName"];<br /><br /> #region uploading Excel<br /><br /> //Here for saving file in FileSystem, creating time stamp<br /> string strFileName = DateTime.Now.ToString("ddMMyyyy_HHmmss");<br /> //FileUpload file;<br /> string strFileType <br /> = System.IO.Path.GetExtension(file.PostedFile.FileName)<br /> .ToString().ToLower();<br /><br /> //Check file type<br /> if (strFileType == ".xls" || strFileType == ".xlsx")<br /> {<br /> //Create Directory specified in parameter for downloading<br /> string directoryPath <br /> = HttpContext.Current.Server.MapPath("~/UploadedExcel");<br /><br /> if (!(System.IO.Directory.Exists(directoryPath)))<br /> {<br /> System.IO.Directory.CreateDirectory(directoryPath);<br /> }<br /><br /> //Save file in FileSystem <br /> file.SaveAs(HttpContext.Current.Server.<br /> MapPath("~/UploadedExcel/" + strFileName + strFileType));<br /> }<br /> else<br /> {<br /> throw new FormatException("Only excel file is allowed");<br /> }<br /><br /> string strNewPath <br /> = HttpContext.Current.Server.MapPath("~/UploadedExcel/" +<br /> strFileName + strFileType);<br /><br /> //Connection String to Excel Workbook<br /> string connectionString = string.Empty;<br /> if (strFileType.Trim() == ".xls")<br /> {<br /> connectionString <br /> = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + <br /> strNewPath + <br /> ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";<br /> }<br /> else if (strFileType.Trim() == ".xlsx")<br /> {<br /> connectionString <br /> = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +<br /> strNewPath + <br /> ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";<br /> }<br /><br /><br /> OleDbConnection conn = new OleDbConnection(connectionString);<br /> //This will open excel file<br /> conn.Open();<br /> //Get the Excel Sheet name from Config<br /> string sheetName = "Sheet1";<br /> if (!string.IsNullOrEmpty(System.Configuration.ConfigurationSettings.<br /> AppSettings["ExcelSheetName"]))<br /> {<br /> sheetName = System.Configuration.ConfigurationSettings.<br /> AppSettings["ExcelSheetName"];<br /> }<br /><br /> string strSQL = "SELECT * FROM [" + sheetName + "$]";<br /><br /> OleDbCommand cmd = new OleDbCommand(strSQL, conn);<br /> DataSet ds = new DataSet();<br /> ds.Locale = CultureInfo.InvariantCulture;<br /> OleDbDataAdapter da = new OleDbDataAdapter(cmd);<br /> da.Fill(ds);<br /><br /> spWeb.AllowUnsafeUpdates = true;<br /> SPListItem listItem = null;<br /><br /> foreach (DataRow dr in ds.Tables[0].Rows)<br /> {<br /> //Create new SPListItem<br /> listItem = oList.Items.Add();<br /><br /> listItem["FirstName"] <br /> = dr["First Name"] != null ? dr["First Name"].ToString() : null;<br /> listItem["LastName"] <br /> = dr["Last Name"] != null ? dr["LastName"].ToString() : null;<br /> <br /> listItem.Update();<br /><br /> listItem = null;<br /> }<br /><br /> spWeb.AllowUnsafeUpdates = false;<br /><br /> conn.Close();<br /> //Delete the saved excel file from FileSystem<br /> System.IO.File.Delete(strNewPath);<br /><br /> #endregion<br /><br /> //Increment the record count<br /> count = oList.Items.Count;<br /> }<br /> }<br /><br /> return count;<br />}<br />catch (SPException)<br />{<br /> throw;<br />}<br /></pre></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com1tag:blogger.com,1999:blog-6831292026292542607.post-80091851041947477112009-10-08T07:10:00.000-07:002009-10-08T07:24:19.123-07:00Login pop-up in SharePointIf you gets login pop-up whenever you opens any SharePoint page in Internet Explorer (IE), then solve this issue we need to change following IE settings...<br /><br />Add the SharePoint site to the list of Local Intranet (IE7/8).<br />Steps:<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><br />1) In <b>Internet Explorer</b>, on the <b>Tools</b> menu, click <b>Internet Options</b>. <br />2) On the <b>Security</b> tab, in the Select a Web content zone to specify its security settings box, click <b>Local Intranet</b>, and then click Sites. <br />3) Clear the Require server verification (https:) for all sites in this zone check box. <br />4) In the Add this Web site to the zone box, type the URL to your site, and then click <b>Add</b>. <br />5) Click <b>Close</b> to close the <b>Local Intranet</b> dialog box. <br />6) Click <b>OK</b> to close the <b>Internet Options</b> dialog box. <br /></pre></div><br /><br />Reference--<br /><a href='http://social.technet.microsoft.com/Forums/en-US/sharepointgeneral/thread/bb0ff5df-a764-4585-a056-6b9a9e193eee/'>MSDN Forum</a>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com1tag:blogger.com,1999:blog-6831292026292542607.post-30989562657035958482009-09-16T12:25:00.000-07:002009-09-17T08:04:04.318-07:00Sun One Active Directory in SharePointIn this post I will focus how to use <b>Sun One</b> Active Directory (AD) in SharePoint.<br /><b>Steps:</b><br /><table cellspacing="0" cellpadding="0"><tr><td><br />1) Install Sun one Server 5.2 and add some users:<br />ou=SPUsers<br />uid=JSmith, ou=SPUsers, dc=CompanyName,dc=co, dc=in<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQKDyRHHZRmkzVzrUqcmRjiaO6JDn78RSnrtsUTSPOOWi4hNoVCGmN8ZMWL4qqzndj-SnPOuyx2vsBLogPuJdoVVYIzoIn0IN97A_sCfFhET-X9X1sGS96kKglMOcngMPUpTtvjYXceLkk/s1600-h/A.jpg"><img style="cursor: pointer; width: 400px; height: 267px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQKDyRHHZRmkzVzrUqcmRjiaO6JDn78RSnrtsUTSPOOWi4hNoVCGmN8ZMWL4qqzndj-SnPOuyx2vsBLogPuJdoVVYIzoIn0IN97A_sCfFhET-X9X1sGS96kKglMOcngMPUpTtvjYXceLkk/s400/A.jpg" alt="" id="BLOGGER_PHOTO_ID_5382150726035752146" border="0" /></a><br /></td></tr><br /><tr><td><br />2) On central admin site,<br />Go to Application management -> Sharepoint Web Application Management section -> Web application list.<br />Select the web application which you want to bind to Sun one DS.<br />Click on Authentication providers under Application Security section in Application Management.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg9uYkIl0jYBco8t3q9AEmNpeMESjJH_4C-9IeU0owQKbPSpR39nsWkbdJ15ibICg5Wcq82DDZMwgSNvXzVwEajdR9pJbNqdgBmtpZCCfJIWyLsq7ggCqGiO6PtDwI3b8UmHCp3tQqbest/s1600-h/B.jpg"><img style="cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg9uYkIl0jYBco8t3q9AEmNpeMESjJH_4C-9IeU0owQKbPSpR39nsWkbdJ15ibICg5Wcq82DDZMwgSNvXzVwEajdR9pJbNqdgBmtpZCCfJIWyLsq7ggCqGiO6PtDwI3b8UmHCp3tQqbest/s400/B.jpg" alt="" id="BLOGGER_PHOTO_ID_5382150731100140146" border="0" /></a><br /></td></tr><br /><tr><td><br />3) Click on the zone for which you want to do configuration. Then make the settings as per the screenshot below, and click on Save.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEV17HWezhf0jSHpcRN8HEw-kYsz0HZ7S7bYBGcEjvcg4wBl-BCE9_Gz6NhsEJ7Igk-gvEale5eDhQgZo6gRNvNtYdqUjWlP_Xp1PsKmU9yUWtRsfYzS_eoYpFCKmEVEbMXDK8OozhtH0i/s1600-h/C.jpg"><img style="cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEV17HWezhf0jSHpcRN8HEw-kYsz0HZ7S7bYBGcEjvcg4wBl-BCE9_Gz6NhsEJ7Igk-gvEale5eDhQgZo6gRNvNtYdqUjWlP_Xp1PsKmU9yUWtRsfYzS_eoYpFCKmEVEbMXDK8OozhtH0i/s400/C.jpg" alt="" id="BLOGGER_PHOTO_ID_5382150739681391874" border="0" /></a><br /></td></tr><br /><tr><td><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyoQPy3d9Cwo80da9G_Wz7Y45pi9mx77tHtQtP2h1Z-e8iwdTxzUxishRgiUmPrjBp_2a6fCD5Ku4-vJcWJ8ErIoJW7FWEAaRnc_6xQCi-Cg-bGbL_CbIe-hAGwg2rJOsWas3JgvTtHFJa/s1600-h/D.jpg"><img style="cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyoQPy3d9Cwo80da9G_Wz7Y45pi9mx77tHtQtP2h1Z-e8iwdTxzUxishRgiUmPrjBp_2a6fCD5Ku4-vJcWJ8ErIoJW7FWEAaRnc_6xQCi-Cg-bGbL_CbIe-hAGwg2rJOsWas3JgvTtHFJa/s400/D.jpg" alt="" id="BLOGGER_PHOTO_ID_5382150741747999490" border="0" /></a><br /></td></tr><br /><tr><td><br />4) Add the following code to web.config files of the website as well as central admin site.<br /><br /><div style="background-color: rgb(255, 255, 204);"><pre><br /><membership defaultProvider="LDAP"><br /> <providers><br /> <add name="LDAP"<br /> type="Microsoft.Office.Server.Security.LDAPMembershipProvider,<br /> Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral,<br /> PublicKeyToken=71E9BCE111E9429C" <br /> server="ServerName" <br /> port="15000"<br /> useSSL="false" userDNAttribute ="entryDN" <br /> userNameAttribute ="uid" <br /> userContainer="ou=SPUsers,dc=CompanyName,dc=co,dc=in"<br /> userObjectClass="inetorgperson" <br /> userFilter="(ObjectClass=inetorgperson)" scope="Subtree"<br /> /><br /> </providers><br /></membership><br /></pre></div><br /><br /></td></tr><br /><tr><td><br />5) Add a user with Full Control on the Web application to enable initial logon to the site collections and to perform administrative tasks. To add a user, click Add Users on the Policy for Web Application page, and select a zone.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg66kyZ09ZwAcrafems7Cr1xtsfgvN1ryyIR4LuvPdD9dTxgCsjGfYFZQYt-GDqqnojonTDe-7t4a9bQpZJdpWTuOny6r-FIoAtXyPcJEIqrMlYUU9OMI479AxbDI3fqAA_x0ZS4D5pKHJt/s1600-h/E.jpg"><img style="cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg66kyZ09ZwAcrafems7Cr1xtsfgvN1ryyIR4LuvPdD9dTxgCsjGfYFZQYt-GDqqnojonTDe-7t4a9bQpZJdpWTuOny6r-FIoAtXyPcJEIqrMlYUU9OMI479AxbDI3fqAA_x0ZS4D5pKHJt/s400/E.jpg" alt="" id="BLOGGER_PHOTO_ID_5382150752603326114" border="0" /></a><br /><br />Click Next.<br /></td></tr><br /><tr><td><br />6) Enter a valid user in Users text box like provider name: username as shown below:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGXIAz-J2CK7FDNA4coX_hj9pJL4e2YieUf3oqTmTkW_W0-dWpbaQYFrwCa3fgh8vre6JPR7AJaes6AvFuFNcflh8Te_MoScR0jyU2ZSqeXwRYXPn5qWh6Bm_ENbg9ktnTg8dE93NqRab5/s1600-h/F.jpg"><img style="cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGXIAz-J2CK7FDNA4coX_hj9pJL4e2YieUf3oqTmTkW_W0-dWpbaQYFrwCa3fgh8vre6JPR7AJaes6AvFuFNcflh8Te_MoScR0jyU2ZSqeXwRYXPn5qWh6Bm_ENbg9ktnTg8dE93NqRab5/s400/F.jpg" alt="" id="BLOGGER_PHOTO_ID_5382152138030128530" border="0" /></a><br /></td></tr><br /><tr><td><br />Verify name using Check names and then choose permissions.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinZnBhV94mUK9EgB1-0osKGNMx2u5zUuQlQftwTff-vKE2ucZmrs6FdekQDZ-zJ0hnFhqae3IV45ou-7rxon89cGni0R8grK1NQ6dETa7eIz-g7KnqgF2uGjdMnXP0UAsHl-9D0CyMg1r1/s1600-h/G.jpg"><img style="cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinZnBhV94mUK9EgB1-0osKGNMx2u5zUuQlQftwTff-vKE2ucZmrs6FdekQDZ-zJ0hnFhqae3IV45ou-7rxon89cGni0R8grK1NQ6dETa7eIz-g7KnqgF2uGjdMnXP0UAsHl-9D0CyMg1r1/s400/G.jpg" alt="" id="BLOGGER_PHOTO_ID_5382152141652171202" border="0" /></a><br /><br />Click on Finish.<br /></td></tr><br /><tr><td><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoVEjzPVW4tfX8pIYwRall3_q1qYRvYOn8s9aEGZ7Hrp9JP3KDE0De2Txl16RB_R82yoyaowWEnUiYD6FCR1xCPrWim6iJ0czncJSuNG9oBuSMyghr3NrNf37HUnqsvDyjtQv38cUC0KMf/s1600-h/H.jpg"><img style="cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoVEjzPVW4tfX8pIYwRall3_q1qYRvYOn8s9aEGZ7Hrp9JP3KDE0De2Txl16RB_R82yoyaowWEnUiYD6FCR1xCPrWim6iJ0czncJSuNG9oBuSMyghr3NrNf37HUnqsvDyjtQv38cUC0KMf/s400/H.jpg" alt="" id="BLOGGER_PHOTO_ID_5382152152489794450" border="0" /></a><br /></td></tr><br /><tr><td><br />7) Now you can login into the site using the above added username.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijyPBIHQ9iR1zrmmLM8cmbzKzCb7w_B4zyvkpLOwxWyFhIPKJPtq7jFjeDlllxso5qByEFuw3TbfHfIGo9yAS9efAtyb_ElO-_DcsRSL7_4YKCR1mk8mPHDEAzWhPULO3zG8LgvlOYdBUM/s1600-h/I.jpg"><img style="cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijyPBIHQ9iR1zrmmLM8cmbzKzCb7w_B4zyvkpLOwxWyFhIPKJPtq7jFjeDlllxso5qByEFuw3TbfHfIGo9yAS9efAtyb_ElO-_DcsRSL7_4YKCR1mk8mPHDEAzWhPULO3zG8LgvlOYdBUM/s400/I.jpg" alt="" id="BLOGGER_PHOTO_ID_5382152154248339858" border="0" /></a><br /></td></tr><br /><tr><td><br />8) Permissions can be given to other users by using People and Groups link. User name has to be entered in the form of providerName:username.<br /></td></tr><br /><tr><td><br /><b>References:</b><br /><a href="http://msdn.microsoft.com/en-us/library/bb977430.aspx#MOSSFBAPart3_UsingLDAPProvider">Sun One AD 1</a><br /><br /><a href="http://technet.microsoft.com/en-us/library/cc262201.aspx">Sun One AD 2</a><br /></td></tr><br /><tr><td><br /><b>For ADAM refer following links:</b><br /><br /><a href="http://blogs.pointbridge.com/Blogs/morse_matt/Pages/Post.aspx?_ID=18">SharePoint PeoplePicker Behavior with ADAM Users</a><br /><br /><a href="http://blogs.pointbridge.com/Blogs/morse_matt/Pages/Post.aspx?_ID=2">How to use WSS v3 with ADAM for user authentication</a><br /></td></tr></table>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0tag:blogger.com,1999:blog-6831292026292542607.post-55273778968108417862009-08-27T09:55:00.000-07:002009-09-26T09:39:14.132-07:00Custom Welcome User message in SharePointBy-default SharePoint display Logged-in user name as --- <b>Welcome UserName</b>,<br />also its displays a context menu on mouse click which performs following actions:<br />a) Personal Settings<br />b) Sign Out<br />c) Sign in as different user, etc<br /><br />We can add / delete menu items in Welcome User's context menu.<br /><br />Now consider a scenarion where we don't want context menu, just User name and Sign-Out link are needed.<br /><br />To acheive above requirement, we can either create a custom WebPart or a custom UserControl.<br />I preferred custom UserControl, because it easy to create and deploy.<br /><br />Following is the code snippet of custom UserControl (name MyWelcomeUser.ascx) -<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><br /><%@ Control Language="C#" AutoEventWireup="true" CompilationMode="Always"<br /> EnableViewState="true" %><br /><br /><div id="divMain" runat="server" style="width: 100%;"><br /> <table cellpadding="0" cellspacing="0"><br /> <tr class="column_title_link tab-bg"><br /> <td class="welcome-text"><br /> Welcome<br /> <asp:Label ID="LabelUserName" runat="server" <br /> Style="padding-left: 5px; font-weight: bold;"></asp:Label><br /> </td><br /> <td><br /> |<br /> </td><br /> <td><br /> <asp:HyperLink NavigateUrl="/_layouts/signout.aspx"<br /> ID="HyperLinkSignOut" runat="server"<br /> Text="Logout"></asp:HyperLink><br /> </td><br /> </tr><br /> </table><br /></div><br /><br /><script language="C#" runat="server"><br /><br />protected void Page_Load(Object sender, EventArgs e)<br />{<br /> LabelUserName.Text = Microsoft.SharePoint.SPContext.Current.Web.CurrentUser.Name;<br />}<br /><br /></script><br /><br /></pre></div><br /><br /><br />In the above code snippet I created a Label, whose text is set to current logged-in user in Page_Load event and a link to do Sign Out. <br />Here I am using SharePoint's default signout page.<br /><br /><br />Following is the snapshot of custom Login control...<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfWEa5ugA9vkVTViUb6FG1I6t0Y2B11HUQ_KXGjshMNSrskkz17jRMlisDB5zJNSJuuoKAgBQOOsf_ICK114uZfcaWHyvqrmu4Dv_Lq1ntYUIF8iVpHK7l3-AlIUwiK1Y6i7QBvr7fToey/s1600-h/image001.png"><img style="cursor:pointer; cursor:hand;width: 224px; height: 29px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfWEa5ugA9vkVTViUb6FG1I6t0Y2B11HUQ_KXGjshMNSrskkz17jRMlisDB5zJNSJuuoKAgBQOOsf_ICK114uZfcaWHyvqrmu4Dv_Lq1ntYUIF8iVpHK7l3-AlIUwiK1Y6i7QBvr7fToey/s400/image001.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5385816163854769010" /></a>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com1tag:blogger.com,1999:blog-6831292026292542607.post-54245855604807609262009-08-27T08:30:00.000-07:002009-08-27T09:19:05.023-07:00SPSiteDataQuery in SharePointIf we want to search some record(s) within a SPList, then SPQuery is sufficient.<br /><br />But consider a scenarion, where we don't know SPList name or we want to fire a query at SPWeb (Site) level, then we have to use <b>SPSiteDataQuery</b>.<br /><br />Syntax wise SPSiteDataQuery is same as SPQuery.<br />Following code snippet gives a rough idea about SPSiteDataQuery usage:<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><br />SPWeb oWebsite = SPContext.Current.Web;<br />SPSiteDataQuery oQuery = new SPSiteDataQuery();<br /> <br />string s1 = "avinash";<br />string s2 = "IsAdmin";<br /> <br />StringBuilder strb = new StringBuilder();<br />strb.Append("<Where><And>");<br />strb.AppendFormat("<Eq><FieldRef Name='LoginName' /><Value Type='Text'>{0}</Value></Eq>", s1);<br />strb.AppendFormat("<Eq><FieldRef Name='{0}' /><Value Type='Boolean'>1</Value></Eq>", s2);<br />strb.Append("</And></Where>");<br /> <br />oQuery.Query = strb.ToString();<br />oQuery.Lists = "<Lists ServerTemplate=\"100\" />";<br />//oQuery.ViewFields = "<FieldRef Name=\"Title\" />";<br /> <br />DataTable dtResults = oWebsite.GetSiteData(oQuery);<br /><br />if(dtResults.Rows.Count > 0)<br />{<br /> //There are some records<br /><br /><br /> //dtResults.Columns.Count --- 3 --- data type : int<br /><br /> //dtResults.Columns[0].ColumnName --- "ListId" --- data type : string<br /> //dtResults.Columns[1].ColumnName --- "WebId" --- data type : string<br /> //dtResults.Columns[2].ColumnName --- "ID" --- data type : string<br /> <br /><br /> //In case of 1 record found<br /> //dtResults.Rows.Count --- 1 --- data type : int<br /><br /> //dtResults.Rows[0][0] --- "{some GUID value}" --- data type : object {string}<br /> //dtResults.Rows[0][1] --- "{some GUID value}" --- data type : object {string}<br /> //dtResults.Rows[0][2] --- "6" --- data type : object {string}<br /><br /><br /><br /> //To open the SPList that contains our desired record:<br /> string stringGuid <br /> = dtResults.Rows[0][0].ToString().Replace("{", "").Replace("}", "");<br /> Guid guidObject = new Guid(stringGuid);<br /> SPList spList = oWebsite.Lists[guidObject];<br />}<br />else<br />{<br /> //There is no record<br />}<br /></pre></div><br /><br />In the above code I am looking for record that contains <b>LoginName</b> (SPColumn name) as "avinash" and <b>IsAdmin</b> (SPColumn name) is set to true.<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><br />Quick re-cap:<br />1) Open SPWeb<br />2) Build query<br />3) Create SPSiteDataQuery object<br />4) Set following properties of SPSiteDataQuery's object -<br /> a) Query <br /> b) Lists<br /> c) ViewFields<br />5) Get DataTable by executing query on SPWeb<br />6) Check number of Rows in DataTable<br />7) If record(s) found, then get GUID of SPList<br />8) Get SPList based on GUID<br />9) Do required operation on SPList<br /></pre></div><br /><br /><br />Following are the ServerTemplate IDs for List:<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><br />100 Generic list, 101 Document library, 102 Survey, 103 Links list, 104 Announcements list, 105 Contacts list, 106 Events list, 107 Tasks list, 108 Discussion board, 109 Picture library, 110 Data sources, 111 Site template gallery, 112 User Information list, 113 Web Part gallery, 114 List template gallery, 115 XML Form library, 116 Master pages gallery, 117 No-Code Workflows, 118 Custom Workflow Process, 119 Wiki Page library, 120 Custom grid for a list, 130 Data Connection library, 140 Workflow History, 150 Gantt Tasks list, 200 Meeting Series list, 201 Meeting Agenda list, 202 Meeting Attendees list, 204 Meeting Decisions list, 207 Meeting Objectives list, 210 Meeting text box, 211 Meeting Things To Bring list, 212 Meeting Workspace Pages list, 300 Portal Sites list, 301 Blog Posts list, 302 Blog Comments list, 303 Blog Categories list, 850 Page Library, 1100 Issue tracking, 1200 Administrator tasks list, 2002 Personal document library, 2003 Private document library<br /></pre></div><br /><br /><br />Reference Links:<br /><br /><a href='http://spdom.blogspot.com/2009/01/servertemplate-numbers.html'>Server Template Numbers</a><br /><a href='http://www.sharepointkings.com/2008/06/using-spsitedataquery-class-to-execute.html'>SPSiteDataQuery 1</a><br /><a href='http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.aspx'>SPSiteDataQuery 1</a><br /><a href='http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.lists.aspx'>SPSiteDataQuery 1</a>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com1tag:blogger.com,1999:blog-6831292026292542607.post-88445646210785191142009-08-08T07:19:00.000-07:002009-08-08T09:24:25.283-07:00Configuring Forms Based Authentication (FBA) in SharePoint<table><tr><td><br />If we want to configure Forms Based Authentication (FBA) in SharePoint, <br />then we have to follow following steps -<br /></td></tr><tr><td><br /><b>Configuration Steps:</b><br />1) Setup the membership data store.<br />2) Create an ASP.Net Web Site to manage Roles and Users.<br />3) Open ASP.Net Web Site’s Web Administration Tool.<br />4) Create a new Web Application from SharePoint Central Administration site.<br />5) Extend Web Application<br />6) Change Authentication Provider for Forms based site.<br />7) Change configuration files settings.<br />8) Change policy for Web Application<br />9) Add users/roles as site administrator (Primary and Secondary).<br />10) Check Forms Based Authentication<br /><br /></td></tr><tr><td><br /><br />Now I will explain each steps in some detail -<br /><br /></td></tr><tr><td><br /><br /><b>1) Setup the membership data store.</b><br /><br />To create database, Microsoft has provided a tool/ utility called <b><i>aspnet_regsql.exe</i></b> that creates a database for us. <br />This utility can be found in <br /><b>%windir%\Microsoft.Net\Framework\vx.x.xxxxx</b> folder. <br /><br />Double click or run aspnet_regsql.exe, <br />it opens a pop-up window as demonstrated in following images :<br /><br /></td></tr><tr><td><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtHYem97WbBzfdTFsaDTmcQk-qmTRzteYLocjkcaixWtW6qNd3FkhNWD8tjTa2C1kZirYjeLN5EBVldPIc0Bqkf0gha_4BSA_kAIWyOe4zMRfxp9romjBlTW4GzRB0DRfbms_-A9WbQmyz/s1600-h/1.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 311px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtHYem97WbBzfdTFsaDTmcQk-qmTRzteYLocjkcaixWtW6qNd3FkhNWD8tjTa2C1kZirYjeLN5EBVldPIc0Bqkf0gha_4BSA_kAIWyOe4zMRfxp9romjBlTW4GzRB0DRfbms_-A9WbQmyz/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367599920190686642" /></a><br />[Figure - 1]<br /></td></tr><tr><td><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYdn_dCTqjemGb5DzisfetQ0RTP9ITRUUAF0AtWK_S6q5oVxWRrGWPu0ZSZcBEdcla0i5mqDN_HPklCHtKRprtCv1WyfuX_1GPIWRCmEk_eMlNtQ9njcrbUg7-3l3csmkh4td-IA8Ttzik/s1600-h/2.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 311px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYdn_dCTqjemGb5DzisfetQ0RTP9ITRUUAF0AtWK_S6q5oVxWRrGWPu0ZSZcBEdcla0i5mqDN_HPklCHtKRprtCv1WyfuX_1GPIWRCmEk_eMlNtQ9njcrbUg7-3l3csmkh4td-IA8Ttzik/s400/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367599919541915570" /></a><br />[Figure - 2]<br /></td></tr><tr><td><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3g5Cu7y4rlWHHCLICbRU7QIQjZY_KE6GrnRfl04FX2cCEkvdcQUZQEFPP-gf5TkWyK68Bho2pJM-VvDUh2N0VAdICsdV6KDOlNmmGugEIdCy0K9JHt2vlPbJXI1DC-wk5vWwXrKPEbSWH/s1600-h/3.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 312px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3g5Cu7y4rlWHHCLICbRU7QIQjZY_KE6GrnRfl04FX2cCEkvdcQUZQEFPP-gf5TkWyK68Bho2pJM-VvDUh2N0VAdICsdV6KDOlNmmGugEIdCy0K9JHt2vlPbJXI1DC-wk5vWwXrKPEbSWH/s400/3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367599924908478946" /></a><br />[Figure - 3]<br /><i><b>Note: </b>Enter your Server Name and Database name in fields.</i><br /><br /></td></tr><tr><td><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2GnyUXdrT96JOb82cGRoytcSkaC20iA5iyUy9sg3vSXtcRjoLu_ZqOZLXBaBST4mIpkLIzi5qrprD8_bjsWm77WwByGs_4g5-bxS3R3SvGk9gxWVgeiB-Empeh_PEkk0nfoidqUmbZDAq/s1600-h/4.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 311px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2GnyUXdrT96JOb82cGRoytcSkaC20iA5iyUy9sg3vSXtcRjoLu_ZqOZLXBaBST4mIpkLIzi5qrprD8_bjsWm77WwByGs_4g5-bxS3R3SvGk9gxWVgeiB-Empeh_PEkk0nfoidqUmbZDAq/s400/4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367599935239519058" /></a><br />[Figure - 4]<br /></td></tr><tr><td><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4M-MGqQiicaOYZBe0aV-XzTlXDSI16adBzPXpplq1Ysb8naVOKumQm47jxJQQvf0TayPeqGgMGOy3Rf-li44MRqH7jz-zlDONNedJPFeitMijuqBfXiwhESa7aq4RtxVJDnSGN0bT7Rzy/s1600-h/5.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 311px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4M-MGqQiicaOYZBe0aV-XzTlXDSI16adBzPXpplq1Ysb8naVOKumQm47jxJQQvf0TayPeqGgMGOy3Rf-li44MRqH7jz-zlDONNedJPFeitMijuqBfXiwhESa7aq4RtxVJDnSGN0bT7Rzy/s400/5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367599938494454770" /></a><br />[Figure - 5]<br /></td></tr><tr><td><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3iRciqrz0QNOy0X_ArPDBnHgrR2DL2_ioqS_BTcvS2OQ6rbA7bWLeYjnwbgrzdDC2IizDOAZW61ZI5hkm8r0b9Faq6zx18a8Yu7-C8Qu-mIRKEUag14b3Y2aM_rPmCcqr0-UJEb4shNSv/s1600-h/6.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 311px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3iRciqrz0QNOy0X_ArPDBnHgrR2DL2_ioqS_BTcvS2OQ6rbA7bWLeYjnwbgrzdDC2IizDOAZW61ZI5hkm8r0b9Faq6zx18a8Yu7-C8Qu-mIRKEUag14b3Y2aM_rPmCcqr0-UJEb4shNSv/s400/6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367600174403115010" /></a><br />[Figure - 6]<br /></td></tr><tr><td><br /><br /><b>Note: </b>Check whether your custom MembershipDB is accessible by <b>NT AUTHORITY\ NETWORK SERVICE</b> or not.<br /><br />Steps: <br />a) Open <b>MS SQL Server Management Studio</b><br />b) Select <b>SERVER</b> (in Tree-node at left side)<br />c) Select <b>Security</b><br />d) Select <b>Logins</b><br />e) Select <b>NT AUTHORITY\NETWORK SERVICE</b><br />f) Right-click on it, select <b>Properties</b><br />g) Its pop-ups Login Properties window. <br /> Select <b>User Mapping</b> (in Tree-node at left side)<br />h) Check your database name in top-right pane and <br /> its corresponding access in bottom-right pane.<br />i) Click <b>OK</b>.<br />j) Then to check effective permissions of your custom MembershipDB, <br /> select DB from left side tree view.<br /> <b>Server – Databases – </b>custom MembershipDB<br />k) Right-click on custom MembershipDB, select Properties.<br />l) In <b>Database Properties</b> window, select <b>Permission</b> <br /> (in left pane). <br />m) Select <b>NT AUTHORITY\NETWORK SERVICE</b> (in right pane), <br /> click <b>Effective Permissions</b> button.<br />n) Check whether it has required permissions or not. <br /> If not then assign required permissions.<br /> <br /><br /></td></tr><tr><td><br /><br /><b>2) Create a new ASP.Net Web Site to manage Roles and Users.</b><br /><br />Do following changes in temporary ASP.Net web site's configuration file:<br /><br />Web site’s configuration file (web.config) ---<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><br /><configuration><br /> <!--Remaining settings--><br /><br /> <connectionStrings><br /> <add name="CustomMembershipDBCNX"<br /> connectionString="SERVER=Server-Name; DATABASE=CustomMembershipDB;<br /> TRUSTED_CONNECTION=true;"<br /> providerName="System.Data.SqlClient" /><br /> </connectionStrings><br /><br /> <system.web><br /> <!--Remaining settings--><br /><br /> <machineKey validationKey="Copy-it-from-sharepoint-site-cofig-file"<br /> decryptionKey="Copy-it-from-sharepoint-site-cofig-file"<br /> validation="SHA1" /><br /><br /> <authentication mode="Forms"><br /> <forms loginUrl="/_layouts/login.aspx" /><br /> </authentication><br /><br /> <membership defaultProvider="CustomMembershipProvider"><br /> <providers><br /> <add name="CustomMembershipProvider"<br /> type="System.Web.Security.SqlMembershipProvider, System.Web, <br /> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"<br /> connectionStringName="CustomMembershipDBCNX"<br /> enablePasswordRetrieval="false"<br /> enablePasswordReset="true"<br /> requiresQuestionAndAnswer="false"<br /> applicationName="/"<br /> requiresUniqueEmail="false"<br /> passwordFormat="Hashed"<br /> maxInvalidPasswordAttempts="5"<br /> minRequiredPasswordLength="7"<br /> minRequiredNonalphanumericCharacters="1"<br /> passwordAttemptWindow="10"<br /> passwordStrengthRegularExpression=""<br /> /><br /> </providers><br /> </membership><br /><br /> <roleManager enabled="true" defaultProvider="CustomRoleProvider"><br /> <providers><br /> <add name="CustomRoleProvider"<br /> connectionStringName="CustomMembershipDBCNX"<br /> applicationName="/"<br /> type="System.Web.Security.SqlRoleProvider, System.Web, <br /> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"<br /> /><br /> </providers><br /> </roleManager><br /> </system.web><br /></configuration><br /></pre></div><br /><br /></td></tr><tr><td><br /><br />Changed following 4 settings in above snippet (<i>quick review</i>):<br />a) connectionStrings<br />b) machineKey<br />c) authentication<br />d) membership<br />e) roleManager<br /><br /></td></tr><tr><td><br /><br /><b>3) Open ASP.Net Web Site’s Web Administration Tool</b><br /><br />Go To --- <br />Menu -> Website -> ASP.Net Configuration<br /><br /></td></tr><tr><td><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4AsLrvNM-K97TPt2SIhAYUNMeSVvpR4bfgSmHmoP-5mD25Nma62C_oswGS84fj7Iv3XLWVsv5IBLsBv-GD-eI9Pp-jVQKIO_EppoaG3QtS2JdufrcpSUeoAs_0tyIGNtPMnPxQWCRRq1-/s1600-h/7.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 301px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4AsLrvNM-K97TPt2SIhAYUNMeSVvpR4bfgSmHmoP-5mD25Nma62C_oswGS84fj7Iv3XLWVsv5IBLsBv-GD-eI9Pp-jVQKIO_EppoaG3QtS2JdufrcpSUeoAs_0tyIGNtPMnPxQWCRRq1-/s400/7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367600179312698722" /></a><br />[Figure - 7]<br /></td></tr><tr><td><br /><br />a) <b>Security tab: </b>To manage/create Roles and User<br />b) <b>Provider tab: </b>To test both Custom membership and role provider <br />(click Select a different provider for each feature (advanced) link).<br /><br /></td></tr><tr><td><br /><br /><b>4) Create a new Web Application from SharePoint Central Administration site</b><br /><br />Step: <br /><br /><i>Central Administration > Application Management > <br />Create or Extend Web Application > Create New Web Application<br /></i><br />After creating the Web Application create Site Collection (link gets displayed after completing the above step)<br /><br /></td></tr><tr><td><br /><br /><b>5) Extend Web Application</b><br /><br />Note: Select proper site (from top-right dropdown) that you want to extend.<br />Step:<br /><br /><i>Central Administration > Application Management > Create or Extend Web Application > Extend Web Application to Another IIS Web Site <br /></i><br />In above step/page select Zone as Extranet or Internet as per your requirement.<br /><br /></td></tr><tr><td><br /><br /><b>6) Change Authentication Provider for Forms based site</b><br /><br />Note: Select proper site and zone (from top-right dropdown) whose Authentication Provider you want to change to Forms Based.<br /><br />Step:<br /><br /><i>Central Administration > Application Management > Authentication Providers > Edit Authentication</i><br /><br />a) Select Authentication Type as Forms.<br />b) Disable Anonymous access<br />c) Enter custom Membership provider name<br />d) Enter custom Role manager name<br /><br />Save the changes.<br /><br /></td></tr><tr><td><br /><br /><b>7) Change configuration files settings</b><br /><br />Changes required in <b>SharePoint Central Administration</b> configuration file (web.config).<br /><br /><i>IMPORTANT: </i>Do take the back-up of web.config file.<br /><br /></td></tr><tr><td><br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><br /><configuration><br /> <SharePoint><br /> <!--Remaining settings--><br /><br /> <PeoplePickerWildcards><br /> <clear /><br /> <add key="AspNetSqlMembershipProvider" value="%" /><br /> <add key="CustomMembershipProvider" value="%" /><br /> </PeoplePickerWildcards><br /><br /> </SharePoint><br /> <!--Remaining settings--><br /><br /> <connectionStrings><br /> <add name="CustomMembershipDBCNX"<br /> connectionString="SERVER=Server-Name; DATABASE=CustomMembershipDB;<br /> TRUSTED_CONNECTION=true;"<br /> providerName="System.Data.SqlClient" /><br /> </connectionStrings><br /><br /> <system.web><br /> <!--Remaining settings--><br /><br /> <membership><br /> <providers><br /> <add name="CustomMembershipProvider"<br /> type="System.Web.Security.SqlMembershipProvider, System.Web, <br /> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"<br /> connectionStringName="CustomMembershipDBCNX"<br /> enablePasswordRetrieval="false"<br /> enablePasswordReset="true"<br /> requiresQuestionAndAnswer="false"<br /> applicationName="/"<br /> requiresUniqueEmail="false"<br /> passwordFormat="Hashed"<br /> maxInvalidPasswordAttempts="5"<br /> minRequiredPasswordLength="7"<br /> minRequiredNonalphanumericCharacters="1"<br /> passwordAttemptWindow="10"<br /> passwordStrengthRegularExpression=""<br /> /><br /> </providers><br /> </membership><br /><br /> <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"><br /> <providers><br /> <add name="CustomRoleProvider"<br /> connectionStringName="CustomMembershipDBCNX"<br /> applicationName="/"<br /> type="System.Web.Security.SqlRoleProvider, System.Web, <br /> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"<br /> /><br /> </providers><br /> </roleManager><br /> </system.web><br /></configuration><br /><br /><br /></pre></div><br /><br /></td></tr><tr><td><br /><br />Changed following 4 settings in above snippet (<i>quick review</i>):<br />a) PeoplePickerWildcards – To detect your custom provider<br />b) connectionStrings<br />c) membership – Don’t specify default provider<br />d) roleManager – Change default provider to AspNetWindowsTokenRoleProvider<br /><br />Note : Don’t change MachineKey.<br /><br /></td></tr><tr><td><br /><br />Now made following changes in SharePoint Web Application's (<i>created in step 4</i>) configuration file (default one with Windows authentication) (web.config)<br /><br /></td></tr><tr><td><br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><br /><configuration><br /> <SharePoint><br /> <!--Remaining settings--><br /><br /> <PeoplePickerWildcards><br /> <clear /><br /> <add key="AspNetSqlMembershipProvider" value="%" /><br /> <add key="CustomMembershipProvider" value="%" /><br /> </PeoplePickerWildcards><br /><br /> </SharePoint><br /> <!--Remaining settings--><br /><br /> <connectionStrings><br /> <add name="CustomMembershipDBCNX"<br /> connectionString="SERVER=Server-Name; DATABASE=CustomMembershipDB;<br /> TRUSTED_CONNECTION=true;"<br /> providerName="System.Data.SqlClient" /><br /> </connectionStrings><br /><br /> <system.web><br /> <!--Remaining settings--><br /><br /> <membership defaultProvider="CustomMembershipProvider"><br /> <providers><br /> <add name="CustomMembershipProvider"<br /> type="System.Web.Security.SqlMembershipProvider, System.Web, <br /> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"<br /> connectionStringName="CustomMembershipDBCNX"<br /> enablePasswordRetrieval="false"<br /> enablePasswordReset="true"<br /> requiresQuestionAndAnswer="false"<br /> applicationName="/"<br /> requiresUniqueEmail="false"<br /> passwordFormat="Hashed"<br /> maxInvalidPasswordAttempts="5"<br /> minRequiredPasswordLength="7"<br /> minRequiredNonalphanumericCharacters="1"<br /> passwordAttemptWindow="10"<br /> passwordStrengthRegularExpression=""<br /> /><br /> </providers><br /> </membership><br /><br /> <roleManager enabled="true" defaultProvider="CustomRoleProvider"><br /> <providers><br /> <add name="CustomRoleProvider"<br /> connectionStringName="CustomMembershipDBCNX"<br /> applicationName="/"<br /> type="System.Web.Security.SqlRoleProvider, System.Web, <br /> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"<br /> /><br /> </providers><br /> </roleManager><br /> </system.web><br /></configuration><br /><br /><br /><br /></pre></div><br /><br /></td></tr><tr><td><br /><br />Changed following 4 settings in above snippet (<i>quick review</i>):<br />a) PeoplePickerWildcards – To detect your custom provider<br />b) connectionStrings<br />c) membership <br />d) roleManager<br /><br />Note : Don’t change MachineKey.<br /><br /></td></tr><tr><td><br /><br />Repeat above configuration changes for Forms Based Web Application’s (<i>created in step 5</i>) configuration file (web.config) <br />(port number will be different).<br /><br />The only difference in case of Forms Based Web Application’s config file will be: <br /></td></tr><tr><td><br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><br /><configuration><br /> <system.web><br /> <!--Remaining settings--><br /><br /> <authentication mode="Forms"><br /> <forms loginUrl="/_layouts/login.aspx"<br /> timeout="120"<br /> cookieless="UseCookies"<br /> slidingExpiration="true" /><br /> </authentication><br /> </system.web><br /></configuration><br /><br /></pre></div><br /><br /></td></tr><tr><td><br /><br />Changed following 5 settings in Forms based site's config (<i>quick review</i>):<br />a) PeoplePickerWildcards – To detect your custom provider<br />b) connectionStrings<br />c) membership <br />d) roleManager<br />e) Authentication – It will be automatically set by STEP 6.<br /><br /><br />So in total, we have to change 3 configuration files:<br />a) SharePoint’s Central Administration<br />b) Web Application with Default zone (Windows) [created in step 4]<br />c) Web Application with Internet/Extranet zone (Forms) [created in step 5]<br /><br /></td></tr><tr><td><br /><br /><b>8) Change policy for Web Application</b><br /><br />Note: Select proper site (from top-right dropdown).<br /><br />Step:<br /><i><br />Central Administration > Application Management > Policy for Web Application<br /></i><br />Click Add Users (top-left) to add new users/roles. Assign permission as per requirement.<br /><b>Common Error: Access Denied</b><br /><br />Steps to solve above error :<br /><br />a) Go to --- SharePoint Central Administration > Application Management > Policy for Web Application <br />b) Select proper Web Application (from top-right)<br />c) Click "Add User" (top-left)<br />d) Add required User or Role in it.<br />e) Grant it "Full Control" (as per requirement) out of following options:<br />• Full Control - Has full control. <br />• Full Read - Has full read-only access. <br />• Deny Write - Has no write access. <br />• Deny All - Has no access.<br /><br /></td></tr><tr><td><br /><br /><b>9) Add users/roles as site administrator (Primary and Secondary)</b><br /><br />Note: Select proper site (from top-right dropdown).<br /><br />Step:<br /><br /><i>Central Administration > Application Management > Site Collection Owners <br /></i><br /></td></tr><tr><td><br /><br /><b>10) Open Forms based URL in browser; it will redirect you to login page</b> <br /><br />It means site is properly configured for Forms Based Authentication (FBA).<br /><br />Enter the <Username> and <Password> (<i>refer step 3</i>) in login page; if you are able to login, its mean database is properly configured. <br />Otherwise check username, password, roles in DB and also the effective permissions of NT AUTHORITY\NETWORK SERVICE.<br /><br /></td></tr><tr><td><br /><br />References: <br />1. <a href='http://www.simple-talk.com/dotnet/windows-forms/configuring-forms-authentication-in-sharepoint-2007/'>simple-talk FBA</a><br /><br />2. <a href='http://msdn.microsoft.com/en-us/library/bb975136.aspx'>msdn FBA</a><br /><br />3. <a href='http://www.codeproject.com/KB/sharepoint/FBA.aspx'>codeproject FBA</a><br /><br />4. <a href='http://hiddensharepointfeatures.blogspot.com/2008/01/form-based-authentication-in-sharepoint.html'>hiddensharepointfeatures FBA</a><br /><br /></td></tr></table>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com14tag:blogger.com,1999:blog-6831292026292542607.post-71278815126121286582009-06-10T03:11:00.000-07:002009-11-24T22:22:33.524-08:00Sharepoint Tips n Tricks1) Export Spreadsheet menu is not visible in Forms Based application in SharePoint:<br /><br />Solution: Go tO -<br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />Central Administration > Application Management ><br />Authentication Providers > Edit Authentication <br /><br /><br />Checked "Yes" in "Enable Client Integration? "<br /></pre></div><br /><br /><br />Notes: Client Integration<br />Disabling client integration will remove features which launch client applications. Some authentication mechanisms (such as Forms) don't work well with client applications. In this configuration, users will have to work on documents locally and upload their changes.<br /><br /><br />2) Apply validation controls on SharePoint's DateTimeControl<br /><br />Following code snippet displays, how to apply following validations on Sharepoint's DateTimeControl:<br />a) Required field validation<br />b) Valid date validation<br />c) Date compare validation<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><table cellpadding="0" cellspacing="0" style="font-size: 8pt; font-family: Tahoma;"><br /> <tr><br /> <td><br /> <SharePoint:DateTimeControl ID="dateTimeStartDate" runat="server" <br /> DateOnly="true"></SharePoint:DateTimeControl><br /> </td><br /> <td></td><br /> </tr><br /> <tr><br /> <td><br /> <SharePoint:DateTimeControl ID="dateTimeEndDate" runat="server" <br /> DateOnly="true"></SharePoint:DateTimeControl><br /> </td><br /> <td><br /> <asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server"<br /> ControlToValidate="dateTimeEndDate$dateTimeEndDateDate" <br /> ErrorMessage="* Required value"<br /> Display="Dynamic"></asp:RequiredFieldValidator><br /> <br /> <asp:CompareValidator ID="CompareValidator2" runat="server" <br /> ForeColor="Red" <br /> ControlToValidate="dateTimeEndDate$dateTimeEndDateDate" Type="Date"<br /> Operator="DataTypeCheck" ErrorMessage="* Please enter an valid date."<br /> Display="Dynamic"></asp:CompareValidator><br /> <br /> <asp:CompareValidator ID="valDate" runat="server" ForeColor="Red" <br /> ControlToValidate="dateTimeEndDate$dateTimeEndDateDate"<br /> ControlToCompare="dateTimeStartDate$dateTimeStartDateDate" Type="Date" <br /> Operator="GreaterThanEqual"<br /> ErrorMessage="* Please enter End Date Greater or Equal to Start Date." <br /> Display="Dynamic"></asp:CompareValidator><br /> </td><br /> </tr><br /></table><br /></pre></div><br /><br /><br /><br />3) Access denied issue for Forms based user<br /><br />I did following thing to solve "Access Denied" issue in "Forms Based configuration" ---<br /><br />Go to :<br />1) Central Administration > Application Management > Policy for Web Application<br />2) Select proper Web Application (from top-right)<br />3) Click "Add User" (top-left)<br />4) Add required User or Role in it.<br />5) Grant it "Full Control" (as per requirement).<br /><br />Available options:<br />[<br />Full Control - Has full control.<br />Full Read - Has full read-only access.<br />Deny Write - Has no write access.<br />Deny All - Has no access.<br />]<br /><br />Then its work fine for me !!!<br /><br /><br />4) Operation with SPCoulmn Type - SPFieldChoice<br /><br />Following code snippet retrieves the values stored in a SPColumn.<br />You can used these values to populated either Dropdown or Listbox as per you requirement.<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />SPList list = oWebsite.Lists["SPList_Name"];<br />SPFieldChoice choice = (SPFieldChoice)list.Fields["Event Name"];<br /><br />foreach(string s in choice.Choices)<br /> Response.Write(s);<br /></pre></div><br /><br /><br />5) Open SharePoint page in edit-mode<br /><br />There are basically two ways to open a sharepoint page in edit-mode<br />a) Go to Site Actions (Top-Right) and then selecte Edit page.<br />b) Append the query string of current page with <b>?toolpaneview=2</b><br />e.g. http://myserver.default.aspx?toolpaneview=2<br /><br /><br /><br />6) Access AppSettings in SharePoint<br /><br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />//Web config entry<br /><appSettings><br /> <add key="UpdateTime" value="300" /><br /></appSettings><br /> <br /><br />//C# code to access appsetting<br />System.Configuration.ConfigurationSettings.AppSettings["UpdateTime"].ToString();<br /><br />//or new way<br />System.Configuration.ConfigurationManager.AppSettings["UpdateTime"].ToString();<br /></pre></div><br /><br /><br /><br />7) RichTextbox or InputFormTextBox in SharePoint<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgABZSVT-81h8xVQCbsurTlJIUiQJpaa7HpyaQAM14yGbrnpV8CxL2OYnshuwH1bpUy7MdmGbzfVtFSmdRVE4lxuGxBsbxwZ9EYrvHK58muyiJkulj6V5XaeNcv3r670b9meVfQg2VyaN51/s1600-h/image001.png"><img style="cursor:pointer; cursor:hand;width: 391px; height: 98px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgABZSVT-81h8xVQCbsurTlJIUiQJpaa7HpyaQAM14yGbrnpV8CxL2OYnshuwH1bpUy7MdmGbzfVtFSmdRVE4lxuGxBsbxwZ9EYrvHK58muyiJkulj6V5XaeNcv3r670b9meVfQg2VyaN51/s400/image001.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5385824499261399394" /></a><br /><br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />//C# code <br />InputFormTextBox body = new InputFormTextBox();<br />body.RichText = true;<br />body.RichTextMode = Microsoft.SharePoint.SPRichTextMode.Compatible;<br />body.Rows = 5;<br />body.TextMode = TextBoxMode.MultiLine;<br />body.Width = new Unit(300);<br /> <br />this.Controls.Add(body);<br /></pre></div><br /><br />Reference--<br /><a href='http://msmvps.com/blogs/brianmadsen/archive/2008/03/14/sharepoint-using-the-rich-text-box-in-a-custom-user-control.aspx'>sharepoint-using-the-rich-text-box-in-a-custom-user-control</a><br /><br /><br /><br />8) Session usage in SharePoint<br /><br />To enable session in your SharePoint pages, open you web application web.config file. <br /><br />a) Search HttpModule in cofig file, uncomment the following code -<br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><add name="Session" type="System.Web.SessionState.SessionStateModule" /><br /></pre></div><br />b) If session still doesn't work, then set EnableSessionState property to true in page directive.<br /><br /><br />After enabling the session, if you face some error like...<br /><br /><b>unable to serialize the session state. in 'stateserver' and 'sqlserver' mode asp.net</b><br /><br />Then again open you web.config file and delete following line...<br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br /><sessionState mode="StateServer" timeout="60" allowCustomSqlDatabase="true"<br /> partitionResolverType=<br /> "Microsoft.Office.Server.Administration.SqlSessionStateResolver, <br /> Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, <br /> PublicKeyToken=71e9bce111e9429c" /><br /></pre></div><br /><br /><br /><br />9) User Profile in SharePoint<br /><br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />SPSite mySite = SPControl.GetContextSite(Context);<br />SPWeb myWeb = SPControl.GetContextWeb(Context);<br />ServerContext context = ServerContext.GetContext(mySite);<br />UserProfileManager myProfileManager = new UserProfileManager(context);<br />string CurrentUser = SPContext.Current.Web.CurrentUser.LoginName;<br />UserProfile myProfile = myProfileManager.GetUserProfile(CurrentUser); <br /><br />if (myProfile[PropertyConstants.WorkEmail].Value != null)<br />{<br /> oLabelWorkEmail.Text = myProfile[PropertyConstants.WorkEmail].Value.ToString();<br />}<br /></pre></div><br /><br />References:<br /><a href='http://www.fivenumber.com/retrieve-current-user-profile-in-sharepoint-2007/'>How to retrieve current user profile properties</a><br /><a href='http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/6a3701e8-b5c6-4df7-b7a2-3b9fcf110d7c'>MSDN Forum</a><br /><br /><br /><br />10) Run the code with Elevated Privileges<br /><br />While excuting the code if we face some <b>Privilege</b> or <b>Access</b> issue, then to solve this we can either use <b>SPSecurity.RunWithElevatedPrivileges</b> OR <b>UserToken</b>.<br /><br />Check following code snippets...<br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />try<br />{<br /> // Get the Site ID before entering RunWithElevated...<br /> Guid siteID = SPContext.Current.Site.ID;<br /><br /> SPSecurity.RunWithElevatedPrivileges(delegate()<br /> {<br /> using (SPSite site = new SPSite(siteID))<br /> {<br /> // Your code logic here, <br /> //without calling SPContext anywhere inside this method...<br /> } <br /> });<br />}<br />catch (SPException spex)<br />{<br /> //Log exception<br />}<br /></pre></div><br /><br />Note - It is very important to not call the SPContext from within any elevated method, as it'll result in your elevated privileges to cease.<br /><br /><br /><div style="BACKGROUND-COLOR: #ffffcc"><pre><br />SPUserToken sysToken = SPContext.Current.Site.SystemAccount.UserToken;<br /> <br />using (var spSite = new SPSite(SPContext.Current.Site.ID, sysToken))<br />{<br /> using (var spWeb = spSite.OpenWeb(SPContext.Current.Web.ID))<br /> {<br /> //Your code<br /> }<br />}<br /></pre></div>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com3tag:blogger.com,1999:blog-6831292026292542607.post-67370365606948682192009-06-10T03:08:00.000-07:002009-11-24T22:24:22.146-08:00How to use LINQ in SharePointLINQ : Language Integrated Query<br /><br />If you are writing in-line server code (C# and HTML code in same ASPX file), then you have to follow next 2 steps:<br /><br />1) Page level directive<br /><br /><DIV style="BACKGROUND-COLOR: #ffffcc"><PRE><br /><%@ Assembly Name="System.Core, Version=3.5.0.0, Culture=neutral, <br /> PublicKeyToken=B77A5C561934E089" %><br /><%@ Import Namespace="System.Linq" %><br /><%@ Import Namespace="System.Collections.Generic" %><br /></PRE></DIV><br /><br /><br />2) Modify application's web.config file<br />Add following lines just below <b></system.Web></b> node<br /><br /> <br /><DIV style="BACKGROUND-COLOR: #ffffcc"><PRE> <br /> </system.web><!-- Reference point --><br /><br /> <system.codedom><br /> <compilers><br /> <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" <br /> type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, <br /> Culture=neutral, PublicKeyToken=b77a5c561934e089"><br /> <providerOption name="CompilerVersion" value="v3.5"/><br /> <providerOption name="WarnAsError" value="false"/><br /> </compiler><br /> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" <br /> warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, <br /> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"><br /> <providerOption name="CompilerVersion" value="v3.5"/><br /> <providerOption name="OptionInfer" value="true"/><br /> <providerOption name="WarnAsError" value="false"/><br /> </compiler><br /> </compilers><br /> </system.codedom><br /></PRE></DIV><br /><br /><br /><br />3) LINQ code<br /><br />If you writing C# in seperate file (Code-behind) then you can skip first two steps.<br /><br /><br /><DIV style="BACKGROUND-COLOR: #ffffcc"><PRE><br />SPList oList;<br />//To get a particular SPView specific SPListItems <br />SPView spView = oList.Views["MySPView_Name"];<br />SPListItemCollection itemCollec = oList.GetItems(spView);<br /><br /><br />if (itemCollec != null)<br />{<br /> //You can also run following query directly <br /> //over SPList (by replacing itemColle with oList) <br /> List<SPListItem> items <br /> = (from spLItem in itemCollec.OfType<SPListItem>()<br /> where spLItem["Employee Name"] != null<br /> && Convert.ToString(spLItem["Employee Name"]) == "Avi"<br /> select spLItem).ToList<SPListItem>();<br /><br /> //Write total items count<br /> Response.Write(items.Count);<br /> <br /> //To get individual SPListItem you can either use <br /> //Foreach iteration or indexer e.g. items[i]<br />}<br /></PRE></DIV><br /><br /><br /><br />References:<br /><br />1) <a href='http://www.sharepointdevwiki.com/display/public/SharePoint+Development+with+LINQ'>SharePoint Development with LINQ</a><br />2) <a href='http://mosshowto.blogspot.com/2009/04/linq-sharepoint-configuration-minimal.html'>Use Linq inside ...</a><br />3) <a href='http://eb.net.nz/blog/post/2008/08/12/SharePoint-Development-Tip-Using-LINQ-to-query-a-SharePoint-List.aspx'>Using LINQ to query a SharePoint List</a><br />4) <a href='http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/d9c1317e-ee09-4f56-954e-2c9ceda84298'>Linq in Sharepoint and querying listitems</a>Avinashhttp://www.blogger.com/profile/12901530400733922399noreply@blogger.com0