PostRank Topblogs 2009 - #20 in Sharepoint

Windows Live Alerts web tracker
Chat with me if I'm online!
search blog
most popular
MCP MCTS MCT MVP

CKS : Developer Tools – A tool for your toolbox

Author: Tobias Zimmergren
http://www.zimmergren.net | http://www.tozit.com | @zimmergren

Introduction

If you’re a seasoned SharePoint developer, you probably have a good set of tools that you’re working with on a daily basis. Some of my all-time favorites include:

With the addition of new tools to the community basically every week, it could be hard to keep track of all the different extra applications you’d want to use.

CKS:Dev has been released!

If you’ve heard of CKS before (Community Kit for SharePoint), you might know that there’s great support for Blogs (EBE) and other cool things. Actually, this blog is based on the CKS:EBE code. Works like a charm!

Now, if you’ve missed it – there’s a new addition to the CKS-family called the CKS: Developer Tools which is essentially extending the functionality in Visual Studio 2010.

There’s currently two versions released. One for SharePoint Foundation 2010 and one for SharePoint Server 2010.

You can find them here:

What’s in it for me (the developer)?

There’s some really superb additions to Visual Studio 2010 when installing the aforementioned versions of the CKS:Dev project. These include some of my favorites:

  • SharePoint Tab in the References dialog (no need to goof around the filesystem to find the dll’s)
  • Extended SharePoint Explorer
    • See more libraries
    • Activate/Deactivate features directly from the explorer
    • Enable/Disable the Developer Dashboard (yay!)
    • Generate Entity Classes (finally!)
    • <a lot more, but those were my favorites>
  • A bunch of new cool project templates, including some of these jolly good jewels:
    • Basic page
    • Delegate control
    • Master page
    • Custom Action, Custom Action Group, Hide Custom Action (good stuff)
    • Sandbox Full Trust Proxy
    • <the list continues..>
  • Quick Deployment steps
    • Easily deploy your code and files quickly with the WSPBuilder-alike commands like:
      • “Copy to SharePointRoot”
      • “Copy to Bin”
      • “Copy to GAC”
      • “Recycle App Pools”
      • “Attach to worker process”
      • and so on.

Aside from the aforementioned awesomeness, there’s a whole lot of other stuff that I bet I’ve missed out on with this tool. I’d say go and find out yourself if you haven’t already – you  will not want to work without this in your toolset ever again, of that you can be sure!

Summary

The reason for posting some info and selling-points behind the (free) developer tools from the CKS team are foremost that when I’m doing training or when I’m supporting clients in different projects, they always asks me what tools they should have in their toolbox.

I’m surprised that not even 20% of them knows about the CKS:Dev extensions. So with this post I’m hoping to enlighten some of those folks.

Enjoy!


Published: Aug-11-10 | 1 Comment | 0 Links to this post

SP 2010: Custom RSS provider for your Business Connectivity Services (BCS) connected External Lists

Author: Tobias Zimmergren
http://www.zimmergren.net | http://www.tozit.com | @zimmergren

Introduction

If you've been working with BCS and external lists you may have noticed that there's no RSS feeds enabled for those lists.

So to get around this problem I've created a custom RSS feed generator that essentially provides you with an RSS/ATOM feed for you so you can render it in your browser or any feed-reader of choice.

Please note that this is a beta with a few things that needs fixing before it should be used, I'd like your feedback on it so I can complete it for you all to utilize.

External Lists and RSS

If you go to your SharePoint 2010 installation where you've got an external list you will see that you're lacking the RSS functionality on that specific list.

Example:
image

The RSS feed is by default disabled, and out of the box there's no way to enable it for this specific type of list.

Some people gave me the brilliant idea of using REST and the ListData.svc service to pull out the data from the lists. But as you know (or will know from now on) is that REST and External Lists is a no go. You can't utilize the ListData.svc service to pick out information from your external lists, unfortunately.

A custom RSS generator for your external list

I've created an RSS generator feature for your external lists, which (when enabled) will give you two new buttons in your External List ribbon menu called "Custom RSS".
The first button will take you to the Feed, and the second button is there to enable you to toggle the settings for the feed (i.e. what fields to show in the feed etc). The second button is only available to administrators of that list. Pretty sweet.

Custom RSS Ribbon tab with an RSS Button:
image

