Before diving in, let me introduce myself. My name is Todd Kitta and I am currently a Senior Engineer on the KnowledgeLake Capture team and have been working with SharePoint for over six years in one form or another and with .NET since day 0. A few years ago I... I just need a contact form...simple, right?
I would have thought creating a contact from on our new website would be easy as pie. It is….if you are talking instead about calculating Pi….to the 100th decimal place.
Our old, static website had a custom-coded .asp webform which pushed traffic to pre-determined... One of the most common customizations to KnowledgeLake software is to customize the act of Indexing, or applying metadata to SharePoint documents. While KnowledgeLake software has always made these customizations possible, it has never been easier than with the newly redesigned Index component built into KnowledgeLake Imaging 4.0.
In this... SharePoint Foundation (aka WSS v4) comes with some new monitoring and analysis features to give administrator better control over activity and performance of SharePoint 2010 Farm via rules (SharePoint Maintenance Engine) and reporting. At KnowledgeLake we knew we needed a little something extra to effectively support our SharePoint and KnowledgeLake...
How do I ‘brand’ this thing called SharePoint?
As any good web designer/developer knows, after a site’s
aesthetic design is agreed upon; beginning with static page templates (dummy
HTML/CSS) is the best starting point. So
I had created my major page templates already….but now to make this ready for
SharePoint’s dynamic content.
Master Pages
I created a... My first order of business after joining KnowledgeLake in January of this year, was leading a complete re-design and implementation of knowledgelake.com on the new SharePoint 2010 content management framework.
Having never used SharePoint in the past (other than checking in/out documents from document libraries) I had a lot to learn... I've been testing version 4.0 of our Imaging for SharePoint product quite a bit lately and I'm just amazed on how easy the new installation is. Using solution deployment everything feels like its just part of SharePoint now. A big kudos goes out to the entire team. I can't wait... Hopefully you have been following this series on Microsoft SharePoint Server 2010. It's been a great learning experience following these features through early Betas, release candidate and now RTM. If you haven't seen the other posts they can be found here:
ECM Features that Rock in SharePoint 2010: Enterprise Managed...
|
|
Before diving in, let me introduce myself. My name is Todd Kitta and I am currently a Senior Engineer on the KnowledgeLake Capture team and have been working with SharePoint for over six years in one form or another and with .NET since day 0. A few years ago I authored Professional Windows Workflow Foundation on Wrox Press and I am currently working on a SharePoint 2010 ECM book with some of my colleagues also for Wrox Press.
Now on to the interesting content…
SharePoint 2007 introduced a new tool which a lot of you are probably familiar with called SharePoint Designer (SPD). Depending who you are, you likely either loved or hated this tool (and either way it was likely with a passion). If you were a "non-coder" or in an environment which did not allow custom code to be deployed (BPOS, etc.), SharePoint Designer was potentially a great way to get things done. In addition to the look and feel aspects (tweaking CSS, master pages, etc.) of the tool it provided the powerful ability, for the first time in SharePoint, for end users to create business processes using the SharePoint workflow engine. This engine was (and still is in SharePoint 2010) built on the Windows Workflow Foundation platform which was introduced in .NET 3.0.
While this ability was great, it was a common scenario that its promise fell short of solving real business problems in a thorough and scalable manner. It was quite a regular occurrence where a workflow that started its development lifecycle in SharePoint Designer had to be scrapped and implemented by a developer using the infinitely more flexible, but also more complex, Visual Studio. Another issue was that SharePoint Designer 2007 workflows could not be reused. Each workflow was developed on a specific list in a specific site and this workflow definition could not be moved or shared anywhere else in any SharePoint environment.
These flexibility and scalability issues related to SharePoint Designer 2007 workflows severely limited the cases in which businesses could use this tool to solve real business problems. With that context, this post aims to cover the improvements and new features included in SharePoint Designer 2010. To put the cart before the horse a little bit, SharePoint Designer 2010 is a vast improvement over its 2007 counterpart and drastically increases the applicability of this tool in a real company trying to solve real problems.
Improved Workflow Actions
While the workflow engine in SharePoint in itself is fantastic, it would be nothing without useful building blocks with which to build your business processes. These building blocks are called "actions" in SharePoint Designer workflow. As a quick aside, they are normally referred to as "activities" in Visual Studio workflows or in Windows Workflow Foundation proper. While SharePoint Designer 2007 included a decent number of actions out of the box, the core set only took you so far when implementing anything more than a moderately complex process. In 2010 these core actions are brought forward, enhanced, and augmented with new actions. There are other places on the web which enumerate the 2010 actions, so I won't list them all here, but I'll review a few of the more useful ones here in some amount of detail.
Task Processes
In my opinion, one of the most powerful things about the 2010 SPD workflow is the flexibility offered by "task process" actions. These task actions come in three flavors:
- Start Approval Process
- Start Feedback Process
- Start Custom Task Process
Each of these three actions use the core task process framework and are essentially like mini-workflows in that they allow the management of the task process' lifecycle as well as the data associated with the task process. The "Start Approval Process" and "Start Feedback Process" actions are essentially preconfigured instances of "Start Custom Task Process" which give you a jumpstart on two common scenarios. Below is a screenshot of the task process "dashboard" UI:
You get to this screen by clicking the name of the task process in the designer for the task process action (as shown highlighted below).
From the task process dashboard screen you can perform the following actions:
- Change the name and owner of the task process.
- Jump to other screens which manage the flow of logic pertaining to certain parts of the task process (e.g. How do you tell when the task process is done? How does each individual task behave? What do to when the task process begins, ends, is cancelled, etc.?).
- Modify settings such is if the user is presented with a reassignment capability or security settings on individual tasks.
- Managing custom fields on a task form.
- Managing task the possible task outcomes (e.g. approved, rejected, postponed, etc.).
To get started with the various task process actions, it would be advisable to add a "Start Approval Process" action to an empty workflow and poke around each screen until you are comfortable enough with what this action is all about. Task processes are a very sizable and important addition as compared to SharePoint Designer 2007 workflow, so get familiar with this one.
Set Workflow Status Action
This action, while nothing super complex, allows a workflow designer to add a nice touch of customization to any process. In 2007, you had no control over the status label which is displayed in list views. Basically the user would know if the workflow was active or not and that's about it. In 2010, you are able to provide a more personalized label such as "Approved", "Rejected", "Waiting for Response from HR", etc. This added touch should provide a great deal of information about an inflight workflow at a glance.
Parallel
This is a very important "advanced" action that has no comparable alternative in SharePoint Designer 2007. It does what you think it does: allows other actions or groups of actions to be executed in parallel.
Improved Designer
As with most other client applications in or related to Office 2010, SharePoint Designer 2010 gets the ribbon treatment. I have been a huge fan of the ribbon ever since I first started using Office 2007 back in the beta program (circa 2005 I believe). It is a great paradigm for surfacing commands and features in a context sensitive manner. Because the ribbon is universal to SharePoint Designer 2010, it is obviously used for workflow as well. Below is a screenshot of what the ribbon looks like while designing a workflow.
As you can see, there are many important actions that can be taken directly from this one ribbon tab (called Workflow) which may have been several clicks to get to in a different GUI paradigm. This becomes really useful when adding actions to your workflow because you can access all of the available actions from the "Action" button in the "Insert" group.
Below is the ribbon as shown when you are in the "Workflows" section of a site. From here you can perform many actions on specific workflow definitions (such as editing them or exporting to Visio, etc.) or you can create new workflows.
Reusable Workflows
No longer are you tied to one list for your workflow as you were in SharePoint Designer 2007! This is a really big deal for any project that is bigger than a breadbox. To utilize this new feature, you simply need to create a new reusable workflow and (optionally) tie it to a specific content type. Below is the dialog that is displayed when creating a new reusable workflow.
This capability is not unlike the ability in SharePoint 2007 to associate an out of the box or Visual Studio workflow to any list in the site collection where the workflow feature was activated. Again, due to the reusability that this feature offers this is a very important (yet obvious) addition to SharePoint Designer workflow in 2010.
NOTE: only list workflows can be made reusable in SharePoint Designer 2010. Site workflows, which are discussed below, cannot be authored in a reusable manner. To achieve this functionality, you need to end up packing your workflow from Visual Studio.
Site Workflows
Site workflows are an addition to the overall SharePoint 2010 workflow infrastructure and are available for you to leverage in SharePoint Designer. In SharePoint 2007, for Visual Studio and SPD, workflows had to be associated to a specific list or library and workflow instances were always tied to a specific item in a list or library. This limitation forced many developers to either use a technology other than workflow to solve a problem or leverage "dummy" list items just to get a workflow to run which wouldn't otherwise need a list item with which to be associated.
In 2010, the site workflow concept erases the requirement to always associate a workflow to a list or library. To be clear, this is not an SPD only feature, you can create site workflows in Visual Studio as well. However, it is important and beneficial that this feature was also baked in to SPD.
Workflow Security
In SPD 2007 workflow, there were a lot of struggles related to dealing with security and under which security context the workflow was running under. In 2010, it is fairly straightforward. By default, the workflow is running under the security context of the person who started the workflow. This could very well be a non-privileged user who may not have the appropriate rights to perform crucial workflow steps (copying documents, creating sites, provisioning security, etc.). For this reason, the "Impersonation Step" was added.
The actions run inside this step will be run under the security context of the workflow author; more specifically, the last person that saved the workflow definition. There are a couple actions which can only be run inside the Impersonation Step:
- Check List Item Permissions
- Check List Item Permission Levels
Below is a screenshot of the Impersonation Step which includes the Check List Item Permissions actions.
Customizing Out of the Box Workflows
Another really nice feature in SPD 2010 workflow is the ability to use one of the out of the box workflows (e.g. Approval, Collect Feedback, etc.) as a starting point and modify it as your business requirements dictate. To do this, navigate to the "Workflows" section of your site in SPD, select the workflow you want to modify from the right pane, and finally click "Copy & Modify" from the ribbon. See below for a screenshot of this:
I can think of quite a few times in the 2007 era where customers wanted to tweak the out of the box workflows just slightly. However, there was no capability like this in SPD or Visual Studio for that matter. Huge productivity booster here.
Integration with Visio
SharePoint 2010 offers a potential new a way for SharePoint workflow requirements to be gathered. If you are using Visio Premium 2010 you then have the ability to create SharePoint workflow by using the "Microsoft SharePoint Workflow" template as found in the new item UI.
In this template you have access to a good number of SharePoint actions which you would also find available in SharePoint Designer.
The purpose of designing (note my use of the word designing, not developing) workflows in this tool is to get a start or a framework of what the workflow is going to look like and then to export it and finish it off in a different tool. The most you can do in this tool is to position and order actions in a logical configuration. You cannot, however, configure actions beyond this. For example, if your workflow contains a "send an email" action, you cannot specify the recipient. In addition, it is my opinion that some of the actions in the palette are "too technical" for the target audience of business analyst. For example, every workflow in the world needs some kind of mechanism to make decisions conditionally – an "if-then-else" statement if you will. Well, there are several ways to do this in Visio workflows but they are called things like "compare data source" and "compare document field". This is not intuitive for an end user. Because of this and the fact that you cannot do a lot of configuration, it is my opinion that this will be a fairly limited tool for designing and developing SharePoint workflows.
So at this point you might be wondering why I'm talking about Visio in a SharePoint Designer post. It is because the workflows designed in Visio are exported from Visio to a "Visio Workflow Interchange" (*.vwi) package which can then be imported into SharePoint Designer. The .vwi files can then be imported directly into SharePoint Designer as a list or reusable workflow. See below for a screenshot of the export and import capabilities.
Wrap Up
In conclusion, the SharePoint Designer workflow capabilities in SharePoint 2010 are very much evolutionary rather than revolutionary. However, that is not to say that there are not a good number of extremely useful and powerful tools now available. So much so, that I would say SharePoint Designer workflows are finally ready for primetime in a real SharePoint environment whereas there were very few cases in SharePoint 2007 where I could say this with much confidence. That is not to say that SharePoint Designer workflow is always a good choice or that there would not be cases where it would never be appropriate in a given environment. Rather, there are just a lot more cases where it makes sense to use as a tool from the toolbox of SharePoint. |
I just need a contact form...simple, right?
I would have thought creating a contact from on our new website would be easy as pie. It is….if you are talking instead about calculating Pi….to the 100th decimal place.
Our old, static website had a custom-coded .asp webform which pushed traffic to pre-determined email recipients in the company. At first, I thought about porting this code over to keep everything as is, but this is SharePoint, why not make it more robust?
InfoPath, Anonymous Users and SharePoint Lists = Danger!
If only I had known what this heading states before so many man hours were wasted. Since our website is customer-facing we of course need to support Anonymous Users. And we need to ensure those users can contact us without trouble. Our original architectural approach was the following:
- Deploy an InfoPath webform that is able to be submitted by Anonymous Users
- Create a custom List in SharePoint that would be a data connection setup in InfoPath Designer; data flows from the webform to the List (this allows us to keep information about our users, and possibly later allow us to flow this data directly into our Microsoft Dynamics CRM application as possible leads)
- Add another data connection which is an email to our representatives with the form data for manual follow-up later
I didn’t think this was a big deal…boy was I wrong. The big problem in all of this is SharePoint 2010’s support of Anonymous Users. Anonymous users cannot create list items! So, in-turn, an InfoPath form submitted by an Anonymous User cannot automatically create a list item. Although I understand there are probably security concerns with SharePoint allowing this, it seems like there should be a way to allow Anonymous Users to do this through some specifically granted permissions. I can think of many instances where this functionality would be incredibly helpful.
So now what?
What we ended up doing, was simply having email notification sent to our representatives and forgetting about storing data in SharePoint. I created a series of InfoPath webforms, published them to SharePoint, and I used the InfoPath Web Part to place the forms on the pages. This also caused a little heartburn as well, because the InfoPath Web Part cannot see InfoPath forms that aren’t stored within the site where you are editing pages. I discovered the best way to handle this was to publish ALL forms as a content type to a central forms library at the top site in the collection. Then, I could create a forms library within each sub-site, and in the library under Advanced Settings ‘allow the management of Content Types’. I could then select to inherit the needed content type (Form) from the top-level site and voila, InfoPath Web Parts for that site could now see it for selection.<
Until recently this method didn’t seem to be a problem, but we just realized that because we are only doing email submit actions, we have no way to gather metrics on what percentage of people who hit a contact form actually submitted one.
Well, how about after form submission we send users to a specific confirmation page?….we can setup a page in our analytics tool to see how many get to the page vs. visited the contact form, and that equals our conversion rate. No sorry, InfoPath doesn’t have a submission rule for “re-direct to another page”. Ouch again. I strongly urge the InfoPath development team to think about supporting what I think would be a VERY popular form submission action.
So what’s our conversion rate? I have no idea. We are now looking at having to contract a third party to host our webforms, track our conversions, and submit the data directly to our CRM. Ugh.
Now the good news…
So what DO I like about InfoPath/SharePoint webforms?
Point and Click form building
Being able to manipulate forms in this way is very nice for a designer. Dragging form elements and labels onto a page and deploying to SharePoint with a couple clicks is definitely nice.
Form Views
I like the idea of supporting multiple Form Views. I was able to create a Form Submit rule that upon submission, the form could change to an alternate ‘view’. For our contact forms, this allowed us to put a custom message to confirm the form was submitted, and hide the form from the user to prevent multiple submissions. This also allowed us to create form-protected assets. We can force a user to fill out a form, and upon submission be shown ‘protected’ content or links. Pretty cool.
Form Submit Rules
I like the ability to build form logic using submit rules. In my case, it was great because I could use the logic “if user clicks radio button ‘x’, use data connection ‘y’ to send email to a specific representative”. I also like the flexibility of form validation rules and display that you can set on a per-field basis.
Support of Browser-Based WebForms
Thankfully you can set forms to appear as a normal browser-based webform. It would be a shame if every user who visited the site had to have InfoPath installed to send a form.
Any Other Gripes?
Sorry, but yes…
The InfoPath-Assigned Background Color
Why can’t you just set the form to have NO background at all? Well, I did set the form to have no background color, but it did no good. I have a ton of transparency on the website as you can see, and a big ugly white background with padding and margins set by default around a webform caused me much pain. These background and margin styles are inserted DIRECTLY into the markup as an element.style instead of a CSS class being assigned to the form. This means I have to use the ‘!important’ css hack to override this default InfoPath styling to get the output I really want. AND I have to go find EVERY instance of a form (of which I have many), copy the HUGE CSS ID to my clipboard and assign this style hack in the stylesheet. This is NOT easily maintainable and a huge waste of time all around. InfoPath developers: please just trust the developer using InfoPath Designer knows what they are doing, and don’t automatically assign styles. If they want a white background and 30 pixels of margin, they can do that in the app. REVERSING it however, now that is a pain.
Required Fields Styling
How about a little more control on what is shown to the user when indicating a required field. Having a red-dashed outline around a required radio button selection is a bit confining if you ask me…..Allowing for a custom style to be created in InfoPath would be nice. Or better yet allow a CSS Class to be assigned on a per-field basis and/or on a validation rule basis. Then you can control it centrally through your stylesheet, and change EVERY webform on the site with one change.
|
One of the most common customizations to KnowledgeLake software is to customize the act of Indexing, or applying metadata to SharePoint documents. While KnowledgeLake software has always made these customizations possible, it has never been easier than with the newly redesigned Index component built into KnowledgeLake Imaging 4.0.
In this post, I will walk through how to create a very basic KnowledgeLake Index extension that will load a special default value into a DueDate column. This extension can easily be deployed for farm-wide use in the KnowledgeLake Imaging Index Edit Form, the KnowledgeLake Viewer, the KnowledgeLake Search Query Results Web Part and the KnowledgeLake Search Query Results built into the KnowledgeLake Search Center. This post assumes you have some existing Knowledge of programming with Visual Studio and some general, high level Knowledge of how the KnowledgeLake Index Behaviors integrate with SharePoint 2010's Content Types.
Step 1: Creating the extension
In order to create extensions for KnowledgeLake Index, you will need the following tools and Silverlight assemblies. Additionally, I will assume you are developing on your SharePoint server. This has become easier than ever since SharePoint 2010 can now be deployed on Windows 7!
- Microsoft Visual Studio 2010
- The Silverlight 4 developer runtime and tools for Visual Studio 2010.
The Microsoft SharePoint Silverlight Client Object assemblies.
- Microsoft.SharePoint.Client.Silverlight
- Microsoft.SharePoint.Client.Silverlight.Runtime
- System.Windows.Controls
The KnowledgeLake Imaging Silverlight assemblies (found in the KnowledgeLake Imaging SDK or can be extracted from the KLViewer2.xap or KLEditForm.xap packages.
- KnowledgeLake.Silverlight
- KnowledgeLake.Silverlight.Index.Client
- KnowledgeLake.Silverlight.Index.Contracts
- KnowledgeLake.Silverlight.Index.Controls (optional)
Start by creating a new Silverlight application project in Visual Studio. This will allow generation of a xap project to deploy to the SharePoint farm. The KnowledgeLake Index component is expecting the xap package to be titled KLIndexExtensions, so call it that. Additionally, add references to all of the assemblies listed above to your project.
Create a new ResourceDictionary in your project and call it CustomTemplates.xaml. For the purpose of being able to instantiate this class in code behind, add a CustomTemplates.cs class alongside of it. This is where the meat of the extension will lie. Add the code shown below into your CustomTemplates.xaml.
<ResourceDictionary x:Class="KLIndexExtensions.Resources.CustomTemplates" x:ClassModifier="public" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System_Windows_Controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" xmlns:converters="clr-namespace:KLIndexExtensions.Converters;assembly=KLIndexExtensions" xmlns:KnowledgeLake_Silverlight_Index_Controls=
"clr-namespace:KnowledgeLake.Silverlight.Index.Controls;assembly=KnowledgeLake.Silverlight.Index.Controls"> <KnowledgeLake_Silverlight_Index_Controls:IndexColumnTemplate x:Key="CustomDateTemplate" ColumnDataTypes="DateTime" Modes="Index, Modify" DisplayFormats="DateOnly"> <StackPanel> <System_Windows_Controls:DatePicker
SelectedDate="{Binding Value, Mode=TwoWay}"
Loaded="OnDatePickerLoaded" /> </StackPanel> </KnowledgeLake_Silverlight_Index_Controls:IndexColumnTemplate> </ResourceDictionary>
Next, we will go back to our CustomIndexPanelTemplateLoader.cs file and return a new instance of the CustomTemplates ResourceDictionary as shown (note that I decided to add my CustomTemplates ResourceDictionary to a Resources namespace within my application).
using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using KnowledgeLake.Silverlight.Index.Contracts; namespace KLIndexExtensions { public class CustomIndexPanelTemplateLoader : IIndexPanelTemplateLoader { public ResourceDictionary LoadTemplates() { return new KLIndexExtensions.Resources.CustomTemplates(); } } }
Finally, add the code shown below to your CustomTemplates.cs. The OnDatePickerLoaded event handler will handle anytime a column named “DueDate” is loaded without an existing value, the value will be populated with the first day of the following month. Build the project, which will create KLIndexExtensions.xap. This is the package that is deployed to the SharePoint farm for use with KnowledgeLake products.
using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using KnowledgeLake.Silverlight.Index.Controls.ViewModel;
namespace KLIndexExtensions.Resources { public partial class CustomTemplates { public CustomTemplates() { InitializeComponent(); }
private void OnDatePickerLoaded(object sender, EventArgs e) { DatePicker dp = sender as DatePicker; ColumnModel model = dp.DataContext as ColumnModel;
if (model.DisplayName == "DueDate" && string.IsNullOrEmpty(model.Value)) { DateTime dueDate = DateTime.Now.AddMonths(1); dueDate = new DateTime(dueDate.Year, dueDate.Month, 1); model.Value = dueDate.ToString("o"); } } } }
Step 2: Deploying your extension xap package
In order for KnowledgeLake Index enabled products to use this extension, it needs to be deployed to 2 different directories on every web front end server in the farm. Deploy it to the following location to enable it for use in the KnowledgeLake Index Edit Form and KnowledgeLake Search.
· %SHAREPOINT_ROOT%\TEMPLATE\LAYOUTS\KLClientBin
Secondly, it must be deployed to a subdirectory of the KnowledgeLake Viewer to enable the extension in KnowledgeLake View. This is because the Viewer resides in its own IIS application.
· %SHAREPOINT_ROOT%\TEMPLATE\LAYOUTS\KLViewer\ClientBin
Note that the default location of %SHAREPOINT_ROOT% is “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14”. That’s it! Your extension will now be picked up by KnowledgeLake products across your entire farm!
Step 2: Deploying your extension xap package
In order for KnowledgeLake Index enabled products to use this extension, it needs to be deployed to 2 different directories on every web front end server in the farm. Deploy it to the following location to enable it for use in the KnowledgeLake Index Edit Form and KnowledgeLake Search.
- %SHAREPOINT_ROOT%\TEMPLATE\LAYOUTS\KLClientBin
Secondly, it must be deployed to a subdirectory of the KnowledgeLake Viewer to enable the extension in KnowledgeLake View. This is because the Viewer resides in its own IIS application.
- %SHAREPOINT_ROOT%\TEMPLATE\LAYOUTS\KLViewer\ClientBin
Note that the default location of %SHAREPOINT_ROOT% is "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14". That's it! Your extension will now be picked up by KnowledgeLake products across your entire farm!
Step 3: Debugging
If only every extension were that easy! Inevitably, you'll want to be able to step into the extension code as you develop your extension. While there are many ways to accomplish this, I will show you a way I found easiest when developing extensions. Start by going to the properties page for your KLIndexExtensions.Web project created by the Visual Studio Wizard earlier. In the Web tab, choose a valid url where your extension will be hosted. I've chosen the KnowledgeLake Viewer here.
Under debuggers, select Silverlight and unselect ASP.NET.
Simply hit F5 and you will be able to set breakpoints and step into your code. I like to set up post build events to copy my xap to the destination directories on my development server, but make sure you remove them as needed for your team.
Summary
There are many ways to extend KnowledgeLake Index, and KnowledgeLake Index for Imaging 4 makes it easier than ever before. While deployment can be as simple as a copy operation, you could create a custom wsp solution for a multi WFE environment. For more information on creating wsp's, see this MSDN article. For more complex Index scenarios and more development scenarios, please see the KnowledgeLake Imaging SDK, which will be available at the end of this month. |
SharePoint Foundation (aka WSS v4) comes with some new monitoring and analysis features to give administrator better control over activity and performance of SharePoint 2010 Farm via rules (SharePoint Maintenance Engine) and reporting. At KnowledgeLake we knew we needed a little something extra to effectively support our SharePoint and KnowledgeLake implementations, enter the KnowledgeLake Log Viewer, a Microsoft Silverlight application.
Unified Logging Service and Diagnostic Logging
As with MOSS 2007 the ULS (Unified Logging Service) is still with us in SharePoint 2010 but the administration of Event Throttling (figure 1) has improved with in the Configuration of Diagnostic Logging UI. An Event Log Flood Protection (figure 2) feature has been included to detect duplicate events from flooding the ULS logs. Additionally, you can administer the threshold (figure 3) for day to store the files before purging and space usage.
Figure 1 - Event Throttling
Figure 2 - Event Log Flood Protection
Figure 3 - Trace Log
KnowledgeLake Monitoring
KnowledgeLake knows full well that with the plethora of features and functionality SharePoint 2010 provides come issues that will need to be supported and resolved. With this new version of Imaging, our flag ship product, we included a much needed and missing SharePoint administration feature, the KnowledgeLake Log Viewer.
In the past we used Notepad to glean through the ULS logs (figure 4), and spent an inordinate amount of time doing so.
Figure 4 - Notepad
With the KnowledgeLake Log Viewer we can now load the ULS logs, the event logs or a combination of both. We can specify a date and time range, sort, filter, import and export logs from and to XML and set a limit count (figure 5, 6, 7).
Figure 5 - KnowledgeLake Log Viewer
Figure 6 - Filter and Features
Figure 7 - XML ULS Export
The XML export can be opened in Microsoft Excel (figure 8) and we can use this to build a knowledge base on problem resolution. This XML export is also an invaluable tool for the KnowledgeLake support team and can be submitted as an attachment to a support ticket on the KnowledgeLake Support web site.
Figure 8 - Viewing with Excel
Resolving the Issue
Using the well formatted ULS entry of the KnowledgeLake Log Viewer we were able to diagnose the Object Cache issue by creating/configuring the settings for a Portal Super User and Portal Super Reader. We followed the instructions from this Microsoft TechNet Article - Configure Object Cache User Accounts.
About the Author
Jeff Borghoff is a Sr. Technical Architect at KnowledgeLake and is CDIA+, MCTS: WSS & MOSS and AIIM SharePointP certified. |
How do I ‘brand’ this thing called SharePoint?
As any good web designer/developer knows, after a site’s
aesthetic design is agreed upon; beginning with static page templates (dummy
HTML/CSS) is the best starting point. So
I had created my major page templates already….but now to make this ready for
SharePoint’s dynamic content.
Master Pages
I created a new site collection in SharePoint, using a
Publishing Site template (because hey, I’m creating a publishing website here
folks). Then I copied the ‘Night and Day’ masterpage to begin my
customizations. For goodness sakes, do
NOT alter a system template. Since, I
was no expert in SharePoint, asp, sharepoint controls, etc., I slowly and carefully eliminated
components in the masterpage that I didn’t need, and swapped out the HTML
components and css classes I needed from my dummy templates. I personally found this easier than using one
of the minimum master pages you find out there…
Calling myself out here…coming in cold in the world of
SharePoint and asp/aspx, I had to mess up my masterpage more than a few times
making edits. This is why versoning is
great. There is bad news though when
altering masterpages and page layouts in a Publishing site….making small
changes and wanting to see them reflected in the browser can be very painful
when you have to publish, submit, and accept the updated version of the
document each and every time. Hey SharePoint
dev team….how ‘bout a simple feature to turn on/off publishing on certain files
or file types? This would make the
development process much easier when
working on a Publishing site.
Page Layouts
I figured out that I had certain components that were global
(browser background, header, logo, navigation, footer) and that these obviously
belong in the master page. Thus began
the job of building out Page Layouts. I
cannot stress enough how important PLANNING is here. If you don’t have a robust information
architecture devised before doing this, you are spinning your wheels and
creating unnecessary work for yourself.
For my purposes, I ended up creating a page layout that
worked for ~80% of the pages on the site.
It consists of a title, and a bunch of webpart zones. This allowed me to drop in my webparts and
content editors to allow for my site pages to be as flexible as possible. Webparts are great…and I’ll post another
article soon on how I used them, customized them, etc.
CSS is King
Man I love CSS. It’s
such a great way to control display of so much on a powerful CMS like
SharePoint. I gotta say, the markup that
SharePoint 2010 creates when rendering in a browser can be a bit scary at
times. The pervasive use of tables is disheartening,
(luckily the navigation uses unordered lists) and the use of “element.styles”
is too common (styles directly in the markup, rather than classes being assigned
and styles provided externally). BUT, if
you are good with CSS (which you’d better be) you can do a lot without having
to touch the source code. But you’d
better turn on your Developer Tools (IE) or FireBug (Firefox) so you can see what you’re working with.
Anonymous Access
Obviously, for a customer-facing web site on SharePoint we
absolutely had to support
un-authenticated users. The first thing
I needed to do was turn on Anonymous Access.
That was pretty straightforward….Here
is a link if you don’t know how.
How does this relate to branding? Well….I had to eliminate the Ribbon UI if the
user wasn’t logged in. Wouldn’t that be
confusing to see if you were coming to a website? That’s where this
post came in handy. That worked
great, but now as an admin or editor on the site, how the heck do I get in? After all, when I get to the site, I’m anonymous.
That’s when I devised this approach (hack).
I’m not saying it’s a best practice, but worked well for my needs.
I just placed this code in my masterpage where I wanted the
item to appear, wrapped in a div:
<wssuc:Welcome id="IdLogin"
runat="server"
EnableViewState="false"></wssuc:Welcome>
<wssuc:MUISelector
runat="server"/>
Then, because in the ribbon (which would now appear on login)
the normal user account actions are present, I hide the div using css (property
- display:none). Now the original login
link which has now become a redundant user account menu upon login, won’t be
displayed to confuse the user.
So, that’s a start to my branding woes. I’m going to be posting more articles around what
it took to customize the site: InfoPath forms, WebParts, and SharePoint Search
to name a few. Stay tuned…
|
My first order of business after joining KnowledgeLake in January of this year, was leading a complete re-design and implementation of knowledgelake.com on the new SharePoint 2010 content management framework.
Having never used SharePoint in the past (other than checking in/out documents from document libraries) I had a lot to learn on building a completely branded web publishing site on the platform. It took a little while to get used to the master page/page layout templating structure as compared to other CMSs, but I caught on to it and found it to be quite powerful and flexible. Anyone who has used SharePoint for a project like this before, is also aware of the immense power and ease of use around web parts...Making a website dynamic with these tools is a great experience.
Everyone in our company is incredibly excited about being able to move away from editing static files, dealing with backoffice processes for review/publishing, and relying on our IT team for deployments to the server. Content management and publishing workflow features are king!
In a series of upcoming blog posts I intend to share some of my favorite online resources used when building the site, and provide thoughts on what I liked (and in some cases disliked) about certain features in SharePoint. Stay tuned...
|
I've been testing version 4.0 of our Imaging for SharePoint product quite a bit lately and I'm just amazed on how easy the new installation is. Using solution deployment everything feels like its just part of SharePoint now. A big kudos goes out to the entire team. I can't wait for the community to get their hands on the RTM.
Here is a quick run through on a Standalone SharePoint Server installation…
This is the actual installation, showing what is happening rather than cryptic progress bars.
Next is the the registration of the solutions so they can be deployed in SharePoint.
After registration Central Administration can be automatically launched to deploy the solutions.
The solution deployment page is loaded by default where both the KnowledgeLake Imaging Server and the Service Application can be deployed. By using solutions, administrators are given the option of deploying immediately, or using a scheduler to deploy KnowledgeLake off hours.
After the solutions are deployed KnowledgeLake needs to be activated on the farm.
The entire KnowledgeLake Imaging for SharePoint 2010 is now installed and ready to be activated on individual site collections as needed. This granular control all built inside the SharePoint interface should be a welcome addition for SharePoint Administrators.
Thanks Team,
Chris
|
Hopefully you have been following this series on Microsoft SharePoint Server 2010. It's been a great learning experience following these features through early Betas, release candidate and now RTM. If you haven't seen the other posts they can be found here:
ECM Features that Rock in SharePoint 2010: Enterprise Managed Metadata Part 1
ECM features that Rock in SharePoint 2010: Enterprise Managed Metadata Part 2
ECM Features That Rock in SharePoint 2010: Business Connectivity Services Part 1
ECM Features That Rock in SharePoint 2010: Business Connectivity Services Part 2
ECM Features That Rock in SharePoint 2010: List Validations
ECM Features That Rock in SharePoint 2010: Document Sets
ECM Features that Rock in SharePoint 2010: Document ID Service
ECM Features That Rock in SharePoint 2010: Audit Trail
How It Works
According to the feature definition, the Content Organizer allows administrators to create metadata based rules that move content submitted to the site to the correct library or folder.
When administrators turn on the setting to redirect users to a Drop Off Library, content uploaded to SharePoint will be forced into the Drop Off Library for routing. If this setting is not turned on usage of the Drop Off Library becomes optional. When working directly with the SharePoint APIs, the forced redirect may be adverted. Content Organizer Rules are set to determine where content should be routed to. Content Organizer Settings can also be used to change behaviors such as folder partitioning and not allowing duplicate submissions in target libraries.
Turning on the Content Organizer
Any site can be turned into a Content Organizer site by activating the feature, however before the feature can be activated the Site Collections must have Enterprise Site Collection feature turned on. To do this, select Site Actions, Site Settings, then Site collection features:


Activate the Enteprise Site Collection features:
Once activated a site can become a Content Organizer. Again, select Site Actions and then Site Settings:
Activate the Content Organizer:
Configuring the Content Organizer
Once enabled a new Document Library is automatically added to the site:
There will also be two new site administrator settings to configure the Content Organizer:
Both settings and rules are important for configuration. First the Content Organizer Settings. Most of the setting in this page are self explanatory, so I'll just focus on the not as obvious.
Redirect Users to the Drop Off Library: Although when using SharePoint natively, this works, only companies (such as KnowledgeLake <smile>) that respect this setting will actually enforce it. The reason is the API doesn't guarantee enforcement.
Sending to Another Site: Although useful, KnowledgeLake has consistently scaled single sites to large numbers of documents, but limits may be useful for some scenarios.
Folder Partitioning: Folder partitioning or densely packed folders, whatever it may be called is imperative for Document Libraries to be properly loaded with millions of documents. KnowledgeLake software will accomplish this with or without the Content Organizer, however SharePoint method works well by packing the folders as tight as possible. This setting is only applicable on content routed from the Drop Off Library.
Duplicate Submissions: This may not sound like a huge feature at first, but when you consider many applications that create documents tend to name the document the same thing and therefore this feature can eliminate accidental overriding. This setting is only applicable on document routed from the Drop Off Library. This setting is only applicable on content routed from the Drop Off Library.
Rules
Once the settings are saved the rules can be built. Select Content Organizer Rules then Add new item on the following page.
Rule Status and Priority: This is very important and helps to setup a flow of the how the organizer will work. Since it is possible for a document to meet multiple rules, prioritizing them will build a flow. Rules can also be changed to inactive in order to reuse them at a later time without deleting them.
Submission's Content Type: This setting determines the possible columns to be used for organization. What's really great here is the ability to put an "*" into the alternate name and allowing the rule to act on any content type.
Conditions: Self explanatory
Target Location: The great part about this setting is not so much the obvious target location, but the ability to build folders based on column properties. For example say Invoices were being scanned and saved, there could be a unique folder created for each different Vendor. What I personally do not like about the possible locations is that other sites must also have a Content Organizer defined. Seems like it would be really helpful to put a Content Organizer on a root site that could feed all libraries in sub sites without a turning the organizer on.
NOTICE: With the RTM release of MSS I was not able to turn on the ability to automatically create a folder. Nothing I tried would allow the checkbox to enable. This worked in both Beta and the RC. If anyone knows how to fix this, please let me know.
KnowledgeLake and the Content Organizer
KnowledgeLake capture software has been designed to be compatible with the Content Organizer. Take care when using third party capture products as they likely will not honor the Drop Off Library when its usage is forced by administrators. KnowledgeLake software designed for SharePoint 2010 will honor the Drop Off Library by forcing content into the Drop Off Library as configured, however when not forced still allow usage of uploading directly to Document Libraries.
|
This is a continuation of my ECM Features That Rock in SharePoint 2010 series I've been working on for the last month or so. If you'd like to read the previous posts you can find those here:
ECM Features that Rock in SharePoint 2010: Enterprise Managed Metadata Part 1
ECM features that Rock in SharePoint 2010: Enterprise Managed Metadata Part 2
ECM Features That Rock in SharePoint 2010: Business Connectivity Services Part 1
ECM Features That Rock in SharePoint 2010: Business Connectivity Services Part 2
ECM Features That Rock in SharePoint 2010: List Validations
ECM Features That Rock in SharePoint 2010: Document Sets
ECM Features that Rock in SharePoint 2010: Document ID Service
As I have been talking about in this series, SharePoint was a great ECM platform in 2007 and it is even better today with 2010. The product has been released to manufacturing and implementations are going to start popping into your local data centers pretty consistently for the rest of the year. There were some missing components in the 2007 platform and it was difficult to add enough customization to resolve every problem. One of these was auditing. The editing of a document was just about all that could be tracked (outside of workflow) and there was no convenient way to extend the system either. For SharePoint 2010 that's all changed.
There are two types of events the new audit trail tracks, Document/Item Events and List/Library/Site Events. This post is only going to focus on the Document/Item Events.
To begin, auditing must be turned on and all Audit Settings are configured by opening Site Settings:
And selecting the link to Site collection audit settings under Site Collection Administrator
In the Documents and Items section the several different options are available to turn on/off the auditing of:
- Opening/Downloading/Viewing List Item/Viewing Item Properties
- Editing items
- Checking items Out/In
- Moving or copying items (to another location in the site)
- Deleting or restoring items
Turning on and off these setting will allow administrators to audit almost anything that can be done to a document. They are also implemented at the API level so third party applications will automatically get logged. An example of this is the KnowledgeLake Document Viewer. When the document is opened in the viewer an event will get logged and events will also get logged if the document is checked out/in or the properties are edited.
Reporting
Microsoft SharePoint Server 2010 has the ability to run out of the box or custom reports against the audit logs. These reports are created as Excel documents and stored in a list for viewing. To access these log reports go back to Site Settings. Make sure the Reporting feature has been activated in Site Collection Features first:

If Reporting is activated there will be another option in Site Collection Administration called Audit Log Reports
Once this page has been opened there are several out of the box activity reports for content related logging as well as the ability to run custom reports. To show a quick example I have a brand new install of SharePoint and only one document has been viewed so far. I will start by selecting Content viewing:
Next the save location for the report must be specified. Select the Browse button and a window is presented asking where to save the report. The easiest choice is the Content and Structure reports list. Select it then select OK to close the window and OK again on the File Location page.
After the report is completed a window will be displayed showing a link to the view the report. You can open or download the Excel document. Looking at the report I can see that I viewed a PDF file as well as the actual report spreadsheet:
This report may be worthless for Document Imaging or Management scenarios because the amount of data could be overwhelming to view in Excel. It also contains all the pages that have been viewed, which again may not be great for document applications, but may be much appreciated in Web Content Management situations. The great news is that a custom report could be used to limit the data to specific dates and events as well as the site collection. The audit trail is also accessible through the API, which KnowledgeLake will extend in a future version of its product. Regardless it's good to know this information is now being logged and can be made available to administrators.
Thanks for reading,
- Chris Caplinger
|
It's been a busy week with both the AIIM show and RTM hitting MSDN. I decided to stop working on any more posts until I got RTM running in case anything changed from my previous build. Order is beginning to be restored though and I've started three different posts, which hopefully will all be done this week. If you'd like to read my previous posts on the ECM Features That Rock in SharePoint 2010 you can find them here:
ECM Features that Rock in SharePoint 2010: Enterprise Managed Metadata Part 1 ECM features that Rock in SharePoint 2010: Enterprise Managed Metadata Part 2 ECM Features That Rock in SharePoint 2010: Business Connectivity Services Part 1 ECM Features That Rock in SharePoint 2010: Business Connectivity Services Part 2 ECM Features That Rock in SharePoint 2010: List Validations
This should be one of the simpler feature posts as Documents Sets are very straightforward and easy to implement. With SharePoint 2010 (not SharePoint Foundation) a new Parent Content Type is available called Document Set that allows many documents to be grouped together into a single working set. Document Sets are made up of any number of Content Types which determines the types of documents that can be contained within it.
Properties of a Document Set itself are unique from the actual properties of each document in the set. Users with appropriate permissions can modify the properties of the set or of each document separately. However properties from the set have the option of being automatically pushed (synced) to each individual document within it. Since the set itself is its own document it can also be versioned and work flowed.
Turn It On
To start using Document Sets the features will need to be activated. Select Site Action | Site Settings:

Documents sets are a site collection features, so in order to activate these features select Site collection features and then activate it:
Creating Document Set Content Types
Once activated the Document Set Content Type will be available. I recommend that new content types based off Document Set are used to see the true power of document sets.
Go back to Site Settings and select Site content types:
Select the create button:
Fill in the values for the Name and Description by using Document Set as the parent content type.
Once the new content type is created the information page will be shown. There is Document Set settings link that is unique to content types inheriting from Document Set. After adding any columns or other needed configuration select it:
The first section of this page is Allowed Content Types. Use this section to add the content types that can be added to this document sets of this type. The second section is Default Content. Adding default content will force the creation of a new instance of the file to be added ever time the document set is created. To use a content type here it must first be added to the Allowed Content Types.
The next section is Shared Columns. This forces specific columns in the set to be synchronized with columns within documents in the set. If a column is not checked the documents within the set are allowed have their own values. This will only work if the content type of the document being added to the set shares the column with the document set content type itself. That's a mouth full and I apologize.
The Welcome Page settings are self explanatory. Just setting up which columns are shown when viewing the document set in SharePoint.
Using Document Sets
Once a document set content type has been created it can be added to any Document Library in the site. Once added a new document set can be created. From a Document Library, select the Documents tab.
Select New Document and then select the document set to be added to the library:
Fill in the necessary properties and select OK and a new document set will be created and the welcome page will be displayed. At this point new documents can be created or uploaded to the set from the Documents tab just like above. Any content added however will be added to the set and not the root Document Library. The Library tab next to Documents however, is referring to Document Library settings itself. To manage the set itself use the Manage tab underneath Document Set.
There are many uses for document sets and going into each one would be much too cumbersome assuming you've even read this far. Uses that quickly come to mind are employee packets, loan documents or any group of documents that typically gets routed as a whole.
One correction I do need to make for anyone seeing my previous presentations on document sets is the ability to download them. Although allowed in the beta, downloading documents sets does not seem to be possible in the RTM. At that time they downloaded as zip files and if anyone figures out how to make this work, please leave a comment letting me know how.
KnowledgeLake
At KnowledgeLake we have already built the ability to use document sets into the new Imaging for SharePoint 2010 product. When opening a document set or any document contained within a set in our Silverlight Document Viewer an option to open something we call the Document Set Explorer will be available. This will allow users to see each document in the set with the ability to open it inside our viewer.
We also plan on adding new capture features around document sets later this year. These should be available in both KnowledgeLake Capture and KnowledgeLake Connect and will have features such as capturing directly into document sets.
Thank for reading.
-Chris Caplinger
|
Compliance Details javascript:commonShowModalDialog('{SiteUrl}/_layouts/itemexpiration.aspx?ID={ItemId}&List={ListId}', 'center:1;dialogHeight:500px;dialogWidth:500px;resizable:yes;status:no;location:no;menubar:no;help:no', function GotoPageAfterClose(pageid){if(pageid == 'hold') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/hold.aspx?ID={ItemId}&List={ListId}'); return false;} if(pageid == 'audit') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/Reporting.aspx?Category=Auditing&backtype=item&ID={ItemId}&List={ListId}'); return false;} if(pageid == 'config') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/expirationconfig.aspx?ID={ItemId}&List={ListId}'); return false;}}, null); return false; 0x0 0x1 ContentType 0x01 898 Edit in Browser /_layouts/images/icxddoc.gif /sharepoint-ecm-blog/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 FileType xsn 255 Edit in Browser /_layouts/images/icxddoc.gif /sharepoint-ecm-blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document 255 Edit in Browser /_layouts/images/icxddoc.gif /sharepoint-ecm-blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.2 255 Edit in Browser /_layouts/images/icxddoc.gif /sharepoint-ecm-blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.3 255 Edit in Browser /_layouts/images/icxddoc.gif /sharepoint-ecm-blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.4 255 Publish Blog Post /sharepoint-ecm-blog/_layouts/wfstart.aspx?List={ListId}&ID={ItemId}&TemplateID=2c233183-58f6-4a38-9188-b22a1e692951&AssociationName=Publish Blog Post 0x0 0x0 List {603D8A98-AEB1-485C-9995-5E42A1ED77E4} 0 |
|
|
|
|