January 2009 - Posts

Bits and Bytes
29 January 09 03:28 PM | Blogging about SharePoint: Posts
Body:

Here's a bunch of brief things that I think are too short to merit their own post.

 

1) CAML syntax that ought to error but doesn't.

Double, Nested Query tags return all records.

Strange thing.  When building a CAML query, I accidentally malformed my query syntax:  Instead of <Query><Where><and> etc, I had <Query><Query><Where><And> etc..  I had an extra  pair of Query tags within the outer Query tags.  I would expect that to be invalid (not conforming to the CAML Query Schema for example) but it's not.  Instead of throwing a error, it treats the where clause like it's not there and returns all records.

2) Anonymous Access permissions can't be set of you have the list's Advanced Settings set so users can only read their own items.

This makes sense, but the connection between the disabled checkboxes on the anonymous access permissions page and the Advanced Settings is not obvious.  I discovered this when I needed to allow anonymous users to be able to add items to a list (such as contact requests for a user group).  To do this, you have to give anonymous users the Add items and View items permissions (you can't give Add without View). 

3) There is a BDC behavior when refreshing a Business Data column that looks a lot like a bug.

See http://social.msdn.microsoft.com/Forums/en-US/sharepointbdc/thread/fc10e5e4-a250-4859-bb1e-6b87f7b01352/

4) Performance Point is being rolled into MOSS.  The Business Intelligence part of the MOSS pie gets even stronger!

From the SharePoint Team Blog: Microsoft Business Intelligence strategy update and SharePoint

5) SPDisposeCheck is released! Finally!

From the SharePoint Team Blog: SPDisposeCheck Released!

6) My Dad can still teach me a thing or two. 

In Outlook, do you ever find that you have an outdated address stuck in the list of addresses that Outlook suggests as you type an address?  Well, I have a number of old addresses that I wanted to get rid of but couldn't figure out how.  Right-clicking didn't do anything, and once I tried looking in the registry to find where it stored the list, but I think it was stored in a binary format so I couldn't find it.  It turns out that the Delete key works when you are in that list, and if you use the up and down arrow keys to select the bad address, you can remove it with just a tap of the Delete key. It never would have occurred to me that the Delete key would work in that context.  There's a lesson about affordances in there.

image

7) No longer presenting at SharePoint Connections this March.

Last September (2008), I had the honor of being selected to present three sessions at the March 2009 SharePoint Connections conference. I was told today that due to budget cuts and lower registrations, sessions were being cut.  Mine included.  I would have been presenting:

  • Site Provisioning Solutions
  • Information Architecture for a MOSS intranet 
  • PowerShell for MOSS Developers and Administrators

I hope to have the opportunity to present these (or the other presentation in my repertoire, "An Introduction to MOSS Administration") at a future conference.  In the mean time, please go attend as many SharePoint conference as possible so this doesn't happen again!

8) PowerShell is so darn handy! Today I was doing some code enhancements and noticed that I was limiting a number of textboxes to 10 characters.  I needed to see if the corresponding list field was also limited to 10 or not.  I wanted to see what the max length on the text fields in my list were, but the length is not shown on the list settings page and I didn't want to have to click into every text column.  Tada! A bit of PowerShell to the rescue.

.\moss.ps1
$web = Get-SPWeb $url
$list = $web.Lists["MyCustomList"]
$list.Fields | Select-Object -Property Title,Type,MaxLength,Hidden | where {-not $_.Hidden}| where {$_.Type -eq "Text"} | Select-Object  Title, Type, MaxLength | sort -property MaxLength

moss.ps1 defined the Get-SPWeb function.

$url is the URL to my site.

The output is a nice three column list of column name, datatype (all Text in this example), and the max length.

That's all for now!

--Michael

Category: PowerShell and SharePoint
Published: 1/29/2009 12:28 PM
Del.icio.us | Digg It | Technorati | Blinklist | Furl | reddit | DotNetKicks
Even thinly sliced dead trees care about their User Experience!
10 January 09 03:55 PM | Blogging about SharePoint: Posts
Body:

There are intranet design lessons to be learned from my local newspaper, the Chicago Tribune.  Over the last three months, they've redesigned their newspaper (yes, the print edition), and they wrote about it recently.  You can read about it here in this PDF: http://www.chicagotribune.com/media/acrobat/2009-01/44426645.pdf . The link to the PDF is on their feedback page (chicagotribune.com/feedback), which also has a link to an audio interview on the topic (though I haven't listened to it yet).