Custom RSS Feed Settings dialog:
(The RSS fields title, author, pubDate and description can be mapped to any field in your External List)
image

Custom RSS Feed rendered in the browser:
(Rendered based on settings done in the Settings-dialog)
image

Feed opened in the RSS reader in Outlook 2010

image

Download and Install the RSS generator

Alright, so this is not a complete feature as of yet - there's some glitches that is to be fixed and tuned, but I would love your feedback if you try it out. Please use the contact form and submit any feedback or features you'd like to see in this RSS gadget.

You can download the current version (not for production) here:
[BETA]Zimmergren.SP2010.BCS.RSS.wsp


Published: Jun-26-10 | 7 Comments | 0 Links to this post

Visual Studio 2010 SharePoint Power Tools - Released

Author: Tobias Zimmergren
http://www.zimmergren.net | http://www.tozit.com | @zimmergren

Introduction

Our good friend Mike Morton over at Microsoft just announced the official release of some great extensions to Visual Studio 2010, called SharePoint Power Tools.

These tools will extend Visual Studio 2010 to give your these additional features:

  • Sandboxed Visual Web Part
  • Compile-time warnings on Sandboxed solutions when trying to use disallowed code

Download

http://visualstudiogallery.msdn.microsoft.com/en-us/8e602a8c-6714-4549-9e95-f3700344b0d9


Published: Jun-18-10 | 1 Comment | 0 Links to this post

SP 2010: Uploading files using the Client OM in SharePoint 2010

Author: Tobias Zimmergren
http://www.zimmergren.net | http://www.tozit.com | @zimmergren

Introduction

In this article I will guide your through the process of uploading a document to any chosen document library in SharePoint 2010 through the Client Object Model.

This application has a very simple usage scenario:

  1. Type in the URL to your site where you want to upload your file
  2. Choose one of the available Document Libraries
  3. Click Upload a Document and you'll get a browse-dialog to choose the file

Example:

1) Enter a servername and click Fetch Libraries
2) Select the Document library you want to upload your file to
image

3) Browse for a local file on your filesystem
image

4) Click the magic button (Upload) and you'll see your document shoot straight into SharePoint from your client machine(s)
image

How to utilize the Client Object Model in SharePoint 2010 to upload files

The most important thing to learn about when it comes to uploading files with the Client OM is to master the FileCreationInformation class that comes with the Client OM.

Take a look at this complete snippet to see how you can upload a file:

private void btnUploadDocument_Click(object sender, EventArgs e)
{
    string library = listBox1.SelectedItem.ToString();
 
    OpenFileDialog openDialog = new OpenFileDialog();
    openDialog.Multiselect = false;
 
    if(openDialog.ShowDialog() == DialogResult.OK)
    {
        SP.ClientContext ctx = new SP.ClientContext(tbSite.Text);
 
        var web = ctx.Web;
 
        var fciNewFileFromComputer = new SP.FileCreationInformation();
        fciNewFileFromComputer.Content = File.ReadAllBytes(openDialog.FileName);
        fciNewFileFromComputer.Url = Path.GetFileName(openDialog.FileName);
 
        SP.List docs = web.Lists.GetByTitle(library);
        SP.File uploadedFile = docs.RootFolder.Files.Add(fciNewFileFromComputer);
 
        ctx.Load(uploadedFile);
        ctx.ExecuteQuery();
 
        // Tell your user that the file is uploaded. Awesomeness has been done!
        MessageBox.Show(openDialog.FileName + " uploaded to " + library);
    }
}

Things to note here is that I'm currently not changing the authentication for this application. That means it'll be using your Windows/Domain Credentials.

Learn more about the authentication options here:
http://www.zimmergren.net/archive/2009/11/30/sp-2010-getting-started-with-the-client-object-model-in-sharepoint-2010.aspx

Summary, References & Download

With this sample application you can easily upload any file to any of your SharePoint 2010 document libraries by first entering the URL to the site, then selecting your library and finally browsing for a file and click OK.

Easily enough, you can change or extend this project the way you want it to work if you've got specific requirements to upload files using the Client OM.

References

  1. Getting Started with the Client Object Model
  2. FileCreationInformation

Download project

You can download this sample project here.

Enjoy this piece of awesomeness :-)

 


Published: Jun-10-10 | 21 Comments | 0 Links to this post

