…to move on… I've landed a new blog location to call home… My time here on SharePointBlogs.com has been great. You can get my new blog at http://echef.chaosfarm.net… See you there!
jn
…to move on… I've landed a new blog location to call home… My time here on SharePointBlogs.com has been great. You can get my new blog at http://echef.chaosfarm.net… See you there!
jn
Well, I finally got an alpha release out there of my script generator… You can get a copy out on http://www.codeplex.com/nsot. It is a C# WinForm app (vs2008) that can generate scripts for building a MOSS Farm or a single server install. It includes all the options for installing and configuring an SSP, Excel Calculation Services, Indexing, as well as custom DB Names and specified ports. Still haven't had time to do the "deployment" part I wanted to (which would automatically install as well as create the scripts)… We'll see if it stays a feature in the future.
Give it a shot, kick the tires, and see what you think… This release is specific to MOSS, it will not work with WSS.
So there have been a few times where a user has wanted to jump to a specific record number in larger lists… This little bit is nice on the top of the page. Add a content editor web part to the top of your page and add the following code in the source editor:
<script language="javascript">
function SubmitSearchForm()
{
var IdToGet = document.getElementsByName("IdSearchField")(0);
if(IdToGet)
window.location.href="dispform.aspx?Id=" + IdToGet.value;
}
</script>
<table cellpadding="5">
<tr>
<td>Enter the ID number to filter on</td>
<td><input type="text" name="IdSearchField" value=""/><input type="button" value="Go" onclick="java-script:SubmitSearchForm()"/></td>
</tr>
</table>
Take out the "-" in java-script above (Blog blocks it as a script otherwise)…
Ever notice that there is not way to centrally manage or get information about email aliases? Oh that annoys me! So I did what any self respecting geek would do, and I started taking it apart… Here are a couple SQL utility scripts to help you get more out of your SharePoint! Standard Disclaimer – Don't mess around with the DB… You can break stuff! Now, here's the goods:
– SQL Script to find out where an Email Alias is in use
– Written by Josef Nielsen, 2008
– nielsenjl_at_ldschurch.org
– /echef
– Run this script against the Farm Configuration DB
SELECT [Alias], [Deleted], [SiteMap].[Path], [Objects].[Name], [ListId]
FROM [WSS_Farm_Config].[dbo].[EmailEnabledLists]
INNER JOIN [SiteMap] ON [EmailEnabledLists].[SiteId] = [SiteMap].[Id]
INNER JOIN [Objects] ON [SiteMap].[DatabaseId] = [Objects].[Id]
– Change this value to the Alias you are looking for
WHERE [Alias] = 'MyEmailAlias' – This is the Name part of Name@SharePoint.server.com
– Run this script against the Content DB that the Site resides on
SELECT [tp_Title], [tp_ServerTemplate], [tp_ItemCount], [tp_Description], [tp_EmailInsertsFolder], [tp_EmailAlias], [tp_Fields], [tp_ContentTypes], [tp_DefaultWorkflowId]
FROM [WSS_ContentDB_01].[dbo].[AllLists]
–Replace the GUID Below with the GUId of the List you are looking for
WHERE [tp_Id] = 'A4BB3401-3161-430A-B330-42143C3DE879'
So, what do you get out of this? Well, the first script, run against your Config DB will give you the managed path and site collection name where that alias is in use. It will also tell you which content DB contains that site collection. It also gives you a GUID for the List.
In the second script, add the GUID you got for the list and run it against the Content DB that was also specified by the first script. This will give you the friendly name of the list that uses this alias, as well as a few other yummy bits of data about this list.
Enjoy!
So for surveys and such I thought it would be nice to pre-populate a SharePoint List "new" form with some data from the link… This makes it very nice for surveys and such from users. In this case it was to automate and remove error from some user feedback for our helpdesk. So what I did was make the URL contain an extra parameter for a field value, then I added some JavaScript to the NewItem.aspx page in that list. This script is specific to one field one (as you can tell by the long auto-ID). Here is the script I used:
function getURLParam()
{
var strReturn = "null";
var strHref = window.location.href;
//find the "Ticket" parameter
if ( strHref.indexOf("?") > -1 )
{
var strQueryString = strHref.substr(strHref.indexOf("?")+1);
var aQueryString = strQueryString.split("&");
for ( var iParam = 0; iParam < aQueryString.length; iParam++ )
{
//find the Task Parameter
if (aQueryString[iParam].indexOf("Ticket=") > -1 )
{
var aParam = aQueryString[iParam].split("=");
strReturn = aParam[1];
break;
}
}
//insert parameter to Task Field
//This should be one line, not two…
//the field name is too big to fit in the blog window
document.aspnetForm.ctl00_m_g_2a4ef5db_f38c_4101_b1e9_bd5bce3e5a04_
ctl00_ctl04_ctl01_ctl00_ctl00_ctl04_ctl00_ctl00_TextField.value = strReturn;
}
}
_spBodyOnLoadFunctionNames.push("getURLParam");
Notice the execute line, using _spBodyOnLoadFunctionNames. This is required to get the script to execute after all the content has been populated. The URL to feed this function would look something like this:
http://sharepointserver.company.pri/sites/feedback/lists/tickets/NewItem.aspx?Source=http%2A%2F%2Fsharepointserver%2Ecompany%2Epri%2Fsites%2Ffeedback%2FPages%2FThannkYou%2Easpx&Ticket=123456
Two things to note… first, the "Source" parameter needs to be Escaped (using "%" codes for all symbols), and second, that it doesn't have to be where you came from… It is actually where you go to when you click OK or Cancel. In this case, I'm sending the user to a Thank You page since they have filled out the feedback. This can be anything, including a custom page with code to close the browser window if you want.
You've got to love the "Actions, Connect to Outlook" function in SharePoint lists… Handy for offline viewing of data, nicer GUI for detail entry, etc. Wouldn't it be nice to automate the connection of these things for a team or a project, or even a division or company?
You can force these connections via script… They are URL based using the "stssync://" protocol, which depends on the Office WSS services, a shared component of the desktop Office Suite. You can find the specific call to connect a library to Outlook (much easier to let SharePoint format it that create from scratch) on any of the AllItems.aspx default list pages for a library or list that is "Outlook Friendly", including Tasks, Calendars, and Document Libraries. View your page source (on an IE browser, as this is not available in other browsers) and looking for the following:
<ie:menuitem id="zz23_OfflineButton"
There is a lot more to this element, which is jammed on a very long line containing about 6 of these <ie:menuitem> elements. Specifically out of this element you want to get the "onMenuClick" action, which is a javascript call to "ExportHailStorm". You will need a copy of this function in your script as well, as this is the function that creates the stssync call. It is located in the init.js file, located in 12 emplateslayouts1033 folder (for US versions)…
The call to ExportHailStorm should look something like the code below, although I've added line breaks to make it readable.
ExportHailStorm(
'documents',
'http:u002fu002fsharepoint.company.comu002fteamu002fsitenameu002fsandbox',
'{ac5b6eaf-744a-4f73-a2e1-6e35b81f109e}',
'Sandbox',
'Test Files',
'u002fteamu002fsitenameu002fsandboxu002fTestu002520Files',
'','u002fteamu002fsitenameu002fsandboxu002fTest Files');"
You can use these parameters with the MS code in init.js for ExportHailStorm to make your own script with multiple connections for Outlook. Each call to ExportHailStorm ends in a window.location.href call to the newly created link, which for a document library will look something like this:
stssync://sts/?ver=1.1&type=documents&cmd=add-folder&base-url=http:u002fu002fsharepoint.company.comu002fteamu002fsitenameu002fsandbox&list-url=u002fteamu002fsitenameu002fsandboxu002fTestu002520Files&guid={ac5b6eaf-744a-4f73-a2e1-6e35b81f109e}&list-name=Testu520Files&site-name=Sandbox
These strings can be captured and put in to a simple vbscript or powershell script or even a bat file (run iexplore.exe <url>) and executed in a post setup command, a login script, or embedded in a web page on the intranet (ie, click here to connect standard outlook folders)…
For a few years now I have been making due with a simple notification system for MSCS fail-over clusters that implemented either a script, or later, an application that started as the last resource in the cluster to send an email letting me know the cluster group is online. The biggest problem with this is that it doesn't let you know when you have unrecoverable failures. It also is a pull-type polling device, on;y firing at intervals or when it starts up.
I decided to fix this. There currently is not much (if anything) that allows Cluster notification for the MS platforms in the OpenSource arena, so I jumped in a started a simple, yet useful project to make just that. The end result is the MSCS Watcher. It is a .Net 2.0 OpenSource project that utilizes the MSCluster WMI objects, specifically the EventResourceStateChange object. I also used the Cluster Automation API to grab the current state of the cluster for reporting in the SMTP notifications. This is the first cut at a push-style cluster monitor for me, a complete re-write of the previous MSCSWatcher I had made for personal use. The pervious version also included SQL tables for historical and current state data. I've removed those from this version to simplify things, but I'm thinking of taking another cut at it in the future and putting it back in.
Originally I was trying to write an event handler for the events raised from the API for ClusSrv, but this involved writing a Wrapper for C++ events, and I just didn't have the time to get in to that right now… I ended up using a ManagementEventWatcher to grab the WMI events thrown by the cluster service. My first thoughts for the actual notification was to allow it to fire an executable, to help try it in to other monitoring tools. I decided to discard that idea when I realized it really didn't do me much immediate good. Instead, I decided to have it simply fire off an SMTP message. That stuck with my goal of keeping it simple.
The basic functionality of this thing is that it runs as a service (I recommend clustering it on all nodes in your cluster) and waits around for any of the resources in the cluster to change their state. (ie online to failed, offline to onlinepending, etc.). When a state change event is detected, the service records the change and does a scan of the cluster group that holds that resource. It then does a little logic to avoid sending extra messages and if it determines the circumstances are right, it sends a summery of the cluster group that owns the resource that triggered the event.
I decided that it is such a pain that there really isn't much out there either in the form of OpenSource utilities for Clusters or sample code to work with them that I would just give the whole thing away… So it is out on CodePlex now… If you use MS Clustering and don't know when your cluster fails over, go grab a copy and try it out
Day three was quite a long one, filled with some great content. The day started out with a Keynote by Greg LeMond, the American Cyclist who won the Tour de France 3 times in the late-80's. He shared the amazing story of who he got to the top, only to fall and struggle back up to the top. His story is a great one, and shows his determination and character. A great summery of life he gave is that you never hit the last finish line. those looking the the finish line as the end, will hit an end. Those who always look to the next finish line will continue to progress. He gave some great insights on the current state of the Tour de France as well.
Joel Oleson and Bob Fox (with a guest appearance by Todd Klindt) started off the morning's technical forums with a great presentation on the benefits and features available when using SharePoint 2007 on Windows and SQL 2008. Joel did most of the talking, including some bad jokes
, while Bob drove. Joel hinted strongly (with a "wink, wink") that this is the last version of SharePoint that will support 32-bit environments. He said that the performance gains of the 64-bit environment were so great, that there really was no reason anyone should be staying with 32-bit server environments anymore. Key Windows 2008 features shown off were the Server Manager, which replaces Computer Management, the Event Viewer, which now has alerting and additional functionality, and the task scheduler. Another major key feature touted was the performance improvements over previous Windows versions. Both the SMB core and the TCP stack have been overhauled to give major performance improvements on file transfers. This is up to 500% in some cases (from what the slides showed anyway)! IIS7 improvements showed a 10% gain in requests that could be served, which is pretty substantial in and of itself. Todd Klindt was invited up to show off a couple key benefits in SQL 2008. Earlier, Tom Rizzo had quickly shown us SQL redundancy, but Todd focused on Admin immediately justifiable gains. The two he showed off were native encryption, to increase the protection of data physically, and native compression, which will save about 20-35% on disk and time in backups. Not quite as good as the benefits RedGate will give you, but pretty darn good for Out-of-the-Box. The demos were interspersed with jokes about Bob 1.0, Eric Shupps' hat, and joking promises that AC would buy the first round at his SharePoint by Day, SharePint by Nite event that evening.
One would think that would fill an entire day… but wait… There's more! Heather Solomon did a two-part branding show in the main ballroom (Huge! – 4 monster projections screens!). I missed the first, as I couldn't pass up an opportunity to watch Bob at work, but I stopped in for the second. Heather's a great resource who really knows her stuff, and she passed out some great hints and tips on getting started in branding SharePoint sites. Her strongest tips were to either hire someone or learn CSS inside and out. It is VERY useful in branding SharePoint. For those learning CSS, she recommended a few of the O'Reilly books and the Zen Garden CSS site. Other hints she dropped were to make sure you use Contextual Selectors in your CSS and QA, QA, QA… You never know what other bit of SharePoint might share that 1 style (out of over 4000!), so make sure you test fully.
I stopped in on Todd Klidnt's STSADM session to see if I could learn a few new tricks… I'm pretty good with a command line, but I've heard Todd knows his stuff… Although the session started off a bit slow (mostly because of a big lunch that had everyone snoozing), Todd showed off just what you could do with that one command-line utility (with over 180 commands in it!). Some of the things I gleaned were around Backup and Recovery (I don't use the native backup, I use AvePoint's DocAve product), the DatabaseRepair operation for cleaning up orphaned objects (I'm having this problem right now), and some of the new functionality in the MergeContentDBs operation, which can be used to merge or separate Content Databases.
Last for the day, I parked in Ted Pattison's Solution Deployment session. I thought my brain was full before! Ted showed off some great utilities and practices for building solutions, including a great tool he helped design called STSDEV, which has built in templates and MSBuild scripts for creating your .ddf and Manifest.xml, and more importantly, updating them as you work and compile! I'm downloading a copy for myself as I type this… He also showed some great examples of how to manually create feature receivers with OnFeatureDeactivated methods to manual undo changes you Feature may have made. Features do not uninstall the artifacts they install, nor will they overwrite existing files (ie installed, source updated, retracted, then reinstalled). His demo code is posted here, and shows some great examples.
Turns out that I've been pushing the torn ligaments in my foot a bit much this trip, and I'm having trouble walking, so I'm spending today reviewing my notes, downloading tools, practicing some of the tricks I've gleaned, and catching up on some of my workload! There looked to be some good presentations today, including a couple on using the new MS Extranet Solution Accelerator and of course Dustin's SPD presentation, which is always good!
So, the second day's down, and was a pretty good day… I did find out that the Vendor hall wasn't as good as I though, and they have been closing it during the sessions, which I suppose makes sense, but is annoying if you want to skip a session and check out some products… Oh well. I caught a couple good sessions today, starting with Todd Bleeker's Workflow from SPD to VS. It was a fast and furious session, and he didn't get a chance to complete the entire process, but he did get to show us some critical transformation steps, including an inside step that is not currently documented anywhere from Microsoft (although Paul Schaeflein will be blogging this very extensively)… this is the parent node that has to be added to the xml file for the Initiation Page… Specifically this is the <Instantiation_FieldML> tag for the Fields block and the <Initiation_FieldML> tag for the Parameters block. I look forward to seeing what Paul documents for this process…
I tried hitting a session from some of the Rangers on Performence, but the session before it over-ran by about 30 minutes (yes, not 3 or 5 minutes, but 30 minutes!)… By the time I got in there, the place was packed from people who just stayed from the previous session and folks that came in on the over-run and took seats… With it being standing room only, I bowed out and took the time to catch up on some work… It looked like it would be a good session, nothing revolutionary, but still good content. Not sure if thy hit Web Gardens, but I know they talked about BLOB caching and output caching, both of which are two edged swords that can really help, or waste memory, depending on your usage profile.
I grabbed a repeat performance from both Andrew Connell and Todd Baginski, who both have given these presentations a number of times… As usual, they both hit the mark with their content… Andrew's topic was deploying solutions in a publishing environment, but it really was repeatable, dependable development process in SharePoint. He blazes through it pretty quick as he is very familiar with the content, and covers a lot of ground. I've put some of his practices in to play from the last time I caught his presentation, but wanted the refresher for dealing with content types and site columns in features. He was unfortunately struggling with a rough cough, but his voice held through… Hope your feeling better AC!
Todd has a great presentation on BDC utilization and how easy it is, which I caught months ago, but haven't used. As usual, Todd is a great presenter with a lot of knowledge, and is always willing to share that knowledge, even offline through emails. Todd wrapped his entire demo site up in a site template that he is posting on his site… Go check it out even if you missed the conference… He's included sample code and everything…
I ended with a session by Bill English from Mindsharp on Search. He gave some great diagrams and discussion on Search on the theory behind making things searchable. He focused on why taking the time to build a taxonomy is important, as well as the role of social computing (MySites) in finding information. It was primarily a slide-deck presentation, compared to AC's and Todd's mostly demo sessions, but had some good diagrams and architecture information. One great quote he through out is that "dumping file-shares and folders of documents in to SharePoint with Taxonomy and metadata is just automating Chaos…", playing of course on the quote from Dorothy Graham.
Good content, and tomorrow looks to be even better…
Boy, I wish Connections had been setup as good as this one is… From the starting blocks, I have been impressed with how good this conference is setup. I unfortunately am starting this conference off with a torn ligament, but I'm limping along as best as possible. I ended up missing the first couple of sessions today, unfortunately, due to both production issues and my foot..
I started the day off by trying out public transportation and taking the bus… It wasn't too bad, except when I went to come home I realized the route getting there was a one-way street, and I didn't know what street the return route was on… I ended up walking all the way back to my hotel, which was about a dozen blocks away… Could have been better, but I brought it on myself
My first impressions: There are a lot of attendees, and they are scaled up correctly to handle all of us. There seems to be enough staff around all the time, and enough food. Rather than barcodes or swipe cards, they are using RFID chips in the card (big-brother is watching!)… So vendor scanning is pretty simple. Another thing I really like is that unlike the recent Connections event, the vendor hall was open the entire time. I started off in the hall, chatting with a few folks while the crowds were small… I got a chance to talk to Ben Curry at the MindSharp booth… If you haven't seen his blog, check it out… He has some great resources there. I used his stsadm white-paper, along with a post from Joel Olsen and another from Alpesh Nakars to create a script utility to generate automated install scripts for full farm installations (I'll post on that and see about releasing it on CodePlex when I get the rest of the bug out of it). He's a great guy and a good resource…
I also got a chance to drop by the SharePoint Bootcamp booth and visit my friends from SharePoint Experts, Todd Baginski, Dustin Miller, and Heather Solomon. Todd pointed me at a cool new option from Microsoft called "Shared Source" that allows customers and partners to get access to portions of source-code for Windows and major software, including WSS. Get more details here. He also clued me in on the awesome snowfall this year in Colorado (He's a ski-nut, if you didn't know!).
I got a chance to talk to so vendors about some very interesting and promising new products, including the new search suite from BA-Insight and the eSense Visualizer from NSE, but I'll blog about those another time.
I missed some of the beginning of the First Keynote from Bill Gates, but caught the last half of it… I cracked up at one thing he said, and had to write it down… When asked a question from the audience about competition from Google, and their productivity tools, he admitted that they are the industry standard for consumer search (currently, he joked), then said about their productivity/business tools. "The day Google releases a business productivity product is generally its best day… although I might be a bit biased."
The following Keynote by Kurt DelBene was good, but fast-passed… It had to be to get so much information in it. There were a few new SharePoint sites showcased I hadn't seen before, like Krogers, StarBucks Intranet, and Ford's Internal Marketing site. Also showcased was General Mills internal Marketing site search, which is a custom made Silverlight solution with rotating carousels and dragable results, result filtering and all sorts of goodness. A couple other nice resources I saw quick demos of (courtesy of Tom Rizzo) were the Cross Site-Collection SharePoint Configurator and the Extranet Collaboration Toolkit. Both very awesome toolsets.
Tomorrow looks to be loaded with excellent options, like AC's publishing demo, Todd's BDC presentation, not to mention Ben Curry's Automating installs presentation and Todd Bleaker's Workflow in VS presentation… Like I said, good stuff