Paul Galvin's (old) SharePoint space [SharePoint

Just another WordPress.com site

Monthly Archives: October 2009

In Praise of jQuery Enhanced Search-As-You-Type (by Jan Tielens)

My blog has moved.  Please updated your bookmarks appropriately: http://www.mstechblogs.com/paul

This article has moved: http://www.mstechblogs.com/paul/in-praise-of-jquery-enhanced-search-as-you-type-by-jan-tielens

</end>

This is another post in my on-going series on how to use jQuery with SharePoint.
If you want to learn more about jQuery, I highly recommend: jQuery in Action by Bear Bibeault and Yehuda Katz.

Subscribe to my blog.

Follow me on Twitter at http://www.twitter.com/pagalvin

Technorati Tags:

SharePoint Shop Talk Thursday 10/29 at 12:30 PM EDT

My blog has moved.  Please update your bookmarks accordingly: http://www.mstechblogs.com/paul

This article has moved: http://www.mstechblogs.com/paul/sharepoint-shop-talk-thursday-1029-at-1230-pm-edt

</end>

Subscribe to my blog.

Follow me on Twitter at http://www.twitter.com/pagalvin

Technorati Tags:

Quick Hit: Reading InfoPath XML Directly From an SPListItem in SharePoint

I’m been working on a project where I need to extract attachments from an InfoPath form.  There are some good resources for parsing InfoPath forms (which are just XML files, so it’s actually quite easy). 

While I was building up the project, I started by downloading an InfoPath form and saving it to my local hard drive.  My c# code was reading directly from that instance.  However, the InfoPath forms are really living inside a SharePoint forms library.  I did a little half hearted searching to find out how to read it directly from the library and almost gave up, in which case I would have saved the form to a local temp directory and read it from there.  However, there’s no need to go through those hoops as you can read it directly from the library.  This little snippet shows how:

/// Class definition stuff here, including:
private SPFile mySharePointFile; /* Part of an SPList */
// More code goes here and inside a method of the class we have:
XmlTextReader textReader;
textReader = new XmlTextReader(mySharePointFile.OpenBinaryStream());

textReader.WhitespaceHandling = WhitespaceHandling.None;

textReader.Read();

// If the node has value

