Enabling Personalization

September 9, 2009 · Posted by YvonneHarryman
1 Comment· 0 Links to this post

A feature I commonly saw used in SP 2003 but not so much in MOSS was personalization. This is the ability for your end users to have a shared view and a personal view of their page. By default when you create a collaboration site or publishing site you may notice there are not options to personalize your page. If you were to create a team site the options would be there.

You might be asking where one would look to see these personalization options. Another common mistake is to look at the Site Actions menu, but no these options would be under the Welcome xx menu often displayed in the upper right hand corner of the page. This is because the changes are tied to the user’s profile.

To enable/disable personalization you will need to modify the AllowPersonlization property in your web part pages. As long as one of these zones has AllowPersonalization="true" you will then see the options to enable your end users to personalize their page and specifically to personalize only those zones that you denoted.

Enjoy! Yvonne M. Harryman

 

A couple of publishing site tricks

September 8, 2009 · Posted by YvonneHarryman
1 Comment· 0 Links to this post

I am a big fan of the publishing site which is part of MOSS and figured I would post a few tips that come in handy when working with them:

·       To modify publishing pages using SharePoint Designer in your environment you will have to complete a few additional steps. To do this you will have to detaching it from the page layout. To do so, right-click the page in the Folder List from SharePoint Designer, and then click Detach from Page Layout on the shortcut menu. Make the changes in Designer then do the same steps to detach the page layout but this time reattach it. Further information on this can be found at: http://office.microsoft.com/en-us/sharepointdesigner/HA101741331033.aspx

·       When working with publishing sites if you give a user contributor rights at the site level they will then have access to the Site Action toolbar and will see the edit page option. This can be handled by granting them permissions at the list level instead of the site level.

·       Creating a site template of a publishing site. Note this isn’t supported so do so at your own risk! See previous post at: http://sharepoint.microsoft.com/blogs/SharePointBeacon/archive/2007/09/17/creating-a-site-template-from-a-publishing-site.aspx

·       Adding workflow back into a publishing site template. There are two types of publishing site templates. Publishing Site and Publishing Site with Workflow. If you ever create a Publishing Site and decide at a later time you want it to have the same page editing toolbar with the approval options this can still be done. All you need to do is create the approval workflow on the pages library with the same configuration options as a publishing site with workflow and it will magically appear.

Enjoy! – Yvonne M. Harryman

 

What does taxonomy mean to you?

July 6, 2009 · Posted by YvonneHarryman
1 Comment· 0 Links to this post

Next time you are speaking about taxonomy in relation to SharePoint make sure you clarify what is meant by that. Taxonomy can mean many different things depending on the context of a conversation. When I am referring to taxonomy in relation to SharePoint this is how I break it down.

Definition of Taxonomy:

Division into ordered groups or categories

Or

The science, laws, or principles of classification; systematics.

http://www.thefreedictionary.com/taxonomy

·         Taxonomic Sections: This means to get a clear definition of each taxonomic section and the features/purpose of that section. I use the governance model which can be found in the sample governance plan at the Microsoft SharePoint Governance Resource Center for SharePoint Server 2007: http://technet.microsoft.com/en-us/office/sharepointserver/bb507202.aspx

Governance Model

·         Navigation: Define how site users will navigate through the taxonomic sections and the sites within each section.

Often there is a gap between the taxonomic sections for the divisional portals and department and team sites. I typically recommend that you add a links web part to the divisional portals wireframe which points to related department sites and a directory which can be found on the corporate portal which helps users navigate team sites and project sites.

·         Wire Frames: Consistent labeling and structuring of items within a site and incorporate it with the wireframe, templates and site definitions.

For example you may define in your wireframe that each site will have announcements in the upper right hand corner for the project team sites taxonomic section. You will also want to ensure that is labeled as Announcements and not something like Shout Out. This provides consistency and helps your end users find information.

·         Content Types & Meta Data: This process should include categorization of data and association of meta-data with that content. It should also define if the meta data is required. This can enhance your search capabilities and allow you to roll up information from different sites into a central location.

