Zachary Aden Galipeau

I am very pleased to announce the birth of my son: Zachary Aden Galipeau

Categories: Uncategorized

HiSoftware Accessibility Foundation Module

First look at the Accessibility Foundation Module from HiSoftware:

The other day I wrote a post that HiSoftware announced their Accessibility Foundation Module. Shortly after that the CEO from HiSoftware contacted me and asked if I would like a walkthrough of the module. Of course, I jumped at the opportunity.

The Accessibility Foundation Module is an add-on to HiSoftware’s Compliance Sheriff. Compliance Sheriff is a tool that checks the accessibility of a SharePoint site. Since SharePoint is a Content Management tool, many people can enter content. But, that content isn’t always accessible. Among other things, Compliance Sheriff checks the accessibility of content being add by end-users into a SharePoint site. It can do this with custom workflows and reports.

The Accessibility Foundation Module is an add-on ontop of Compliance Sheriff. This module uses the same idea of the Accessibility Toolkit from HiSoftware (custom master pages, css sheets and control adapters). The Accessibility Foundation Module does look like a final product that can be installed onto a SharePoint site. It uses a feature to install (very nice compared to the installation of the Accessibility Toolkit). It also uses the “common” master page/look and feel for SharePoint (the Accessibility Toolkit only worked with the external/extra master pages).  Also, it takes care of a lot of the common problems with SharePoint accessibility.

