final-four1.jpg

The Final Four (or Five) – SharePoint Migration Tools

Will Holland is an Software Engineer at ThreeWill. Will has proven to be adept at understanding a client's needs and matching them with the appropriate solution. Recently he's developed a passion on working with .NET, MVC, and cloud-based solutions such as Microsoft Azure and Office 365.

For the past year, I have been involved in a project involving an enterprise level migration from SharePoint 2007 to SharePoint 2010. Without getting into too many gritty details, this particular client determined that the best approach to complete the migration in a manner that conformed to their practices and procedures they wanted to purchase a third party tool. Many tools were considered and many sales-folk harassed. In the end, the list of options came down to five different tools. In this post I’ll talk about the different tools, the pros and cons of each, and some of the client-specific requirements a selection had to meet.

The Yardstick – How We Measured A Tool’s Worth

As I mentioned, there were five different tools that made it to the ‘finals’:

  1. MetaVis’ Architect Suite,
  2. Quest’s Migration Suite for SharePoint,
  3. AvePoint’s DocAve SharePoint Migrator,
  4. Axceler’s Davinci,
  5. and Idera’s SharePoint Migration Suite.

My client also had several key points that they wanted to use to measure and compare the tools to each other. First, with SharePoint 2013 being added to the mix, my client has begun consideration of a cloud-based environment and, as such, they preferred that any tool they purchased also support migrating to such an environment.

Next, due to internal governance processes the preferred tool needed to be ‘agent-less’ – nothing should require an installation into production. Each production install must go through a lengthy and complicated review process before being allowed. Since our plan called for multiple test iterations the review process would need to be repeated several times, further adding to the amount of time taken to complete the migration.

The other points are a bit more transparent than the first two mentioned. Cost was, obviously, a factor as well as any impact to production up-time. The licensing scheme used by the vendor was another concern. There are a few different schemes commonly used. Some vendors use an “Unlimited” license meaning that you can migrate as much and as often as you want. Other vendors license you based on an amount of data being migrated, usually measured in GB. Of those, some don’t count “test” iterations against your license, some do. Still others license individual users.

The Competitors – A Break Down

MetaVis: Architect Suite

Website – http://www.metavistech.com/category/architect-suite

Cloud Migration Support: Yes
Additional Cost for Cloud: No
Agent-less Install: Yes
Up-time Impact: None
Licensing Scheme: Unlimited (Not priced per GB)

The tool from MetaVis is a very well rounded tool that offers its users the ability to migrate on a variety of levels, ranging from an entire farm to a single document. It will also migrate metadata, all Out-of-box and SharePoint Designer workflows, web parts and permissions.

Quest: Migration Suite for SharePoint

Website – http://www.quest.com/migration-suite-for-sharepoint/

Cloud Migration Support: Yes
Additional Cost for Cloud: No
Agent-less Install: Yes
Up-time Impact: None expected (Could never get an official ‘guarantee’ from them)
Licensing Scheme: Per GB migrated.

The most important thing to note about the Quest tool is that it is, virtually the same tool offered by Metavis. In fact, it is a licensed version of the Metavis tool. If you don’t mind the ‘Per GB migrated’ licensing you may be able to get this a bit cheaper than the Metavis version with no feature loss.

AvePoint: DocAve SharePoint Migrator

Website – http://www.avepoint.com/sharepoint-to-sharepoint-migration-docave/

Cloud Migration Support: Yes
Additional Cost for Cloud: No
Agent-less Install: No
Up-time Impact: None
Licensing Scheme: Per GB migrated

AvePoint is a fairly well established player in the migration market these days. There tools are reportedly solid but, for this customer, the fact that they required something being installed to production was a no-go.

Axceler: Davinci

Note : Since I completed my review of Davinci Axceler has removed Davinci and now has  “ControlPoint for SharePoint Migration.” I cannot say whether their new tool is simply a rebranded Davinci or a complete overhaul.

Website – http://www.axceler.com/products/controlpoint-sharepoint-products/sharepoint-migration/index

Cloud Migration Support: No
Additional Cost for Cloud: N/A
Agent-less Install: No
Up-time Impact: Unclear (Sales rep couldn’t directly answer and never followed-up with us).
Licensing Scheme: Mixed. Must purchase both a license for each user and a ‘Per GB’ license.

Axceler is known for their ControlPoint software but has just recently decided to jump into the Migration game and, well, it shows a bit when talking with them. Eventually, the conversation always ends up back at ControlPoint, even during what is supposed to be a demo of Davinci.

Idera: SharePoint Migration Suite

Website – http://www.idera.com/SharePoint/sharepoint-migration-suite/

Cloud Migration Support: No
Additional Cost for Cloud: N/A
Agent-less Install: Yes
Up-time Impact: None
Licensing Scheme: Single User License

Idera, like Quest, has opted to license Metavis’ software. Oddly enough, though, they don’t support cloud Migrations at this point which almost immediately disqualified them for my client.

So, Who Ended Up The Winner?

For my customer, the decision was made to go with Metavis. It was the only one of the five that meet all three of their ideals. There were a few, more minor differences between the different software but in the end they all typically supported the same functionality. Price didn’t play into my customer’s decision as much as functionality. Metavis was dead center on pricing relative to the others; Quest was the cheapest while Axceler was the most expensive (they quoted us buying Control Point and adding Davinci at no additional cost).

What works for your migration might be a bit different than what worked for my client. Also, there are other tools out there that weren’t considered (Metalogix comes to mind) that might work better for your needs. Each migration is somewhat different and every client is going to have slightly different priorities.

Editor Note – On other ThreeWill projects, we’ve had experience with many of the tools evaluated and as Will points out we believe that one tool doesn’t fit all.  Let us know if we can help you with evaluating options by contacting us.  Also, be sure to read Bo George’s SharePoint Migration Options to learn more about using built-in tools for migrations.

Do You Have A Favorite?

Let me know your experience with evaluating options for your company or clients – I’m interested to compare your experiences with mine so please leave comments below.

Here’s an unscientific poll to see if there is an obvious favorite.  Share your vote to see results.

read more
William HollandThe Final Four (or Five) – SharePoint Migration Tools
red-shoes.jpg

Great and Powerful SPGridView

Pete is a Director of Technology at ThreeWill. Pete’s primary role is driving the overall technology strategy and roadmap for ThreeWill. Pete also serves as ThreeWill’s Hiring Manager and is constantly looking for new talent to join the ThreeWill family.

On a recent project, we needed to display some data from lists which spanned multiple sites within a site collection, but the client wanted the data in the “familiar” SharePoint list format, with sorting and filtering and edit and ECB action capabilities. We explained that collecting the data can easily be done using an SPSiteDataQuery, but displaying the data with the sorting and filtering and familiar “list view” look and feel the users were familiar with, would take a little effort.

The response was, “Well, can’t you just use the list view in SharePoint?”.

Sort of…

SharePoint gives you a great deal out of the box, but it’s sort of like the wizard’s line in the The Wizard of Oz, “Pay no attention to that man behind the curtain.”  That “man” behind the curtain is really busy pulling levers and twisting knobs to make things look really simple.

The thought was that integrating the data and mimicking the look and feel of SharePoint should be easy, right?

The key was how to reuse the power of SharePoint’s out of box features to minimize the amount of coding we needed to do.

Let’s open the curtain and see how we got this accomplished.

Follow the Yellow Brick Road

Our client had a very clear idea of what data they wanted, and how they wanted to interact with that data.  Here are the loose requirements in User Story format (with some of the details cloudy from the poppies):

As a team member I want to display list data for the current site only for top-level sites
As a team member I want to display all data from a non-root site  and all child sites
As a team member I want to edit the displayed fields without leaving the view of all the items
As a team member I want to be able to edit a specific list item by clicking the “Edit” menu for the item
To implement these features, we needed to  query data from multiple lists, assemble the data and enable the ECB menu style interaction with the returned data. Here’s the high level steps required to accomplish the previous features.

