Share via


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.

See Also

Reference

DocumentIdProvider Members

Microsoft.Office.DocumentManagement Namespace