SharePoint 2007
Faulty features
Feb 25th
Chris O’Brien SharePoint Content Deployment Wizard.
Feb 22nd
Found this over at Chris O’Briens blog and though it was a sweet tool.
I just need to move this document library from A to B I just need to move these selected files (e.g. master page, page layouts, CSS etc.) from A to B I just need to move this web from A to B I just need to move this site collection from A to B I just need to move these 20 list items from A to B
http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html
SharePoint 2007, WSS 3.0 Custom Actions
Feb 17th
Some nice guides on how to work with Custom Actions in SharePoint 2007.
http://claytonj.wordpress.com/2008/04/13/sharepoint-code-behind-demo-using-vsewss11/
http://nevmehta.blogspot.com/2007/06/custom-actions-in-wss-3-moss-2007-part.html
Five files in 12 hive thats good to know!
Feb 8th
Found this post over at http://www.wictorwilen.se! check it out!
ctypeswss.xml (in TEMPLATE\FEATURES\ctypes)
This is the feature elements file for all the default WSS Content Types. When creating new content types, most often I find it useful to derive them from existing content types. For example if I need to create a content type that derives from the standard content type Task, i can easily get the content type ID, which is used when creating new content type IDs, and what Site Columns that content type has.
fieldwss.xml (in TEMPLATE\FEATURES\fields)
Second favorite is the elements file for the WSS Site Columns feature. In this file all definitions for the default WSS Site Columns is found. Together with ctypeswss.xml this is really handy when creating custom content types. By finding out the ID’s of the Site Columns you can easily re-use the site columns when creating content types.
Custom List schema.xml in (TEMPLATE\FEATURES\CustomList\CustList)
Whenever I need to create a list definition and need to create a schema.xml I use the schema.xml for the Custom List feature and copy it to my definition.
STS onet.xml in (TEMPLATE\SiteTemplates\STS\Xml)
This is the file to check out when creating Site Definitions. The onet.xml file contains all Site Definitions (althought the folder is called SiteTemplates), which includes navigation, lists etc. Most often I copy this file (and all other files in the STS folder) and remove almost everything except the the blank site def.
DOCICON.xml (in TEMPLATE\XML)
Perhaps not that interesting that the four above, but on nearly all installations you update this file with the PDF icon (at least). What this file does it that it allows you to map an extension (or ProgID) to an icon and optionally specify an editor.
SharePoint: Adding files to 12 hive with VSeWSS 1.3
Feb 8th
To add files or images to the 12 hive simply add a SharePoint/ Module by the nameTemplates, to the root of the SharePoint Project created with VSeWSS 1.3 and below that att the folder Images and latter eg: MyWebPartImages. then simply drop the files to this folder in Visual Studio and deploy your project and the files should now be visible in you 12\Template\Images\MyWebPartImages folder.
note you can delete the files created below the Module folder before adding the Images and latter the MyWebPartImages folder with you files in.
Hiding the Web Part Title by code
Feb 8th
Modify tour WebPart.webpart file and add the followng porperties to hide the title and set the chrome type to none. More information about this on http://www.c-sharpcorner.com/UploadFile/dhananjaycoder/removingwebparttitleinsharepointabcef09162009055344AM/removingwebparttitleinsharepointabcef.aspx
<?xml version=”1.0″ encoding=”utf-8″?>
<webParts>
<webPart xmlns=”http://schemas.microsoft.com/WebPart/v3″>
<metaData>
<!–
The following Guid is used as a reference to the web part class,
and it will be automatically replaced with actual type name at deployment time.
–>
<type name=”7447c788-1380-40cc-8134-5e40555dd9b0″ />
<importErrorMessage>Cannot import WebPart1 Web Part.</importErrorMessage>
</metaData>
<data>
<properties>
<!–<property name=”Title” type=”string”>WebPart1 Web Part</property>
<property name=”Description” type=”string”>WebPart1 Description</property>–>
<property name=”ChromeState” type=”chromestate”>Normal</property>
<property name=”ChromeType” type=”chrometype”>None</property>
</properties>
</data>
</webPart>
</webParts>
Twitter And SharePoint Custom Timer Job with some Linq to XmL
Feb 5th
I’ve been fooling around with the Twitter API and how wanted to test how I could connect it to SharePoint. After som inspiration from Andrew Connell blog post about Custom Timer Jobs for SharePoint i’ve decided to give it a try. This function will update a list with tweets every 5 minutes so it wont go over the Rate Limit set for the Twitter API.
I’m using VS 2008 with VSeWSS 1.3 / WSS3.0
First I created a List called Twitter in the rootweb of my Wss3.0 installation and created the following columns:
Title Single line of text
Link Single line of text
Published Single line of text
Uri Single line of text
TweetAuthor Single line of text
TweetId Single line of text
TweetImage Single line of text
After this I started an VSeWSS SharePoint Empty Project named TaskLoggerJob and created a Class with the same name TaskLoggerJob: and a small class named Tweets to handle the Tweet properties:
Tweets.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace TaskLoggerJob
{
class Tweets
{
public string Id { get; set; }
public DateTime Published { get; set; }
public string Link { get; set; }
public string Image { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public string Uri { get; set; }
}
}
———————–
TaskLoggerJob.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;
using System.Xml.Linq;
namespace TaskLoggerJob
{
class TaskLoggerJob : SPJobDefinition
{
List<Tweets> m_tweets;
/// <summary>
/// Initializes a new instance of the TaskLoggerJob class.
/// </summary>
public TaskLoggerJob()
: base()
{
}
/// <summary>
/// Initializes a new instance of the TaskLoggerJob class.
/// </summary>
/// <param name=”jobName”>Name of the job.</param>
/// <param name=”service”>The service.</param>
/// <param name=”server”>The server.</param>
/// <param name=”targetType”>Type of the target.</param>
public TaskLoggerJob(string jobName, SPService service, SPServer server, SPJobLockType targetType)
: base(jobName, service, server, targetType)
{
}
/// <summary>
/// Initializes a new instance of the TaskLoggerJob class.
/// </summary>
/// <param name=”jobName”>Name of the job.</param>
/// <param name=”webApplication”>The web application.</param>
public TaskLoggerJob(string jobName, SPWebApplication webApplication)
: base(jobName, webApplication, null, SPJobLockType.ContentDatabase)
{
this.Title = “Task Logger”;
}
/// <summary>
/// Executes the specified content db id.
/// </summary>
/// <param name=”contentDbId”>The content db id.</param>
public override void Execute(Guid contentDbId)
{
getTweets();
// get a reference to the current site collection’s content database
SPWebApplication webApplication = this.Parent as SPWebApplication;
SPContentDatabase contentDb = webApplication.ContentDatabases[contentDbId];
// get a reference to the “Tasks” list in the RootWeb of the first site collection in the content database
SPList taskList = contentDb.Sites[0].RootWeb.Lists["Twitter"];
SPListItemCollection items = taskList.Items;
// Clear Twitter List from objects
List<int> listaIds = new List<int>(items.Count);
for (int i = 0; i < items.Count; i++)
{
listaIds.Add(items[i].ID);
}
for (int i = 0; i < listaIds.Count; i++)
{
taskList.GetItemById(listaIds[i]).Delete();
}
taskList.Update();
foreach (Tweets item in m_tweets)
{
// create a new tweet, and update the item
SPListItem newTask = taskList.Items.Add();
newTask["Title"] = item.Title;
newTask.Update();
// Add data to new item..
SPListItem existingTask = taskList.GetItemById(newTask.ID);
existingTask["TweetAuthor"] = item.Author;
existingTask["Link"] = item.Uri;
existingTask["Published"] = item.Published.ToString();
existingTask["TweetId"] = item.Id;
existingTask["TweetImage"] = item.Image;
existingTask.Update();
}
taskList.Update();
}
public void getTweets()
{
XDocument feed = XDocument.Load(“http://search.twitter.com/search.atom?q=from:chrperss“);
XNamespace atomNS = “http://www.w3.org/2005/Atom“;
m_tweets = (from tweet in feed.Descendants(atomNS + “entry”)
select new Tweets
{
Title = (string)tweet.Element(atomNS + “title”),
Published = DateTime.Parse((string)tweet.Element(atomNS + “published”)),
Id = (string)tweet.Element(atomNS + “id”),
Link = tweet.Elements(atomNS + “link”)
.Where(link => (string)link.Attribute(“rel”) == “alternate”)
.Select(link => (string)link.Attribute(“href”))
.First(),
Image = tweet.Elements(atomNS + “link”)
.Where(link => (string)link.Attribute(“rel”) == “image”)
.Select(link => (string)link.Attribute(“href”))
.First(),
Author = (string)tweet.Element(atomNS + “author”).Element(atomNS + “name”),
Uri = (string)tweet.Element(atomNS + “author”).Element(atomNS + “uri”),
}).ToList<Tweets>();
}
}
}
————————————-
After this I created a FeatureReceiverClass to get it all going: Named it TaskLoggerJobInstaller
TaskLoggerJobInstaller.cs
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
namespace TaskLoggerJob
{
class TaskLoggerJobInstaller : SPFeatureReceiver
{
const string TASK_LOGGER_JOB_NAME = “TaskLogger”;
///
/// Occurs after a Feature is installed.
///
///
An object that represents the properties of the event. public override void FeatureInstalled(SPFeatureReceiverProperties properties)
{
}
///
/// Occurs when a Feature is uninstalled.
///
///
An object that represents the properties of the event. public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
{
}
///
/// Occurs after a Feature is activated.
///
///
An object that represents the properties of the event. public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
// register the the current web
SPSite site = properties.Feature.Parent as SPSite;
// make sure the job isn’t already registered
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == TASK_LOGGER_JOB_NAME)
job.Delete();
}
// install the job
TaskLoggerJob taskLoggerJob = new TaskLoggerJob(TASK_LOGGER_JOB_NAME, site.WebApplication);
SPMinuteSchedule schedule = new SPMinuteSchedule();
schedule.BeginSecond = 0;
schedule.EndSecond = 59;
schedule.Interval = 5;
taskLoggerJob.Schedule = schedule;
taskLoggerJob.Update();
}
///
/// Occurs when a Feature is deactivated.
///
///
An object that represents the properties of the event. public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
// delete the job
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == TASK_LOGGER_JOB_NAME)
job.Delete();
}
}
}
}
————————-
Then I’ve had to modify the Feature.xml file that is created when we add a new feature to the project through the “WSP View”, so it points to the ReceiverClass we just created and ReceiverAssembly
<?xml version=”1.0″ encoding=”utf-8″?>
<Feature Id=”3901dc1f-5b79-4e70-96af-f4ed32d3da0e” Title=”TaskLoggerJob” Scope=”Site” Version=”1.0.0.0″ Hidden=”FALSE” DefaultResourceFile=”core” xmlns=”http://schemas.microsoft.com/sharepoint/” ReceiverAssembly=”TaskLoggerJob, Version=1.0.0.0, Culture=neutral, PublicKeyToken=53b5e25b60ede585″ ReceiverClass=”TaskLoggerJob.TaskLoggerJobInstaller”>
<ElementManifests />
</Feature>
The Custom Timer Job is complete and should be able to deploy, now after 5 minutes the Twitter List should be filled with 15 blogposts.
note: Remember that you might have to restart the SharePoint Timer Service when you make changes since it keeps a chached version of you assemblis. Also remember to change the guids and Publickeytoken if you copy this.
And if it doesnt work? don’t blame me cause Im a noob
![]()
Visual studio: Get Public Key Token
Feb 4th
In Visual Studio, go to the Tools menu and click the External Tools menu item. replicate the following settings shown in the picture below.

Then just choose tools -> Get SN token and the result is shown in the Output Window in Visual studion.
Recent Comments