Using ObjectDataSource and SPSiteDataQuery to query list data
Creating a Custom People Editor Bound Field
Binding SPGridView to the ObjectDataSource
Providing an ECB Menu using MenuTemplate and SPMenuField
Dealing with the Flying Monkeys
Using ObjectDataSource and SPSiteDataQuery To Query List Data

Many articles and blog posts hint at using the SPDataSource as the datasource to bind to the SPGridView instance.  However, for our purposes, SPDataSource had some shortcomings.  Specifically, the search modes of SPDataSource were insufficient for our scenario.   Using the ObjectDataSource gave us the most flexibility, enabling configuration of Select and Update (we did not implement Insert and Delete) commands to execute on our data, as well as the integration we wanted to keep all of the SharePoint goodness.

One challenge of using  the ObjectDataSource combined with SPSiteDataQuery was providing an SPContext in order to query the correct site and web.  The ObjectDataSource enables this by providing the OnDataSourceCreating event, and wiring this up enables us to provide the SPContext information to an overloaded constructor of our ObjectDataSource.  The following are snippets of the code that initializes the instance of our CustomDataSource and then the handler that lets us use the SPSite and SPWeb we need for querying data.

private void InitDataSource()
{
string assemblyName = typeof(CustomDataSource).AssemblyQualifiedName.ToString();
_dataSource = new ObjectDataSource();
_dataSource.TypeName = assemblyName;
_dataSource.ID = "CustomDataSource";
_dataSource.SelectMethod = "GetDataTable";
_dataSource.UpdateMethod = "UpdateDataTable";
_dataSource.SortParameterName = "sortExpression";
_dataSource.FilterExpression = _filterExpression;
_dataSource.ObjectCreating +=
new ObjectDataSourceObjectEventHandler(OnDataSourceCreating);
_dataSource.Filtering +=
new ObjectDataSourceFilteringEventHandler(OnDataSourceFiltering);
Controls.Add(_dataSource);
}

And here is the handler definition.

private void OnDataSourceCreating(object sender, ObjectDataSourceEventArgs e)
{
SPSite site = SPContext.Current.Site;
SPWeb web = SPContext.Current.Web;
e.ObjectInstance = new CustomDataSource(site, web);
}

Within the GetDataTable method of our CustomDataSource, we dynamically build a CAML query for all Lists of a specific type (by list ID) and use an instance of the SPSiteDataQuery class and SPContext.Site instance to get the DataTable back from our CAML Query.

InitCaml();  //dynamically builds the CAML for our query
_siteDataQuery = new SPSiteDataQuery();
_siteDataQuery.ViewFields = _viewFieldsClauseXml;
_siteDataQuery.Lists = _listsClauseXml;
_siteDataQuery.Webs = _websClauseXml;
_siteDataQuery.Query = _queryClauseXml;</code>

DataTable table = _site.RootWeb.GetSiteData(_siteDataQuery);

We then iterate over the rows in the table and add or modify columns and data to get specific information.  One specific piece of data required was the SPUser that an item was Assigned To (the lists were based on the Task List).   Getting the AssignedTo translated value into the table led into another key feature – binding the row to a list item and enabling the use of the custom PeoplePickerBoundField to bind and update the AssignedTo field.

To enable the Update of a given list item as a postback, the UpdateDataTable method of our CustomDataSource used the SPSite, SPWeb, ListID and ListItemID from our query contained in the DataTable to access the list and update the list item for any SPWeb within the site collection.

Creating a Custom PeopleEditor Bound Field

Since one of the columns we wanted to display for the user to edit was an AssignedTo field, we wanted to enable the field to be bound to a PeopleEditor part.  Well, it turns out that there is no out of the box implementation of a BoundField that will let you bind to an SPUser (at least we couldn’t find one…please comment on this post if there is).  Here’s one of those places to help the wizard and create a custom BoundField implementation.  The following is the most important bit of code in creating the PeopleEditorBoundField:

protected virtual void OnBindingField(object sender, EventArgs e)
{
Control control = (Control)sender;
//if we are in view mode
if (control is TableCell)
{
((TableCell)control).Text = GetValueForView(control.NamingContainer);
}
else if (control is PeopleEditor)
{
PeopleEditor peopleEditor = (PeopleEditor)control;
peopleEditor.Visible = true;
peopleEditor.AllowEmpty = true;
peopleEditor.MultiSelect = false;
peopleEditor.Width = Unit.Pixel(200);
peopleEditor.SelectionSet = "User";
ArrayList entityArrayList = new ArrayList();
PickerEntity entity = new PickerEntity();
entity.Key = GetValueForEdit(control.NamingContainer);
entity = peopleEditor.ValidateEntity(entity);
entityArrayList.Add(entity);
peopleEditor.UpdateEntities(entityArrayList);
}
}

For details on creating a custom BoundField, see the Notes and Links below.

Binding SPGridView to the ObjectDataSource

Now that we have the data in a DataTable by using our CustomDataSource, and our custom PeopleEditorBoundField that we bind user information to, we need to display the data. The SPGridView inherits from GridView, and so gives you all of the crunchy goodness of the GridView with the standard rendering of  the SharePoint styled grid in the browser.  We just configured the SPGridView and enabled the options needed, like the data source, sorting and filtering and our columns to display.  Below are some of the more interesting bits of initializing the SPGridView instance in our case.

//we're going to identify the columns we want
<span style="font-family: monospace;">_spGridView.AutoGenerateColumns = false; </span>

//we'll wire our own in the InitBoundColumns
_spGridView.AutoGenerateEditButton = false; 

//we'll use this later to mimic the ECB menu
_spGridView.DataKeyNames = new string[] { "WebId", "ID" }; 

...

//enable sorting
_spGridView.AllowSorting = true; 

//enable filtering, we also set the&nbsp;FilterDataFields property
_spGridView.AllowFiltering = true;

...

//set the event handlers for the sorting and binding
_spGridView.Sorting += new GridViewSortEventHandler(OnGridViewSorting);
_spGridView.RowDataBound += new GridViewRowEventHandler(OnGridViewRowDataBound);

One interesting aspect of using the SPGridView with the ObjectDataSource is that you must specify the DataSourceID when using the ObjectDataSource.  This is required since the underlying calls find the DataSourceControl by the parent NamingContainer and the DataSourceID properties.

//must set DataSourceID in order to use the ObjectDataSource binding
_spGridView.DataSourceID = "CustomDataSourceID";

Providing an ECB Menu Using MenuTemplate and SPMenuField

Finally, we needed the ability for the user to view or edit a list item directly by the use of ECB menu style actions.  To do this, while building the columns for our grid view, we simply use the MenuTemplate and SPMenuField classes to build a menu that has links and custom actions for our list items (code modified to cleanse some specifics).

//construct and add the Title MenuTemplate
MenuTemplate itemMenuTemplate = new MenuTemplate();
itemMenuTemplate.ID = "ItmeTemplateID";

//construct and add the Item Title MenuField
SPMenuField itemMenuField = new SPMenuField();
itemMenuField.HeaderText = _displayColumnName;
itemMenuField.TextFields = _internalColumnName;
itemMenuField.MenuTemplateId = "ItmeTemplateID";
itemMenuField.ToolTipFields = ...; &nbsp;//string[] of fields for tool tips
itemMenuField.ToolTipFormat = ...; &nbsp;//format stringfor tool tips
itemMenuField.NavigateUrlFields = ...;
itemMenuField.NavigateUrlFormat = ...;//dynamically built url with token replacement
itemMenuField.TokenNameAndValueFields = "WEB=WebId,ID=ID";
itemMenuField.SortExpression = "Title";

//construct and add the Items Title MenuItem
MenuItemTemplate editItemMenuTemplate = new MenuItemTemplate...;
//dynamically built url with token replacement
editItemMenuTemplate.ClientOnClickNavigateUrl = ...;
itemMenuTemplate.Controls.Add(editItemMenuTemplate);
this.Controls.Add(itemMenuTemplate);
_scopingGridView.Columns.Add(itemMenuField);

