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