Cannot uninstall SharePoint 2013

If you run into a problem uninstalling 2013 because the Forefront Identity Manager Server is stuck Starting during the uninstall, simply locate the PID of the process and kill the whole process tree to circumvent this issue. I’ve only run into it once, and I believe it was cause by the fact that the DB server was offline at the time and FIM may have a dependency on the ‘Profile’ DB, that is created by provisioning the UPS Service Application, requiring it to be online during the stopping of this normally well-behaved Windows service. The Profile DB for the most part is just a FIM DB in disguise; and as we now, tucking in a whole (almost) product under yours is a bad idea.

Posted in Uncategorized | Leave a comment

Nice XSL trick to remove last comma from an incoming CSV string

I had a case recently where I had to remove a trailing comma from an incoming value within a feed. The trimming had to be done in XSL and the string was not being assembled within a for-each loop, so I needed a simple way to remove the last ‘,’. Here’s two lines that do the trick. I posted this because I didn’t find it via Google – what I found were solutions to ‘not’ add a comma after the last concatenation within a for-each.

<xsl:variable name="len" select="string-length(normalize-space(atom:feed/atom:entry/atom:content/atom:properties/atom:MyCommaSeparatedString))-1"/>
<xsl:value-of select="substring(atom:feed/atom:entry/atom:content/atom:properties/atom:MyCommaSeparatedString, 1, $len)"/>
Posted in atom, Miscellaneous, xsl | Leave a comment

VS 2012 to support remote development for SharePoint 2013

Saw this tidbit today here

The ability to use Visual Studio to develop apps for SharePoint against a remote server running SharePoint instead of a local server running SharePoint.

Nice to have you back remote debug, I liked that feature in VS 2003/SP 2003, where have you been hiding?

Posted in Uncategorized | Leave a comment

Why use SharePoint? Part II

In part 1, I wrote about two fundamental aspects of SharePoint as a product and why each one is critically important when considering your requirements.

There’s more to the story of course, like the cost of the Internet Connector licensing and adequate server resources, when even starting to ponder the use of SharePoint for public facing web sites. In short, consider other products.

In this installment, I’m going to consider the 3rd leg of the stool; the skills needed to implement successful SharePoint-based Intranet or even Extranet portals.

First though, some more background. I have found it useful at times to distinguish the SharePoint product from SharePoint the platform. There are many useful and creative functions that can be implemented in the SharePoint 2010 product; even with the Standard Edition. You need people with skills and imagination. I am constantly surprised at what people possessing both attributes can accomplish in SharePoint right out of the box.

However, there is a line that exists between custom code and no-code required for every feature of SharePoint. These lines, as it were, are very important but not always very obvious. It is SharePoint the platform that you must turn to when these lines are crossed. The platform in SharePoint is all of the non-visual, API, geek stuff that comprises about 80% of the entirety of SharePoint Server. For the most part then, I’m using the term code here to mean C# web parts, event receivers, services integration, etc.

When considering your “must have” requirements, it would be great if you knew exactly where these lines were so you fully understood the skills and costs associated with any given decision. Producing a plan/estimate that you or anyone else should have any confidence in requires you to understand the resources that are needed for your potential project.

As a management mentor of mine once said, “(at work) no one likes surprises”.

It is critically important for you to understand what you don’t know about SharePoint projects.  If at any time in the project you need the best skills affordable, it is in the planning/feasibility phase. I cannot over-state the importance of this point. It will save you money, and probably a lot of disappointment. Chances are great that if you spend the time and money up-front, your overall project costs will be lower as a result. There’s a really good reason SharePoint consultants charge what they do.

In other words, its best if you know exactly what you are doing.

Which of course sounds simple enough, but it is the #1 problem I have seen in my 7 years as a SharePoint consultant. Make sure you get a SharePoint consultant, not someone who can merely read Blog posts and guess at the answers. SharePoint consultants should have about 10+ years of overall experience and at least 3 years in SharePoint by itself. SharePoint consultants are pretty-much dedicated to SharePoint work on a full-time basis, and there is a ton of work to ensure this.

Interview potential candidates and consulting companies and ask hard questions like “How will you prove that SharePoint is the right tool for us?”, or simply “Why should we use SharePoint?”.

When SharePoint is the right choice, it’s not difficult to justify it.

Posted in Oops, Today's Disenchantment | Leave a comment

Why use SharePoint? Part I

A recent assignment demonstrated yet again, how critically important it is to take the time to decide if SharePoint is the right tool for your project.

On average, I have been seeing a $1M plus SharePoint train-wreck every 2 years. Each of the 3 projects I’ve witnessed had at least one thing in common; SharePoint was NOT the right tool for the job. All of the projects went way over-budget and under-delivered on requirements. It is this latter point that anyone can do something about.