SP 2010: How to create a PowerShell Snapin Cmdlet - Part 2

Author: Tobias Zimmergren
http://www.zimmergren.net | http://www.tozit.com | @zimmergren

Introduction

In my previous article (How to create a PowerShell Snapin - Part 1) I talked about the general approach to create a custom PowerShell Cmdlet. However, in Part 1 I did not talk about how you create SharePoint 2010 specific Cmdlets. That's what this article is all about.

So without further ado, I will quickly brief you on how you can create a custom PowerShell Cmdlet for SharePoint 2010 using the SPCmdlet base class.

In my example I will create a very simple Cmdlet you can use to automatically create demo-sites for use in demo-purposes or development scenarios so you don't have to go about creating all the different sites by hand, and without a need to create scripts to do the same.

Creating a custom PowerShell Cmdlet that talks with SharePoint 2010

I will add some functionality to my previous project (found in my previous article) and extend that project with some custom SharePoint 2010 specific Cmdlets to get your started with writing PowerShell cmdlets for SP 2010.

In order to do this, we should derive from a subclass of the type SPCmdletBase. The following base classes deriving from SPCmdletBase are available:

1. Create a new Cmdlet (SPNewCmdletBase)

  • Create a new Class and name it something of your own preference (I chose this silly name: SPAwesomeness.cs)
  • Add a reference to the following two namespaces:
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.PowerShell;

  • Add the following base code to your class:
    using System;
    using System.Management.Automation;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.PowerShell;
     
    namespace Zimmergren.SP2010.PowerShell
    {
        [Cmdlet(VerbsCommon.New, "SPCreateDemoSites")]
        public class SPAwesomeness : SPNewCmdletBase<SPWeb>
        {
            protected override SPWeb CreateDataObject()
            {
                throw new NotImplementedException();
            }
        }
    }
     

As you can see in the code above I've got a class called SPAwesomeness which derives from the SPNewCmdletBase class which in turn derives from the SPCmdletBase. SPNewCmdletBase should be derived from when you create a Cmdlet that should create and save data to SharePoint.

Also note that we're using the Attribute [Cmdlet] to set a name for our command, in this case SPCreateDemoSites.

When deriving from this class, you need to implement at least one method override, in this case CreateDataObject. This is where our magic will take place!

2. Add some logic to your custom SharePoint Cmdlet

Now that we've got the basic code up and out of the way, we need to add some logic to actually make something happen.

I've added some very simplistic code to create some Demo-sites based on the available templates in your installation. It looks like this:

using System;
using System.Management.Automation;
using Microsoft.SharePoint;
using Microsoft.SharePoint.PowerShell;
 
namespace Zimmergren.SP2010.PowerShell
{
    [Cmdlet(VerbsCommon.New, "SPCreateDemoSites")]
    public class SPAwesomeness : SPNewCmdletBase<SPWeb>
    {
        // Let's add a mandatory parameter that indicates that you need
        // to specify a value for this property through the PS console 
        [Parameter(Mandatory = true, 
            ValueFromPipeline = true, 
            Position = 0, 
            HelpMessage = "Specify an existing site to extend with demo sites")]
        public string SiteUrl { get; set; }
 
        protected override SPWeb CreateDataObject()
        {
            var site = new SPSite(SiteUrl);
 
            try
            {
                // SharePoint Server Publishing Infrastructure feature 
                site.Features.Add(new Guid("f6924d36-2fa8-4f0b-b16d-06b7250180fa"));
            }catch(Exception ex)
            { /* Empty catch block is not recommended :-) */}
 
            SPWeb demoWeb = CreateBaseDemoSite(site);
 
            // When we're done, you'll get this object returned to the PS console
            return demoWeb; 
        }
 
        private static SPWeb CreateBaseDemoSite(SPSite site)
        {
            // Creates a Blank Site which will host all the Demo-sites
            SPWeb web = site.AllWebs.Add(
                "DemoSite", 
                "Demo Sites", 
                "Demo Sites", 
                1033, 
                "STS#1", 
                false, 
                false);
 
            web.QuickLaunchEnabled = true;
            CreateDemoSites(web);
 
            return web;
        }
 
        private static void CreateSite(SPWeb parentWeb, string url, string template)
        {
            string desc = " created by Tobias Zimmergren's custom cmdlets";
            parentWeb.Webs.Add(url, 
                url + " demo", 
                url + desc, 
                1033, 
                template, 
                false, 
                false);
        }
 