while (textReader.Read())
{

  … and so on and so forth …

 

They key bit above is that we can read the InfoPath directly via the OpenBinaryStream() method call on the SPFile as a parameter to the constructor on XmlTextReader.  It works great.

</end>

Subscribe to my blog.

Follow me on Twitter at http://www.twitter.com/pagalvin

Technorati Tags:

Quick and Easy: Send Email Using Gmail SMTP Server in .NET C#

This isn’t exactly a new topic, but when I needed to do it, I found a lot of “why won’t this work for me” and not too many direct answers.  I hope someone finds this useful.

The following bit of code will send an email using my own gmail account to do it, including attachments:

using System.Net.Mail;
using System.Net;

NetworkCredential loginInfo = new NetworkCredential("[My Gmail ID]", "[My Gmail Password]");
MailMessage msg = new MailMessage();
msg.From = new MailAddress("[M Gmail Id]@gmail.com");
msg.To.Add(new MailAddress("paul.galvin@arcovis.com"));
msg.Subject = "Test infopath dev subject";
msg.Body = "<html><body><strong>A strong message.</strong></body></html>";
msg.IsBodyHtml = true;

foreach (string aFile in NIPFD.GetAttachmentNamesAndLocations())
{
    msg.Attachments.Add(new Attachment(aFile));
} // Adding attachments.

SmtpClient client = new SmtpClient("smtp.gmail.com");
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = loginInfo;
client.Port = 587;
client.EnableSsl = true;
client.Send(msg);

 

A few key bits that slowed me down and other observations / notes:

  • The first line that creates the loginInfo object needs to use the gmail ID stripped of “@gmail.com”.  So, if my gmail email address is “sharepoint@gmail.com” and my password is “xyzzy” then the line would look like:

NetworkCredential loginInfo = new NetworkCredential("sharepoint", "xyzzy");

  • My gmail account is set up to use SSL and that wasn’t a problem.
  • There is some conflicting information out there on what port to use.  I used port 587 and it worked fine for me.
  • In my case, I also needed to send attachments.  That NIPFD object has a method that knows where my attachments are.  It’s returning a fully path (e.g. “c:\temp\attachment1.jpg”.  In my test, I had two attachments and they both worked fine.

I used visual studio 2008 to write this code.

</end>

Subscribe to my blog.

Follow me on Twitter at http://www.twitter.com/pagalvin

Technorati Tags: ,,,

SharePoint Conference 2009 – Get Your Real Time Raw Data From Twitter

I expect that nearly everyone knows this anyway, but I thought I’d toss out a quick note that there’s a tremendous amount of very interesting information available via twitter.  The hash tag #SPC09 seems to be the most popular.  Like always, there’s a lot of silliness and “in” jokes, but if you can get past that, check it out.  I do my best to respond to comments or questions directed to me and I know that a lot of others do as well, so it’s not just a one-way flow of information.

New sessions start in just under two hours and continue up until about 3pm EDT this Thursday.  It will start to pick up then.

Check out the twitter feed here: http://twitter.com/#search?q=%23spc09

</end>

Subscribe to my blog.

Follow me on Twitter at http://www.twitter.com/pagalvin

Technorati Tags:

Programmatically Extracting Attachments From InfoPath Forms (Including Their Names!)

I have an expense entry solution for a client that leverages InfoPath and workflow.  At one point during the approval process, I need to generate an email that has all of that good InfoPath data as well as the attachments themselves so that (sigh) someone can take that data and manually re-key it into an Oracle database application.

It’s not very difficult to get at or parse the InfoPath form.  I didn’t know how to handle the attachments, however.  After an hour or two of poking around the Internets (an eternity!) I found this article: http://support.microsoft.com/kb/892730

It provide some handy code to extract the attachment from a node in the form.  (You still need to find the node and all that, but that’s just XML parsing).

I know that the attachment is base64-encoded and I originally went down the path of just extracting the the base64 data, decoding it and saving it.  However, I quickly realized I didn’t know how to get the file name itself until I found the aforementioned article.

I had actually found that quite early, but I was put off by its split personality. On the one hand, the article *says* it’s good for InfoPath 2007.  Yet, the code and instructions are all about Visual Studio 2003 and references to InfoPath 2003.

Bottom line, the code that article provided is working well for me (so far).  I can get my InfoPath form, I can parse it, I can find and decode the attachment and I know its name.  What more can one ask of one’s life?

</end>

Subscribe to my blog.

Follow me on Twitter at http://www.twitter.com/pagalvin

Technorati Tags: ,,

If you’re worried that your SharePoint environment may be a tad unhealthy, let me help you fix that with a health check.

SharePoint Shop Talk Recap for 10-08-2009

Today’s SharePoint Shop Talk covered its usual wide range of topics:

  • We discussed the issues around opening up parts of a SharePoint site collection to your trading partners.  It’s not the most complicated thing in the world, but when you start talking about out loud, you realize there are a lot of small individual things that need to be done to do this correctly.  You have to consider the firewall, licensing (your intranet SharePoint license may not be, and probably won’t be, sufficient), SharePoint configuration (AAM, extending web applications to zones that probably have HTTPS enabled), etc.  If anyone has a checklist of what to do and the sequence, I’d love to see it in comments.  This question wins the “Most Discussed Question” aware of the year (so far).
  • I got to ask a question about the image library functionality that generates those thumb nail images.  I speculated that an event receiver on the image library is generating the thumb nail.  I’m probably way off base, but it does seem like there’s an entirely separate image on the web server for the thumb nail itself.  Vamshi, a SharePoint Shop Talk regular, points out this blog entry: http://pathtosharepoint.wordpress.com/2009/08/23/picture-libraries-take-advantage-of-web-friendly-formats/.  That’s a pretty interesting post about images in SharePoint if you’re interested in it.
  • We discussed custom edit forms (that you create via SPD) and the fact that you lose the attachment functionality when you do that.  Laura Rogers has blogged on that subject here: http://sharepoint911.com/blogs/laura/archive/2009/09/10/fix-for-the-custom-form-attachments-issue.aspx

This week, we introduced a new feature where we spent about 10 minutes demonstrating an interesting tip/trick in a SharePoint environment.  This week, we showed how to added a content editor web part (and actually any web part) to a newitem.aspx page.  In this case, the objective was to show some extensive online help for that newitem.aspx page.  This is also one of the usual starting points for integrating jQuery into your environment.  Next week, we do plan to show a jQuery tip/trick.  We hope to see you there. 

</end>

Subscribe to my blog.

Follow me on Twitter at http://www.twitter.com/pagalvin

Technorati Tags:

SharePoint Shop Talk 10/08/08 at 12:30 PM EDT

We’re hosting our next weekly SharePoint Shop Talk session tomorrow at 12:30 PM EDT.

This is an open Q&A and general kibitzing session on all topics SharePoint related. 

You can read various recaps of prior sessions here to get a sense of what we do on these calls here: http://paulgalvin.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3dPublic%2520Speaking

Registration is up and ready right here: https://www.livemeeting.com/lrs/8000043750/Registration.aspx?pageName=0z40kg9nb0t0842f

Twitter your questions to me, @pagalvin.

Email them to questions@sharepointshoptalk.com or just show up on the line and ask them out loud. 

We hope to see you then!

</end>

Subscribe to my blog.

Follow me on Twitter at http://www.twitter.com/pagalvin

Technorati Tags:

To Blog or Not to Blog – That is the Question (to Blog About)

Note: This was originally posted to www.endusersharepoint.com.

A few weeks ago I had the chance to speak at SharePoint Saturday in New York.  Once again, a tremendous event.   This time, I spoke about “learning SharePoint” – a very broad topic.  During the presentation (which you can get here), I talked about a variety of techniques for “learning” SharePoint, including stuff like book learning, class room training, creating your own VM and most importantly (to me), community participation.  One way to participate in the SharePoint community is via blogging.  Someone asked me about blogging in particular and asked my opinion on a few concerns he had that I’ve heard others mention before.  It’s been itching at the back of my head for a few weeks so in my usual fashion, I’m scratching that itch by blogging about it.

Some people seem to think that there are so many quality bloggers out there on the scene today and that so many quality blog entries have been written that in a sense, there’s nothing new to write about.  Or, the “new” thing is so narrowly focused that it’s not going to be interesting to anyone.  I don’t agree with those sentiments or the underlying assumption about them.

For starters, if you’re blogging because it’s part of your personal attempt at learning SharePoint well, it’s really irrelevant if someone has written on your topic or not.  One of the drivers behind community participation, whether it’s for personal learning or not, is that you need to get it right.  No one wants to put up some weak blog entry and look silly in front of the world.  In the course of getting it right, you’re going to think the subject through more carefully, etc.  Thus, you’re thinking, studying and considering this topic from all kinds of angles, left to right, up to down, inside and out (or at least you should be).  That’s a very valuable exercise.  In fact, it’s almost beside the point of pushing the “post” button by the time you finish writing it since you’ve already derived much of the benefit by now.  Of course, you do want to push the post button anyway for a variety of reasons, but I digress.  The bottom line is that blogging is a valuable learning exercise in and of itself, period.

I also reject the “it’s already been done” argument.  So what if it was?  The terrible consequence is that people who are looking up your topic via bing will now find two or five or a dozen articles.  Who cares?  I always prefer to find several articles on the same topic when I go searching the tubes for stuff.   Different points of view, different writing styles, different approaches to the same problem – they all help me understand what I need.  In my opinion, the community is no where close to reaching a saturation point on good quality blog articles on any topic in the SharePoint world.

So, blog away!  You won’t hear me complaining about it.  I guarantee it 🙂

</end>

Subscribe to my blog.

Follow me on Twitter at http://www.twitter.com/pagalvin

Technorati Tags: ,

Don’t Be a Bull in the China Shop

A Brief History of SharePoint (From a Relative Newcomer’s Perspective)

Note: This article was originally posted to www.endusersharepoint.com.  I forgot to post it to my own blog 🙂

SharePoint has evolved a great deal since its early days as sort of an incubation technology at Microsoft –it’s evolved almost like a horror movie, where the mad scientist’s creation takes on a life of its own, breaking free of its creator’s expectations and rules.  The technical evolution is obvious – the WSS 3.0 object model is richer and more complex than WSS 2.0, which was itself an improvement over earlier versions.  The next version will no doubt show tremendous improvement over 3.0.  From an End User’s perspective, however, SharePoint’s evolution is even more significant.

In the early days, SharePoint didn’t offer much to End Users.  They would have their usual functionality requirements, work with IT to define them well and implement a solution.  IT would use SharePoint to solve the problem.  The product wasn’t very accessible to End Users.  I’ve thought threw a few analogies, but I decided to stick Venn Diagrams to show what I mean.  When Microsoft first released SharePoint to the world as a commercial offering, it followed a relatively traditional pattern of End User <-> IT relationship.  A lot of End Users, communicating and working with a very small number of It people to deliver solutions that solve business problems:

The overall problem domain for which SharePoint is a suitable delivery platform is small (especially compared to today’s SharePoint.  End Users and IT worked in a more classic arrangement with IT: define requirements to IT, wait for IT do their work behind the curtain and take delivery of the final product.

As SharePoint evolved to the 2.0 world (WSS 2.0 and SharePoint Portal Server), several things happened.  First, the “problem domain” increased in size.  By problem domain, I mean the kinds of business problems for which SharePoint could be a viable solution.  For instance, you wouldn’t think too hard about implementing a serious search solution in a SharePoint environment until SPS (and even then, it wasn’t as good as it needed to be).  At the same time, End Users have an unprecedented ability to not only define, but also implement their own solutions with little or no IT support. 

The 3.0 platform (WSS and MOSS) maintained and increased that momentum.  The problem domain is enormous as compared to the 2.0 platform.  Virtually every department in a company, ranging from manufacturing health and safety departments to marketing, from sales to quality control – they can find a good use for SharePoint (and it’s not a case of mashing a round peg into a square hole).  At the same time, the platform empowers even more End Users to implement their own business solutions.  I try to capture that with this diagram:

This has proven to be both a potent and frustrating mixture.  The 3.0 platform turns previously stable roles on their heads.  Suddenly, End Users are effectively judge, jury and executioner business analyst, application architect and developer for their own business solutions.  This gets to the heart of the problem I’m writing about.  But before I dive into that, let’s consider the elephant in the room.

Peering into the Crystal Ball

How will SharePoint 2010 affect this pattern?  Will it be incremental or revolutionary?  Will more, fewer or about the same number of End users find themselves empowered to build solutions in SharePoint 2010?  Will SharePoint 2010’s problem domain expand even further or will it just refine and streamline what it already offers in WSS 3.0 / MOSS?

There’s enough information “out there” to safely say that the general answer is:

  • The problem domain is going to dramatically expand. 
  • End Users will find themselves even more empowered than before.

The Venn Diagram would be larger than this page and cause some IT Pros and CxO’s to reach for their Pepto. 

I believe it’s going to be a tremendous opportunity for companies to do some truly transformational things. 

No Bulls in My China Shop!

This sounds great, but from my point of view as a SharePoint consultant and putting myself into the shoes of an IT manager, I see this vision.  I own a China shop with beautiful plates, crystal, etc (my SharePoint environment).  I’ve rented a space, I’ve purchased my inventory and laid it all out the way I like it.  I’m not quite ready to open, but in anticipation, I look at the door to see if my customers are lining up and I notice an actual bull out there.  I look more closely and I actually see two bulls and even a wolf.  Then I notice that there are some sheep.  Sheep are so bad, but are they maybe disguised wolves?  I don’t want bulls in my china shop!

It gets worse!  When I rented the space, I couldn’t believe how nice it was.  Wide and open, terrific amenities, very reasonable price.  However, now I’m realizing that the wide open spaces and the huge door is just perfectly sized for a bull to come wandering in and lay waste to my china.

I’m pushing this analogy too far, of course.  End Users are not bulls (most of them, anyway) and IT departments don’t (or surely should not) view their user community with that kind of suspicion.  However, there is this sort of perfect collision taking place already in the the 3.0 platform that I expect will only get worse in SP 2010.  SharePoint already empowers and encourages End Users to define and implement their own solutions.

That’s great and all, but the fact is that it’s still a very technical product and still calls for the kind of vigorous business requirements analysis, design and general planning and management that technical projects require to be successful.  These are not the kind of skills that a lot of End Users have in their bag of tricks, especially when the focus is on a technical product like SharePoint. 

I’ve given this a lot of thought over the last year or so and I don’t see any easy answer.  It really boils down to education and training.  I think that SP 2010 is going to change the game a bit and it’s going to play out differently and in slow motion as companies roll out their SP 2010 solutions over 2010 and beyond.  In order to succeed, End Users will need to transform themselves and get a little IT religion.  They’ll need to learn a little bit about proper requirements analysis.  They will need some design documentation that clearly identifies business process workflow, for instance.  They need to understand fundamental concepts like CRUD (create, update and delete), dev/test/qa/prod environments and how to use that infrastructure to properly deploy solutions that live a nice long time and bend (not break) in response to changes in an organization.

In the coming weeks, I plan to try and provide some of my own new ideas, as well as link to the great work done by many other authors (on www.endusersharepoint.com and elsewhere) so that interested End Users can learn that old time IT religion.  Keep tuned.

</end>

Subscribe to my blog.

Follow me on Twitter at http://www.twitter.com/pagalvin

Technorati Tags: ,