//Custom bound PeopleEditor field
PeopleEditorBoundField assignedToColumn = new PeopleEditorBoundField();
assignedToColumn.ShowHeader = true;
assignedToColumn.HeaderText = _displayPersonColumnName;
assignedToColumn.DataField = _internalPersonColumnName;
assignedToColumn.SortExpression = _internalPersonColumnName;
_spGridView.Columns.Add(assignedToColumn);

This gives us a link to the list item like the standard SharePoint List with the Title column as a link, a menu with a link to the EditForm.aspx page for the specific list item, and our custom PeopleEditor bound field.

Dealing With the Flying Monkeys

One of the special requirements was to enable a RootWeb to retrieve all of the data for all webs recursively, but to initially filter the data to the RootWeb list items. So far everything was going smoothly, a webpart, a custom ObjectDataSource and a custom BoundField, easy-peasy.

Well, you knew the flying monkeys had to show up at some point to make slow us down, right?

The most difficult issue in this process was attempting to get the SPGridView to be filtered automatically on page load. Turns out that there are properties that the SPGridView uses to determine and pass the FilterExpression to the ObjectDataSourceView.CreateFilteredDataView() instance in order to filter the data to render to the user.

Well, you might think this should be exposed as a property or method, but the SetFilterField and SetFilterValue properties are private.  This time the “curtain” was lifted by .NET Reflector.   Turns out, the private methods in SPGriedView set the ViewState entries for the FilterFieldName and FilterFieldValue keys respectively.   Using this knowledge, getting the filtering to be applied immediately on page load was a matter of ensuring that the “filterFieldName” and “filterFieldValue” attributes were applied before the grid was rendered by the following:

if (Page.IsPostBack &amp;&amp; !string.IsNullOrEmpty(_filterExpression))
{
_spGridView.Attributes["filterFieldName"] = _filterExpression.Split('=')[0].Trim();
_spGridView.Attributes["filterFieldValue"] = _filterExpression.Split('=')[1].Trim();
}

Putting It All Together

Once the pieces were all in place, wiring this all together was amazingly simple. To recap, we created a custom web part wrapping the SPGridView, created a custom ObjectDataSource and used the SPSiteDataQuery to query across webs and lists, and bound the SPGridView to the ObjectDataSource.  Finally we configured our SPGridView to use a standard and custom BoundFields to display, edit and persist  list item changes.  Here is the web parts CreateChildControls method:

protected override void CreateChildControls()
{
InitGridView(); &nbsp;//set up the grid view for filtering and sorting and events
InitBoundColumns(); &nbsp;//initialize the bound columns
InitDataSource(); &nbsp;//initialize the custom ObjectDataSource
//must set DataSourceID in order to use the ObjectDataSource binding
_spGridView.DataSourceID = "CustomDataSourceID";
Controls.Add(_spGridView);
}
//It is best to databind in the Render method since this
//is after all other sorting and filtering flags have been set
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
base.Render(writer);
_spGridView.DataBind();
}

This gave our users the familiar look and feel of the lists in SharePoint, let the users sort and filter the list, and even bound that data in the rows to enable in-place updates of list items that spanned multiple sites (webs) and lists.

Notes and Links

While determining how to solve this issue, we used the following links and resources.  Thanks to all of these authors for pointing us in the right direction and easing the time to implement.  Hopefully someone can use this post’s information the same way.

http://blogs.msdn.com/b/sharepointdesigner/2007/04/24/spdatasource-and-rollups-with-the-data-view.aspx
http://msdn.microsoft.com/en-us/library/dx70zk47(v=VS.100).aspx
http://msdn.microsoft.com/en-us/magazine/cc163673.aspx

read more
Pete SkellyGreat and Powerful SPGridView
apples-oranges1.jpg

MOSS vs WSS

Kirk Liemohn is a Principal Software Engineer at ThreeWill. He has over 20 years of software development experience with most of that time spent in software consulting.

There are plenty of articles on the differences between MOSS 2007 and WSS v3, but I still get questions on this so here is a summary of what I have provided for clients in the past. Most of this is simply a compilation of data from different sources (referenced at the end of this post). This was originally compiled about a year ago, so there may be some tweaks necessary, but it should be a good start. It shows the features that MOSS provides above and beyond what is in WSS.

Sometimes I have taken the table below and added a column or two that is particular to my client’s needs. Then I discuss whether each feature is important to them and why.

Unfortunately, this does not differentiate between MOSS Standard and MOSS Enterprise.