        private static void CreateDemoSites(SPWeb web)
        {
            SPWebTemplateCollection webTemplates = 
                web.GetAvailableWebTemplates((uint)web.Locale.LCID, true);
            foreach (SPWebTemplate template in webTemplates)
            {
                try
                {
                    CreateSite(web, 
                        template.Title.Replace(" ", ""), 
                        template.Name);
                }
                catch (Exception ex) 
                { /* Empty catch block is not recommended :-) */ }
 
            }
        }
    }
}
 

3. Test your custom SharePoint 2010 cmdlet

In order to test it, follow along with the steps I mentioned in my previous article (here) to deploy it - then call the new command you've created called New-SPCreateDemoSites like this:

image

It will ask you to supply the mandatory property (SiteUrl), so type in an existing url to an existing site collection and execute like this:

image

Now you'll need to wait for a few minutes. What's happening now is that your Cmdlet is creating a site called "Demo Sites" and will add a whole bunch of sub-sites to that new site.

Navigate to your new site called "Demo Sites" and you should see something like the following sub-sites created:

image

Summary & Download

Quite easily you've created your first SharePoint 2010 Cmdlet extension to operate with the SPCmdletBase classes. In this case we've created a new site called Demo Sites and added a bunch of sites to that new site, as per the available templates on your server.

Download project

You can download my sample project here

Enjoy this awesomeness!


Published: Jun-08-10 | 5 Comments | 0 Links to this post

SP 2010: How to create a PowerShell Snapin - Part 1

Author: Tobias Zimmergren
http://www.zimmergren.net | http://www.tozit.com | @zimmergren

Introduction

In this article I will talk about how you can get started with creating custom PowerShell commands for SharePoint 2010 that you can use.

You will see how easy it actually is to build a custom class library that in turn is an extension to the PowerShell console and will add a couple of extra commands according to your preference.

The reasons for wanting to do this is an endless list, but as an example if you've got repeated tasks you'll need to perform that are not available out of the box, you can create them yourself and then use normal PowerShell scripts to execute your code. That way you can easily build your own custom commands (CmdLet) for PowerShell which basically extends the functionality to support whatever scenario you've got.

You might remember that in SharePoint 2007 you could extend the STSADM.EXE command with something called STSADM Extensions. The approach I'm talking about in this article is pretty much the same concept - extending the build-in commands of your PowerShell console by adding custom code.

How to create a PowerShell Snapin

Download the Windows SDK in order to get the
System.Management.Automation.dll file for PowerShell easily accessible.

1. Create a new Class Library project

Start out by creating a new Visual Studio 2010 Class Library project and give it a proper name.
I've named mine Zimmergren.SP2010.PowerShell.

Add assembly references

  1. Add a reference to System.Management.Automation
    1. This DLL is located  in:
      C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\
      (if you installed the Windows SDK as I told you earlier on in this article)
  2. Add a reference to System.Configuration.Installation

You should now have the following reference added: 
image

2. Create a PowerShell Installer class

In order for our PowerShell Cmdlet to work, we need to create an installer-class. This class is called when you install the SnapIn/Cmdlet and will provide the system with some information like where it comes from and what it's supposed to do.

Start out by creating a new class in your project, I named mine PowerShellInstallerClass.cs. Next, add the following code to that class:

using System.ComponentModel;
using System.Management.Automation;
 
namespace Zimmergren.SP2010.PowerShell
{
    [RunInstaller(true)]
    public class PowerShellInstallerClass : PSSnapIn
    {
        public override string Name
        {
            get
            {
                return "Zimmergren.SP2010.PowerShell";
            }
        }
 
        public override string Vendor
        {
            get
            {
                return "Tobias Zimmergren";
            }
        }
 
        public override string Description
        {
            get
            {
                return "Tobias Zimmergren's awesome PowerShell Cmdlets";
            }
        }
    }
}

This essentially provides some information to the system upon installation of your SnapIn.

3. Create a PowerShell Cmdlet class

Now you need to continue this venture by creating a new class in your project. I named mine TestCmdlet1.cs.

Use the [Cmdlet()] attribute on your class to tell the system that it's going to be a Cmdlet for PowerShell like this:

