DocumentIdProvider Class
Represents the base abstract class for implementing a Document ID generator.
Inheritance Hierarchy
System.Object
Microsoft.Office.DocumentManagement.DocumentIdProvider
Namespace: Microsoft.Office.DocumentManagement
Assembly: Microsoft.Office.DocumentManagement (in Microsoft.Office.DocumentManagement.dll)
Syntax
'Declaration
<SharePointPermissionAttribute(SecurityAction.LinkDemand, ObjectModel := True)> _
<SharePointPermissionAttribute(SecurityAction.InheritanceDemand, ObjectModel := True)> _
Public MustInherit Class DocumentIdProvider
'Usage
Dim instance As DocumentIdProvider
[SharePointPermissionAttribute(SecurityAction.LinkDemand, ObjectModel = true)]
[SharePointPermissionAttribute(SecurityAction.InheritanceDemand, ObjectModel = true)]
public abstract class DocumentIdProvider
Remarks
It is highly recommended that the Document ID generator provide IDs that are both unique and readily type-able by a user.
Examples
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.DocumentManagement;
using Microsoft.SharePoint;
namespace CustomDocIDProvider
{
/// <summary>
/// This class provides an example of implementing a document ID provider.
/// </summary>
/// <remarks>
/// The format of ID is "{web Name}@{list Item Guid} is custom ID!"
/// </remarks>
public class CustomDocumentIDProvider : DocumentIdProvider
{
// The format is "<web Name>@<list Item Guid> is custom ID!"
private string idFormat = "{0}@{1} is custom ID!";
public override string[] GetDocumentUrlsById(SPSite site, string documentId)
{
string itemUrl = string.Empty;
// Only proceed if we have the site and document id
if (site != null && !string.IsNullOrEmpty(documentId))
{
string[] splits = documentId.Split('@', ' ');
string webName = splits.Length > 0 ? splits[0] : null;
string itemId = splits.Length > 1 ? splits[1] : null;
try
{
SPWeb web = string.IsNullOrEmpty(webName) ? site.OpenWeb() : site.OpenWeb(webName);
SPListItem item = null;
Guid itemGuid = new Guid(itemId);
// Find the item among the lists on the specified web
foreach (SPList list in web.Lists)
{
try
{
item = list.Items[itemGuid];
}
catch
{
//if it's not in this list, go to the next one
continue;
}
if (item != null)
{
itemUrl = web.Url + "/";
itemUrl += item.Url;
}
}
}
catch (Exception) { /* item not found, return an empty array*/ }
}
if (string.IsNullOrEmpty(itemUrl))
{
return null;
}
else
{
return new string[] { itemUrl };
}
}
public override string GenerateDocumentId(SPListItem listItem)
{
if (listItem == null)
{
throw new ArgumentNullException("listItem");
}
return string.Format(this.idFormat, listItem.Web.Name, listItem.UniqueId.ToString());
}
public override string GetSampleDocumentIdText(SPSite site)
{
return string.Format(this.idFormat, "/", "0");
}
public override bool DoCustomSearchBeforeDefaultSearch
{
get { return false; }
}
}
}
Thread Safety
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.