FeatureDescription
Social NetworkingMOSS provides social networking features, including social networking Web Parts and profile linking. MOSS allows you to establish peer links between colleagues and identify hierarchical relationships. These relationships can be published on My Site pages and traversed wherever your personal profile appears on a site/web part.
My SiteMOSS provides the ability for individual users of a portal to create their own “My Site”. My Site is essentially a home page / landing page designed to provide you with a starting point through which to access content that you own and content that might be relevant to you. This is also the place where your personal profile is published. You can also create shared and private image and document libraries, as well as your own pages and publication areas. You can also create your own personal blog on your My Site. Some people think of a My Site as a “professional version of a MySpace site”. I’ll leave it up to you as to whether you agree with that comparison or not.
Site DirectoryMOSS provides a new site template called “Site Directory”. When you create your first portal via MOSS, it comes with a Site Directory. This site template is designed specifically for tracking links to sites, displaying site maps and site navigation lists, as well as searching through the site directory. With a Site Directory in your portal, you will be asked if you want to publish a link to your new site every time you create a new site within the portal, regardless of its depth within the hierarchy. This single feature is, in my opinion, absolutely required for any kind of Intranet deployment of SharePoint. And yes, that means I think MOSS is a requirement for any real Intranet deployment of SharePoint on any kind of meaningful scale.
User ProfilesMOSS allows for Active Directory-integrated user profiles. It also provides security around profile properties. In other words, you can have information in your profile that is visible only to you, visible to your superiors, visible to your colleagues, etc. You can control what audience can see which user profile properties, and much more than that. Again, I feel that the enhanced user profile store features of MOSS make it almost a necessity, not an add-on.
Site ManagerMOSS provides for an easy drag-and-drop interface for managing navigation bars, navigation strips, portal hierarchy information, and much more. In general, managing sites, site hierarchies, and hierarchical site content is much easier (and in some cases simply made possible) with MOSS.
Portal or “Enterprise” templatesMOSS comes with new templates for a Portal Site (the default root-level site template of a portal site), Document Center, Search Center, Report Center (available only in the SharePoint 2007 Enterprise SKU, not Standard), and Site Directory.
SearchMOSS uses an enhanced relevance algorithm for its search engine, and is able to crawl content from multiple sites within an enterprise, as well as non-SharePoint web sites. In short, the MOSS search engine is a powerful enterprise search engine with a relevance algorithm, while the WSS site-local search engine is actually pretty useless beyond simple “dumb keyword” search.
Knowledge Network / People SearchMOSS provides an enhanced “people search” tool that can be used to try and mine hidden relationship data and show you people related to knowledge. For example, if my name is splattered all over dozens of websites that contain C#-related content, the idea is that MOSS will show you my name and profile in response to a search for people related to C#, and suggest me as a local expert.
Business Data Catalog / Business Data SearchI think this is quite possibly one of the most important features in MOSS. It allows you to extend SharePoint data by integrating Business Data from external sources such as Web Services or Relational Databases. This allows you to do things like display SAP data within your SharePoint portal, or add a column to a Requirements Document stored in SharePoint that points to data stored in a Requirements Management tool elsewhere in your enterprise. The possibilities for the BDC are limitless, and I really think every single SharePoint 2007 developer needs to learn this stuff in and out.
Document WorkflowI can’t stress how unbelievably powerful this feature is. You can use the stock (included “in the box”) workflows such as collecting feedback and performing a review of a document, or you can create your own workflows using a custom Workflow designer to create powerful (and really, really handy) workflows around specific types of documents like Whitepapers or magazine article submissions, chapter submissions (hint, nudge), etc.
Excel ServicesMOSS provides the ability, through its Shared Services facility, to have what amounts to an Excel server. This provides the ability to display the contents of excel spreadsheets within web parts, and to selectively allow editing of secured regions of that spreadsheet, including evaluation of formulae contained within the sheet and having the results display in real-time. There is also a UI-less version of this where you can access a stored central spreadsheet via webservices, establish a “session”, and programmatically feed data into the sheet and get formula-calculated values out of the sheet – all without interfering with other people using the same centrally located spreadsheet. The impact to businesses that do anything at all with Excel is huge.
Web Parts – Business DataBusiness Data Actions – Display a list of actions from the Business Data Catalog.
Business Data Item – Display one item from a data source in the Business Data Catalog.
Business Data Item Builder – Creates a Business Data item from parameters in the query string and provides it to other web parts. This web part is only used on Business Data profile pages.
Business Data List – Display a list of items from a data source in the Business Data Catalog.
Business Data Related List – Display a list of items related to one or more parent items from a data source in the Business Data Catalog.
Web Parts – Content RollupColleague Tracker – Displays your list of colleagues and any recent changes they made have had.
Memberships – Displays your site and distribution list memberships.
My Links – Use to display your links
My SharePoint Sites – Use to display documents authored by you on sites where you are a member and sites of your choice.
My Workspaces – Displays sites created under your My Site.
Site Aggregator – Use to display sites of your choice.
Web Parts – DashboardKey Performance Indicators – Shows a list of status indicators. Status indicators display important measures for your organization, and show how your organization is performing with respect to your goals.
KPI Details – Displays the details of a single status indicator. Status indicators display an important measure for an organization and may be obtained from other data sources including SharePoint lists, Excel workbooks, and SQL Server 2005 Analysis Services KPIs.
Web Parts – OtherExcel Web Access – Use the Excel Web Access to interact with an Excel 2007 workbook as a Web page.
I need to… – Displays tasks and tools from a list
IView Web Part – Displays iViews from SAP portal servers.
RSS Viewer – Renders RSS Feed
This Week in Pictures – Use to display the images library in the News web
WSRP Consumer Web Part – Displays portlets from web sites using WSRP 1.1.
Web Parts – FiltersAuthored List Filter – Filter the contents of web parts using a list of values entered by the page author.
Business Data Catalog Filter – Filter the contents of web parts using a list of values from the Business Data Catalog.
Current User Filter – Filter the contents of web parts by using properties of the current page.
Date Filter – Filter the contents of web parts by allowing users to enter or pick a date.
Filter Actions – Filter Actions
Page Field Filter – Filter the contents of web parts using information about the current page.
Query String (URL) Filter – Filter the contents of web parts using values passed via the query string
SharePoint List Filter – Filter the contents of web parts by using a list of values from a Office SharePoint Server list.
SQL Server 2005 Analysis Services Filter – Filter the contents of web parts using a list of values from SQL Server 2005 Analysis Services cubes.
Text Filter – Filter the contents of web parts by allowing users to enter a text value.
Web Parts – MiscContact Details – Use to display details about a contact for this page or site
Web Parts – Outlook Web AccessMy Calendar – Use to display your calendar. This part works with Microsoft Exchange Server 2003 and above.
My Contacts – Displays your contacts using Outlook Web Access for Microsoft Exchange Server 2007.
My Inbox – Displays your inbox using Outlook Web Access for Microsoft Exchange Server 2003 or later.
My Mail Folder – Displays your calendar using Outlook Web Access for Microsoft Exchange Server 2000 or later.
My Tasks – Displays your tasks using Outlook Web Access for Microsoft Exchange Server 2003 or later.
Web Parts – SearchAdvanced Search Box – Entry point for advanced search
People Search Box – Entry point for people search
People Search Core Results – Web part to display the people search results.
Search Box – Entry point for search.
Search Core Results – Web part to display the search results.
Search High Confidence Results – Web part to display the special term and high confidence results.
Search Paging – Displays search paging.
Search Statistics – Displays search statistics.
Search Summary – Displays search summary.
Audience TargetingEnables use of Web Part pages, Web Parts, and content to target distribution lists and groups in addition to SharePoint audiences.
Ent Content Mgmt – Doc Mgmt Site TemplatesManaged Document Library – The Managed Document Library site template defines large-scale document management sites.
Divisional Library – The Divisional Library site template includes managed document libraries, dashboards, key performance indicators (KPIs), and other reporting tools.
Translation Library – The Translation Library site template helps organizations manage multiple translations of a document.
Enterprise Content ManagementIntegration with Microsoft Information Rights Management (IRM) – Helps ensure that access rights applied to Microsoft Office documents in a central library travel with the documents, even when they are downloaded from the library.
Retention and Auditing Policies – Define customized information management policies to control retention period, expiration actions, and document-auditing settings.
Records Repository – Helps ensure the integrity of the files stored in the repository, and supports information management policies that consistently and uniformly enforce auditing, and expiration of records.
E-Mail Content as Records – Provides consistent, policy-based solutions for managing e-mail content across Microsoft Office Outlook 2007, Microsoft Exchange Server 2007 and Office SharePoint Server 2007.
Legal Holds – Makes it possible for records to be searched and placed on hold during litigation discovery to override the retention schedule of the records.
Content Publishing and Deployment – Built in approval workflow allows web content to be sent for approval prior to publishing. Content deployment to production sites can be scheduled by setting up jobs and a “live” time period for each page can be specified within which that page is viewable.
ECM Site Templates
– The Enterprise Portal template provides a means for a business unit to create and share content that is relevant to the ongoing operation of an enterprise, division, or business unit.
– The Corporate Internet Presence Site template includes tools and workflows to create and manage Web content for products and service descriptions, company news, and public filings, among other things.
– The Application Portal template brings together all of the tools and information related to a particular line-of-business (LOB) application.
– The Roll-up Portal template consolidates data and content from several applications or locations and presents it in an integrated format.
Site Variations – A new feature of Office SharePoint Server, sites can be linked together in a parent-child type of relationship providing a 1-way orchestration framework for web content. This feature allow organizations to deploy multi-lingual publishing sites in a much more structured and manageable environment.
Slide Libraries – The repository features in Windows SharePoint Services V3 provide the platform support for slide libraries, a feature of Office SharePoint Server 2007. Slide libraries enable the storage of individual slides in a SharePoint site. PowerPoint 2007 slide decks can be automatically created from a selection of slides in a slide library.
Policies, Auditing and Compliance – Repositories in Windows SharePoint Services V3 support the following policy, auditing, and compliance features. However, the features denoted with an asterisk are activated only upon the installation of Microsoft Office SharePoint Server 2007.
– Document retention and expiration policies
– Highly customizable policies
– Workflow process to define expiration
– Access control and security
– Information Rights Management policies applied on download to secure the functional access to documents
– Tracking and auditing
– Logging of all actions on sites, content, and workflows
– Official document-of-record repositories
– Site for storing or archiving enterprise approved content types
Browser Based FormsInfoPath Forms Services available in Microsoft Office SharePoint Server 2007 and Microsoft Office Forms Server 2007 makes it possible to design Web-capable forms in Microsoft Office InfoPath 2007 and distribute them on corporate intranets, extranets, or the Internet. Users can fill out forms in a browser or HTML enabled Mobile device with no download or client components needed.
Business IntelligenceReport Center – An out-of-the-box site optimized for report access and management, including a report library, data connection library, and a dashboard template. These sites, hosted by the new Report Center, provide consistent management of reports, spreadsheets, and data connections.
Key Performance Indicators – KPIs communicate goals and status to drive results. Using the KPI Web Part, a user can create a KPI list within a Web Part page, without writing code. The KPI Web Part can display KPIs from Microsoft SQL Server Analysis Services, Excel spreadsheets, SharePoint lists, or manually entered data.
LDAP Pluggable Authentication ProviderAn LDAP pluggable authentication provider.
Single Sign-OnPermits a person to enter one name and password to use a variety of back-end applications. SSO is used for integrating back-office systems and LOB applications that require separate credentials databases. Take advantage of single sign on to authenticate users and leverage this to pre-populate InfoPath forms.