A tool for use in taxonomy tagging can be found in the Community Kit for SharePoint at: http://www.codeplex.com/CKS/Release/ProjectReleases.aspx?ReleaseId=2830

 

EBE is now on sharepoint.microsoft.com!

June 23, 2009 · Posted by Tim McDaniel
2 Comments· 0 Links to this post

The Enhanced Blog Edition (EBE) is now offered on sharepoint.microsoft.com for Microsoft employees to blog about SharePoint on SharePoint using the EBE. So this means the home for my blog will no longer be at WordPress: http://yvonneharryman.wordpress.com/, instead will be here!

Key features of the EBE over the WSS blog site are:

·          Theming

o    Modular Theme Framework (MTF) - no need to wrestle with the default blog master page - start from the HTML you want and simply insert the blog content via XSL.

o    Friendly URL's - blog post URL's that look like /archive/2007/08/25/sharepoint-chart-tool.aspx instead of /Lists/Posts/ViewPost.aspx?ID=37

o    5 very cool themes to use as-is

·          Linkbacks (aka Trackbacks)

o    Send linkbacks to other blog posts you are linking to in your EBE blog post (these show up as trackbacks on the other blog)

o    Receive linkbacks from other blogs who are posting about your blog post (these show up as trackbacks on your EBE blog)

·          Spam control

o    Akismet integration to detect comment spam

o    CAPTCHA to help block comment spam at the source

o    Option to automatically delete spam to recycle bin

o    Option to automatically approve spam-free comments

·          RSS

