5

We are currently doing a POC for a client to use SharePoint 2010 for Records Managment. The client has around 200 content types, and a deep nested file plan of around 500 potential nodes.

In order to route documents a peice of metadata called 'File Plan' has been created as a Managed Metadata field which corresponds to the eventual location within the Records Centre folder structure. We will set up various rules on the Content Organizer that will route the documents when they are declared a record using the File Plan metadata to match to a folder.

The issue is that within the Content Organizer you have to assign rules that depend on a specific content type. So in our case we have to create identical rules for different Content Types, for example if Content Type = Contract and File Plan = 1.2.3.4 -> Go to specific folder.

Unfortunately this is obviously not feasable since there is going to be 200 X 500 rules! I was under the impression that maybe we could create a rule for a parent content type (in our case document) that would apply to all inheriting Content Types but that is not the case.

Does anyone know of a potential solution to this issue? It seems like the Content Type Organizer works well in a small scale scenario but it will be very problematic in larger cases.

2
  • Did you ever find the answer (or a workaround) for this that you can add below?
    – Alex Angas
    Jun 6, 2011 at 6:00
  • 1
    @alex I'm having a stab at it...
    – SPDoctor
    Jun 6, 2011 at 20:54

3 Answers 3

3

You can create a content organizer rule that will route the document to a directory with a folder name corresponding to one of your fields, creating the folder if necessary. So potentially you could solve your requirement with a single content organizer rule. I'm guessing your file plan is more complicated, but I am sure you can work out a fairly manageable set of rules using this technique.

The column you are using will need to be a required column. To create the routing rule, select the destination document library and enable the checkbox to allow automatic creation of folders based on metadata, and select the column.

If that isn't flexible enough, you can consider chaining content organizer routing rules where the document hops between two or more send-to locations, and remember that you can also have rules to automatically set values of columns based on the destination library.

Failing that, you will have to start developing Custom Routers.

2

As @David says above, you can create a rule for one contenttype, then add other contenttypes as aliases to this rule. This way you end up with much fewer than 200x500 rules.

Each rule has a ContentTypeString, which is the main content type and a property Aliases (or RoutingAliases) in the format of "ContentType1/ContenType2/ContentType3". The string for Aliases contains a maximum 255 characters.

I had the same problem as you, so I made the following script to automatically create the necessary rules to catch any content type and send it to the correct document library:

$Web = Get-SPWeb "http://sharepoint/docs"
$Rule = New-Object `
    Microsoft.Office.RecordsManagement.RecordsRepository.EcmDocumentRouterRule($Web)
$Rule.ConditionsString = `
    "<Conditions></Conditions>"
$Rule.ContentTypeString = "General document"
$Rule.Priority = "5"
$Rule.RouteToExternalLocation = $false
$Rule.TargetPath = "/docs/departmentx"
$Rule.Enabled = $true

$Aliases = ""
$RuleNumber = 1
$Rule.Name = "My rule " + $RuleNumber

# Add all contenttypes to the new rule

# NB! $Rule.Aliases can only be up to 255 characters long,
# when this limit is reached we have to make a new rule

# Note that I have all my content types stored in an XML file,
# but you might as well get this from Sharepoint itself

$ContentTypes = [xml] (Get-Content $ContentTypesConfigFile)
$ContentTypes.config.contenttypes.contenttype | 
    ForEach-Object {

    if(($Aliases.Length + $_.Name.Length) -lt 250)
    {
        # Keep adding document types until we reach the limit
        if($Aliases.Length -gt 0) 
        {
            $Aliases += "/"
        }
        $Aliases += $_.Name
    }
    else
    {
        # Reached limit, create rule, start working on next rule
        $Rule.Aliases = $Aliases
        $Rule.Update()
        Write-Host "Rule created:" $Rule.Name
        $RuleNumber++
        $Rule.Name = $RuleName + " " + $RuleNumber
        $Aliases = $_.Name
    }
}
# Save final rule
$Rule.Aliases = $Aliases
$Rule.Update()
1
  • A much simpler solution, if you need to create rules for ALL content types, is to set $Rule.Aliases = "*". Then the rule will be triggered no matter what content type it is. Feb 8, 2013 at 13:10
1

Well, not exactly. But you can indicate the parent content type as the rule (like you did) and then specify all of the other content types as an alias. Priority then works and recognizes your "alias types" and applies the rules as you have previously defined. The downside is your rule would not automatically recognize additional content type "children" that are later created from the parent. You would have to edit your rule each time a new "child" type was created.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.