using System.Management.Automation;
 
namespace Zimmergren.SP2010.PowerShell
{
    [Cmdlet(VerbsCommon.Get, "TestCmdlet1")]
    public class TestCmdlet1 : PSCmdlet
    {
    }
}

Next, you should override the methods you want to execute your code and add some dummy-code. There's a couple of different methods to use here:

  • BeginProcessing()
  • EndProcessing()
  • ProcessRecord()
  • StopProcessing()

You should make sure your class looks like this so we can test the first part out:

using System.Management.Automation;
 
namespace Zimmergren.SP2010.PowerShell
{
    [Cmdlet(VerbsCommon.Get, "TestCmdlet1")]
    public class TestCmdlet1 : PSCmdlet
    {
        protected override void BeginProcessing()
        {
            WriteObject("BeginProcessing() method - Execution has begun");
        }
 
        protected override void ProcessRecord()
        {
            WriteObject("ProcessRecord() method - Executing the main code");
        }
 
        protected override void EndProcessing()
        {
            WriteObject("EndProcessing() method - Finalizing the execution");
        }
    }
}

4. Deploy the new PowerShell Snap-ins

Since this is a generic Class Library-project, we need to create some kind of deployment script to make sure that our Cmdlet gets deployed when we build our project.

There are two requirements for deploying and installing our PowerShell Cmdlet:

  1. Deployed to the server (Using GACUTIL)
  2. Installed on the server (using INSTALLUTIL)

In this sample project I'm simply adding two lined in the Post-Build actions like this::

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\gacutil.exe" -if "$(TargetPath)" "C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\InstallUtil.exe" "$(TargetPath)"

You'll find the post-build events if you click project properties and go to this box:

image

5. Project overview

Your project should look something like this:

image

6. Test your PowerShell Snapin

In order to test our project, we now just need to build the Visual Studio project and the post build scripts will automatically hook up our assembly in the GAC and use INSTALLUTIL to install the Cmdlet.

To try the commands out, you need to launch a powershell console and type in the following command:

Add-PSSnapin Zimmergren.SP2010.PowerShell