Sources / References:

  • Microsoft Office SharePoint Server 2007 products comparison download- Very detailed, but you have to be careful with this one. Microsoft leaves out the fact that WSS v3 has some of the capabilities. Which SharePoint technology is right for you? – this appears to be a prettier version of the above Excel document.
  • Andre Connell’s Blog – What’s a MOSS 2007 vs. WSS v3 Feature? – Lists the additional “features” in MOSS. This was not used in compiling the list above, but most of the details should be mentioned in there.
read more
Kirk LiemohnMOSS vs WSS
build1.jpg

WSS in a Build Process

Pete is a Director of Technology at ThreeWill. Pete’s primary role is driving the overall technology strategy and roadmap for ThreeWill. Pete also serves as ThreeWill’s Hiring Manager and is constantly looking for new talent to join the ThreeWill family.

The problem: You are developing a web service you want Windows SharePoint Services 3.0 to host, but you have not completely finished the design of the web service.

Recently, I needed to create a web service hosted by WSS 3.0. The manual steps required to register the web service in the WSS 3.0 root folders ISAPI directory can be tedious and time consuming if your web service interface design is not complete when you begin coding (not to imply you should be coding without doing any design work!). I initially followed the steps described in the MSDN Walkthrough: Creating a Custom Web Service article (you should do this too if you want to follow along in code!). Once I had created the web service, I quickly realized that, since my web service definition was subject to change, copying files to the layouts folder, running disco.exe, manually editing the resulting files and then copying the edited files to the ISAPI directory was not going to increase my happiness!

The solution: Use the Visual Studio project formats, MSBuild and some custom MSBuild tasks to make your life easier.

After recently finding and thoroughly enjoying the value add of the STSDEV Tools (thank you Ted Pattison!), I decided to leverage the pattern of modifying the build process. I dove into how the STSDEV Tools work and patterned a possible solution to my problem of registering WSS web services during my development builds. The solution described here takes advantage of this pattern and lets Ctrl+Shift+B build and register the web service for you during development.

Let’s walk through the basic steps of the solution:

1. Create a new webservice.targets file. First, you need a targets file that can do all of this work for you. Initially, I started with a Project file and set up some properties I knew I would need.

...

"C:\Windows\System32\makecab.exe"

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\disco.exe"

"$(ProgramFiles)\Common Files\Microsoft Shared\web server
 extensions\12\bin\stsadm.exe"

"C:\Windows\System32\makecab.exe"

$(ProgramFiles)\Microsoft SDKs\Windows\v6.0A\Bin\gacutil.exe
...
REPLACE_WITH_YOUR_SERVICE_NAME

Remember to replace the WSFileNameRoot property with the value for your service if you try this solution out.

2. Next, we need to import a task that will help us do some text manipulation once we have created the disco and wsdl files. See the Note below for how to obtain this task.

3. Now we need a Target that will enable us to register the web service by deploying the assembly to the GAC.

<\!-\- Register in the GAC, copy to layouts and run DISCO.exe to get the WSDL
 and DISCO files-\->
...

4. Now, we need to copy the asmx file to a location that is http accessible, and call disco.exe to create DISCO and WSDL files, and change the file extensions.

...

<\!-\- Rename the \*.disco and \*.wsdl files to match the service asmx file with
 \*disco.aspx and
 \*wsdl.asmx suffixes-\->

5. Next, we use the custom Tasks from the SDC Tasks to replace the service binding locations in the disco and wsdl files to be SharePoint aware. For full details, get dirty and check out any of the services found in the ISAPI directory in the 12 Hive.

<\!-\- Use Sdc Tasks File.RegEx or File.Replace to udpdate the disco and
 wsdl files-\->

6. To make sure the service changes are caught and can be updated by a “Reload” of any web service references, we call IISRESET to reset the service and ensure our changes are updated.

7. To make sure we are removing the old registered files before we start any of the registration we create an “Unregister” dependency target.

<\!-\- simple remove of the files that are copied to ISAPI direcotry and removal
 from GAC -->
...

...

8. Now, to tie this into your Visual Studio project, simply right click your web service class library project in Solution Explorer, and select “Unload Project”. Then right click the project again and open in an XML Editor.

9. Add an Imports statement to import our targets file into your project. You can add this line under the Imports statement for the CSharp.targets towards the bottom of the file.

10. Add a call to your Register target by adding the following to the AfterBuild target of your project like so.

That’s it! Now right click on your project in Solution explorer, select “Reload Project” and hit Ctrl+Shift+B to build. Check the 12 Hive’s ISAPI directory for a subdirectory with the same name as your project and your as*x files should be in there. You can now create web references to this web service just like you would any other WSS 3.0 hosted web service.

Finally, there are two lessons learned in this whole process:

  • always remember to unload and reload the project that contains the webservices.targets file since changes made to this file will not take effect until the project is reloaded in Visual Studio.
  • to help in debugging, turn up build output verbosity by clicking Tools::Options::Projects and Solutions and increasing the “MSBuild project build output verbosity:” to “Diagnostic” to enable detailed information in the Output window

Hopefully this can help someone else save a little time when developing a WSS 3.0 hosted Web Service. Let me know if you have some suggestions or improvements, or even a better way altogether. I’d be interested in learning an alternative approach.

NOTE: This solution assumes 1) that the development environment is a Windows Server 2003 instance with WSS 3.0 installed, and 2) uses the Sdc custom MSBuild tasks located athttp://www.codeplex.com/sdctasks in order to manipulate file content. You will need to download and install these tasks in order to use this solution in your project.

read more
Pete SkellyWSS in a Build Process
searching-fun.jpg

SharePoint Wildcard Searching

Tim is a Senior Consultant at ThreeWill. He has 15 years of consulting experience designing and developing browser-based solutions using Microsoft technologies. Experience over the last 8 years has focused on the design and implementation of SharePoint Intranets, Extranets and Public Sites.

The Ontolica download and install is a straight-forward process. It can be downloaded for free from the Ontolica site. Once installed, the Ontolica Wildcard search will automatically take the place of the search defined in the default master page of most of the SharePoint Site templates such as the Team Site. However, some of the Publishing master pages such as BlueBand.master will need to be modified for the Ontolica Wildcard search to work.

The reason the Wildcard search will “override” the default search in some sites and not others is due to the fact that the master page defined for Team Sites uses a delegate control and the masterpage for some of the publishing sites use a WebControl. Delegate controls are designed with the intent that they can be easily overridden. Delegate Controls are overridden in SharePoint by installing a control with the same id and a lower sequence number. The Ontolica Wildcard feature installs the Ontolica Wildcard search with a sequence number of 1 which overrides the default control that has a sequence number of 100.

Here’s a copy of the xml:

To get this to work in master pages such as the BlueBand.master, you will need to replace the Web Control reference in the PlaceHolderSearchArea content place holder with the Delegate control as demonstrated below:

Once this change is saved in BlueBand.master, the Ontolica Search will be “substituted” for the default “SmallSearchInputBox” that comes out of the box with MOSS 2007.
Another issue I ran into when using the Ontolica Wildcard Search was getting the licensing properly configured so that Users didn’t receive an error message on the search results page. As part of the Ontolica Wildcard Search install, an evaluation copy of some of the richer features of Ontolica Search are included. To get rid of the annoying message, you must “toggle” the “current license” from the Free Ontolica Evaluation License to the Free Ontolica Wilcard License. This action is performed in the Central Admin site under the Operations tab. You will find an Ontolica for SharePoint section in the bottom right corner of the screen. Select the Manage Ontolica Licenses option to see the screen below:

By default, the Free Ontolica Evaluation License will be selected. You will likely want to “toggle” this to the Free Ontolica Wildcard License unless you choose to purchase the richer-featured Ontolica Search capabilities. To toggle the licensing to the Free Ontolica Wildcard License, select the Free Ontolica Wildcard License drop-down and choose the “set as active license” option as demonstrated below

