ShareBlog

Gary Bushey's Blog
Maybe the XBox 360 does have a problem

I just dropped off my XBox 360 at my local UPS store to get the infamous red ring of death issue resolved.  Without me even saying anything the clerk behind the counter knew it was a XBox being returned!  Now this is not exactly a major UPS Hub we are talking about, it is a small store in a strip mall in Cary, NC.   Guess there may be a problem here and there with the 360 Surprise

Posted: Mon, Jan 12 2009 9:39 by gary | with no comments
Filed under:
New version of Visual Studio Extensions for WSS available

Good news:  Lots of bug fixes and some new features

Bad news: Still does not work with VS 2008 (but the next version should!)

Get more information here

So long and thanks for all the fish!

It is with mixed emotions that I announce I am taking a position with Microsoft soon.   I am happy because I feel that Microsoft is a great place to work and has many great opportunities (not to mention benefits!) but I am sad because I will no longer be a MVP and will not be posting to this blog anymore.

I have been a SharePoint MVP for the last 7 years (and if memory serves I am the only one of the original 6 left) and it has been a great 7 years.   Meeting my fellow MVPs, not only in SharePoint, has always been an experience and I have been lucky enough to meet some people that I felt were the giants in the industry.  I can only hope that this continues with my career with Microsoft.

I am not going to disappear into the woodwork.  As soon as I can I will start this blog on the MSDN blog and will post a link to my new site as soon as I get it setup.

So, in the words of the immortal bard, So Long and Thanks for all the Fish!

Gary

New video describing workflows for SharePoint in Visual Studio 2008

Explains some of the enhancements in Visual Studio 2008.  Can you say debugging?  =)   Also some talk about a new power tool that can take a SPD workflow and pull it into Visual Studio!!!!

http://blogs.msdn.com/vsto/archive/2008/01/17/sharepoint-workflow-tools-video-interview-with-john-durant.aspx

 

Posted: Fri, Jan 18 2008 6:00 by gary | with no comments
Filed under:
Microsoft to acquire Fast Search and Transfer

http://www.infoworld.com/article/08/01/08/Microsoft-bids-for-Fast-Search-and-Transfer_1.html

"By integrating Fast Search's products with SharePoint, and drawing on its worldwide network of partners, Microsoft hopes to bring Fast Search's products to a wider audience, it said Tuesday. "

You can find out more about Fast's products at http://www.fastsearch.com/

Overall it looks like good news for SharePoint searching.

Posted: Tue, Jan 8 2008 7:59 by gary | with no comments
Filed under:
Required fields and linking to other lists

Had an interesting problem come up at work the other day.   I had written some custom code that reads from ListA (which has 3 required fields one of which is a lookup into ListB) and outputs them.   Every so often the web part would come back saying that one of the entries was missing a field.   I could not figure out how an entry was being created that did not have all the required fields.  I tried the SharePoint UI and the dataview and both would not let me create the entry without having the required field filled in.

Turns out that you cannot create the entry without the required fields.  However, one of the fields is a lookup into ListB and if that entry is deleted from ListB then the field in ListA that was using that entry is now blank.  I can see why MS did this (and if memory serves this is different than how it worked in 2003) but what a pain figuring it out!

Of course the other option is to check every field to make sure it is not NULL before trying to process it and ignore those entries that were not completebut it was decided that we would not that in this case.

Posted: Sat, Dec 29 2007 9:18 by gary | with no comments
Filed under:
Hope to see you at the MS Office SharePoint Conference in March

I just got the confirmation from my company ( MicroLink) that I will be attending the conference in March.   If you are not familiar with it, check out the the confernece's homepage.  We are also an exhibitor so I will be spending a lot of time in our booth.  Stop by to check us out!

MicroLink

Posted: Fri, Dec 28 2007 7:28 by gary | with no comments
Filed under:
Create a web part to show sites and sub-sites

