Monday, November 3, 2008

Set item readonly programmatically

In my custom workflow, I had an requirement to set list item to be read only once workflow steps complete. Here is the code I have written to accomplished that.

public SPWorkflowActivationProperties WorkflowProperties = new Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties();

private void SetItemReadOnly(object sender, EventArgs e)
{
string rolename = "View Only";
SPListItem item = WorkflowProperties.Item;
item.BreakRoleInheritance(true);
SPRoleDefinition roldef = WorkflowProperties.Web.RoleDefinitions[rolename];
foreach (SPRoleAssignment roleAssignment in item.RoleAssignments)
{
roleAssignment.RoleDefinitionBindings.RemoveAll();
roleAssignment.RoleDefinitionBindings.Add(roldef);
roleAssignment.Update();
item.Update();
}
}


I have taken OOB role "View only". You can creat custom role and add to roleassignment.
For non workflow, I would suggest to replace below line with
SPListItem item = WorkflowProperties.Item;

-- replaced line
SPSite portalSite = new SPSite("http://litwareserver");
SPWeb web = portalSite.OpenWeb();

SPList splst = web.Lists[""];
SPListItem item = splst.Items[0]; // this code for first item, you can select for other item of list.

and replace this also
SPRoleDefinition roldef = WorkflowProperties.Web.RoleDefinitions[rolename];

-- replaced line
SPRoleDefinition roldef = web.RoleDefinitions[rolename]; // "web" instance already defined in aboove code.

Let me know if need more clarification on this.
bibhuti.nilesh@gmail.com

Friday, October 24, 2008

Get Author Email of listitem of Sharepoint list

Here I am giving steps to get email id of user who created item in sharepoint list. I written this code for my custom workflow, so code are written under OnWorkflowActivated_Invoked method.
"SPContext.Current" approach doesn't work in custom workflow code.


public Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties workflowProperties = new Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties();
private string Originatoremail = "";
private void onWorkflowActivated_Invoked(object sender, ExternalDataEventArgs e)
{
SPFieldUserValue createdby = new SPFieldUserValue(workflowProperties.Web, workflowProperties.Item["Created By"].ToString());
SPUser user = createdby.User;
this.Originatoremail = user.Email;

}


Hope this will help ..

Nilesh

Tuesday, October 7, 2008

Steps to deploy sharepoint feature on Production Server.

Using Sharepoint Solution Generator we can easily deploy feature on sharepoint server.
If visual studio is not installed on production server then we can follow below steps to deploy feature on production server.
  • copy the new files and folders that are created by the deployment on your development server to the production server from "%CommonProgramFiles%\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\" folder of development server.
  • copy the DLL that was created to the GAC on the production server.
  • use STSADM to deploy all of the features that were created (there will be one feature.xml in each folder created in Template\Features).
  • either use STSADM or the Admin UI to activate those features.

Here is the STSADM command to Install and activate feature.

  • stsadm -o installfeature -filename \feature.xml
  • stsadm -o activatefeature -filename \feature.xml -url http://site/

I have deployed my custom workflow as feature on prduction server this way. I hope this step help others.

Saturday, October 4, 2008

Populating and Retrieving SharePoint Field Data

Lookup Field
Field Class: SPFieldLookup
Field Value Class: SPFieldLookupValue

Populating Information:

item["FieldName"] = new SPFieldLookupValue("Title"); // SharePoint will do the lookup as long as the LookupValue's are unique
item.Update();
or
item["FieldName"] = new SPFieldLookupValue(1, "Title");
item.Update();

Retrieving Information:

SPFieldLookupValue itemValue = item["FieldName"] as SPFieldLookupValue;
int id = itemValue.LookupId;
string value = itemValue.LookupValue;


Multiple Lookup Field

Field Class: SPFieldLookup
Field Value Class: SPFieldLookupValueCollection

Populating Information:

SPFieldLookupValueCollection itemValues = SPFieldLookupValueCollection();
itemValues.Add(new SPFieldLookupValue(1, "Title"));
item["FieldName"] = itemValues;
item.Update();

Retrieving Information:

SPFieldLookupValueCollection itemValues = item["FieldName"] as SPFieldLookupValueCollection;
foreach (SPFieldLookupValue itemValue in itemValues)
{
int id = itemValue.LookupId;
string value = itemValue.LookupValue;
}


User Field
Field Class: SPFieldUser
Field Value Class: SPFieldUserValue

Populating Information:

web.EnsureUser(@"domain\username");
SPUser user = web.AllUsers[@"domain\username"];
item["FieldName"] = user;
item.Update();

Retrieving Information:

string currentValue = item["FieldName"].ToString();
SPFieldUser userField = list.Fields.GetFieldByInternalName("FieldName");
SPFieldUserValue itemValue = (SPFieldUserValue)userField.GetFieldValue(currentValue);
SPUser user = itemValue.User;


URL Field
Field Class: SPFieldUrl
Field Value Class: SPFieldUrlValue

Populating Information:

SPFieldUrlValue urlValue = new SPFieldUrlValue();
urlValue.Url = "http://www.google.com";
urlValue.Description = "Google";
item["FieldName"] = urlValue;
item.Update();

Retrieving Information:

SPFieldUrlValue urlValue = new SPFieldUrlValue(item["FieldName"].ToString());
string url = urlValue.Url;
string description = urlValue.Description;


Multiple Choice Field
Field Class: SPFieldMultiChoice
Field Value Class: SPFieldMultiChoiceValue

Populating Information:

SPFieldMultiChoiceValue itemValue = new SPFieldMultiChoiceValue();
itemValue.Add("Choice 1");
itemValue.Add("Choice 2");
itemValue.Add("Choice 3");
item["FieldName"] = itemValue;
item.Update();

Retrieving Information:

SPFieldMultiChoiceValue itemValue = new SPFieldMultiChoiceValue(item["FieldName"].ToString());
foreach (string choice in itemValue)
{
// value is in choice
}

Tuesday, May 6, 2008

Web site logo in address bar and in the favorites list for SharePoint 2007 site

You may notice when you browse site it shows small icon on address bar with url of site.Its very easy to implement web site logo in simple web sites.
To enable this in Sharepoint 2007 we need to do following steps.

1. Make logo for the site, size should be 16x16 pixels i.e logo.ico

2. Drag this icon file to the images folder of the site using Sharepoint designer.

3. Now open master page of the site and add the following line to Master Page at the bottom of the head section right before the tag </head>

<link href="/images/logo.ico" rel="shortcut icon"/>


Now check-in and publish master page.

Hope it helps..