The resulting License Manager screen should have a check-mark beside the Free Ontolica Wildcard License and no check-mark beside the Free Ontolica Evaluation License as demonstrated below:

read more
Tim CoalsonSharePoint Wildcard Searching
review1-e1425575685609.jpg

MOSS BDC Design Studio

Eric Bowden has over 19 years of software development experience around enterprise and departmental business productivity applications.

Let me define basic first: I need to allow my SharePoint users to search Products within the AdventureWorks database using SharePoint search. Further, I want to allow users to search and view Products in the Business Data List web part.

As database administrator, I want to control access to the data. Therefore, I’ll expose the data from the Line of Business (LOB) application via stored procedures. This has some other advantages such as enabling me to tune SQL statements used to support the BDC outside of SharePoint, and it allows BDC configuration to be performed by resources that may not have expertise with SQL or the particulars of the LOB entity.

I created three stored procedures to achieve my goals (script is listed at the end of this post):

  • usp_Select_Products – to perform a search across all products filtering by Name and Product Number.
  • usp_Select_Product – to select out a specific Product by Product ID
  • usp_Select_ProductIds – to select out all product ids and the last modified date from the Product table.

These match up with the BDC method types Finder, Specific Finder, and ID Enumerator respectively. Now that the SQL tasks are out of way, let’s crack open the MOSS BDC Design Studio.

First, choose Connect Data Source to define how to reach the database.

Define the user and password. I am using the bdcuser account to which I have only granted exec rights to the three stored procedures listed above. One quirk, the error message “invalid connection string” may mean the password was entered incorrectly.

This leads me to the design view of the editor where I can drag any one of the stored procedures onto the Design surface.

The Entity Wizard appears and guides us first to name the entity. Let’s name it Product.

The Entity Wizard requires that we define the stored procedures for use as Finder, Specific Finder, and IdEnumerator for this entity.

Next, identify the column used to uniquely identify our entity.

Last step in the wizard; define the column which will be used to select a specific entity when presented in the Business Data List web part.

The newly defined Product entity now appears in the Design space.

Choose Edit Properties and define the Product ID as the primary key of the entity and the Name as the Title Column. Yes, the Entity Wizard did ask for this already.

Choose the Methods tab, select the Get_Product method, and define the input parameter as uniquely identifying the Product entity.

Set the default values for the input parameters of the Finder method to % (the SQL wildcard character).

Next, we must define how MOSS will connect to the LOB application. From the top menu, choose Edit-Properties.

Choose Build-Build BDC Xml to generate the Xml configuration file.

One optional step, we can inform the BDC as to which column may be used to determine the last time an entity was modified. This field enables the incremental crawl feature to skip entity records which have not been modified since the last crawl.

Choose File-Save BDC Xml to save the XML to file. Navigate to the Shared Services Administration page and choose Import application definition.

Once the import completes successfully, you can add a Business Data List web part to your web page and search for products by Name or Product Number.

The final step is to add the new LOB as a content source for use in SharePoint search. From Shared Services Administration, choose Configure Search Settings, Content Sources and Crawl Schedules, and add a new Content Source being sure to choose Business Data as the Content Source Type. Last, be sure to check Start full crawl of this content source before clicking ok.

And just for completeness, here is the script for the stored procedures. You have to create a bdcuser account and add that user to the AdventureWorks database before running this script.

go
create procedure dbo.usp_Select_Products (@Name nvarchar (50),
    @ProductNumber nvarchar(25))
as
begin
select
ProductID,
Name,
ProductNumber,
MakeFlag,
FinishedGoodsFlag,
Color,
SafetyStockLevel,
SafetyStockLevel as SafetyStockLevel1,
StandardCost,
ListPrice,
Size,
SizeUnitMeasureCode
from
Production.Product
where
Name like @Name and ProductNumber like @ProductNumber
end
go
create procedure dbo.usp_Select_Product (@ProductID int)
as
begin
select
ProductID,
Name,
ProductNumber,
MakeFlag,
FinishedGoodsFlag,
Color,
SafetyStockLevel,
SafetyStockLevel as SafetyStockLevel1,
StandardCost,
ListPrice,
Size,
SizeUnitMeasureCode
from
Production.Product
where
ProductID = @ProductID
end
go
create procedure dbo.usp_Select_ProductIDs as
begin
select
ProductID,
ModifiedDate
from
Production.Product
end
go
grant exec on dbo.usp_Select_ProductIDs to BDCUser
grant exec on dbo.usp_Select_Product to BDCUser
grant exec on dbo.usp_Select_Products to BDCUser
read more
Eric BowdenMOSS BDC Design Studio
hand-search.jpg

Enable Advanced Search in SharePoint 2007

Kirk Liemohn is a Principal Software Engineer at ThreeWill. He has over 20 years of software development experience with most of that time spent in software consulting.

One of the problems that we ran into having created the default publishing site, is that you do not get the option for advanced search. For example, we were unable to search for just people. The one for the publishing portal does not have the advanced search option.

Here are the steps we took to correct this.

  1. Login to the main web site and login as the site collection administrator. (SPAdmin)
  2. Click Site Actions -> Site Settings -> Modify All Site Settings.
  3. Under Site Collection Administration Select Site Collection Features
  4. Active all Features that are not active. Of course you don’t have to do all but dang gum it’s just easier.
  5. When you create a publishing portal by default you can only create publishing sites. You have to enable the other site templates.
  6. From root site , click Site Actions -> Site Settings -> Modify All Site Settings
  7. Under Look and Feel select Page layouts and site templates
  8. Select “Subsites can use any site template” and “Pages in this site can use any layout”
  9. You of course can change this if you need to; the only template you will need is the search template.
  10. Return to Root site
  11. Click on Site Actions -> Create site
  12. For Title and description enter Search Center, for url enter SearchCenter as one word
  13. For Template Selections click the enterprise tab and select Search Center with Tabs
  14. Leave the rest to the default and click Create
  15. Click Site Actions -> Site Settings -> Modify All Site Settings
  16. Under Site Collection Administration click Search Settings
  17. Put the radio button in “Use custom scopes. Display richer results using the following Search Center:”. In the space below enter “/SearchCenter/Pages” without the quotes
  18. Click OK
  19. On the Site Settings page Select Master Page
  20. Change the Master Page to default.master, Put a check mark in Reset all subsites
  21. Leave the rest default and click OK
read more
Kirk LiemohnEnable Advanced Search in SharePoint 2007
yes.jpg

MOSS Enterprise Search Presentation

Kirk Liemohn is a Principal Software Engineer at ThreeWill. He has over 20 years of software development experience with most of that time spent in software consulting.

The slide deck can be found here.

The presentation gives an overview of MOSS Search and discusses the search architecture as well. The first demo shows many of the ways search can be configured through the Shared Service Provider search settings as well as through the Site Collection search settings. The second demo shows a custom security trimmer in action against a web site content source.

During the presentation I mention how you can crawl against a web site that uses forms-based authentication. This requires a hotfix.

For more information see: http://support.microsoft.com/kb/934577/en-us
To download the hotfix see: http://www.microsoft.com/downloads/details.aspx?FamilyId=B3C932A5-B3C0-4473-8EA5-62AE44190878&displaylang=en
Much of these slides were taken from an earlier presentation I gave along with others at the Next Level event we held at Microsoft in early November.


SharePoint is a web application platform in the Microsoft Office server suite. Launched in 2001, SharePoint combines various functions which are traditionally separate applications: intranet, extranet, content management, document management, personal cloud, enterprise social networking, enterprise search, business intelligence, workflow management, web content management, and an enterprise application store. SharePoint servers have traditionally been deployed for internal use in mid-size businesses and large departments alongside Microsoft Exchange, Skype for Business, and Office Web Apps; but Microsoft’s ‘Office 365’ software as a service offering (which includes a version of SharePoint) has led to increased usage of SharePoint in smaller organizations.

