Field limit for SharePoint Source and Destinations for SSIS

By , June 9, 2010

So, I have used the SharePoint Source and Destination add-on available on codeplex (http://sqlsrvintegrationsrv.codeplex.com/releases/view/17652) before without any problems, but ran into an issue this week.  I was importing about 15 lists into SQL Server to do someone reporting on the data, and 14 of the Lists worked right away, the 15th did not.

The 15th list had about 30 fields worth of data, about 10 of which were lookup fields to the other lists being imported.  I kept getting an “Unexpected Error” message in the BI Developer Studio, with nothing else to go on.  I eventually went through it removing one field at a time, thinking that one of the fields may be causing an issue.  After I had removed most of the fields, it started working.

I did some more testing and noticed that it wasn’t any specific field causing the problem, rather the number of fields being imported at once.  I ended up breaking up the import into three separate imports and then joining the results in SSIS to achieve the desired result.  There is an image of this below.

So, if anyone runs into this Unexpected Error while importing a list with a large number of fields, try breaking it up into smaller pieces.

 

 

Visual Studio 2010 Can’t open an SPSite Object in Server 2008 R2

By , May 20, 2010

So, I feel like an idiot but hopefully this can help someone else out as I just spent an hour cursing at my computer.

I am writing a simple console application that runs against SharePoint 2010, connecting to an SPSite object to do some work.  Well, this is very simple code, but it kept crashing with the error listed below.

using (SPSite site = new SPSite(“http://2010demo”)….

Error:

System.IO.FileNotFoundException was unhandled
Message=The Web application at http://2010demo could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application.
Source=Microsoft.SharePoint
StackTrace:
at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean contextSite, SPUserToken userToken)
at Microsoft.SharePoint.SPSite..ctor(String requestUrl)
at VA_CreateLists.Program.Main(String[] args) in C:\Users\steve\Documents\Visual Studio 2010\Projects\VA_CreateLists\VA_CreateLists\Program.cs:line 13
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:

So, after I went and looked at Central Admin, IIS, DNS, my network adapter, SQL Server and google, I decided to try something.  I closed visual studio 2010, and opened it again by right clicking on it and selecting “Run as Administrator”.  I executed the application again and it magically worked.

So, in the future when developing with Visual Studio 2010 on Server 2008 R2, make sure to run VS as an administrator and you will save yourself some headaches.

Dynetics is Hosting SharePoint Saturday Huntsville!

By , March 11, 2010

Just announced, SharePoint Saturday is coming to Huntsville Alabama and will be hosted at the Dynetics Facility on May 1st 2010.

For more details please check out www.SharePointSaturday.org

Birmingham Users Group on March 9th

By , March 1, 2010

It looks like I will be presenting about the options of Business Intelligence in SharePoint at the Birmingham SharePoint User’s Group on March 9th.

This will be a similar presentation to what I gave a couple of months back here in Huntsville but I will go into more detail and add a couple of demos.  It will be 2007 focused but I will highlight some of the changes coming in 2010 and maybe throw a demo or two in there on 2010 if I have the time to get a suitable environment set up.

Below is information on the session and hopefully someone will feel like showing up to listen to me :)

Microsoft SharePoint Business Intelligence Solutions for Everyone

Steve McDonnell
Senior SharePoint Consultant, IE-Dynetics

With Microsoft SharePoint, Business Intelligence does not have to be reserved for executives or companies with multimillion dollar IT budgets.  Whether you have Windows SharePoint Services or Enterprise MOSS, there are several options for Business Intelligence that we will dive into.  If you want to see a detailed overview of what Microsoft BI has to offer filled with real time examples of dashboards and reports, then this is a presentation for you.

Specific topics to be covered in this presentation:

  • WSS 3.0 BI Capabilities
  • The Data View Web Part
  • Custom Web Parts and Dashboard Solutions
  • SQL Server Capabilities (SSIS, SSAS, SSRS)
  • Enterprise MOSS 2007 Capabilities (Excel Services, KPIs, BDC)
  • PerformancePoint Server 2007
  • The Future of BI With SharePoint Server 2010

Creating a Folder in a SharePoint List and adding Items to it programatically

By , February 2, 2010

So, this took me a little while to get straight today when I was writing a web part.  It is pretty straight forward but the only information I could find online dealt with Document Libraries or didn’t provide code that worked.

I wanted to create a folder in a list, and then add items to that folder.  Furthermore, I needed to be able to find the folder in the future by name and add additional items to it.  Well, that seems like it should be quite simple, but there is no lookup by name, just GUID or int ID for the SPFolder object.

Here is the code to create the SPFolder for a list (Notice how it is actually an SPListItem…).  Note that this code already grabs the list from an SPWeb object.

SPListItem auditFolder = auditList.Items.Add(auditList.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, auditFileName);
auditFolder.Update();

Then, the code to add an item to a folder inside of a list is below – note that I don’t update any fields before saving the list item with an Update call.

SPListItem auditItem = auditList.Items.Add(auditFolder.Folder.ServerRelativeUrl, SPFileSystemObjectType.File, null);
auditItem.Update();

But to the point I made before about not being able to do a lookup on a folder by its Name is kind of a pain, I ended up using a for loop, iterating through the folders in the list and looking for a specific one by name as shown below. Also note that you may need to call allowunsafeupdates for this to work in your environment.

SPList auditList = ElevatedWeb.Lists[auditLogList];
SPListItem auditFolder = null;
bool folderExists = false;
// Check to see if folder already exists, if not create it
for (int i = 0; i < auditList.Folders.Count; i++)
{
    if (auditList.Folders[i].Folder.Name == auditFileName)
    {
        auditFolder = auditList.Folders[i];
        folderExists = true;
    }
}

if (!folderExists) // The folder does not exist so we create it and add the item
{
    auditFolder = auditList.Items.Add(auditList.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, auditFileName);
    auditFolder.Update();
    SPListItem auditItem = auditList.Items.Add(auditFolder.Folder.ServerRelativeUrl, SPFileSystemObjectType.File, null);
    // Fill in properties of the list item here
    auditItem.Update();
}

Well, like I said I used this inside of a web part, and since there wasn’t much to it I will probably put it up here in a few days. Hopefully this saves someone some time, Later.

Two different database servers for SharePoint?

By , January 20, 2010

So, I ran across something strange that was new to me and I couldn’t find anything online that led me to believe that someone else had seen this either, so I am blogging about it.

I was brought in to troubleshoot a couple of random things at a customer site and once I got poking around, I saw that they were using two separate database servers for their single WSS 3.0 environment.  Their configuration database was in the embedded version of SQL Express (I will refer to this as SQL Express below) that installs automatically when you select a simple install and most of their content databases were on a full version of SQL Server 2005.

This was a 1 server farm and both SQL Express and SQL Server 2005 were on the same server that hosts WSS 3.0.  Well, to my knowledge it was impossible to have more than one database server or instance per farm and that seems to be correct according to the documentation I have found online.  Also, I was not sure how to even go about trying to replicate it… so how did this happen?

Well, they had upgraded about a year prior from WSS 2.0 to 3.0, and it is my best guess that when doing that upgrade they somehow (and for some strange reason) decided to go ahead and install a full version of SQL Server, and they were in some way able to start using it for new content databases, but keep the config and existing content databases on the SQL Express Install.

This is just a guess, and I hope that if someone else has seen this and stumbles across this blog that they can confirm or correct what I stated above.

The customer had no idea they had a full version of SQL installed (and it wasn’t licensed) so I basically rebuilt a new SharePoint server and used the database migration technique, moving databases from both instances of SQL into a fresh SQL Express install and everything is now running fine and dandy on one Database instance.  Strange eh?

Customizing the Smart Tools Grouped Chart to Accept Connections from Filter Web Parts

By , November 10, 2009

If you haven’t tried out the Smart Tools Web Parts yet I suggest that you do so. They are well done and pretty reliable, especially the chart web parts.  Well, for the most part they met my needs, but I wanted to be able to filter the data in the chart without having to create a lot of different views of a list.  I basically wanted some kind of drill down functionality, but I didn’t want to spend too much time developing my own tool, so I extended theirs!

I will go over how I added a little code to allow the Grouped Chart Web part to accept connections, filtering the data with the out of the box filter web parts in SharePoint Server 2007.   First though, here are a couple of screenshots so that everyone knows what I am talking about.

First the chart showing all of the Hours Worked, by every Employee, on every project this year.

No Filters

Then, in the next three images, I keep applying an additional filter until I have drilled down as far as I need. Note that I am using two different filter web parts – they all work and you can use any combination of them as shown.

No Filters

No Filters

No Filters

So, how did I do it? Very simple actually. They are nice enough to provide the source code for their charts at the Smart Tools codeplex site. From there, I added the c# file to a new web part project, added a little bit of code and it magically worked. First, we need to add a few using statements as shown. Now that I am writing this, I am pretty sure I don’t need all the Web ones, but oh anyways…

using wsswebparts = Microsoft.SharePoint.WebPartPages;
using aspnetwebparts = System.Web.UI.WebControls.WebParts;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.ObjectModel;
using System.Collections;
using System.Runtime.InteropServices;

The first thing I added was the code that allows the web part accept connections and defines what the connection points created will be named.

//Tell SharePoint the Web Part can accept connections
List providers = new List();
[aspnetwebparts.ConnectionConsumer("Simple Consumer", "IFilterValues", AllowsMultipleConnections = true)]
public void SetConnectionInterface(wsswebparts.IFilterValues provider)
{
this.providers.Add(provider);
if (provider != null)
{
if (View != null &amp;&amp; View != string.Empty)
{
List l = new List();
SPWeb contextWeb = SPContext.Current.Site.OpenWeb(SPContext.Current.Web.ServerRelativeUrl);

// Loop through all fields available in the specified View - We can filter on these
foreach (string fieldString in contextWeb.Lists[List].Views[View].ViewFields.ToStringCollection())
{
l.Add(new wsswebparts.ConsumerParameter(fieldString, wsswebparts.ConsumerParameterCapabilities.SupportsMultipleValues | wsswebparts.ConsumerParameterCapabilities.SupportsAllValue));
}
provider.SetConsumerParameters(new ReadOnlyCollection(l));
}
}
}

So at this point, the Chart web part can be connected to from out of the box filter web parts, but the filter does nothing yet. We need to add some logic to actually do some filtering. I decided to filter out everything that does not EQUAL what is selected in the filters. Alternatively, you could filter out things less than, greater than, etc, but I thought Equals made more sense.

The next thing I did was add the code to get all of the filters and add them to a List.

// Gets any filter parameters if there are connections Filter Parameters
bool validFilter = false;
List filterValue = new List();
List filterField = new List();
foreach (wsswebparts.IFilterValues provider in this.providers)
{
if (provider != null)
{
string prop = provider.ParameterName;
ReadOnlyCollection values = provider.ParameterValues;
if (prop != null &amp;&amp; values != null)
{
foreach (string v in values)
{
if (v != null &amp;&amp; v.Length != 0) // Apply the filter
{
filterField.Add(provider.ParameterName);
filterValue.Add("'" + v + "'");
validFilter = true;
}
}
}
}
}

The last thing we need to do is to do the actual filtering. There were a few ways to do this, but after seeing how the existing code was structured, I decided to just delete the rows I didn’t need from the Data Table they were using. The code is shown below.

if (dt != null) // Data available
{
// If there are filters via connections, remove entries not equal to the filter
if (validFilter)
{
for(int i = 0; i &lt; filterField.Count; i++)
{
string expression = filterField[i] + " &lt;&gt; " + filterValue[i];
DataRow[] results = dt.Select(expression);
foreach (DataRow dr in results)
{
dr.Delete();
}
}
}
}

And thats it – with very little code I made a pretty big enhancement to the Web Part (at least for my needs). In fact, you can use the code above to add connections to almost any web part you may have if you want them to use out of the box filters. If you create your own filter, things get a little more tricky.

Note, for this to work you need to have the Smart Tools already installed – I did not include the VisiFire files with this solution package.

Download C# File
Download Project Zip
Download WSP

Filtering Data View Web Parts By The Query String With Out of the box WebParts

By , November 9, 2009

So, recently I have been building a Project Management SharePoint site to better manage our customer projects, deploying it on our Extranet server that runs WSS.  There is quite a bit involved as I have been working on it for the better part of two weeks, pulling data from our LOB systems and surfacing it into our SharePoint Extranet, but what I want to highlight here is how I am filtering a set of dataview web parts on one page in particular.  There were a lot of articles out there on how to do cool things with Data View web parts that i referenced in building my solution, but there wasn’t anything that I could find that did the filtering the way I wanted to.

Basically, from the home page of my Projects website, there are a few charts and a Data View web part listing every project – you can click on each one to take you to a project details page.  I wanted this Data View to pass the ID of the project in the querystring to the project details page.  Well, this is straight forward as I just did a little formatting within SharePoint Designer, formatting each Project Item as a URL.  The challenge was on the Project Details page itself.

You can easily create a parameter in a Data View Web Part as shown here, and it worked quite well.  Once someone clicked on a project, the Project Details opened up as shown below.  If you want to see how to make a Data View Web Part look like the chart below, see this blog.



Well, this is kind of cool, but what if someone wanted to see the details of another project without having to go back to the front page and selecting it? I needed a way for the user to input another project ID number and see its details. Well, a DropDown box would be ideal, but there are way too many projects for that to work correctly, so I decided to use the Form Web Part (Remember I am using WSS 3.0 for this application) which gives me a Text box I can connect to other web parts. So, I created the web part and connected them all up, passing the value of the parameter I created earlier for each DataView. This worked great when there was nothing being passed in the query string, but if something was in the querystring it would override the connections made in the web parts. So, I decided to see if I could make it edit the QueryString when someone clicked the Form Web Part. This was actually pretty simple, it just took a little time to figure out.

Turns out, there is a source control button on the Form Web Part where you can directly edit the JavaScript – Pretty Handy. Well, all I had to do was insert the following snippit of JavaScript, and I was done.

<script type="text/javascript">
function moveMe(n){
    window.location = "projectdetails.aspx?ProjectID=" + n
}
</script>

<div onkeydown="if (event.keyCode == 13) moveMe(document.getElementById('myText').value)">
<input type="text" name="T1" id="myText"/>
<input type="button" value="Go" onclick="moveMe(document.getElementById('myText').value)"/>
</div>

All this code does, is define one small function that will redirect the page to a new URL (Modifying the Query String) with the input from the textbox. The two events are for someone clicking the Go button and pressing enter.

So, as you can see (sort of) in the image below, I now have a textbox that lets you modify the querystring, which is then read by three data view web parts to filter their data.



Pretty neat for not needing to put any code directly on the server.

Microsoft SharePoint Conference Day 3

By , October 22, 2009

Today I decided to try and focus a little bit on development as I hadn’t attended many of those sessions yet.  Some turned out to be a lot more technical and informative than others, but in the end I did see some cool new features that got me excited about the future.  Each session I attended is listed below with some of the highlights.

  • Workflow Enhancements in SP 2010

One disappointing thing to hear was that SP 2010 will use continue to use Workflow Foundation 3.5 instead of 4.0 which is supposed to come out early next year.  This essentially means that workflows will remain quite the same, at least in design, as they were in 2007.  There were a few cool changes though listed below.

You can now create a workflow in SharePoint Designer (SPD) and then export it to a .wsp file.  This can then be imported into visual studio (VS) to make further changes.  So, another way to look at this is that you can now create reusable workflows in SPD!  The only downside is that you can’t turn around and export it back into SPD once changes have been made to it in VS.  This will at the very least give people a good way to create reusable workflows, or get started with the basic structure of a workflow before jumping into VS.

They also added workflow initiation and association forms into Visual Studio, so now it is very simple to add forms to kick off your workflows.  What used to involve making an InfoPath form and manually tying it back into the workflow now only takes a couple of clicks!

There is also a new kind of workflow, called a “Site Workflow” that does not need to be tied to a list item.  Basically it is stored at the site level and has to be started manually.  In the past there were instances when you wanted a workflow, but had to end up tying it to a dummy list item to get it started, so this was a nice little enhancement.  The example demonstrated was related to site creation.  When a user wanted a new blog site created, they would fill out the instantiation form requesting a blog and click submit.  The workflow then created a task, and if they task was completed it would create the site – kind of cool.

The last big enhancements to workflows is that they can now interact directly with external systems.  For example, a workflow inside of SharePoint can send out a request for some kind of information to an external system.  It will then go to sleep and idle until the workflow system receives a response from that system.  At that point, the workflow will wake up and resume processing – very neat.

  • Creating a Reporting Environment in 2007 and 2010

I was a little disappointed that most of this session revolved around SP 2007, which consisted of installing the Add on for Reporting Services to the SharePoint server.  If you haven’t seen this, it is kind of neat and essentially allows you to display reports generated in Reporting Services inside of SharePoint.  This is pretty cool as it is a free add on, so if you use reporting services you should check it out.

The only new things they demonstrated are that it now supports Alternate Access Mapping (AAM) – apparently it only used to work for the default zone, I didn’t know that.  Also, it now has native support for reporting on data in SharePoint lists and this engine is also what Access Services uses when displaying reports in the browser.  One last thing, they said it is easier to install this if you install the Add on and then Install SharePoint Server… Good to note I guess if you are starting from scratch.

  • REST and LINQ in SharePoint

This was a great, fast paced sessions where they basically showed several different methods of getting at data stored inside of SharePoint.  The best part is that they posted their code samples used during the demonstration Here for anyone to access.

Client Side Access Techniques: REST gives us a very quick and easy way to get data in XML format out of a SharePoint list simply by passing it a correctly formatted URL.  You can also do some pretty cool things like filtering the data by passing it a filter tag in the query string.  This was something that would have definitely made my life easier over the past couple of years.  The client Object Model is something new that was demonstrated as well.   Basically using .NET or Javascript you are able to queue up a bunch of calls to the SharePoint server and then issue an execute command for them to be well… executed.  We essentially have a lot more tools to develop client side web apps now with SharePoint.

Server Side Access Techniques: LINQ is much better than I would have imagined.  Essentially SharePoint supports it not so that you can write a simple LINQ query that looks similar to SQL instead of CAML.  Did anyone like CAML? Anybody???  I didn’t think so.  SharePoint will then behind the scenes translate your LINQ query into CAML, but as far as the developer is concerned it is all LINQ.

  • Themeing and Branding in SP 2010

I was kind of dissapointed in this session as it just didn’t cover very much.  He spent most of the time going over Themes which are much improved, but the session ended 30 minutes early and wasn’t very Technical.

Themes are much more flexible in SP 2010, allowing you to change the colors of the theme directly in the browser, or you can create you own in the browser as well.  No longer do they have to be created by IT (This could be good and bad…).  Master Pages remain much the same in their structure, and if you need to upgrade an existing master page in general terms, all you need to do is add support for the Ribbon and remove some duplicate items.  He made it sound like it wouldnt be that difficult which kind of suprised me.

The biggest thing to come out of this session though was they it was promised that there will be deep documentation relating to masterpages, outlining every item in the new default masterpage, what it does and why it is there.  This kind of information would have been very useful in 2007.

  • Building Data Centric Applications (The Data View WebPart)

This session was actually really cool.  If you haven’t played with the Data View web part before, it is really powerful in that you can pull in data from a lot of different sources, format it and display it right in the browser.  Well, it is used a lot more in SP 2010.  In fact, the List View web part is no longer – you know, the web part used when you were looking at a list.  Well now, that uses a Data View Web Part now and is hence much more flexible.  Also, important to note is that you need SPD to add a data view – cant do it through the browser.

So, the first thing to note is that you can now bring in Data from multiple sources into the same Data View web part.  The demo was bringing in data from a SP list and an XML file and merging them by a common field of customer.  This is very powerful, as you can build some rich applications, combining a customer list stored in SharePoint with timesheet data or production metrics stored in some external system into one location to easily summarize the data.  There were also a couple of different ways to combine the data that were pretty powerful.

The coolest thing shown however was combining JQuery with the Data view webpart.  If you haven’t used JQuery before, it is basically JavaScript classes that let you build powerful, great looking applications without writing much code at all – a really great resource to learn.  The first demo made the description of a document pop up when you hover over the document’s name which was kind of neat.  Then he took it further, using the JQuery SparkLine class to turn CSV data into a chart, directly in the data view.  He then added 1 line of AJAX code to make the CSV data update every 15 seconds, without posting back to the server.  So with very little code, he built an auto updating view of data that combined different data sources to build a nice looking dashboard.  Very impressive.

Microsoft SharePoint Conference Day 2

By , October 20, 2009

Today I had some pretty hard decisions to make when it came to selecting sessions.  There were several development focused ones I really wanted to attend, but also some other sessions that were geared towards brand new functionality.  In the end, I decided to see what was new and look over the changes to the development platform later when they post the videos for each session.

Below are the sessions I attended today, with the highlights of each listed.

  • Whats new in Business Connectivity Services (Formerly BDC)

So far, this is my favorite thing in the new version.  What used to be complex and very time consuming now only takes a few clicks in SharePoint Designer or Visual Studio.  You can now very easily connect to external line of business data (Databases, Web Services, etc) and display it in SharePoint with their new type of List, an External List.  With this, the data is not stored in the SharePoint realm, but rather queried from the LOB system each time it is viewed.  Also, unlike SharePoint 2007, it supports full CRUD capabilities with just a couple of clicks.  Very impressive!!  Also, this functionality is included in the new version of WSS, names SharePoint 2010 Foundation.  The enterprise version then adds more functionality, namely a set of web parts to build cool pages around external data.

Oh, and it also integrates with the Office platform, allowing you to view and edit LOB data directly from Outlook or the SharePoint Workspace (Evolution of Groove) and it even makes the data available offline.

  • Building a great extranet, proven principles and best practices

I was actually a little disappointed in this one at first as it started out slow, but in the end I did get a few good pointers.  Unfortunately, not much in the presentation was directly related to SharePoint 2010 like I was expecting, but good information was provided none the less.  They did touch on Claim based authentication, which I don’t yet know enough about to really describe it, but it sounded like a neat approach to get around having to use Kerberos (which can be quite a pain).

  • SharePoint Document Management Deep Dive

This presentation covered a lot of material in a pretty short time.  The amount of document management enhancements is pretty daunting, but here are some of the highlights.  Facilitating social network, you can now tag a document which will add a link to it on your my site.  This seemed strange at first but I think it may actually be pretty useful to keep track of documents you or someone else is working with.  Along the same lines, you can now rate documents on a 1-5 star scale, highlighting more important or relevant documents to try and grab someone’s attention.

Document sets are a new concept, allowing you to essentially create a content type that contains several documents all related to the same process.  A new employee hiring process for example may have 6 different documents that need to be filled out by various people.  Well, if you create a document set, it will automatically create the 6 documents from specified templates, automating what used to be a manual process.

They also displayed the new Content Organizer which is a rule driven process that helps manage documents.  Rules can be set up to save certain content types in a certain location for example, so someone can create a document from word, save it and have it automatically go to the right location in sharepoint – Really neat.  It can also automatically create new folders in a library if the total number of documents passes some threshold.  Oh, and content types can now be syndicated across entire farms, no longer being site collection specific.

  • Configuring PerformancePoint Services: An Administrators Guide

This presentation was actually better than I was expecting as he was the first presenter who gave the audience insight into why Microsoft made certain design decisions.  The most important thing to come out of this talk however was that PerformancePoint has now been rolled into SharePoint as a stand alone service, but makes use of the SharePoint content databases to store its material.  So, unlike in 2007 where it had its own database to store things, it now makes use of Document Libraries and Lists.  All Data Connections and Dashboard Pages are stored in special document libraries, and all Dashboard items (Charts, KPIs, etc) are stored as items in a special list.  This also allows for different business units to truly manage their dashboards separately, unlike in 2007 where they were all stored in one location, regardless of business unit.

  • Records Management in SharePoint 2010

Records Management added to what was discussed in the Document Management Deep Dive session.  This is another area that blows the 2007 functionality out of the water.  SP 2010 now allows for in place records, that meaning that you can mark individual documents in a library as records, and they will be locked in place so that edits cant be made.  In 2007, you had to send documents to a special records center site template, and this new feature allows for much more flexibility in a records management deployment.  They also upgraded your choices if you want to continue to send records to a centralized location.  First, you can move the actual document, send the actual and leave a reference to the record or send a copy of the document to the record center.  Once there, it is a lot easier to find them as you can now have a unique ID associated to records in a record center that is quickly searchable.
Oh and I didn’t even mention meta data yet.  You can build rich taxonomies of meta data and sort/filter and view records by their meta data.  Clicking on the name of a product line for example can filter the documents instantly and only show those relevant to that product.  You can do the same thing for content types if your only interested in sales orders for example.  I am going to try and attend a session on Taxonomies as it is another great improvement in SP 2010 that allows you to manage your data in ways never possible before.  Oh yeah, I forgot that you can also have multiple records centers now.  So, in practice companies may have one for each lawsuit they are under, and they can easily use the record center search features to discover all material related to the lawsuit, and automatically make all documents records in the given site.  They have made it MUCH better, to the point that I expect lots of companies to actually use it (unlike before).

Overall it was a great day, but unfortunately I am starting to come down with a cold or something.  They are having a big party tonight with Huey Loius providing the entertainment that I may check out.  Until next time…