BinaryWave Announces Release of Sonar Standard Version 1.1
SharePoint and Exchange Forum 2008
|
|
|
|
|
|
Home > Blogs > Eric Shupps
|
|
The new home of The SharingPoint blog. Refer to the previous URL(http://sharingpoint.blogspot.com) for older posts.
|
|
|
7/16/2008Today marks the official launch of the International SharePoint Professionals Association (ISPA). This is an exciting project that I have been involved with for some time. Go to the ISPA web site and Bob Fox's blog to get the official lowdown.
From my perspective, what excites me the most about this organization is the tremendous people that we have involved who all share a singular vision – to provide first-class support to SharePoint communities around the world. Sure, there are bigger and more well-known user group organizations (such as INETA and Culminis) but none of them focus exclusively on SharePoint. ISPA fills the gap where these groups leave off in order to give SharePoint professionals a single source for community-related information. Best of all, ISPA is organized and operated by SharePoint MVP's and SharePoint professionals with a proven passion for community efforts.
My personal thanks to Bob Fox and Darrin Bishop for involving me in this process over a year ago. They have worked tirelessly to make this a reality despite many setbacks and several false starts. Also, thanks to their fellow board members, Chris Regan and Natalya Voskresenskaya; you may not know them quite as well as Bob or Darrin but I assure you they are both committed SharePointers who have put a lot of heart and soul into making this project a reality. And finally, my thanks to all of my fellow evangelists around the world (full list) who share my passion for the overall SharePoint community and will work tirelessly to make this effort a success.
On a personal note, I will be reaching out to everyone in the South Central region of the United States (Texas, Oklahoma, Arkansas and Louisiana) whom I know personally or have contact information for in the near future to offer my assistance. My (rather ambitious) goal for FY09 is to personally visit each and every user group in the South Central region to spread the ISPA vision. If you are involved with the organization or operation of a SharePoint user group (including code camps, tech fests, or any other community efforts), or would like to start one, please contact me directly (eshupps [at] binarywave [dawt] com) with any questions, comments or ideas.
Long live the SharePoint Nation!!!
7/8/2008
Join me at the July meeting of the D/FW SharePoint Community. I will be doing a presentation on Configuring MOSS for Optimal Performance (hey, me, doing an Admin talk? What's the world coming to?) and Idera will be discussing various management and monitoring tools for SharePoint. During the Developer breakout sessions Rajesh Satluri will show an extension of the SharePoint people picker which utilizes custom data sources and I will demonstrate how to use event receivers to track project tasks and milestones. Stick around for general dev Q&A afterwards.
Here's the lowdown on each of the presentations:
Speaker: Eric Shupps, SharePoint MVP
Title: Configuring MOSS for Optimal Performance
Description: Learn how to adjust various configuration options in MOSS 2007 and WSS 3.0 to realize maximum performance benefits. Discover tips and techniques to optimize page load times, minimize bottlenecks, collect actionable metrics and improve overall portal performance. Gain insight into the relationship between IIS, ASP.NET, SharePoint, third-party applications and custom code in order to improve troubleshooting techniques and minimize performance degradation.
Speaker: Rajesh Satluri, Senior Architect, Argus Software
Title: Building a Custom People Picker
Description: Rajesh Satluri, Senior Architect with Argus Software, will present a custom people picker developed for MOSS 2007 that leverages the out-of-the-box picker functionality and extends it to various data sources.
Speaker: Eric Shupps, SharePoint MVP
Title: Using Lists, Event Receivers and Feature Receivers to Create a Project Tracking Application
Description: Discover how to use custom lists and event receivers to create a basic project management application, track progress against deliverables, and automatically update a real-time project plan. Learn how to use a Feature Receiver to activate list Event Receivers and deploy the application as a WSS Solution Package.
Click here for more information and to register for the event. See you there!
UPDATE: I have posted the presentation and configuration scripts from the first talk here. The complete Visual Studio solution for the developer talk can be found here. Enjoy!
7/4/2008To all of you in the US, and those Americans currently residing in other countries, I'd like to wish you and yours a very happy Independence Day (or, as my friends in the UK like to call it, "Getting Rid of the Colonies Day"). May your beer be cold, your barbecue spicy, and your fireworks explosive.
For all of my friends currently serving in the military, both at home and abroad, my hearfelt thanks for all you do for us. Freedom isn't free and you pay the highest price of all so the rest of us don't have to. Your sacrifice is appreciated in ways that we can never fully express. God bless you.
7/1/2008To make a very long story very short, I'm rebuilding a production server farm from the ground up due to improper sizing of the server root partitions when the project was initiated. Fortunately, I built the farm with full redundancy so I can pull servers out, have them rebuilt, and put them back into production without too much undue interruption. Early on in this process, when we discovered that the C:\ drive on each server was way too small, I tweaked a number of settings to keep various log files and such from filling up the root drives. Specifically, I moved all IIS logging, diagnostic logging, usage analysis and indexes onto the D:\ drive where there was more space.
This solution worked fine until it came time to put one of the rebuilt web front end servers, now with a much bigger C:\ drive, back into the farm. MOSS installed just fine but each time I ran the Configuration Wizard I got a bizarre System.IO.IOException error indicating that the "device is not ready". What really threw me off is that this error occurred during Step 2, when the WFE attempts to connect to the database server to join the farm. After checking all the database connections, validating permissions, using an ODBC connection to verify connectivity, and doing a hundred other things that had nothing to do with the actual problem, one of the network engineers I was working with said to me, just as a random comment, "I wonder if it has something to do with the fact that we no longer have a D:\ drive on this server". Aha!
When you change the log file locations in Central Administration, those settings apply to every server in the farm. Apparently SharePoint checks to make sure those directories exist before it begins the process of provisioning files to the specified locations (wow, someone finally coding something pre-emptive into the stack – I love it!). I knew something was out of whack based on the error description – network connectivity issues rarely show up as System.IO errors – but the fact that it threw the exception during the database connection task really threw me off.
The moral of this story is to make sure your local directory structure is correct before joining a new server to an existing farm. 'nuff said. 6/29/2008I posted last week on my decision to ditch the Tablet PC platform and switch to a Macbook Pro. Unlike many others who run some flavor of Windows in conjunction with the Mac OS, I have absolutely no interest in using OS X, Y, Z or any other flavor of Jobsian operating systems. My primary reason for buying a Macbook Pro was to get the most powerful machine possible in the smallest form factor. After much research I determined that the Macbook Pro fit this bill better than the Lenovo T61P or any of Dell's offerings (that, and the constant harping from Andrew Connell and Spence Harbar, pushed me into the Mac camp).
So I went forth into the bold unknown, reformatted the hard drive, and proceeded to install Windows Server 2008 (gotta have that Hyper-V; Virtual PC and VMWare are so last year). This is where I hit my first challenge – the Windows installer disk options kept giving me grief about not being able to install on a GPT partition. I've been living in SharePoint for so long I didn't have a clue what GPT was so I had to go do some research on that; come to find out, I just needed a bit of help from the diskpart utility to clean things up and get back to an MBR partition that would make Windows happy. Thanks to a wicked fast processor and x64 bits, I had Win2k8 up and running in less than 20 minutes.
The BootCamp drivers helped get all the various hardware pieces playing nice with each other but it took me a few days to realize that they needed to be updated. The nVidia control panel wasn't recognizing external displays and the function keys were a bit tempermental; I expected the BootCamp update utility to find a new version automatically and fix things up for me but it was not to be. I had to download the 2.1 version (236MB? Does it really need to be that big?) then all was good. Well, sort of.
I know there are legions of Mac fanboys (and girls) who think that the minimalist layout of the Macbook keyboard is the ultimate expression of notebook Zen but they're just plain wrong. The PC guys definitely have the leg up here – keyboard shortcuts for simple tasks like enabling/disabling wireless and switching external displays can be found on every PC notebook keyboard in the world. But not on a Macbook. I guess 'cause that would lead to an unbalance in the universe and throw the earth off its axis, causing another Ice Age or something; I don't know what the excuse is but it's just plain stupid. And so is the ultimate expression of Fruity idiocy – a single mouse button. C'mon guys, it's 2008 not 1984. Get with the times and give us a two-button mouse. Did I mention that there's no "Delete" key on the Macbook Pro (or, l should say, the Delete key doesn't do what it's supposed to – it's a Backspace, not a Delete. Ugh.)?
So step one is to download SharpKeys and get to remapping a few keys. F12 now functions handily as a Delete key so I can get back to work without cursing this peculiar lack of functionality. The Control key is also in the wrong place, just like the old Toshiba keyboards, but I suppose I can live with that rather than remap it and have all my external keyboards get messed up. What really stumped me was enabling/disabling wireless to save power. How in the world did this simple task overlooked? Maybe it works by some sort of Jedi mind trick in OS X but I couldn't find any way to make it happen in Windows. I tried PowerShell, which did a fine job of disabling the wireless network adapter but that wasn't good enough – I needed to disable the actual device to stop the power consumption (and I want to turn off Bluetooth at the same time). I looked into writing a C# app to do the work but I quickly lost interest in dealing with all sorts of driver level manipulation and the Setup API. After some searching, I found the devcon utility but I couldn't get the old download link to run on the x64 version of Win2k8. After some poking around I found the correct version of the utility on the Windows Server 2003 ISO under \SUPPORT\TOOLS in the support.cab file.
So I whipped up two quick batch files to enable and disable wireless devices:
REM Disable WLAN and Bluetooth
@ECHO OFF
c:\download\microsoft\devcon\devcon.exe [disable][enable] *VEN_14E4*
c:\download\microsoft\devcon\devcon.exe [disable][enable] *PID_820F*
c:\download\microsoft\devcon\devcon.exe [disable][enable] *VEN_11AB*
NOTE: If you use the scripts, make sure you first get the correct version of devcon.exe (x86 or x64) then get the hardware ID's from Device Manager. Use the status switch to find the right combination of hardware ID text to isolate the call to a particular device. The first line of the script is for wifi and the second is for Bluetooth (the ID's may be different on your machine). I also chose to disable/enable the built-in Ethernet to save just a little more power; this may or may not work well for your configuration.
I then created a shortcut for each script and assigned a key mapping to run each one – CTRL + F4 for Disable, ALT + F4 for Enable. Not exactly what I wanted (a single Fn + Key would be ideal) but it was the best I could come up with in a short period of time. If anyone has a better answer for this I'm all ears.
I still haven't found a solution for switching displays. The new nVidia drivers added a link to the desktop preferences menu to bring up the control panel to manage external displays but that's a crappy workaround. Why can't I just have a function key that toggles through the display options like every PC notebook keyboard? I guess that's too much to ask. It would also be nice if some genius at Microsoft hadn't decided to completely remove the Mobility Center from Win2k8. What in the hell is that all about? What, are they going to sell fewer OS licenses because people can install it on their notebooks and use it as a workstation? We can get it to look like Vista and do just about everything else on a notebook but heaven forbid we have access to that demonic Mobility Center – that would ruin EVERYTHING. Just once I'd like to sit in on the meetings where these kinds of decisions are made with a low-power Taser so I can shock middle managers back to reality every time they arrive at boneheaded conclusions that they think are in somebody's best interest other than the actual user of the product.
As for battery life, I'm not so impressed on that front. Even after my tweaks to turn off non-essential hardware I still can't get the Windows battery meter to show any more than 3.5 hours on a full charge. I'm guessing it has something to do with the graphics card, which is a rather big beast compared to the integrated Intel graphics I'm used to, but it's going to be a real bummer on long flights. AC says he gets 4 hours out of his; maybe he knows some secret I don't or he's working in Vista and not in a server OS. Either way, it would really be nice if we had some additional options to tweak the power profiles to get more juice. Anyone know of a way to adjust power settings for the nVidia GeForce 8600M GT?
On a final note (at least until I discover a few more things that drive me nuts), Hyper-V screams like a banshee with its ass on fire. My VM's are running happily with absolutely no lag whatsoever; working inside a full-screen VM is just like working natively on the desktop. And the ability to spin up a VM automatically on startup is beyond cool; just open up the Hyper-V manager or RDP into the VM and I'm ready to lay down some SharePoint code in a full MOSS environment in seconds. Since that's what I bought the machine for I'd have to give it a solid A-. Great form factor, great performance, some lack of attention to detail on small productivity issues.
Stay tuned for more adventures in the ongoing saga of running Windows Server 2008 on a Mac platform. I think I need a drink now… 6/25/2008
Let me begin by saying that I absolutely love the Tablet PC form factor and the Inking experience. There is nothing more intuitive than picking up a pen and interacting with a digital interface (short of touch but that falls short when you want to write something down). If you don't believe me, put a normal PC with a mouse and a Tablet PC with a pen in front of a three-year-old and watch what happens. They'll have a masterpiece drawn in fourteen different colors on the Tablet before they ever get the hang of left clicking that mouse.
That being said, I have been forced to bid the Tablet PC adieu. While the Ink experience may be intuitive, easy to learn, convenient and even productivity enhancing (I am so going to miss sketching out quick architecture diagrams in OneNote), Tablet PC OEM vendors are complete morons. For some reason, geniuses at all of the major OEM's - including Dell, Toshiba, Fujitsu, HP, Asus, and all the rest - have decided amongst themselves that only college students with limited productivity requirements want or need a Tablet PC. They have collectively determined that innovation in this sector is completely out of the question and that only low-powered glorified notepads will sell in the marketplace. To you, Mr. 1.2GHz-and-One-Gigbyte-of-RAM-Should-Be-More-Than-Enough-for-Dumbasses-Who-Buy-Our-Products corporate marketing guy, I give you a one-fingered Texas salute.
One the one hand, we have Apple, who can make a decently performing machine that's half an inch thick with a 13.3 inch screen (although lacking any useful ports whatsoever), and on the other the buttheads at HP who think that a 12.1" glossy display in a 2" thick monstrosity that weighs 6 pounds and lasts 2.5 hours on a charge is conducive to written input. How many idiots in R&D got paid big bucks to come to that stunningly idiotic conclusion? Dell can figure out how to make a thin convertible tablet but can't manage to add a super-slim optical drive or a processor that can actually do anything besides run Outlook (on a very good day)? How many years did they spend developing the XT? Stupid. Stupid. Stupid.
But worst of all by far is the lack of 64-bit support from Tablet PC OEMs. This is 2008 not 1998 - x64 ain't just for servers anymore. Even Microsoft, despite their many shortcomings and foibles, is smart enough to include full pen support in Windows Server 2008. In fact, I can begin to understand Bill Gates' frustration in his retirement interviews when he talks about the missed opportunities for natural interfaces. It must make him scream in agony to see all the work Microsoft has put into inking be foiled by the boneheads that sell PC hardware.
Just in case anybody still cares, the reason that Tablet PC's haven't taken off is because the corporate screwups at these manufacturers have never asked real users what they want. If they had, they would realize that we want the XT form factor (with at least a 13.3" display option - ferchrissakes we don't want to go blind squinting at the thing) with full PC functionality - fast processors, lots of RAM, big hard drives, good battery life, comfortable weight. By all that's good and holy, if the hippies in Cupertino can fit a 15" top-of-the-line PC into a 1" form factor that only weighs 5 pounds somebody ought to be able to figure this out. Oh, and by the way, making us lug around "portable" slice batteries is stupid beyond all comprehension; if we wanted to do that, we wouldn't be asking for something thin, now would we? And if I ever get a hold of the living brain donor at HP who thinks that glossy screens and inking go together I'm going to run him over in my truck and gut him like a deer.
So what now? After trying four different tablets over the last two years, I am retiring from the inking scene and returning to a boring old notebook. What good does scribbling on the screen do if I can't even run Virtual PC effectively, much less Server '08 with Hyper-V? I may still carry a small USB tablet pad with me for sketches and diagrams on the fly but I won't come back to convertibles until at least one of the manufacturer's gets their head out of their you-know-what. Not that they care, since they don't talk to users of their products in the first place.
Just to show you how far I've come in my quest to do my job without interference from technology, you will find me toting a shiny new Macbook Pro with me from now on. Personally, I blame AC and Spence for talking me into buying an accursed Cupertino Fruit Machine (I'm sure the Redneck Technology Council will be notifying me any day now of my explusion from the Bubba Club). I could have gone with a new ThinkPad but, as AC pointed out while he was here in Dallas recently, you can get all the specs of the MBP in a classic Wintel machine, you just can't get them all in a five pound, one-inch thick package that you can actually use while seated in steerage (that's Coach Class for you non-Road Warriors). You win, AC - I have been converted.
So I will have to be content with looking on wistfully as my former Tableteer compatriots continue to doodle, sketch, point, and ink their way into the future. My only consolation will be that I can finally get some real work done for a change without cursing another sputtering VM. So long, Tablet PC. You were a slow, untrustworthy and frustrating friend, but I will miss you nonetheless.
Now, back to running Visual Studio on multiple MOSS VM's in Hyper-V at warp speed. I'm feeling better already...
6/23/2008Thanks to fellow SharePoint MVP Goran Hussman I'll be presenting two talks at the SharePoint and Exchange Forum (Warning: Link is a machine translation – please don't blame me for the garbled Swedish!) near Stockholm, Sweden in September. I'm really looking forward to this trip for a few reasons: 1) I've never been to Sweden but I have some good friends who are Swedish and I've always wanted to visit, 2) I hear the nightlife is fantastic, 3) It will be a welcome change from 100+ degrees in Texas for the entire summer, and 4) How can you go wrong in the country that brought us ABBA, Europe and Ace of Base?
Here's a synopsis of my sessions:
1. Full Speed Ahead: Developing High Performance Applications for Microsoft Office SharePoint Server 2007
Discover tips, techniques, tools and best practices for creating high performance MOSS 2007 applications using Visual Studio 2008, C#, the SharePoint object model, web services, and the latest features in the .NET 3.5 framework. Learn how to measure application performance, optimize code execution, and configure SharePoint to support data intensive, highly transactional line-of-business applications.
2. From .NET to SharePoint: Introduction to SharePoint Programming for .NET Developers
Learn how to leverage your existing .NET skills to begin creating scalable, secure, and high-performance SharePoint applications. Take a quick tour through the creation of web parts, discover how to extend SharePoint to remote applications using web services, and learn how to package and deploy custom solutions from within Visual Studio 2008. Find out what tools and utilities are available to make SharePoint development faster, easier, and more efficient.
I'm pretty excited about both talks. For a couple of years now I've wanted to show SharePoint developers the true impact of varying programming decisions on application performance but I've never had a way to truly quantify my recommendations. Now that we have Sonar, I can finally demonstrate how small changes in the way we interact with the object model can have big performance implications. This is my first opportunity in a formal setting to present this information and I have a feeling it will be well received (at least I hope it will, or my plans for TechEd next year are in jeopardy ;-)). I'll be giving a scaled-down version of the talk at the SharePoint UK User Group meeting in August to try it out on a pretty tough crowd – no way I'll sneak anything past Ben Robb, Spence Harbar, Nick Swan or Steve Smith so I'd better be on my toes.
The second presentation is an outgrowth of the intro I did at TechEd Speaker Idol for .NET developers just getting their feet wet in the SharePoint world. The large number of devs who approached me after that wanting to know more about SharePoint development convinced me that a more detailed presentation is needed on this topic. This is no 200-level intro, though – I'm going deep into my "stacks" (the wildly popular slide that contrasts what you have to build by hand in ASP.NET and what comes out of the box in SharePoint) to show how .NET developers can get a jump start into SharePoint programming. Trust me, there will be lots of code and demos – it's only 300-level because I have to skim across a bunch of topics in a short time frame; no marketing-speak here – this is definitely a talk for code monkeys.
So if you happen to be in that part of the world come September, join me at the SharePoint and Exchange Forum in Sweden for some good times and good information. Fellow MVP's Goran Husman, Todd Klindt, Steve Smith, Penny Coventry, and Reza Alirezaei will all be there, which makes for a good mix of IT Pro and Developer content (and you can bet on some good after-hours entertainment or my hat ain't black) . Don't miss out!
6/20/2008
At the DFW SharePoint Community meeting this week we had a lively discussion about SharePoint web services and how difficult they are to debug. This actually has nothing to do with SharePoint per se – all methods that return nothing but strings are hard to debug – but it is a common pain point so I promised to post a code sample of how I deal with it.
A common scenario when working with web services is to pass in a <Method> batch to perform some operation, such as updating items in a list. If all goes well, SharePoint will respond to the invocation of the UpdateListItems method with a block of XML that contains a status code of 0x00000000, meaning that the operation was successful. If it fails, it will return an error status code instead of all zeroes and (sometimes) a description of the error. The problem, of course, is that both return values look the same from a code perspective; no exception is thrown and your method continues on its merry way as if all is good and right in the world. No Try…Catch block will ever trap this kind of error. So what do you do?
The answer is to write a quick routine to parse the return XML values and look for any node that has a return value other than 0x00000000 and either send back your own error text (if the method returns a string, for example), throw a system exception that will trip the Try…Catch block, or both. Keep in mind that each operation that you perform will have a corresponding XML node with a success/fail value; you have to loop through all the return nodes in order to insure that each operation was successful. The following code illustrates building the method for the UpdateListItems operation, passing in the required values, and parsing the return XML to determine if any errors are present. In this example I'm showing how to use both a return value and throw an exception; use either or both according to your needs.
|
try
{
// Create a new XML document to contain our operation nodes
XmlDocument xmlUpdate = new XmlDocument();
// Create the required nodes and insert the Update XML
XmlNode ndBatch = xmlUpdate.CreateNode(XmlNodeType.Element, "Batch", "");
ndBatch.InnerXml = "<Method ID='1' Cmd='" + sMode + "'>" + sUpdateFields + "</Method>";
// Instruct SharePoint not to break after the first error is encountered so we can get back a complete list of failed operations
XmlAttribute xmlAttribErr = (XmlAttribute)xmlUpdate.CreateNode(XmlNodeType.Attribute, "OnError", "");
xmlAttribErr.Value = "Continue";
ndBatch.Attributes.Append(xmlAttribErr);
// Pass our XML to the UpdateListItems method along with the target List name
XmlNode xReturn = listsvc.UpdateListItems(sListName, ndBatch);
// Instantiate a new XML document object to hold the return value(s)
XmlDocument xmlResult = new XmlDocument();
xmlResult.LoadXml(xReturn.OuterXml);
// SharePoint XML always uses a fixed namespace; you'll need your own NamespaceManager object to parse the return values
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmlResult.NameTable);
nsMgr.AddNamespace("sp", xReturn.NamespaceURI);
XmlNode ndRoot = xmlResult.SelectSingleNode("sp:Results", nsMgr);
// Find the ErrorCode node, which exists for all operations regardless of status.
XmlNodeList nlResults = ndRoot.SelectNodes("//sp:Result/sp:ErrorCode", nsMgr);
// Loop through the node collection and find each ErrorCode entry
foreach (XmlNode ndResult in nlResults)
{
// Check the value of the node to determine its status
if (ndResult.InnerText != "0x00000000")
{
XmlNode ndError = ndResult.NextSibling;
string sError = ndError.InnerText;
// Set the value of string variable to hold the error code
sStatus = "Update operation failed for " + sListName + ": " + sError + ".";
// If you want to trip the Try…Catch, throw and exception of whatever type suits you
throw new System.Exception();
}
else
{
sStatus = "Success";
return sStatus;
}
}
}
catch (Exception e)
{
e.Message = sStatus;
return sStatus;
} |
The final result is pretty self-explanatory; either an exception that you can trap while debugging or a return string that you can parse (I know, I know…returning a string to circumvent a method that returns a string is counter-intuitive and generally a bad coding practice – that's why I added the exception code). This works for most SharePoint web services that return ErrorCode values (which some do not) so Your Mileage May Vary depending upon what you are trying to achieve.
6/18/2008Many thanks to friend and fellow SharePoint MVP Andrew Connell for presenting at the June meeting of the DFW SharePoint Community last night. Andrew talked about developer and administrator tools to a packed house (the slides can be downloaded here). Afterwards, the Developer community spent some additional time discussing various toolsets, looking at the new Visual Studio Extensions for SharePoint (VSeWSS), and sharing tips and techniques for making SharePoint development more productive and enjoyable.
In celebration of our second anniversary and the fantastic turnout by the developer community in North Texas (thank you all), we gave away a free copy of Visual Studio Team Suite with a one-year MSDN Premium subscription (a whopping $10,000 value) to one lucky attendee – so if you weren't there you really missed out. This was our biggest developer group yet and we had a great exchange of ideas and information. Next month we hope to have a few community members present real-world solutions and share their experiences navigating the wild jungle of SharePoint development with the rest of us.
My thanks to Dan Hooper and Suzanne Kocurek of ISI for organizing the event and for giving us the opportunity to grow and transform into a dynamic community. Thanks also to Jonathan Swartz and Rick Herrera of Microsoft for all their support and hard work on our behalf. A nod also goes to my fellow Advisory Committee members for leading the Beginner and Advanced groups, providing great ideas and extending a helping hand to all the new folks. Finally, thanks to all of you who make this such a fantastic community.
Here's to another great year of fun, fellowship and learning. Happy SharePointing!
6/17/2008I author all of my blog posts in Word 2007. Why? Well, first, I'm in Word all the time anyway and it's a familiar environment; second, the blog template allows me to work offline and compose my posts for uploading later; and finally, because the formatting (especially of code blocks) is much closer to what SharePoint uses in the WSS blog site definition. I do get frustrated, though, especially when I constantly have to look through my favorites in IE to get the blog URL's for other MVP's and SharePoint bloggers while creating a new post. I swear I spend more time cutting and pasting URL's than I do actually writing anything of any value (some would argue that there really isn't any value at all, but they're mostly admin types and can't be held accountable for their ignorance).
So I was cursing my miserable situation at TechEd Developer Week within earshot of fellow MVP Stacy Draper and he felt so sorry for me (or was just tired of my bellyaching, I'm not sure which) that he decided to do something about it. Stacy walked over to the Visual Studio 2008 TLC stand, fired up VS and started coding away. Over the next couple of days (with an able assist from Mike Houston) he whipped up a Word add-in that shows all my IE favorites in a tool pane. I can expand the SharePoint Bloggers folder, find the blog I want to link to, copy and insert the URL. This may sound trivial but it saves me a TON of time.
If this interests you, Stacy has posted the project to CodePlex here. Mike suggested an enhancement to display links from a WSS site as well, which would be crazy cool, so if you have the time and inclination, download the source code and add some killer code to the project. And if you see Stacy wandering about (as he is wont to do), buy that man a beer – he deserves it!
Thanks, Stacy – SHAREPOINT NATION!!!
| Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/eshupps/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/eshupps/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/eshupps/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/eshupps/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/eshupps/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /blogs/eshupps/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /blogs/eshupps/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /blogs/eshupps/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /blogs/eshupps/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|