While Office 365 provides SharePoint as a service, installing SharePoint on premises typically requires multiple virtual machines, at least two separate physical servers, and is a somewhat significant installation and configuration effort. The software is based on an n-tier service oriented architecture. Enterprise application software (for example, email servers, ERP, BI and CRM products) often either requires or integrates with elements of SharePoint. As an application platform, SharePoint provides central management, governance, and security controls. The SharePoint platform manages Internet Information Services (IIS) via form-based management tooling.

Since the release of SharePoint 2013, Microsoft’s primary channel for distribution of SharePoint has been Office 365, where the product is continuously being upgraded. New versions are released every few years, and represent a supported snapshot of the cloud software. Microsoft currently has three tiers of pricing for SharePoint 2013, including a free version (whose future is currently uncertain). SharePoint 2013 is also resold through a cloud model by many third-party vendors. The next on-premises release is SharePoint 2016, expected to have increased hybrid cloud integration.

Office 365 is the brand name used by Microsoft for a group of software plus services subscriptions that provides productivity software and related services to its subscribers. For consumers, the service allows the use of Microsoft Office apps on Windows and OS X, provides storage space on Microsoft’s cloud storage service OneDrive, and grants 60 Skype minutes per month. For business and enterprise users, Office 365 offers plans including e-mail and social networking services through hosted versions of Exchange Server, Skype for Business Server, SharePoint and Office Online, integration with Yammer, as well as access to the Office software.

After a beta test that began in October 2010, Office 365 was launched on June 28, 2011, as a successor to Microsoft Business Productivity Online Suite (MSBPOS), originally aimed at corporate users. With the release of Microsoft Office 2013, Office 365 was expanded to include new plans aimed at different types of businesses, along with new plans aimed at general consumers wanting to use the Office desktop software on a subscription basis—with an emphasis on the rolling release model.

read more
Kirk LiemohnMOSS Enterprise Search Presentation
boy-search.jpg

MOSS Search Relevancy

Kirk Liemohn is a Principal Software Engineer at ThreeWill. He has over 20 years of software development experience with most of that time spent in software consulting.

Microsoft Office SharePoint Server (MOSS) provides a lot of ways to configure search, but understanding search relevance and how to affect it is not intuitive. There are several factors that affect relevance. In addition, you can configure MOSS to change the relevance.

In my research, it appears there are three ways you can affect relevance through configuration / programming (if anyone knows of more, please let me know):

  • Authoritative Pages / Demoted Sites – done via the Shared Services Provider search administrative screens. If a page is authoritative or has a smaller click distance or URL depth from an authoritative page, it will be more relevant.
  • Managed Properties – you can set a weight on a managed property programmatically to affect relevance – or maybe via the Search Relevancy Tool (see below).
  • Ranking Class – The RankingParameters property of the Ranking class returns a RankParamCollection object that has a bunch of weighting parameters. This can only be set programmatically – or maybe via the Search Relevancy Tool (see below).

Note that you can also create best bets to show a result that would not otherwise be shown, but I don’t consider this part of relevancy.

To read more see:

read more
Kirk LiemohnMOSS Search Relevancy
copy-e1425586355402.jpg

Web Part Page Templates

Tim is a Senior Consultant at ThreeWill. He has 15 years of consulting experience designing and developing browser-based solutions using Microsoft technologies. Experience over the last 8 years has focused on the design and implementation of SharePoint Intranets, Extranets and Public Sites.

Recently one of my peers at work came across an MSDN article that described how to expose a “custom template” in SharePoint 2003 (http://msdn2.microsoft.com/en-us/library/ms916835.aspx). I was able to follow these instructions using WSS 2007 and was able to expose my custom template in a list of available templates.  The solution involves modifying a shared page in the layouts folder (_layouts/create.aspx) as well as making a custom copy of an existing page ( _layouts/spfc.aspx).

Lastly, you need to copy your template and an image of your template to the SMARTPGS folder (C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1033\STS\DOCTEMP\SMARTPGS) and associated images folder (C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\IMAGES).


SharePoint is a web application platform in the Microsoft Office server suite. Launched in 2001, SharePoint combines various functions which are traditionally separate applications: intranet, extranet, content management, document management, personal cloud, enterprise social networking, enterprise search, business intelligence, workflow management, web content management, and an enterprise application store. SharePoint servers have traditionally been deployed for internal use in mid-size businesses and large departments alongside Microsoft Exchange, Skype for Business, and Office Web Apps; but Microsoft’s ‘Office 365’ software as a service offering (which includes a version of SharePoint) has led to increased usage of SharePoint in smaller organizations.

While Office 365 provides SharePoint as a service, installing SharePoint on premises typically requires multiple virtual machines, at least two separate physical servers, and is a somewhat significant installation and configuration effort. The software is based on an n-tier service oriented architecture. Enterprise application software (for example, email servers, ERP, BI and CRM products) often either requires or integrates with elements of SharePoint. As an application platform, SharePoint provides central management, governance, and security controls. The SharePoint platform manages Internet Information Services (IIS) via form-based management tooling.

Since the release of SharePoint 2013, Microsoft’s primary channel for distribution of SharePoint has been Office 365, where the product is continuously being upgraded. New versions are released every few years, and represent a supported snapshot of the cloud software. Microsoft currently has three tiers of pricing for SharePoint 2013, including a free version (whose future is currently uncertain). SharePoint 2013 is also resold through a cloud model by many third-party vendors. The next on-premises release is SharePoint 2016, expected to have increased hybrid cloud integration.

Office 365 is the brand name used by Microsoft for a group of software plus services subscriptions that provides productivity software and related services to its subscribers. For consumers, the service allows the use of Microsoft Office apps on Windows and OS X, provides storage space on Microsoft’s cloud storage service OneDrive, and grants 60 Skype minutes per month. For business and enterprise users, Office 365 offers plans including e-mail and social networking services through hosted versions of Exchange Server, Skype for Business Server, SharePoint and Office Online, integration with Yammer, as well as access to the Office software.

After a beta test that began in October 2010, Office 365 was launched on June 28, 2011, as a successor to Microsoft Business Productivity Online Suite (MSBPOS), originally aimed at corporate users. With the release of Microsoft Office 2013, Office 365 was expanded to include new plans aimed at different types of businesses, along with new plans aimed at general consumers wanting to use the Office desktop software on a subscription basis—with an emphasis on the rolling release model.

read more
Tim CoalsonWeb Part Page Templates
workflow-lady1.jpg

Creating SharePoint Workflows

Chris is a Senior Software Engineer at ThreeWill. His area of focus is consulting in the development of Microsoft .NET and SharePoint technologies. His primary role has been development lead in recent projects. Project roles have ranged from Development/Technical Lead to Development Resource.

Introduction

  • Part 1 (this entry) focuses on setting up the initial development environment and creating a new workflow project.
  • Part 2 will focus on workflow development items like using Visual Studio 2005 to add/configure activities, create association/initiation/task forms (ASPX pages, no InfoPath), and workflow debugging.
  • Part 3 will focus on incorporating a SharePoint workflow into a build process and using STSADM solution packages for deployment into a production (or non-development) SharePoint environment.

There are times when you need to provide specific functionality that is not available using the out-of-the-box (OOTB) workflows in SharePoint 2007. This includes workflows with custom task forms, custom formatted e-mail notifications, and dealing with other business-specific requirements.

SharePoint Designer Workflows may offer a solution for your business requirements, and is worth reviewing before immediately jumping to Visual Studio.

Since we are discussing creating SharePoint Workflows in Visual Studio 2005, let’s take a closer look to see what is involved…

First, you will need to have a development environment to work in.

I reference Virtual PC 2007 throughout this entry. You are not required to use Virtual PC 2007. If you have a physical development server available for use, by all means please use it.

Setting Up the Development Environment

Please see the link to How to Create a MOSS 2007 VPC Image: The Whole 9 Yards described below. This excellent series of blog entries describes how to set up a MOSS virtual PC in a detailed screen-by-screen format.

  1. Set up a development Windows Server 2003 server/image along with MOSS 2007 (the blog series reference above explains how to do this).
  2. Once you have a development server/image in place with MOSS installed, please install Visual Studio 2005 (Professional edition or greater).
  3. Install Visual Studio 2005 extensions for .NET 3.0 (Windows Workflow Foundation)
  4. Install the “SharePoint Server 2007 SDK: Software Development Kit and Enterprise Content Management Starter Kit”
  5. (Optional) Back up your server/image so that you can return to a clean state.

Creating a new Workflow Project in Visual Studio

  1. Launch Visual Studio 2005
  2. Click File | New | Project…
  3. Select SharePoint from the available “Project types:” (you should see something similar to the screen shot below)
  4. Change the Name to what you like and click OK.
  5. Rename Workflow1.cs to SequentialWorkflow.cs

These steps will create a new workflow project with a Sequential Workflow ready for development.

Adding a State Machine Workflow

    1. Right click on existing Workflow project and click on Add | State Machine Workflow
    2. Choose State Machine Workflow (code) from the “Add New Item” dialog (see screen shot below)
    3. Change the Name from “Workflow1.cs” to “StateMachineWorkflow.cs”

  1. You should have a Workflow project organized similar to the screen shot below.

Using a “Snippet” to Update feature.xml

    1. Open feature.xml
    2. Put the mouse cursor under “2) Select Snippets->SharePoint Workflow->Feature.xml Code –>”
    3. Follow the instructions in feature.xml and press Ctrl+K, then X
    4. Choose “SharePoint Server Workflow”, then “Feature.xml Code”

  1. Update the highlighted sections of Feature.xml.
  2. Change “GUID” to a new GUID (you can use Tools | Create GUID to generate a new GUID)
      *Please remove the “{}” from the GUID.
  3. Change “Default Title” to an appropriate feature title (this will appear in the SharePoint features list)
  4. Change “Description” to an appropriate feature description (this will also appear in the SharePoint features list)
  5. Retain “workflow.xml” entry
  6. Retain “MyForm.xsn” and “*.xsn” for now (we will be changing this in part 2)