Saw a newgroup question the other day about how to do this in SharePoint 2007.  While the solution posted works quite well here is some code that I wrote that should accomplish what the user needs.   This will either start at the root of your site collection or a specified location (which may or may not be the site you are on).  It will then add all the sites and sub-sites to a treeview control, security trimmed of course.  Note that it uses recursion to view all the sub-sites so depending on how your system is architected this may take a while.  Guess a simple enhancement would be to add a parameter to limit the depth of your treeview.  You could get even more fancy and show X levels by default and then if you expand beyond that add the nodes dynamically.  Big Smile 

 

using System;
using System.Runtime.InteropServices;
using System.Web;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.WebControls;

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Publishing.Navigation;

namespace GBushey.Portal.SiteMap
{
    [Guid("1e900b56-1f33-4772-b5b9-9df73612c40d")]
    public class PortalSiteMap : System.Web.UI.WebControls.WebParts.WebPart
    {
        string _StartNodeName;
        bool _StartAtTopLevel = false;

        [WebBrowsable(true),
        Personalizable(PersonalizationScope.Shared),
        FriendlyName("Start at the Root Node?")]
        public bool StartAtTopLevel
        {
            get
            {
                return _StartAtTopLevel;
            }
            set
            {
                _StartAtTopLevel = value;
            }
        }

        [WebBrowsable(true),
        Personalizable(PersonalizationScope.Shared),
        FriendlyName("The name of the root level site")]
        public string StartNodeName
        {
            get
            {
                return _StartNodeName;
            }
            set
            {
                _StartNodeName = value;
            }
        }

        protected override void CreateChildControls()
        {
            this.ChromeType = PartChromeType.None;
          
            try
            {
                if (_StartAtTopLevel || _StartNodeName.Length > 0)
                {
                    PortalSiteMapDataSource siteMapDataSource = new PortalSiteMapDataSource();

                    siteMapDataSource.TrimNonCurrentTypes = Microsoft.SharePoint.Publishing.NodeTypes.Page;
                    siteMapDataSource.TrimNonCurrentTypes = Microsoft.SharePoint.Publishing.NodeTypes.List;

                    base.CreateChildControls();
                    PortalSiteMapProvider portalSiteMap = new PortalSiteMapProvider();
                    portalSiteMap.IncludePages = PortalSiteMapProvider.IncludeOption.Never;
                    portalSiteMap.IncludeHeadings = false;
                    portalSiteMap.EncodeOutput = true;

                    SiteMapNode startNode;
                    if (_StartAtTopLevel)
                    {
                        startNode = portalSiteMap.RootNode;
                    }
                    else
                    {
                        startNode = portalSiteMap.FindSiteMapNodeFromKey(_StartNodeName);
                    }
                    SiteMapNodeCollection nodes = portalSiteMap.GetChildNodes(startNode);


                    SPTreeView siteTreeView = new SPTreeView();
                    siteTreeView.ExpandDepth = 10;

                    siteTreeView.Nodes.Add(new TreeNode(startNode.Title, startNode.Url, "", startNode.Url, ""));

                    TreeNode topNode = siteTreeView.Nodes[0];
                    ProcessWeb(topNode, nodes);

                    Controls.Add(siteTreeView);
                }
                else
                {
                    Controls.Clear();
                    Label errorMessage = new Label();
                    errorMessage.Text = "Enable the web part to start either at the root node or at a specific Url";
                    Controls.Add(errorMessage);
                }
            }
            catch (Exception ex)
            {
                Controls.Clear();
                Label errorMessage = new Label();
                errorMessage.Text = "There was an error in the code.  Please contact your system administrator and rely the following " +
                    "message: " + ex.Message;
                Controls.Add(errorMessage);
            }

        }