o    Custom RSS link (e.g. http://feeds.feedburner.com/myblog)

o    Post trimming (only a portion of post is sent via RSS)

o    Specify RSS feed item count

o    Category specific feeds (e.g. /rss.xml?cat=coolstuff)

o    Validates W3C: This is the W3C Feed Validation Service, a free service that checks the syntax of Atom or RSS feeds.

·          Miscellaneous

o    Securing of system pages (e.g. so anonymous users can't browse your lists and libraries using SharePoint UI)

o    Metaweblog API to support Windows Live Writer and migration tools.

o    Client Date/Time - displays date/time in time zone of user instead of server

 

New features for the 2.5 release which is coming soon include:

 

·          Issue Fixes

·          Ability to export post to PDF

·          Localization (FR & ES)

·          Ability to theme wiki pages

·          Ability to show your Tweets in a web part on the home page

·          Ability to theme Wiki pages

·          Technoroti Tags

 

SharePoint Saturday in Charlotte – Presentation on the Community Kit for SharePoint (CKS) and Podcasting Kit for SharePoint (PKS)

June 22, 2009 · Posted by YvonneHarryman
2 Comments· 0 Links to this post

I want to thank everyone who came to see the presentation on the Community Kit for SharePoint and Podcasting Kit for SharePoint 

http://www.sharepointsaturday.org/charlotte/meetings/22/CommunityKitforSharePointandPodcastingKitforSharePointThissessionwillcovertwopopulartoolsfoundonCodePlexwhichyoucanusetoextendtheSharePointoutoftheboxcapabilities.aspx

As promised I have attached to this post the slide deck which covers the details of what was discussed. Pictures of the event are also posted below.

Community Kit for SharePoint: Harnessing the Power of a Global Community to Solve Business Problems:

Community Kit for SharePoint (CKS) Presentation

In addition to this there was also a presentation which followed mine covering the Podcasting Kit for SharePoint: A New Era in Internal Communications – Lessons from Microsoft on using the “Podcasting Kit for SharePoint” (PKS).

PKS-PodcastingKitforSharePoint

A video was shown during this presentation but due to audio problems you could not hear it. To watch the video you can go to: http://yvonneharryman.wordpress.com/2009/02/20/podcasting-kit-for-sharepoint

 

Propagation waiting for initialization

March 17, 2009 · Posted by YvonneHarryman
1 Comment· 0 Links to this post

I recently ran into the following error and though this resolution might help others. In my scenario the error propagation status waiting for initialization was being shown for one of the query servers in a MOSS farm. You could see this by looking in the search administration in central admin. If you looked into the ULS logs it says it is unable to find the GUID that is associated with the folder for the query server index location. The GUID was associated with the folder for the query server index location and it did exist and appeared to have the correct permissions configured. In our configuration we have two query servers and only one is dedicated for crawling. We went to the index server and tried to access the query server index location. That was when we noticed we could get to one folder but not the other by typing \\<servername>. The host file on the index server was being updated with the incorrect IP address for the dedicated WFE for crawling and therefore the index server could not propagate the content to the query server. To resolve it I updated the index for web front end to use all web front ends for crawling and then reconverted it back to a dedicated WFE and this seemed to resolve any confusion SharePoint had about entering in the incorrect IP.

A few good links which cover similar topics/situations are:

http://technet.microsoft.com/en-us/library/cc261810.aspx

http://sharepoint.microsoft.com/blogs/fromthefield/Lists/Posts/Post.aspx?ID=88

http://sharepointnotes.wordpress.com/2008/01/30/host-file-problems-when-using-dedicated-web-front-end-for-crawling/

Updated March 18th

Thought we fixed it but when I went in the next day the IP address reverted back! What we have done that is working was to switch the setting back to all WFEs for crawling and then manually updated the host file with the correct information by removing the reference for <IP for Query WFE 02> to <Server Name for Query WFE 01>. We left all of the references to the load balanced addresses of the web application pointing to the correct IP address and all seems to be working now with SharePoint using a dedicated WFE for crawling.

 

Community Involvement – What’s in it for me?

February 27, 2009 · Posted by YvonneHarryman
0 Comments· 0 Links to this post

Microsoft is running a contest on the MSDN SharePoint Developer Forum where they will be awarding prizes to the top contributors in the forum for each month.

The MSDN SharePoint Developer forum is also a great place for customers to get their questions answered by the community.

Monthly prizes include Xbox 360 Arcade, a Zune 120Gb and 3x 7” Digital Photo Frames.

More details here: http://blogs.msdn.com/pandrew/archive/2009/02/27/microsoft-sharepoint-developer-forum-challenge-march-april-and-may-2009.aspx

What are the benefits of getting involved in the community – “What’s in it for me?”

·         By putting your knowledge to the test in the community you learn develop from the experts themselves

·         Access to a network of other community leaders.

·         Recognition by peers as an expert in the technology you choose to evangelize.

·         Role model for others aspiring to learn in your field

·         Boost your career development

·         Community involvement is a step in the right direction for awards such as the Microsoft Valued Professional (MVP)

 

SPDisposeCheck Developer Tool

January 31, 2009 · Posted by YvonneHarryman
2 Comments· 0 Links to this post

My very first blog was discussing best practices around disposing of SharePoint Services Objects: http://yvonneharryman.wordpress.com/2007/08/19/ . Memory leaks caused by objects not disposed can be very tricky to catch and require good code reviews. Now Microsoft is offering a tool to help you find objects that are not being disposed of. This tool can be found at: http://code.msdn.microsoft.com/SPDisposeCheck.

 

The tool is not perfect but it will do most of the grunt work for you to figure out if memory leaks are in fact in your code. One situation you might run into is a potential false positive. An additional resource I have used to help me in that situation is the following blog:

http://blogs.technet.com/stefan_gossner/archive/2008/12/05/disposing-spweb-and-spsite-objects.aspx

 

This tool is meant to be used by developers and should not be installed on production machines as I understand it there is no formal support provided.

 

 

Visual Studio 2008 extensions for SharePoint 1.3

January 12, 2009 · Posted by YvonneHarryman
1 Comment· 0 Links to this post

The Community Technology Preview release for Visual Studio 2008 extensions for SharePoint 1.3 is now publicly available on Microsoft Connect.

The CTP is available at: https://connect.microsoft.com/site/sitehome.aspx?SiteID=428

New Features in VSeWSS 1.3

  • The extensions now install on x64 bit OS. Visual Studio 2008 and SharePoint must be already installed.
  • Command Line Build option for TFS and MSBuild integration
  • Separate WSP Package and Retract commands. You can now build the WSP without deploying it
  • SPSolGen to Support Exporting from Content Management Publishing Sites
  • New Item Template for RootFiles Deployment
  • Automatically Remove conflicting existing features on development SharePoint server
  • WSP View New Feature Dialog Improvements: scope, receiver checkbox, element checkbox
  • WSP View can now be used to merge features and it blocks site features being merged into web features
  • Allow adding separate binary files such as Workflow assemblies
  • Some refactoring allowing for Web Part renaming and removing lines from feature.xml Item Removed
  • Allow selection of GAC or BIN deployment for Web Part Project not including CAS generation
  • Increase visibility of hidden features that VSeWSS creates
  • Add fast update deploy for DLL only or file only changes to solutions
  • Numerous Bug Fixes and improvements to error messages

More details can be found on the SharePoint blog at: http://blogs.msdn.com/sharepoint

 

Modifying Thesaurus Files

June 30, 2008 · Posted by YvonneHarryman
2 Comments· 0 Links to this post

When modifying Thesaurus files there are a few things to note that may cause you problems.

·         To get started read the following article: http://msdn.microsoft.com/en-us/library/ms345186.aspx

·         The file that you should modify is at: [Drive]:\Program Files\Microsoft Office Servers\12.0\Data\Office Server\Applications\

·         If the XML is malformed, SharePoint will throw an error which will be logged in the application event log. You will need restart the Office SharePoint Server Search service and try a query to get the error logs. Items that can cause this to happen are:

o   Special Character will cause an invalid format error. More details on this can be found at: http://support.microsoft.com/kb/923317

o   The thesaurus expansions and replacements no longer work if you have stemming turned on in the search results web part.

o   Duplicate expansions with the same words

 

Creating a personal explorer view

November 7, 2007 · Posted by YvonneHarryman
3 Comments· 0 Links to this post

If you have a need to remove the explorer view, to prevent your users from access to it, you will have to delete it and this will disable it for everyone. One option is to create a personal view to enable it for only those users that know how to access it. But you will notice that when you go to create a view the explorer view is not an option (unless you have deleted the current explorer view) and you cannot modify the current explorer view to be a personal view. The following will explain the roundabout steps you need to complete this:

·         Delete the current explorer view. You will need to go to Settings > Document Library Settings scroll to the bottom of the page and select Explorer View and Delete

·         Go to Settings > Document Library Settings. Select create view from the bottom of the page and you will know see the option for Explorer View as a template.

·         Select Explorer View.  Give it a View name and select OK.

Note: If you go to modify this view you will still not have the ability to make this a personal view

·         Modify the view to include a column. I typically pick title. Go to Settings > Document Library Settings and select [Explorer View Name]. Under Columns select Title and OK at the bottom of the page.

·         Go to Settings > Create View and select [Explorer View Name]. You will now see the option to make the view a personal view.

Note: Others will be able to get to your personal view if you share with them how to access it since it will not be displayed in the drop down list of views for that library unless you are the user that created the view.

·         To do this you can create another page or add a document library web part to an existing web part. Once it has been added you go to site actions > edit page. In the title of the web part select Edit > Modify Shared Web Part. Change the Selected View to the personal view you just created.

 

Creating a Site Template from a Publishing Site

September 17, 2007 · Posted by YvonneHarryman
2 Comments· 0 Links to this post

If you have created publishing sites in SharePoint 2007 you may have noticed the option to Save Site as Template under Site Settings is not an option. No worries it can still be done. You will have to add _layouts/savetmpl.aspx after the site name in the URL and it will take you to the Save As Template page and work the same as it does on any other site.

 

Controlling your SharePoint Navigation

August 29, 2007 · Posted by YvonneHarryman
2 Comments· 0 Links to this post

The Source property can be appended onto your URL’s to ensure that users are redirected back to a specific location after completing an action. For example if you have a link that goes to add or edit an item in a SharePoint list you can append Source=[URL] to ensure the user is redirected back to the page with the link once they select ok or cancel.

Tags:General

 

How to create your own Cascading Navigation using the ASPMenu control

June 27, 2007 · Posted by YvonneHarryman
2 Comments· 0 Links to this post

Cascading Navigation Image
 
Overview: The following code demonstrates how to create a custom menu control in SharePoint that goes 3 levels deep with the same look and feel as the SharePoint horizontal naviagation.

Prerequisites: A custom list to maintain the data for the menu items must be created with the following columns

·         Title – Single line of text

·         Link URL – Single line of text

·         Link ID – Single line of text

·         Parent ID – Single line of text

·         Link Order – Number

·         Display – Choice {Yes, No]

·         Item Level – Choice [Level 1, Level 2, Level 3]

Code:

1.       Set up a web part property to get and set the admin list created above:

[Personalizable, WebBrowsable, WebDisplayName("Admin List")]

        public string Set_AdminList

        {get {

                return _AdminList;

            }

            set

            {

                _AdminList = value;

            }

        }

2.       Create the ASP Menu control and set the look and feel

            AspMenu _menu;

            _menu = new AspMenu();

            _menu.ID = “CustomMenu”;

            _menu.EnableViewState = false;

            _menu.Orientation = System.Web.UI.WebControls.Orientation.Horizontal;

            _menu.StaticDisplayLevels = 1;

            _menu.MaximumDynamicDisplayLevels = 3;

            _menu.StaticSubMenuIndent = 0;

            _menu.DynamicHorizontalOffset = 0;

            _menu.StaticPopOutImageUrl = “/_layouts/images/menudark.gif”;

            _menu.StaticPopOutImageTextFormatString = “”;

            _menu.DynamicHoverStyle.BackColor = Color.FromName(”#CBE3F0″);

            _menu.SkipLinkText = “”;

            _menu.StaticSubMenuIndent = 0;

            _menu.CssClass = “ms-topNavContainer”;

            _menu.StaticMenuItemStyle.CssClass = “ms-topnav”;

            _menu.StaticMenuItemStyle.ItemSpacing = 0;

            _menu.StaticSelectedStyle.CssClass = “ms-topnavselected”;

            _menu.StaticHoverStyle.CssClass = “ms-topNavHover”;

            _menu.DynamicMenuStyle.BackColor = Color.FromName(”#F2F3F4″);

            _menu.DynamicMenuStyle.BorderColor = Color.FromName(”#A7B4CE”);

            _menu.DynamicMenuStyle.BorderWidth  = 1;

            _menu.DynamicHoverStyle.BackColor = Color.FromName(”#CBE3F0″);

            _menu.DynamicHoverStyle.BorderColor = Color.FromName(”#CBE3F0″);

            _menu.DynamicMenuItemStyle.CssClass = “ms-topNavFlyOuts”;

            _menu.DynamicHoverStyle.CssClass = “ms-topNavFlyOutsHover”;

            _menu.DynamicSelectedStyle.CssClass = “ms-topNavFlyOutsSelected”;

3.       Loop through the list and build out the list

SPWeb thisWeb = null;

       try

            {

                SPSite thisSite = SPControl.GetContextSite(Context);

                thisWeb = thisSite.OpenWeb(”/”);

                SPList spCascadingNav = thisWeb.Lists[_AdminList];

                SPQuery query = new SPQuery();

                query.Query = “<OrderBy><FieldRef Name=’Link_x0020_Order’ /></OrderBy><Where><And><Eq><FieldRef Name=’Item_x0020_Level’ /><Value Type=’Choice’>Level 1</Value></Eq><Eq><FieldRef Name=’Display’ /><Value Type=’Choice’>Yes</Value></Eq></And></Where>”;

                SPListItemCollection items = spCascadingNav.GetItems(query);

                SPQuery level2query = new SPQuery();

                level2query.Query = “<OrderBy><FieldRef Name=’Link_x0020_Order’ /></OrderBy><Where><And><Eq><FieldRef Name=’Item_x0020_Level’ /><Value Type=’Choice’>Level 2</Value></Eq><Eq><FieldRef Name=’Display’ /><Value Type=’Choice’>Yes</Value></Eq></And></Where>”;

                SPListItemCollection level2items = spCascadingNav.GetItems(level2query);

                SPQuery level3query = new SPQuery();

                level3query.Query = “<OrderBy><FieldRef Name=’Link_x0020_Order’ /></OrderBy><Where><And><Eq><FieldRef Name=’Item_x0020_Level’ /><Value Type=’Choice’>Level 3</Value></Eq><Eq><FieldRef Name=’Display’ /><Value Type=’Choice’>Yes</Value></Eq></And></Where>”;

                SPListItemCollection level3items = spCascadingNav.GetItems(level3query);

                //For each item, generate the row.

                System.Web.UI.WebControls.MenuItem _item = new System.Web.UI.WebControls.MenuItem();

                System.Web.UI.WebControls.MenuItem _item2;

                System.Web.UI.WebControls.MenuItem _item3;

                foreach (SPListItem menuItem in items)

                {

                    string parentID = ” “;

                    if (menuItem["Parent ID"] != null)

                    {

                        parentID = menuItem["Parent ID"].ToString();

                    }

                    else { parentID = “None”; }

                    string title = menuItem["Title"].ToString();

                    string url = menuItem["Link URL"].ToString();

                    string itemID = menuItem["Link ID"].ToString();

                    _item = new System.Web.UI.WebControls.MenuItem(title, “”, “”, url);

                    foreach (SPListItem subMenuItem in level2items)

                    {

                        string subparentID = ” “;

                        if (subMenuItem["Parent ID"] != null)

                        { subparentID = subMenuItem["Parent ID"].ToString();}

                        else { subparentID = “None”; }

                        if (subparentID == itemID)

                        {

                            string subtitle = subMenuItem["Title"].ToString();

                            string suburl = subMenuItem["Link URL"].ToString();

                            string subID = subMenuItem["Link ID"].ToString();

                            _item2 = new System.Web.UI.WebControls.MenuItem(subtitle, “”, “”, suburl);

                            foreach (SPListItem sub3MenuItem in level3items)

                            {

                                string sub3parentID = ” “;

                                if (sub3MenuItem["Parent ID"] != null)

                                {sub3parentID = sub3MenuItem["Parent ID"].ToString();}

                                else { sub3parentID = “None”; }

                                if (sub3parentID == subID)

                                {

                                    string sub3title = sub3MenuItem["Title"].ToString();

                                    string sub3url = sub3MenuItem["Link URL"].ToString();

                                    _item3 = new System.Web.UI.WebControls.MenuItem(sub3title, “”, “”, sub3url);

                                    _item2.ChildItems.Add(_item3);}

}

                            _item.ChildItems.Add(_item2);

                        }

                    }

                    _menu.Items.Add(_item);

                    Controls.Add(_menu);

                }

            }

            catch (Exception ex)

            {

                Controls.Add(new LiteralControl(”An error has occured with this web part.  Please contact your system administrator and relay this error message: ” + ex.Message));

            }

            finally

            {

                if (thisWeb != null)

                thisWeb.Dispose();

            }

        }

 

Disposing of SharePoint Services Objects

June 27, 2007 · Posted by YvonneHarryman
2 Comments· 0 Links to this post

When using the SharePoint Services objects make sure to dispose of them properly since some of them, such as the SPSite class and SPWeb class objects, use unmanaged code. Here is a reference for how and when to properly dispose:

http://msdn2.microsoft.com/en-us/library/aa973248.aspx

The common objects used are SPSite and SPWeb which should be disposed of.

Note that the SPSite object if obtained from the GetContextSite() method does not need to be disposed of.