Using a “Snippet” to Update workflow.xml

    1. Open workflow.xml
    2. Put the mouse cursor under “2) Select Snippets->SharePoint Workflow->Workflow.xml Code –>”
    3. Follow the instructions in workflow.xml and press Ctrl+K, then X
    4. Choose “SharePoint Server Workflow”, then “Feature.xml Code”

  1. Update the highlighted sections of Workflow.xml.
  2. Change “My Workflow” to an appropriate name for the workflow (ex: “Sequential Workflow” to match the class name)
  3. Change “Description” to an appropriate workflow description (this will also appear in the SharePoint features list)
  4. Change “ProjectName.Workflow” to match project name and workflow name (ex: “SharePointWorkflowLibrary1.SequentialWorkflow”)
  5. Change “GUID” to a new GUID (you can use Tools | Create GUID to generate a new GUID)
  6. Retain the “CodeBesideAssembly” setting for now. We will set this to an appropriate value in part 2.
  7. Retain the existing highlighted entries. We will set these values as we develop the association and task pages in part 2.

So far, we have set the stage to develop a standard SharePoint “sequential” workflow and a SharePoint “state machine” workflow. Part 2 will focus on workflow development items like using Visual Studio 2005 to add/configure activities, create association/initiation/task forms, and workflow debugging. We will also revise our changes to the Feature.xml and Workflow.xml files.

In the meanwhile, I would recommend becoming familiar with the OOTB workflows in SharePoint 2007. This will provide additional context as we dig deeper in Part 2.

Here is a recap of some of the links listed above.

How to Create a MOSS 2007 VPC Image: The Whole 9 Yards (by Tony Zink)

http://www.pptspaces.com/sharepointreporterblog/Lists/Posts/Post.aspx?ID=28

This link refers to 20 blog postings detailing a step-by-step (including screen shots) procedure for creating and configuration a MOSS 2007 Virtual PC. This is very useful for creating sandbox and development environments.

Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation)

http://www.microsoft.com/downloads/details.aspx?FamilyId=5D61409E-1FA3-48CF-8023-E8F38E709BA6&displaylang=en

SharePoint Server 2007 SDK: Software Development Kit and Enterprise Content Management Starter Kit

http://www.microsoft.com/downloads/details.aspx?familyid=6d94e307-67d9-41ac-b2d6-0074d6286fa9&displaylang=en

Book: “Inside Microsoft Windows SharePoint Services 3.0” by Ted Pattison and Daniel Larson (see Chapter 8 on SharePoint Workflows)

See http://www.microsoft.com/MSPress/books/9692.aspx

read more
Chris EdwardsCreating SharePoint Workflows
calendars.jpg

Aggregating SharePoint Events

Tim is a Senior Consultant at ThreeWill. He has 15 years of consulting experience designing and developing browser-based solutions using Microsoft technologies. Experience over the last 8 years has focused on the design and implementation of SharePoint Intranets, Extranets and Public Sites.

One of the requirements that we have received from our customers building Intranet Portals is the ability to aggregate data to the Home site from Calendars and Announcements that “live” on child sites such as HR and IT. Obviously, one way to accomplish this would be to create Announcements and Calendars lists on the Home site and post duplicate entries to these lists when entries are created in the Calendar and Announcement lists in HR and IT. Of course this is not a very efficient way to do things and has a greater chance of data entry errors.

Using MOSS and the Content Query Web Part, aggregating data from lists located in child sites is now possible without the need for unnecessary duplication.

To leverage this capability in MOSS, first make sure the Content Query Web Part shows up in your list of available Web Parts. If not, you likely need to turn on the Office SharePoint Server Publishing feature on the site by going to Site Actions, Site Settings, Site Features and activating the Office SharePoint Server Publishing feature as demonstrated below:

Click activate. Under normal circumstances, the screen will refresh and you will notice the blue “Active” indicator next to the feature. However, in some cases, you might see the screen below which indicates an additional step is necessary.

To install the Office SharePoint Server Publishing Infrastructure, navigate to the site collection. Select Site Actions, Site Settings, Site Collection Features to see the following screen.

Choose to Activate the Office SharePoint Server Publishing Infrastructure feature for the site collection. The screen shot below demonstrates a successful activation.

Now that the Office SharePoint Server Publishing Infrastructure is in place, you can now activate the Office SharePoint Server Publishing feature by navigating to the Site Collection, selecting Site Actions, Site Features and then activating the Office SharePoint Server Publishing feature as demonstrated below.

After selecting Activate for the Office SharePoint Server Publishing feature, you should see the screen below

Now that the Content Query Web Part is available, you can add the Content Query Web Part to a page by navigating to a site, clicking Site Actions, edit page and then selecting Add a Web Part in one of the Web Part zones as shown below.

After you click, Add a Web Part, you will see the following dialog where you can scroll down and click the Content Query Web part

Now that you have successfully added the Content Query Web Part to a Web Part page, you can quickly see content from child sites on the Home Page by updating the Query configuration in the Web Part properties page. However, by default, the number of fields you have access to and the ability to alter the display and styling of this data is severely limited without applying some customization. The good news is that George Perantatos does a great job of describing these steps in detail, so I will merely point you to the ECM blog for these details http://blogs.msdn.com/ecm/archive/2006/10/25/configuring-and-customizing-the-content-query-web-part.aspx.

In addition, Heather Solomon, SharePoint MVP, provides more detailed instructions on creating a new style which can be found at http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx.

Now that I can view Calendar and Announcement data from child sites, I want to provide the content authors more control over the data that gets displayed on the Home site as well as some control over the duration that the data is displayed. To accomplish this, I add 3 new Columns to each list; Display on Home Page (Yes/No), Display Start Date (Date and Time) and Display End Date (Date and Time). These fields allow content authors to determine if they want this content to “bubble up” to the Home site and, if so, what dates to display this data. To make use of these fields in the Content Query Web Part query, I navigate back to the Content Query Web Part and update the filter section under the Query Properties to leverage these fields as shown below.

This wraps up the basics of aggregating Calendar and Announcement data using the Content Query Web Part. I hope you find this post helps stimulate some ideas for you to add value to your organization or customer.

read more
Tim CoalsonAggregating SharePoint Events