One of the features I really liked was the ARIA support (http://www.w3.org/WAI/intro/aria).

The pricing model seems to be a CAL/server based license. It looks like this can get pretty expensive for large implementations. Truthfully, I didn’t get a full understanding of the pricing model based on the conversation (I need to talk more to them about that). But, regardless of the price, I think accessibility is worth it (especially in government space). So, all government agencies working with SharePoint 2007 should look into this when pricing out their implementations.

I haven’t had a chance to use this tool yet (I only got the walkthrough). So, once I get my hands on it I will be able to write another review. Until then, I’m going to encourage my clients to look into this because it “seems” to be far and away the best implementation I’ve seen for accessibility and SharePoint.

For anyone who is on the SharePoint 2010 bandwagon already, I did ask them about it. HiSoftware says that SharePoint 2010 isn’t as accessible as Microsoft wants us to think. I’d like to get a few instances from them, but that was very interesting to hear. So, HiSoftware is making this for SharePoint 2010 too. After I do a full assessment of SharePoint 2010 and accessibility I will be able to see whether the HiSoftware price is justified for this version.

Categories: Accessibility, sharepoint

SharePoint 2010 Launch

It’s been announced! The SharePoint 2010 and Office 2010 launch will be May 12th 2010 and the RTM will be in April.

Categories: SharePoint 2010

HiSoftware announces Accessibility Foundation Module

March 5, 2010 1 comment

HiSoftware just announced their AFM (Accessibility Foundation Module). http://www.hisoftware.com/products/CS_AFM.html.

“The optional Accessibility Foundation Module (AFM) provides users with a set of tools to create an accessible platform/framework for a SharePoint portal or intranet site. AFM is integrated into the Compliance Sheriff offering to provide a more complete and easy-to-deploy method of addressing SharePoint framework accessibility. The most significant advantage of AFM is the enterprise-friendly installation method that allows a SharePoint Server Administrator to easily apply a master configuration to multiple SharePoint Applications.”

I was never really a fan of the “completeness” of HiSoftwares Accessibility Kit for SharePoint. The ideas were good, but the implementation seemed incomplete to me. I did use their ideas and extend that kit for accessible SharePoint projects. But, could never use it out-of-the-box and the amount of work involved was always very high. Hopefully this new Module is more of an out-of-the-box approach to accessibility (I’d rather pay vs build for this).

I don’t know too much about the details of this Kit yet, but as soon as I get my hands on it I will post my thoughts.

Categories: Accessibility, sharepoint

Approve all items button in a SharePoint View

January 14, 2010 2 comments

Situation: You’ve been tasked with building a mechanism for an approver to approve all the pending items in a SharePoint list. 

Implementation: Single “Approve All” button WebPart that only shows for approvers. This WebPart can be shown on one of the view pages of the list. 

Concepts:

  1. Place the WebPart on a View of the List
    • Go to the list
    • Click Edit Page
    • Add the WebPart in the top zone
  2. Loop through the items in the current list and set the approve flag
    • This is in the bgnApprove_click event handler below
    • This checks if the item is in pending status and approves the item
    • This will cancel approval workflows currently running on the item
 
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Workflow; 

namespace ApproveAll
{
[Guid("a73bd0c2-a842-4c37-8021-447f550428b5")]
public class ApproveAll : Microsoft.SharePoint.WebPartPages.WebPart
{
private bool _error = false; 

public ApproveAll()
{
this.ExportMode = WebPartExportMode.All;
} 

///
/// Create all your controls here for rendering.
/// Try to avoid using the RenderWebPart() method.
///
protected override void CreateChildControls()
{
if (!_error)
{
try
{
base.CreateChildControls(); 

//get the list
SPList list = SPContext.Current.List; 

//Show the approve button for users with approve permissions to this list
if (list.DoesUserHavePermissions(SPBasePermissions.ApproveItems))
{
Button btnApprove = new Button();
btnApprove.Text = "Approve All";
btnApprove.CssClass = "ApproveAllButton";
btnApprove.Click += new EventHandler(btnApprove_Click);
this.Controls.Add(btnApprove);
}
}
catch (Exception ex)
{
HandleException(ex);
}
}
} 

///
/// Loops through all items in the current list and approves them.
///
///
///
void btnApprove_Click(object sender, EventArgs e)
{
//get the list
SPList list = SPContext.Current.List; 

//approve all items
foreach (SPListItem item in list.Items)
{
if (item.Level == SPFileLevel.Published)
continue; 

SPFile sourceFile = item.File;
if (sourceFile != null)
{
//Update files
if (sourceFile.Item.ModerationInformation.Status == SPModerationStatusType.Pending)
{
CancelWorkflows(list, item);
sourceFile.Approve("Bulk Approval by" + SPContext.Current.Web.CurrentUser.LoginName);
}
}
else
{
//Update simple list items
if (item.ModerationInformation.Status == SPModerationStatusType.Pending)
{
CancelWorkflows(list, item);
item.ModerationInformation.Status = SPModerationStatusType.Approved;
item.ModerationInformation.Comment = "Bulk Approval by" + SPContext.Current.Web.CurrentUser.LoginName;
item.Update();
}
}
}
} 

private static void CancelWorkflows(SPList list, SPListItem item)
{
if (list.DefaultContentApprovalWorkflowId != Guid.Empty)
{
SPSecurity.RunWithElevatedPrivileges(delegate{
foreach (SPWorkflow workflow in item.Workflows)
{
if (workflow.ParentAssociation.Id == list.DefaultContentApprovalWorkflowId)
SPWorkflowManager.CancelWorkflow(workflow);
}
});
}
} 

///
/// Ensures that the CreateChildControls() is called before events.
/// Use CreateChildControls() to create your controls.
///
///
protected override void OnLoad(EventArgs e)
{
if (!_error)
{
try
{
base.OnLoad(e);
this.EnsureChildControls();
}
catch (Exception ex)
{
HandleException(ex);
}
}
} 

///
/// Clear all child controls and add an error message for display.
///
///
private void HandleException(Exception ex)
{
this._error = true;
this.Controls.Clear();
this.Controls.Add(new LiteralControl(ex.Message));
}
}
} 

Sorry for the lack of proper indentation in the code. The blog did it 🙂

Now, build and deploy the custom WebPart. Then, go to any view in your List. Edit the page and drop the custom Approve All WebPart in the WebZone (right above the list view). 

*Just remember: this only works if you put the WebPart on a view “in the list” because it infers the list object from the current context. Also, if you want this on multiple views for the list, you must place it on all the views. 

Happy hacking!

Categories: sharepoint, webpart

Accessible SharePoint WrapUp

December 8, 2009 Leave a comment

SharePoint Saturday DC was this past weekend and it was a huge success. This is one of my favorite events to present at. Thank you to everyone in attendance. As promised, I posted my slides for my building custom, accessible SharePoint sites at: http://cid-edc29fe0d60f1fc3.skydrive.live.com/self.aspx/.Public/AccessibleSP.pptx.

Categories: Accessibility, Presenting

Love My Droid

December 3, 2009 3 comments

I just got a Droid and I am playing with the blogging app. I love the Google maps and screen quality. I was really looking forward to the slideout keyboard, but that is the one thing I am disappointed in. It is kind of hard to use, but still better then screen keyboards. Anyways, this is not my typical blog (I usually hate pointless blogs). I just wanted to test out the blog app.

Categories: Uncategorized

Presenting at SharePoint Saturday DC

November 27, 2009 1 comment

I am presenting at SharePoint Saturday DC on December 5th (http://www.sharepointsaturday.org/dc/default.aspx).

My presentation is on building custom, “accessible” SharePoint sites.

Most of the projects I work on in SharePoint are custom websites built on top of the SharePoint framework. I constantly hear “can you make this site not look like SharePoint”. Most SharePoint developers, architects and designers know the tricks to do this now a days.

Also, the start of my career was in government services. However, the last 5 years have been on the commercial side. It was in the commercial world that I primarily worked with SharePoint. I am now back in the government world again and 508 accessibility is a common requirement. I learned about 508 accessibility when I started my career in government and now I am trying to mesh my SharePoint knowledge with my accessibility knowledge.

This presentation is my attempt to show tricks and tips to make a SharePoint site accessible. This presentation focuses on building “custom” SharePoint sites because I am showing proper custom master pages, page layouts, control adapters, web part zone customizations, etc… I am not concentrating on out-of-the-box SharePoint Intranets, but a lot of the techniques will work either way. The intent of this presentation is to not only show 508 accessibility tricks, but to also show web standard and css tricks that lead to a more accessible/cross-browser websites.

I look forward to this presentation now that this is one of my passion areas that most people don’t concentrate on in SharePoint. However, everyone should think accessibility when using SharePoint as a framework to build custom websites, regardless if you are in the government or not.

Categories: Presenting

SharePoint Conference Notes on SharePoint 2010 – Day 3

October 21, 2009 1 comment

I am continuing my notes from the SharePoint Conference. Today I attended the Capacity and Performance Management, Externalizing BLOB Storage, and Advanced Development for Silverlight 3 in SharePoint sessions. I also did some hands on labs.

Link to my blog postings for each day at the conference.

 

 Capacity and Performance Management

  • Latency Improvements
    • Lighter and Faster pages
    • Early Rendering
    • WAN Optimizations
  • File Save Latency – this is a new feature that is used with Office 2010 documents and SharePoint 2010. Basically, you don’t see a save file dialog when saving large files. Instead, the file is saved to the local machine cache and incrementally uploaded to the SharePoint list. It should make for a great user experience in these situations.
  • Data Scale Improvements
    • 100 million items per search index (1 billion with FAST)
    • Tens of millions of documents/items in a single list
    • View/Query 5000 items at a time
  • Some of the 2007 limits stay the same
    • Site Collections per web application – 150,000
    • Site Collections per content database – 50,000
    • Content database size – 100 GB
  • Sharepoint Administrative Toolkit – new tools for capacity management. They didn’t give me too much details on this, so I am not sure if these are the exact names
    • Load Test Kit 2010
    • SPDiag 2010 – this is to do production monitoring
  • Logging is done in the database
    • Health data
    • Usage data
    • Gathers data across boxes through data providers
    • Extensible framework – we can build custom providers and custom reports
    • You can see the data through SQL Views, reports, Excel pointing at the SQL data, etc…
  • Different Server Architectures:
    • Single Server – for demos and dev boxes
    • Small Farm
      • around 500 users (~5 rps) and 50-100 GB of data
      • Usually 2 WFE/App Servers with a SQL cluster
      • App Servers can run on the WFE
    • Medium Farm
      • 10-50k users (~50rps) and 1-2 TB of data
      • Separating App Servers from WFE and scale out/load balancer both
    • Large Farm
      • 500k users (~500rps) and 10-20 TB of data
      • Lots of WFEs
      • Lots of App Servers
      • Lots of SQL Servers – probably 5TB per SQL box
      • Probably think about splitting your farms up if you have this situation
  • In medium or large environments, consider setting up a SQL Cluster for the content databases and a separate cluster for the logging and web analytics db. This was highly recommended.
  • Microsofts internal beta environment (this is probably larger than most organizations will need):
    • 3 General WFE
    •  1 WFE for dedicated search
    • 1 App Server for: Central Admin, User Profile Service, Metadata Management Service and Word Conversion Service
    • 2 App Servers for all the other services.
  • Recommended Server specifications:
    • 64 bit
    • WFE – Dual processor, 8 GB RAM
    • SQL Server – Quad Core, 16GB RAM

 

 Externalizing BLOB Storage – stores BLOB data separate from the Content DB on the file system

  • BLOBs typically account for 60-70% of total content in SharePoint
  • The official name for externalizing BLOB storage is: Remote BLOB Storage (RBS)
  • This is different from EBS (External BLOB storage), which was released in SharePoint 2007 SP1 and had issues: http://www.cleverworkarounds.com/2008/03/25/sharepoint-external-storage-api-crushing-my-dream/
  • Advantages over EBS:
    • Managed Interface
    • BLOB store scope = Content DB (verse the farm for EDS)
    • SharePoint UI = PowerShell
    • Number of Providers = Many (verse 1 for EDS)
  • Why use RBS?
    • Ability to group/store BLOBs separate from Metadata
    • Trade cost effective BLOB storage for expensive SQL storage
    • Storage management beyond SQL
  • A number of storage vendors are working with RBS – EMC, OpenText, AvePoint, Commvault, NetApp
  • RBS is a downloadable component in the SQL Server 2008 R2 Feature Pack
  • You can turn on RBS by a simple enable command in PowerShell and then the file gets stored on the file system
  • Install:
    • RBS Add in must be on SQL first
    • RBS and provider DLLs must be installed on all Web Front Ends
    • RBS must be enabled using PowerShell
  • BLOBs from SQL can be moved to RBS with a PowerShell commandlet
    • Migrates one BLOB at a time
    • You can terminate and resume the process
    • It is a live migration – no downtime required

 

Here are the Hands on labs I did today and my thoughts:

  • Business Intelligence – this lab dealt with Excel Services, Visio Services and PerformancePoint. I was really impressed with the new Visio Services. The Visio part of the lab started with an excel spreadsheet in a SharePoint document library. Then I opened Visio 2010. From there I could hook the data, from the excel spreadsheet, into Visio. Then I connected the data to my Visio objects. This example had a column in excel called status. If the status was 1, my server image in visio was green, if the status was 0, my server image in visio was red. After that I published the Visio diagram to SharePoint and it created a Visio Services diagram in my SharePoint site. So, I could view the Visio diagram in a web page. Then came the cool part – I edited my excel spreadsheet data (which was also in a SharePoint library) and it changed my Visio diagram automatically. This example was a quick way to show a server health dashboard controlled by excel data. But, I can think of lots of other possibilities for this new technology.

SharePoint Conference Notes on SharePoint 2010 – Day 2

October 21, 2009 1 comment

I am continuing my notes from the SharePoint Conference. Today I attended the Service Applications, Developing SharePoint on Windows 7 and the Development Best Practices sessions. I also did some hands on labs.

Link to my blog postings for each day at the conference.

Service Applications – this is the replacement for Shared Service Providers (SSP). They’ve ported all the SSP functionality (BDC, User Profiles, Search, etc…) to this Service Application methodology and then added around 20 new services. If you think of SSP as running on a single box or web application, think of Service Applications as running as a Middle Tier Service Layer. They talked about how these are not confined to a box, they are truly services now. Here are some advantages I’ve heard with Service Applications:

  • You can configure seperate databases and application pools per service
  • The Web Application chooses which services it talks to
  • Services run on an application server and this application server doesn’t even have to be on the same farm as your web application. As long as security is configured correctly, you can talk to services from an application server on another farm. This is great for Enterprise situations in which a company has multiple farms. Each farm can reuse all, or some of, the services from the main application server. A great example of this is User Profiles. If an application is running off of AD, you only need that User Profiles on one farm, even if a company has valid reasons for separating their farm structure do to other security and/or functionality constraints.
  • Application servers are load balanced out of the box. SharePoint 2010 provides a software load balancer and you can use the load balancer on applications servers (note: you can change this to hardware load balancing if you want). This means these service applications have redundancy built in if you build your infrastructure with more than one application server.
  • SharePoint Foundation (formerly WSS) can also run services – just not the ones dedicated for SharePoint 2010 (formerly MOSS)
  • This is an extensible framework. You can build custom services for your farms. This is going to be huge for the third party market.
  • The one downside to this is going to be governance (in my mind). We are going to have to control and plan where the services reside and how other farms can use them. It will change the whole structure of how we architect/plan SharePoint sites in large Enterprise situations.

Developing on Windows 7

  • There are a couple models to do this:
    • Install SharePoint, in standalone mode, on the Windows 7 machine
    • Use bootable VHDs and run Windows 7 or Server on the VHD
      • These are not virtual machines (VPC is dead), but just the VHD
      • You can only run one at a time because you choose it from the boot menu
      • You can create these VHDs from Windows 7 or from a Hyper-V machine. The presenter noted that it is easier to build them on a Hyper-V and then add them to a Windows 7 boot (if you have Hyper-V available)
      • The performance impact is negligible as long as you use fixed size VHDs
    • Use Hyper-V (this is not developing on Windows 7, so they didn’t go into this)
  • There are performance considerations for running SharePoint on your local machine. The presenter actually showed that it isn’t that bad – he showed that his machine was only utilizing a little over 4GB of memory. But, you don’t want SharePoint hogging your memory when you are not using it (i.e.: doing the regular laptop/desktop activities during the day). Here are some ways to help with the performance considerations:
    • Set useless services off (useless in terms of development). These are things like Usage Data Collection and Health Data Collection.
    • Set some services to “Auto Start (delayed)”. This delay’s the start of the service when the computer starts up.
    • Utilize PowerShell scripts to stop the SharePoint services (including all the SQL Express stuff). The presenter gave me the scripts to do this, so be on the lookout for a blog on that soon 🙂
  • The presenter showed a lot of PowerShell scripts to help development
    • You can turn on/off the developer dashboard through PowerShell. This can help performance when you aren’t developing.
    • You can start/stop services and SQL Express in order to turn SharePoint off when not in use.
    • You can set up a Visual Studio project to run PowerShell scripts. This is really cool because you don’t have to go outside VS to run scripts. It seemed a little clunky to set up (you have to set some x64 stuff in a console application). But, it is possible.
  • Here are the presenters recommended specs to run SharePoint on a dev machine 
    • x64 dual proc 2Ghz, 8Gb Ram, 80Gb HD.
    • If you are going to run lots of bootable VHDs, you might want to increase the hard drive space. The presenter mentioned the fixed size for a bootable VHD should be around 45GB or higher.

Development Best Practices –  This session described best practices that are applicable from SharePoint 2007 and how they translate to SharePoint 2010. I didn’t learn much in this presentation because it was either things that were best practices in  class=”hiddenSpellError” pre=”in “>SharePoint 2007 or things that have already been said. The general gist of this session was: develop on standalone developer machines or bootable VHDs, do unit testing and package your code in WSPs.

Here are the Hands on labs I did today and my thoughts:

  • PowerShell – I was impressed with what we can do with PowerShell. There are over 500 commands and they provide a lot of functionality. The lab started with showing how you can get an SPSite object. Then it showed how you could update an SPSite object in PowerShell. So far, this is all stuff I could do in Central Administration. But, then it showed how you can loop through sites and pipe them together to do everything at once. For example: they showed how to change all the secondary site collection administrators, on all site collections in a web application. They also showed how to create a sub-site for all site collections in a web application. This will make scripting and deployment much easier in the future. The only issue I have so far is the amount of PowerShell scripts they have and the PowerShell language (I guess I have to learn that now).
  • Advanced WebPart development – this was ok. The lab just showed how to create and deploy Visual WebParts (which is just creating user controls). The thing I noticed here was the ease of development/deployment and the speed of deployment. Even though it was recycling the application pools, the site came up fairly fast. They mentioned that they’ve been tweaking this process to make deployments more bareable for us developers.
  • External Content Types – I did a lab that showed me how to hook database data into a SharePoint list. This was all done through designer (even though you can do it in Visual Studio) and took only a few steps to set up. After hooking the list to the database table I could update the data, from my SharePoint list, and see it updated in the database. Very Cool.