Now you should be able to just call your command (in my case, it's called TestCmdlet1) like this:

TestCmdlet1

This should bring your the following output in your PowerShell console window:

image

Great, our very first PowerShell cmdlet is created - and we have validated that it works!

Summary & Download

In this article we talked about how you create a general PowerShell Cmdlet in order to extend the capabilities in your PowerShell consoles. There's no business logic incorporated in this sample, that's up to you to implement in your projects. You've got the starting point to get sailing on the great PowerShell seas right here!

In my next article (Part 2) I will talk about the SharePoint 2010 specific details for creating a custom Cmdlet for your SharePoint installations. It will cover how you create custom Cmdlets to interact with the SharePoint 2010 object model in a nice way.

Download

Download this project here

Enjoy!


Published: Jun-07-10 | 7 Comments | 0 Links to this post

Access denied by Business Data Connectivity - Solution

Auhtor: Tobias Zimmergren
http://www.zimmergren.net | http://www.tozit.com | @zimmergren

Introduction

Lately I've been rolling around parts of Sweden and doing training, seminars and workshops on SharePoint 2010 with a bunch of companies and people.

One thing that I've been showing off, which I'm totally in love with by the way, is the BCS (Business Connectivity Services) functionality.

I've been getting a few questions from people who have been trying this out, but stumbled onto some problems with it in terms of permissions when they tried it out themselves.

Problem - Access Denied by Business Data Connectivity

When you've created your external list and try to access it (even as the same user, Administrator, that created it) you might get the following error:

image
Access denied by Business Data Connectivity

If you bump into this, please don't freak out - just keep reading..

Solution - Permissions on the BCS Entity

To resolve this so called problem, follow along here:

Go to Central Administration -> Application Management -> Manage Service Applications -> Business Data Connectivity Service* -> [Your Entity] -> Set Permissions

* or whatever name you've chosen for your BCS Service application

image

Configure the actual permissions

In my case below, I've just told SharePoint that my Farm Administrator should be able to do all actions (Edit, Execute, Selectable in Clients and Set Permissions)

image

Please note: You might want to use different permissions in your environments - the permissions set in this blog post is just to demonstrate how you effectively change/add permissions for your BCS Entities to get up and running.

Check your external list

You should now be able to access the external list and see the desired result.

image

Keep rocking folks!

Cheers


Published: May-08-10 | 15 Comments | 0 Links to this post

SP 2010: SharePoint Server 2010 - Creating a custom Document ID provider

Author: Tobias Zimmergren
http://www.zimmergren.net | http://www.tozit.com | @zimmergren

Introduction

In this article I will talk about how you can create your custom Document ID provider for your SharePoint Server 2010 installation. Sometimes I've been getting the question weather or not it's possible to change the behavior or change the way the Document ID's are generated, and some people have a tendency to say no to that question, just because there's no interface or out of the box functionality to do so.

I'll give you a quick walkthrough of how you can extend your Site Collection by adding a custom Document ID provider, that will automatically generate custom ID's based  on your own algorithms entirely!

Recommended reading about Document ID's before proceeding: 
http://msdn.microsoft.com/en-us/library/ee559302(office.14).aspx

Document ID overview

This section will give you a very brief conceptual overview of Document ID's in SharePoint Server 2010.

What is Document ID's?

Document ID's in SharePoint Server 2010 provide you with the ability to tag documents with a unique identification number. Something a lot of my clients have done manually or by implementing custom solutions to take care of in SharePoint 2007. With this new feature, you get all the required functionality to tag documents with unique identification numbers based on a specific pre-set formula with a custom prefix.

See this sample screenshot for an example:
image

Where do I enable Document ID's for my Site Collection?

In order to enable Document ID's in your Site Collection, you'll need to activate the Site Collection Feature called Document ID Service.

See this screenshot for an example:
image

How do I change the way my Document ID's are generated?

If you want to alter the way the Document ID's are generated for your documents in your Site Collection, you can do that by navigating to:

Site Actions - Site Settings - Document ID Settings, like so:
image

From this new settings page, you'll get the possibility to tell SharePoint how it should generate your unique ID's. You can specify a prefix for all the generated ID's:
image

I want to take it one step further!

If you're not quite satisfied with the way SharePoint 2010 generates your Document ID's for you, then you should most definitely follow along with the rest of this article as I will guide you through the steps to create your very own Document ID provider to generate exactly the kind of ID's you want - based on your very own code/algorithms!

Bring it on!

Learning about a SharePoint 2010 Custom Document ID provider

This section will give you an overview of what you will need in order to create a custom Document ID provider for SharePoint Server 2010!

Note: As of this writing MSDN isn't fully updated on these new SharePoint Server namespaces. Some details may or may not change when SharePoint Server 2010 is released into the wild (RTM)

Microsoft.Office.DocumentManagement

The namespace Microsoft.Office.DocumentManagement contains a class called DocumentIdProvider, which will be the base for our upcoming project!

Microsoft.Office.DocumentManagement.DocumentIdProvider

This is the class we will derive from when creating our custom provider. It contains three (3) abstract methods and one (1) abstract method that we need to implement:

A description of each of these methods and the property will be made inline in my code in the samples!

Creating a SharePoint Server 2010 Custom Document ID provider

Let's code this little piece of functionality, shall we. The final project (very basic) will look something like this:
image

So, let's get coding.

1. Create a class and derive from DocumentIdProvider

public class CustomDocumentIdProvider :
Microsoft.Office.DocumentManagement.DocumentIdProvider
    {
        // Method to generate the actual document ID. Awesomeness lives here!
        public override string GenerateDocumentId(SPListItem listItem)
        {
            // In this method we will tell SharePoint how it should generate
            // the unique ID we want.
            // In my case, I've just created a dummy-generator. 
            // Normally you would perhaps want to fetch this from another system or
            // generate it properly instead of like this.. 

            // Points to a method I've created that generates foo-ID's
            return FooSampleIDGenerator.GetFooUniqueID();
        } 

        public override bool DoCustomSearchBeforeDefaultSearch
        {
            // If set to true: It will call the GetDocumentUrlsById method before search
            // If set to false: It will use SharePoint Search before custom methods
            get { return false; }
        } 

        public override string[] GetDocumentUrlsById(SPSite site, string documentId)
        {
            // Returns an array of URLs pointing to 
            // documents with a specified DocumentId
            // An empty string array 

            // This is where you will implement your logic to find
            // documents based on a documentId if you don't want to use
            // the search-approach.
            return new string[] { };
        } 

        public override string GetSampleDocumentIdText(SPSite site)
        {
            // Returns the default Document ID value that will be initially
            // displayed in the Document ID search web part as a help when searching
            // for documents based on ID's.
            // This should correspond with the way you've designed your ID pattern
            return "AWESOME-12345-67890-SharePointRules";
        }
    }

2. Create a Feature Receiver to hook up your custom provider with your Site Collection

public class ProvisionCustomDocIdProviderEventReceiver : SPFeatureReceiver
{
    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        DocumentId.SetProvider(properties.Feature.Parent as SPSite,
                                                                 new CustomDocumentIdProvider());
    }
    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        DocumentId.SetDefaultProvider(properties.Feature.Parent as SPSite);
    }
}