        private void ProcessWeb(TreeNode topNode, SiteMapNodeCollection nodes)
        {
            try
            {
                foreach (SiteMapNode currentMapNode in nodes)
                {
                        TreeNode currentNode = new TreeNode(currentMapNode.Title, currentMapNode.Url, "", currentMapNode.Url, "");
                        if (currentMapNode.ChildNodes.Count > 0)
                        {
                            ProcessWeb(currentNode, currentMapNode.ChildNodes);
                        }
                        topNode.ChildNodes.Add(currentNode);
                }
            }
            catch (Exception e)
            {
            }

        }
    }
}

Posted: Fri, Dec 28 2007 7:20 by gary | with no comments
Filed under:
Process appears hung when deploying/retracting solutions

I have noticed from time to time that when I deploy solutions (using the Central Administrations, Operations, Solution Management) the Status field is stopped on either "Deploying" or "Retracting" for quite a long time.   While normally this is an indication of some error on one of the front-end servers (for example I have run into a memory issue quite a bit using when running 64bit) and that issue needs to be taken care of, once the issue is resolved how do you get rid of this?

If you go back to the "Operations" tab under the "Global Configuration" section is a link called "Timer job status".  Clicking on this will bring up a new window that lists all the SharePoint jobs currently running and what server the job is running on.  Towards the bottom of the screen will be the job that concerns the deploying/retracting of the solution.   The name of the job starts with either "Windows SharePoint Services Solution Retraction for" or "Windows SharePoint Services Soltion Deployment for" followed by the name of the solution.   There will be one entry for each of the front-end servers that the solution is being deployed to or retracted from.   Usually one of the entries will say failed and the others will say succeeded so you can use this to help figure out which front-end is causing the problems.

If all the jobs have succeeded you can delete the job.  To do this go back to the "Operations" tab and click on "Timer job definitions" which is right below "Timer job status".  Find your job (same name as before)  and click on it.  Note that there will only be one listing for the job here even though you have multiple front-ends.   Click on the "Delete" button to remove it.

If you then go back to the "Solution management" area you will notice that the solution is now set to either "Deployed" or "Retracted".

Remember, that this is just a band-aide to get you through errors when deploying/retracting solutions.  If you need to do this then most likely there are other issues with your front-ends that you need to resolve.

Posted: Thu, Dec 27 2007 7:47 by gary | with no comments
Filed under:
SharePoint is taking over the world!

Well, maybe not the entire world, but at least according to this Network world article it is becoming the de-facto collaboration platform!

http://www.networkworld.com/newsletters/gwm/2007/1217msg1.html

Posted: Mon, Dec 24 2007 13:41 by gary | with no comments
Filed under:
Recruiters, get a clue

Update:  Had another call from a recruiter yesterday.  It was night and day difference!  He was very professional, knew what he was going to say, and even though I turned him down he asked.....let me say that again, HE ASKED....if it would be alright to contact me again in the future.   I do not think I have ever had a recruiter ask that before.  Normally they just call again in 3 months unless I tell them not to contact me again.    So I guess there are good recruiters out there as well as bad ones.  Of course he did ask the obligatory, "...if you are not interested do you know anyone who is?".    I would really love to hear from a recruiter to see if that question ever worked. 

---------------------------

OK, recruiters,

 reality check.   If you are making the cold call to a person guess who is most likely going to be the first person from your company you are going to talk to?   That's right.  YOU!  Act professionally!

I had a recruiter call me yesterday (on my work phone no less) from, shall we say, a rather large consulting organization.   Even if I was looking for another job, which I am not (if there is anyone from my current company reading this Smile.  If someone from Microsoft SharePoint development is reading this I can be reached at......  Stick out tongue ) I would not even consider going to this company based on the recruiter alone.  This man was the most unprofessional person I have ever spoken with (and I was around during the dot-com days when I would get 10 recruiter calls a week).  Not only could he not put 2 words together without adding an "Umm" in between he seemed to actually be upset I would not consider going to his company.  When I said I was not looking for another job he actually said "Do you know who ..... is?".   Oh wait, now I want to work for you!