No one wants to analyze requirements any longer than necessary. The problem lies in matching the technology choices to the requirements.

First and foremost, SharePoint was created as a team collaboration platform to add value to the Office franchise in the form of useful capabilities in back office services. Network file shares were fine to store my documents or even share documents between users, but this was a very simple beginning in terms of people effectively working together. Simple content library functions like version control and check-in/check-out were needed to make  collaboration even practical on the network. The ability to set security boundaries to create a mine, yours, and ours environment was also needed to logically define sharing spaces as well as for providing basic document access control. These were the basics of collaboration that SharePoint Team System tried to address as a technology preview (some called it a product, but it fell a bit short).

From the 2003 to the current 2010 product versions, the fundamentals of what SharePoint is have largely remained unchanged. It is for this reason that I always ask a client if collaboration is a fundamental requirement in the project they are considering SharePoint for. In Intranet portals, this need is almost always present, so this is an easy one.

However, in the realm of public facing Intranet sites, the basic foundation of SharePoint is almost never a requirement. Further, other capabilities like multiple site hosting may not even be in the picture.

Secondly, the decision to adopt SharePoint must consider page content authoring. Web sites are all about content and are rarely concerned with document sharing and only document sharing; even in Intranet portal scenarios. For most cases where there is a good match between what is required and what SharePoint has to offer, the out-of-the-box capabilities of SharePoint’s publishing page editor is sufficient. Content deployment may or may not be key; i.e. it might be a nice feature, but not a necessary one in Intranet deployments.

However, in public facing web sites, content is everything and the authoring and deployment features of a Content Management System are critically important. It is this area that SharePoint 2010 still falls way short of what is required in the real world of the 21st century. In 100% of all cases where I have collaborated on a SharePoint project with a creative design firm, the designers and coders have been aghast at what working with SharePoint is really like for a web page designer.

None of this is too surprising or extreme. The patterns of behavior that I have seen have resulted in millions in wasted development/consulting expense.

This segues into the last consideration. Can I find and afford the skills required to do a SharePoint project right? I’ll cover this in Part II.

Posted in Oops, Today's Disenchantment | Tagged , | 2 Comments

Floating the SP.UI.ModalDialog

I’ve been using more of the SharePoint 2010 Client Object Model lately and had a need for a lightbox UI. I decided to use SP.UI.ModalDialog.showModalDialog(…), but found it irritating that the rendered DIV did not float by default.

So I turned to jQuery to calculate and set an offset to guarantee that the modal dialog will always render mid-window. Here is a very simple way to float the ModalDialog window; the ‘html’ argument is your HTML markup, or you can alter this to pass in a URL.

    function openDialog(html) {
        var _options = { html: html,
            allowMaximize: false,
            autoSize: true,
            showClose: true,
            title: "Zoom"
        var y = $(window).scrollTop();
        var boxBorder = $(window).height() - $(".ms-dlgContent").height();
        y = y + boxBorder / 2;
        $(".ms-dlgContent").css({ position: 'absolute', top: y });
Posted in Customization, SharePoint 2010 | 5 Comments

SPWeb move or clone in PowerShell

When you have to move or clone a web in SharePoint 2010, you can make use of the Export-SPWeb and Import-SPWeb cmdlets in the Management Shell. The semantic difference between a move and a clone is whether you delete the web you exported from. There are just 4 basic steps.
1) Determine template used to create the source web
Get-SPWeb <web root url> | Select-Object -Property WebTemplate, Configuration
Where: <web root url> is http://myportal/sub-web1/sub-web11 for example
The output will look like this:
WebTemplate                                                                                               Configuration
——————–                                                                                                ——————–
BLANKINTERNET                                                                                                   2
2) Create a new blank web at a new location using the template determined from 1)
New-SPWeb -Url <web root url> -Template <template name string> -Name <title of web> -Description <description text>
Example: New-SPWeb -Url http://myportal/sub-web2/sub-web21 -Template BLANKINTERNET#2 -Name “subweb21” -Description “New blank publishing site with workflow” 
3) Export existing web
Export-SPWeb <web root url> -Path C:\ExportImportData\<web name>WebExport.cmp -CompressionSize 100000000
Example: Export-SPWeb http://myportal/sub-web1/sub-web11 -Path C:\ExportImportData\WebExport.cmp -CompressionSize 100000000
4) Import the web just exported in 3) into new web created in 2)
Import-SPWeb <web root url> -Path C:\ExportImportData\WebExport.cmp -Force
Example: Import-SPWeb http://myportal/sub-web2/sub-web21 -Path C:\ExportImportData\WebExport.cmp -Force
Posted in PowerShell, SharePoint 2010 | 4 Comments