Actually, you're all done with the code for now.

3. Go to Document ID Settings page and see this message appear

image

This basically means that your custom provider has been successfully enabled (as per our Feature Receiver).

4. See that the Document ID's on your documents now is using your custom provider

(Please allow for some time to pass so the Timer Jobs can do their magic, or manually go into Central Admin and run the timer jobs instantaneously)

Behold, awesome custom Document ID provider in action:
image 

Summary and Download

What did we just do?

What we just did was to create a custom Document ID provider that generates our very own custom Document ID's based on whatever algorithm or pattern we want. There's no need to follow the built-in format for your generated IDs - which some people have presented in their seminars and blogs. So there you go, step by step!

This could be especially awesome if you've got an external system generating Document ID's already, and you want SharePoint to use those ID's alongside whatever other system is running. Use your own imagination as to what can be done. The code is in your hands, Obi Wan Coder!

Download project

You can download my sample project here

Enjoy, and please don't be afraid to leave comments!


Published: Apr-13-10 | 31 Comments | 0 Links to this post

SP 2010: Site Collection Keep-Alive Job now available by AC

Author: Tobias Zimmergren
http://www.zimmergren.net | http://www.tozit.com | @zimmergren

Introduction

Normally I don't make link-posts like this one, but it is too good to miss out on. My main man and friend Andrew Connell (AC) have created a new utility for SharePoint 2010 which is essentially a "warmup" job for your Site Collecions.

This job is easy to configure and will keep your demos, presentations and dev-machines fresh all the time by making repeated HTTP requests on the sites.

Awesomeness, AC. Good work!

Get the info, get the goods - SharePoint Site Collection Keep Alive Job

Head on over to http://www.andrewconnell.com/blog/archive/2010/03/27/introducing-the-sharepoint-site-collection-keep-alive-job.aspx to get the latest details and download this fantastic keep-alive job.

Enjoy this piece of awesomeness from AC.

Cheers


Published: Mar-29-10 | 1 Comment | 0 Links to this post

SP 2010: Certification exam details for SharePoint 2010 published

Author: Tobias Zimmergren
http://www.zimmergren.net | http://www.tozit.com | @zimmergren

Introduction

Microsoft has published the two developer-oriented certifications for SharePoint 2010 on Microsoft Learning.

Personally, I think there is a huge improvement now as we're not only getting the MCTS-credit but can now also become an MCPD (Microsoft Certified Professional Developer) on the SharePoint platform. Something I've been waiting for a long time ;-)

SharePoint 2010 exams

For us developers/solution architects there are two certifications of interest (of course you should do the IT-pro tracks as well, but let's start here with the developer ones):

  1. 70-573: TS: Microsoft SharePoint 2010, Application Development
  2. 70-576: PRO: Designing and Developing Microsoft SharePoint 2010 Applications

SharePoint 2007 Exams

Way back in 2007 I wrote about passing all 4 certifications for SharePoint 2007 (link here). For SharePoint 2007 there is four certifications for the 2007 product-line:

  1. 70-541 - TS: Microsoft Windows SharePoint Services 3.0 - Application Development
  2. 70-542 - TS: Microsoft Office SharePoint Server 2007 - Application Development
  3. 70-630 - TS: Microsoft Office SharePoint Server 2007, Configuring
  4. 70-631 - TS: Microsoft Windows SharePoint Services 3.0, Configuring

Summary

So, keep an eye out on those two new certifications and be well prepared when they arrive - should be a fun ride :-)


Published: Mar-28-10 | 7 Comments | 0 Links to this post
 Next >>