Here is a wake up call for recruiters.  Not everyone wants to work for a big company.  I like the fact that I know everyone in my company....or at least I thought I did until I went to the last Holiday party! Smile  Guess we are growing.   In any case, I know I can pick up the phone and call the president of the company if I had an issue.   Cannot do that with a lot of consulting companies I know of.  Heck, cannot do that with a lot companies period!

So to summarize:

  1. Act professionally.  If you need to, reherse what you are going to say.  Believe it or not a person's view of your company may very well be swayed by you.
  2. If the person is not interested do not take it as a personal insult.  As I said, some people just do not want to work for large companies.
  3. Above all, stop calling my work number!  You have no idea where I am or what I can say.
  4. Oh yeah, if you want the person to call you back, leave a phone number.   My work phone gets forwarded so I have no idea what number you are calling me from.
Posted: Thu, Dec 20 2007 6:24 by gary | with no comments
Filed under:
Time to go 64bit

As a follow-up to yesterday's post let me restate that the next version of SharePoint is set to be 64bit only.   This means that if you have the option any new SharePoint 2007 install should be done using the 64bit version otherwise you will not have an easy upgrade path (not saying that upgrading from 2003 to 2007 is easy but hopefully from 2007 to the next version will be).   If you do not run 64bit Windows you would basically have to wipe your system completely and redo the installation.

As there are no guarantees as to what Microsoft will be doing in the future in regards to the upgrades I strongly suggest that any new installations be done using the 64bit versions of the OS and SharePoint now. 

Capacity planning beta and hardware recommendations

The SharePoint team blog has posted a great entry about the beta of the SharePoint capacity planning program as well as information about hardware recommendations.   Basically you will need 64bit machines for the future versions of SharePoint.  Not really a big surprise seeing how most of the other server software world is heading to 64bit.   A few other tidbits there as well.   Worth your time to check it out.

I have been using the capacity planning program for a while and I am quite impressed with it.  Provides verification of hardware requirements that you present to customers.

http://blogs.msdn.com/sharepoint/archive/2007/12/17/hardware-recommendations-and-sccp-sharepoint-capacity-planning-tool-beta-models.aspx

Posted: Tue, Dec 18 2007 9:01 by gary | with no comments
Filed under:
...and now that SharePoint SP1 has been released the SDKs have been updated

http://blogs.msdn.com/sharepointdeveloperdocs/archive/2007/12/11/SharePointSDKsLiveForSP1.aspx

 

Posted: Thu, Dec 13 2007 7:29 by gary | with no comments
Filed under:
MOSS SP1 now available
This update applies to the following programs:
  • Microsoft® Office SharePoint® Server 2007
  • Microsoft® Office Project Server 2007
  • Microsoft® Office Forms Server 2007
  • Microsoft® Office Groove® Server 2007, 64-Bit Edition
http://www.microsoft.com/downloads/details.aspx?FamilyID=ad59175c-ad6a-4027-8c2f-db25322f791b&DisplayLang=en
 
WSS 3.0 (required before you install MOSS SP1) can be found here:
http://www.microsoft.com/downloads/details.aspx?FamilyId=4191A531-A2E9-45E4-B71E-5B0B17108BD2&displaylang=en
Posted: Tue, Dec 11 2007 12:31 by gary | with no comments
Filed under:
SharePoint Developer Document Blog now live

These are the people responsible for the SharePoint SDK among other things. Check them out!

http://blogs.msdn.com/sharepointdeveloperdocs/

How to become a MVP?

Most likely if you are reading this post you already know what a MVP is.   If not, a MVP is a Microsoft Most Valuable Professional.  What does that mean?  To quote Microsoft's MVP home page "Microsoft Most Valuable Professionals (MVPs) are exceptional technical community leaders from around the world who are awarded for voluntarily sharing their high quality, real world expertise in offline and online technical communities. Microsoft MVPs are a highly select group of experts that represents the technical community's best and brightest, and they share a deep commitment to community and a willingness to help others."

