Content Organizer Question

==========================

I have an interesting scenario that I am unable to find an answer to (either
due to my requirements being unrealistic for SharePoint, or my Google Fu is
bad).

 

The Scenario

==============

I have a number of lists (e.g. Functions, Departments, Areas, DocTypes),
that I want to be able to cascade using SPServices. This part is easy. I
have this now.

 

These lists are referenced by a number of corresponding Site Columns.

These Site Columns are contained as required fields in a Site Content Type
which has a Document Content Type as its parent

I have added the Content Organizer to the site, added the content type to
both the Drop Of Library and the final destination library

I have created a Content Organizer Rule that will route documents of the
content type to the target document library, an create a folder if one does
not exist based on the value of one of the 

site columns that get their data from a lookup field.

 

The problem I seem to be having with this, is that it create a folder like
the following in the target document library:

  3; Department Name 1

 

What I was expecting/hoping it would do is create a folder like this:

  Department Name 1

 

Things I have already tried

============================

*          I have followed a path of creating a Custom Document Router and
registering this (Code below signature).  However, there are issues with
this, particularly when you attempt to upload an updated document (I am
using the finalFolder.MoveTo to rename the folder to remove the "3;".
However, if there  is already a file with that name in the target folder,
the MoveTo errors.

*         Tried to use Managed Metadata fields. However, this removes the
ability to have cascading drop downs in entry fields.

 

My Questions

================

*         Has anyone else come across this situation?

*         Am I on the right track with the custom document router? To me it
seems as if the custom document router is called *after* the target has
already been set (and even appears to be created by the time the Custom
Router is called)

*         Am I missing something here? I am unable to find any *real*
examples of how to use this in the way I am trying to.

 

Any help/insights are much appreciated.

 

Regards

 

 


Richard Angus - Software Engineer

Dev IQ Pty Ltd 

Email:  <mailto:rich...@deviq.com.au> rich...@deviq.com.au 

Mob: +61 412 660 774 

Fax: +61 7 3103 4510

Twitter: @RichardAngus 

Web:  <http://www.deviq.com.au/> www.deviq.com.au 

Blog:  <http://blog.richardangus.com/> blog.richardangus.com



 

 

 

using System;

using System.Collections;

using System.IO;

using Microsoft.SharePoint;

using EcmDocumentRoutingWeb =
Microsoft.Office.RecordsManagement.RecordsRepository.EcmDocumentRoutingWeb;

using EcmDocumentRouter =
Microsoft.Office.RecordsManagement.RecordsRepository.EcmDocumentRouter;

using ICustomRouter =
Microsoft.Office.RecordsManagement.RecordsRepository.ICustomRouter;

using CustomRouterResult =
Microsoft.Office.RecordsManagement.RecordsRepository.CustomRouterResult;

using System.Linq;

 

 

namespace Deviq.SharePoint.Ecm

{

      public class DeviqDocRouter: ICustomRouter

      {

            CustomRouterResult
ICustomRouter.OnSubmitFile(EcmDocumentRoutingWeb contentOrganizerWeb, string
recordSeries, string userName, Stream fileContent,
RecordsRepositoryProperty[] properties, SPFolder finalFolder, ref string
resultDetails)

            {

                  if (contentOrganizerWeb == null)

                        throw new
ArgumentNullException("contentOrganizerWeb");

                  

                  // We should have a Content Organizer enabled web 

                  if (!contentOrganizerWeb.IsRoutingEnabled)

                        throw new ArgumentException("Invalid content
organizer.");

 

                  string fileName = (from prp in properties where
prp.DisplayName == "Name" select prp.Value).FirstOrDefault();

 

                  

                  using (SPSite site = new
SPSite(contentOrganizerWeb.DropOffZoneUrl))

                  {

                        SPWeb web = site.OpenWeb();

                        try

                        {

                              // User creating the file

                              SPUser submittingUser =
web.SiteUsers[userName];

                              // Create a Hashtable of properties which
forms the metadata for the file

                              Hashtable fileProperties =
EcmDocumentRouter.GetHashtableForRecordsRepositoryProperties(properties,
recordSeries);

                              // Save the file here since we need to modify
the file.

                              if (finalFolder.Name.Contains(";"))

                              {

                                    //Work out the new URL

                                    string newUrl = string.Empty;

 

                                    int found =
finalFolder.ServerRelativeUrl.IndexOf(';');

                                    string left =
finalFolder.ServerRelativeUrl.Substring(0, found - 1);

                                    string right =
finalFolder.ServerRelativeUrl.Substring(found + 1);

 

                                    found = left.LastIndexOf('/');

                                    newUrl = left.Substring(0, found + 1) +
right.Trim();

                                    finalFolder.MoveTo(newUrl);

                              }

                              SPFile result =
EcmDocumentRouter.SaveFileToFinalLocation(contentOrganizerWeb,

                                    finalFolder,

                                    fileContent,

                                    fileName,

                                    "",

                                    fileProperties,

                                    submittingUser,

                                    true /*override versioning settings on
the content organizer and create a new file*/, "");

                              resultDetails = "File has been routed to the
following URL : " + result.ServerRelativeUrl;

                              return
CustomRouterResult.SuccessContinueProcessing;

                        }

                        finally

                        {

                              web.Dispose();

                        }

                  }

            }

 

      }

}

 

<<image001.jpg>>

_______________________________________________
ozmoss mailing list
ozmoss@ozmoss.com
http://prdlxvm0001.codify.net/mailman/listinfo/ozmoss

Reply via email to