What I find interesting is that there are several concepts underlying this redesign that apply equally well to if you are designing a website or a newspaper.

  1. Usability and ease of navigation
    • An example of this is on page x of the PDF.  The problem: "Things are hard to find".  The solution - an intuitively organized site (or newspaper) with good navigation elements (menus and breadcrumbs for a site, or a kind of breadcrumb/progress-bar in the paper) and a search capability (for the newspaper, it's online).
  2. Information Architecture.  How they organize the information in the newspaper or site.
    1. For the news paper, this is the choice of what is a section, versus what is an article, a featured article, a page, etc.  Similarly for an intranet, you have sites and sub-sites, pages, page layouts, etc.
  3. Taxonomy.  The terms they use to describe the content.
    1. For a newspaper, their taxonomic vocabulary looks like this : Section, Article, Featured Article, Page, Advertisement, Column, etc.  For an intranet website, it could be Divisions, Departments, Pages, Announcements, Forms, etc.

Both benefit from having a library of standard page layout choices, a clearly defined vision or mission for the site or paper, and a clearly defined audience (e.g. Readers).  Like the newspaper, it's a good idea to think about how your branding choices - including typography - affect the user experience.  Also like the newspaper, having a plan and process for ongoing improvement produces a better product.

--Michael

Published: 1/10/2009 12:55 PM
Del.icio.us | Digg It | Technorati | Blinklist | Furl | reddit | DotNetKicks
SharePoint Most Popular Intranet Choice!
05 January 09 09:53 AM | Blogging about SharePoint: Posts
Body:

Every year, the Nielsen Norman Group picks the 10 best intranets of the year, and their latest report (2009) is discussed here http://www.useit.com/alertbox/intranet_design.html (look at the section titled "Technology Platform: Unification Begins".    The full report and related info is here: http://www.nngroup.com/reports/intranet/design/.

One of the things that caught my eye in Nielsen's January 5, 2009 Alertbox article was that half of the winners they identified used SharePoint. There's also a nice graph showing the increase in adoption of SharePoint among the winning intranets over time.  In 2008, SharePoint was the most used Microsoft product - see "Diverse Technology Platforms" in http://www.useit.com/alertbox/intranet_design_2008.html.

--Michael

Category: SharePoint – WSS and MOSS
Published: 1/5/2009 6:53 AM
Del.icio.us | Digg It | Technorati | Blinklist | Furl | reddit | DotNetKicks
Service accounts should never expire...
02 January 09 01:00 PM | Blogging about SharePoint: Posts
Body:

So I am working in a Windows 2003 server virtual machine that is hosted by my client and is a member of their domain.  This VM is my development VM, and it has MOSS installed and uses many of the same service accounts that our production environment uses so that it's a realistic development environment.  This morning, I went to do a compile of a workflow solution I am working on.  I have build scripts set up, and they do several things including manaully deploying a shared utility DLL to the GAC and restarting the WSS timer service (sptimerv3), because some of my workflows that use this DLL run after a delay, and when they run after a delay activity, they run under the context of the WSS Timer, so to make sure that the timer is seeing the latest version of the DLL, as well as any app config changes that I have put in the app config file I created for the timer, I restarted the timer. Except that this is what I got:

The Windows SharePoint Services Timer service is not started.

More help is available by typing NET HELPMSG 3521.

System error 1069 has occurred.

The service did not start due to a logon failure.

Well, my timer service is using a domain account, and today is 1/2/2009, I am working from home, and the client's office is closed.  Even if they were open, I do not have any AD admin rights. However, I do have read rights to the domain, and I have Softerra's free LDAP browser (http://www.ldapbrowser.com/) and I have PowerShell.  That's all I need to confirm my suspicion that the service account expired at the end of 2008.

In the LDAP browser, I do a directory search using the filter

(&(objectclass=*)(CN=TimerServ*))

where TimerServ is the beginning of the Common Name that the timer service is using.  There are also other attributes you could search on instead of CN, for example sAMAccountName.  

Either way, the result I get back is an LDAP entry that has the following attribute:

image

So how do you convert that value to a date time?

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=321717&SiteID=1 and

http://msdn.microsoft.com/en-us/library/system.datetime.fromfiletime(VS.85).aspx

 

But more practically, this line of PowerShell does the trick.

[DateTime][System.DateTime]::FromFileTime(128752632000000000)

It returns

Thursday, January 01, 2009 12:00:00 AM

Yep, the first time the Farm Admin restarts the timer service in 2009, he's going to have a service that doesn't start.  I brought this to his attention right away, so he knows he has to talk to the AD admins Monday morning, and he'll get it fixed before it's an issue. 

In the mean time, I have to switch my timer service on my dev machine over to another account (my user account) that has equivalent local permissions.

Happy New Year!

Michael

Category: SharePoint – WSS and MOSS
Published: 1/2/2009 10:00 AM
Del.icio.us | Digg It | Technorati | Blinklist | Furl | reddit | DotNetKicks