How does one become a MVP?   I have seen this question posted on various newsgroups and I get asked this a lot.  Well, first of all the MVP award is just that, an award.  As one of my fellow MVPs states "It is an award not an entitlement".  I am proud to be a MVP and have been one for the last 6 years but each year I get nervous wondering if I will get re-awarded.  Yes, I answer a lot of questions in the newsgroups and yes I blog but like I said each year I worry if it is enough (some might say our wonderful MVP lead April takes pleasure in making us suffer Surprise )

So here are some things that you can do to help your chances of becoming a MVP.  There is no hard formula like if I answer X questions and post Y blogs I will get the award but these are some guidelines:

  • Active with UserGroups  (not as a simple member but one that presents / runs / heads up committees)
  • Blogging  -  Actively posting “USEFUL” information about the product  (not simply referencing other peoples post and claiming them as your own although if someone else has posted useful information feel free to tell others about it)
  • Writing and Publishing  - Books, Trade Magazines (SharePoint Beagle, SP Advisor, TechNet, MSD2D)
  • Speaking events – Conferences, code camps
  • Donates his or her time freely and willingly to help users in the community doing things like posting useful code in places like CodePlex
  • News Group participation ( MSD2D, MSDN)  Providing more answers and less questions
  • Recognition as a knowledge expert in thier discipline.

The SharePoint MVP community is a very tight nit group but we are always willing to accept new members that demonstrate the willingness and ability to become a MVP.

Posted: Fri, Nov 16 2007 6:26 by gary | with no comments |
Information Rights Management in MOSS

Based on the number of questions I see in the newsgroups and forums regarding Information Rights Management (IRM) I figure a quick overview post is in order.

Most people know that IRM allows you to setup rules that determines how long a document is considered viable and what to do with it when it expires.  However there are other features of IRM that are as useful as well.  Other features that are part of IRM include Labels, Auditing, and Barcodes.

Labels allow you to add important information to a document when it gets printed.  You can allow users to enter the label when the document is uploaded and you can set what the lable will contain.  You can use most of the metadata that is associated with the document and use it as a label.   Just surround the metadata with {}.   Interesting tidbit.  The example that is listed on the page uses pieces of metadata that does not exist in most document libraries. Big Smile  This seems to require the Rights Management Server to work correctly.

Auditing is the feature I find that I use the most.  In these days of lawsuits and multiple stories of cover-ups, auditing can be very useful.  You can keep track of who opens. edits. checks in/out, moves/copies, or deletes/restores the document.

Finally barcodes works like labels in that they get printed with the document. This seems to require the Rights Management Server to work correctly.

 Administrators can also make these available or unavailable through the Central Administration.

Well, there is it....an incredibly brief intro to IRM.   I think you will find that most people will use the expiration and auditing features the most since they work with very little effort but the other features can be quite useful as well.

Posted: Wed, Nov 14 2007 7:55 by gary | with no comments
Filed under:
SharePointPedia now live!

http://blogs.msdn.com/sharepoint/archive/2007/11/05/announcing-sharepointpedia-community-driven-content-recommendations-and-requests.aspx

Posted: Mon, Nov 5 2007 10:19 by gary | with no comments
Filed under:
Setting the title of the page to the site title

Not sure why by MOSS does not like to change the title of the page you are on.  I would think the title would be the logical choice, which is exactly what my customer asked for.  Lucky for me MOSS does output the title in a nice, easy to get to location within the page.    Just add a Content Editor Web part (which has saved me quite a few times!), mark it as hidden and add the following through the "Source Editor..." button

<script language="javascript">

document.title = document.getElementById('ctl00_PlaceHolderSiteName_onetidProjectPropertyTitle').InnerText;

</script>

 

You may need to do some searching to make sure the element is the same for you.

 

Posted: Mon, Oct 1 2007 22:50 by gary | with no comments
Filed under:
More Posts « Previous page - Next page »