Create a Custom Action to Satisfy Your “All People” Needs.

image

Thanks for the intro Carl! Much obliged! Well, in your SharePoint world, your “Pale Blue Dot” view of all of the people in your site collection is the “All People” view, you know, the User Information List.

Almost two months ago, I wrote an article on how the “All People” link in SharePoint 2010 is, well, it’s gone MIA. It is easy to get to via  link. And, if you’ve got one site collection to manage, well, its as simple as adding a link somewhere, like in a link list within a management site somewhere, or, up in the handy dandy bookmarking feature, in those fancy things all the kids are using these days, “web browsers”… whatever that means…? Anyways. So, you need to get there, but, wouldn’t it be nice and simple to add in a link to say, I don’t know, the Site Settings page? Wow! That’d be cool! Then I can access it with all of the other Users and Permissions links! Right in one place?! WOW!

image

So, the question becomes, how can we get it there? (HINT: I mentioned it in the title of this article!)

Ok, so I gave it away, shame on me, I spoiled the ending. Boo hoo. Yes, Custom Actions! That’s how we’ll get it there!

So, what to do? Well, not too much actually. The creation of Custom Actions in SharePoint 2010 and with Visual Studio 2010 has become, well, easy. Extremely easy in fact due to the fine folks who created the CKS:DEV project over at Codeplex. Why? Well, because it contains item types with fancy pants wizards to allow you to click a few buttons, and create a custom action project with ease. You really do not even need to be a developer to do this, it’s quite easy, and hey, I provide screenshots and code. Go ahead, do it!

So, let’s get started, shall we? Oh, you need a glass of water first. No problem. I’ll be here waiting for you.

… 15 minutes to get a glass of water? seriously? Did you pump it from the well?

Ok, so, make sure you have VS 2010 installed, as well as CKS:DEV. NO, I am not waiting this time. You lollygagged around with getting a glass of water last time… You had your chance!

 

First, create a new project in Visual Studio 2010

image

Then, create an Empty SharePoint Project
image

Oh, guess what you’re about to witness? Yes, you in the back in the Charlie Brown polo shirt! You’ve got it. The creation of my next codeplex project for Grace-Hunt (yes, I know, it’s been a while!)

And since we do not need to elevate privileges, or any of that fancy stuff required for a server-side deployment, we’re going to create this as a Sandboxed Solution…

image

Next, once our project is loaded in the Visual Studio IDE, let’s add a new item to the project.

image

Right click on your project, go down to Add, then select  New Item.

On the next screen you are presented with, make sure you have SharePoint and 2010 selected under Installed Templates.

image

Select Custom Action, and give it a name (such as UserInfoList). Then click Add.

Now, again, thanks to the fine folks who created CKS:DEV, we have wizards!

image

On the first screen on the wizard, we have 6 settings we are going to make use of, detail from here for each of these attributes: http://msdn.microsoft.com/en-us/library/ms460194.aspx

ID

Attribute

Description

1

Id

Optional Text. Specifies a unique identifier for the custom action. The ID may be a GUID, or it may be a unique term, for example, "HtmlViewer".

2

Title

Required Text. Specifies the end-user description for this action.

3

Description

Optional Text. Specifies a longer description for the action that is exposed as a tooltip or sub-description for the action.

4

GroupId

Optional Text. Identifies an action group that contains the action, for example, "SiteManagement". If it is contained within a custom action group, the value of the GroupId attribute must equal the group ID of the CustomActionGroup element.

For a list of the default custom action group IDs that are used in Microsoft SharePoint Foundation, see Default Custom Action Locations and IDs.

5

Location

Optional Text. Specifies the location of this custom action, for example, "Microsoft.SharePoint.SiteSettings".

If the CustomAction element contains a CommandUIExtension child element, the Location must start with "CommandUI.Ribbon". For a list of default locations that are used with the Server ribbon, see Default Server Ribbon Customization Locations.

If the custom action is a menu item or toolbar button, the possible options include EditControlBlock, NewFormToolbar, DisplayFormToolbar, and EditFormToolbar.

If it is contained within a custom action group, the value of the Location attribute must equal the location of the CustomActionGroup element.

For a list of the default custom action locations that are used in SharePoint Foundation, see Default Custom Action Locations and IDs.

6

Sequence

Optional Integer. Specifies the ordering priority for actions.

 

image

On the next page, we do not actually need to set this option, however, I wanted to, to showcase this functionality. This utilizes the SPBasePermissions class to show whether this can be viewed to the user, based on the permissions they have for this object, in this case, the site collection.

image

On the last screen, and this is the important part, we need to specify the URL we want to have our CustomAction link to, this is the URLAction element. The ~sitecollection is a Token. More information on what tokens can be used in a URLAction can be found on slide #30 of my Creating Custom Actions in SharePoint presentation.

image

Now that we’ve finished defining the custom action, we just have a couple of more things to do. Since we do not our feature to be called “Feature1”, right-click on Feature1 in the Solution Explorer, and choose Rename.

image

Type it in, hit enter, all good.

Next we want to remove Feature 1 from after the title of our feature. Double click on the UserInfoList feature we just renamed, and we get a designer view of our feature (new in VS 2010).

image

In the Title field, remove Feature 1 after our feature, and add a description. Also, change the scope from Web to Site, which means we will deploy our solution to the site collection. Which also means, this link will appear for all Users and Permissions sections throughout all of the site settings pages within our site collection.

image

Now for the money! Right click on the project and select Deploy.

image

Look at the output window to see if we had success or failure…

image

And now look at your site settings page – there is our new link!

And that’s it! I will have this project published to Codeplex within the next few days, so, please keep an eye out.

The One Thing: Geoff Varosky and SharePoint 2010

So there I am, making phone calls to my broker, instead of running SharePoint Saturday Boston, and up walks Christian Buckley, asking what I think is one of the best new features of SharePoint 2010. Well, this is the result of that.

 

Wildcard Search for Forms Based Authentication Users in the SharePoint 2010 People Picker Not Working

wildcard

The Problem

Ran into an issue today with a client. We have their site configured for mixed authentication in SharePoint 2010 – using both Windows Authentication for internal users, and Forms Based Authentication (FBA) users, using the default SQL Membership Provider. The problem was that we could wildcard search Active Directory users, but, not FBA users. Interesting. If we typed in their username exactly, it came up just fine. Otherwise, well… nothing.

I had no idea what the issue could have been, so… I did a little digging around, and was able to come up with the solution!

 

The Resolution

The fix, is quite easy! Thanks to this post I came across: http://mikevallotton.wordpress.com/2010/10/18/sharepoint-2010-claims-authentication-custom-login-form-part-1-modifying-your-config-files/, I had a “duh!” moment. When setting up the FBA provider originally, I seemed to have skipped a step – adding the Membership and Role providers into the PeoplePickerWildcards section of the web.config.

<configuration>
    …
    <SharePoint>
        …
        <PeoplePickerWildcards>
          <clear />
          <add key="SQL-RoleManager" value="%" />
          <add key="SQL-MembershipProvider" value="%" />
        </PeoplePickerWildcards>
        …
    </SharePoint>
    …
</configuration>

That did the trick, now both my roles and users can be searched via wildcard in the People Picker in SharePoint 2010. Hopefully this helps others out!

Registration open for Boston Area SharePoint Users Group on 1/12/11

BASPUG_195square_initialsRegistration is now open for the January 12th, 2011 meeting of the Boston Area SharePoint Users Group, at the Microsoft NERD center in Cambridge, MA.

PRESENTER
Our presenter for our next meeting is Scott Jamison, Managing Partner at Jornata. He will be presenting "SharePoint 2010 Usage and Adoption Best Practices".

SESSION ABSTRACT
This session will cover best practices for usage and adoption of SharePoint 2010. We’ll answer questions for both the SharePoint adoption team and users alike….

For the adoption team:

• How can I get my employees excited about using this new collaboration technology (champions, incentives)? 
• How do I make sure all the employees in my organization understand and feel comfortable using SharePoint?
• How can I make sure that SharePoint fits into existing business processes, and makes people’s jobs easier? 
• How do I manage the behavioral change required to integrate SharePoint into the way people work?

For users:

• What collaboration methods and site templates are most appropriate for which types of situations?
• What should I ask myself before setting up a SharePoint site? 
• How should I manage content? 
• What should I think about when tagging? 
• Etiquette for social interactions?

About Scott
Scott is Managing Partner and CEO of Jornata, a Boston-based Gold Partner and SharePoint consulting firm. Scott is a world-renowned expert on knowledge worker technologies and collaborative solutions and is an experienced leader with almost 20 years directing managers and technology professionals to deliver a wide range of business solutions for customers. Scott is a recognized thought leader and published author with several books, including Essential SharePoint 2007 and Essential SharePoint 2010. Scott received his master’s degree in Computer Science from Boston University, with post-graduate work at Bentley’s McCallum Graduate School of Business.  Scott is a SharePoint Certified Master.

MEETING SPONSOR
TBA

SUSTENANCE
Food and beverages will be provided at the event.

RAFFLE PRIZES
We will be handing out raffle tickets at the BASPUG meeting for the following items.

LOCATION
We will be meeting at the Microsoft New England Research and Development Center, located in Cambridge, MA. For more information on the facility, as well as directions, please visit here: http://www.microsoftcambridge.com

LINKED IN
Join our group on LinkedIn today to connect with the rest of the BASPUG members, and spread the word!

FACEBOOK
We are also on Facebook! http://www.facebook.com/#!/pages/Boston-Area-SharePoint-User-Group/113652405354617

TWITTER
Follow news about the Boston Area SharePoint Users Group on twitter by following us @BASPUG, and by using the hashtag #BASPUG

WEB
Visit the Boston Area SharePoint Users Group website at http://www.bostonsharepointug.org

ORGANIZERS
Event meetings are organized by Geoff Varosky of Grace-Hunt, Eugene Rosenfeld of Black Blade Associates, Ryan Tacy of HP, and Talbott Crowell of Third Millenium.

New Version of SPDisposeCheck Released Today (12/13/10)!

Saw a tweet from J.D. Wade (@JDWade) today, that Roger Lamb released a new version today of SPDisposeCheck. If you’ve been in my Best Practices for SharePoint Development session I do with Mark Rackley, or, if you are a SharePoint developer, you should know what this is.

But, in case you do not know what it is, here is a comment straight from the linked post below:

SPDisposeCheck is a tool to helps developers and administrators check custom SharePoint solutions that use the SharePoint Object Model in identifying correctly disposing of SharePoint objects to help you follow published best practice. This tool may not show all memory leaks in your code and may produce false positives which need further review by subject matter experts.

The biggest update here is that it now comes complete with an add-in to the Visual Studio 2008/2010 IDE. Sure, you can do this yourself, but, I like it when it is done for me. Call me lazy, I call myself “efficient” 🙂

http://blogs.msdn.com/b/rogerla/archive/2010/12/13/announcing-spdisposecheck-v14-0-4762-1000-update-for-sharepoint-development.aspx

Deploying and Activating Features in SharePoint 2010 with PowerShell

I was looking at an article on MSDN blogs today for customizing My Sites in SharePoint 2010. This post is not about that, but rather PowerShell that were there for deploying and activating a feature. Here is the text, direct from the site itself. This installs a feature (a), enables the feature (b), and then activates the feature on each site (c).

a.       Install-SPFeature -path "MyNewNavFeature"
b.       Enable-SPFeature -identity "MyNewNavFeature" -URL http://<mysitehost&gt; (Enables the new feature on the mysitehost)
c.       Enable the new feature on all personal sites:

$personalSites = get-spsite | where {$_.RootWeb.WebTemplate -eq "SPSPERS"}
foreach ($site in $personalSites) {Enable-SPFeature -Identity "MyNewNavFeature" -Url $site.Url}

 

The blog posting – where credit is due: http://blogs.msdn.com/b/spsocial/archive/2010/04/08/customizing-my-sites-in-microsoft-sharepoint-2010.aspx

Options for Deploying Reusable Workflows in SharePoint 2010

With SharePoint 2010, we have two new workflow types we can create, a Reusable Workflow, and a Site Workflow. Today we’ll concentrate on reusable workflows. And if you’ve been living under a rock for the past few months, let me first explain…

In WSS v3, we could create “reusable” workflows in Visual Studio, and through some third party applications, however, in v3, lots of workflows were generated in SharePoint Designer. And a lot of times, people found out the hard way, that you couldn’t just copy and paste them, or suck them into Visual Studio to re-deploy elsewhere. Those workflows are list-based workflows, which are bound just to a single list, in a single site. You could re-create the workflow on other lists, but, that is time consuming… and not that efficient at all.

There were options however – you could copy the workflow files over to a new list, and edit the workflow files manually, to point to the GUID of the list you wanted to deploy it against, or, use some Visual Studio Voodoo, to write some code to accomplish the same thing. Again, not entirely efficient, and, not out of the box.

With SharePoint 2010 and SharePoint Designer 2010, we finally have some options, out of the box.

image

  1. List Workflow – This is the same list-based workflow you know and love from 2007.
  2. Reusable Workflow – This workflow is tied to a content type, hence why it can be reusable, and the focus of this here article today.
  3. Site Workflow – The site workflow is a different beast altogether, and is a topic for another day. These are, as they sound, bound to sites. Not content types or lists, but, to the site itself. Site workflows are not initiated from list-level actions – they need to either be manually called, or called through code. But I digress – we’ll save this topic for another day…

Now, on to the meat and potatoes of this post. The reusable workflow, and, options for deployment. First, lettuce (you should always have some greens with your meat and potatoes… just ask your mother, she’ll tell you the same thing…) create a simple workflow, that will send an email to a single email address when the workflow is run.

I already have a list called Clients on my site, so we’ll use that. Open SharePoint Designer 2010, and connect up to the site, and click on the Workflows navigation node on the left hand of the screen. When you do, you’ll see the Workflows tab in the ribbon as shown above.

image

 

Create a New Reusable Workflow in SharePoint Designer

Now, you may be able to see the future, and to test this, if you think I am going to say “Click on the Reusable Workflow option in the Workflows ribbon tab”, then you are clairvoyant. Congrats on that! So cool… anyways, click there, just as you knew I was going to say.

image

Go ahead and give it a name, such as Notify Client Engagement Manager, and a description, with whatever you please… then select a content type. Now, something I forgot to mention, is that I had already created a Client content type prior to this, so, you may want to go ahead and do that, in case that’s what you’d like to do, if you’re following along at home. Go ahead – this post will still be here when you get back… I’ll wait.

Ok, done? Now, select your Client content type (as shown below), and click OK. You also may note, that you can associate this reusable content type to ALL content types. While I have not peered beneath the sheets on that one yet (SharePoint 2010 has not even officially launched as of the penning of this article…), I am guessing that it uses the System 0x or Item 0x1 content type to associate to, similar as I did in a previous article on binding custom actions to all list types.

image

Anyhow, back on track again! So, now that we have done. We get our next screen. Do as the man says, and start typing away…

image

A phrase like “email” is helpful – it’ll find the action you are looking for

image

Then press enter, and click on these users in the link that appears

image

And then create your email definition, something like as follows, and click OK.

image

And then click Save back up in the ribbon to save any changes, and when you’re ready, click Publish, that’ll, as you may have thought, publish the workflow.

image

Your workflow has now been created. Now, you’ll need to make sure your list is configured to use it, if, indeed, you’d like to use it. As it works just like the other reusable workflows in SharePoint (Approval, Three-State, etc.), it needs to be configured.

So, check your list, and be sure that it is managing content types,

image

And then, go into Workflow Settings on the list settings page

image

Select the content type…

image

And then configure the workflow…

image

And we’ll see that it is assigned to the content type now

image

Let’s test it, just to make sure… go to New Item > Client from the list page

image

And your workflow should fire. Great! Ok! Now what?

Now Bob, in HR, wants to do the same thing – what can we do? Good thing we created a reusable workflow! We have options, which is the real basis for this article.

Save As Template in SharePoint Designer

In SharePoint Designer 2010, we have the option now to save our Reusable Workflow as a Template. To do so, on the Ribbon UI when you are working with your workflow, select Save as Template.

image

This will automagically save the WSP file of the workflow out to the “Site Assets” library, and it will tell you it did so, as shown below.

image

If you click on the Site Assets link on the left-hand navigation in SharePoint Designer, you will see there should be a new WSP file, corresponding with the name of the workflow you had saved as a template.

image

Next, let’s download the file. Just click on it to save it.

image

 

Packaging and Deploying the Reusable Workflow in Visual Studio 2010

Now, here comes the good stuff. Fire up Visual Studio 2010, and go to File > New > Project from the menu.

image

If you have not seen it before in Visual Studio – under Visual C# > SharePoint > 2010, there is a new project template called Import Reusable Workflow. Select that, give your project a name, etc., and click OK.

image

You will then see the SharePoint Customization Wizard window pop up, select the URL you would like to use for deployment/debugging, and you cannot deploy workflows as sandboxed solutions, so Deploy as a farm solution is your only option. Hit Next >

image 

The next window in the SharePoint Customization Wizard is to specify the project source. Select the WSP package containing your workflow which you had exported earlier.

image

Then, select the items to import – you should only have your workflow listed.

image

Click Finish, and Visual Studio will import your workflow from your solution.

image

And when it’s done, and if it completed successfully, it will tell you so.

image

Now, look at the solution in the Solution Explorer on the right. We are not going to make any changes at the moment, but, if you wanted to, add more code, change the forms, etc., you could do that all here.

image

Right click on the project and select Package

image

Once that is complete, if you look in the project folder (created when you selected the project in Visual Studio), you should see your WSP file for your project.

image

Now, you can deploy this out to the debugging/deployment site you specified in the SharePoint Configuration Wizard portion of the import of the workflow, by right-clicking on the project, and selecting Deploy.

image

Checking the Output window will show you the steps taken for deployment.

image

Now how do you check to make sure it was deployed? Well, in Visual Studio, double-click on Feature1.feature in the solution explorer, and in the Title field of the designer view for the feature, you will see your workflow there with it’s defaulted name of Converted Workflows.

image

In your site collection features, you should see a feature by the same name…

image

Activate it, if necessary, and now your cooking with gas, or really, you can use any other sort of medium for generating intense heat that you desire, I am not going to “hold your feet to the fire” on this. Hah. Sometimes – I just crack myself up.

 

Publishing a Reusable Workflow Globally through SharePoint Designer

The first word in the title of this article is “Options”. So, here is another option – using SharePoint Designer to publish the workflow globally. Now, that sounds bigger than it is, however, you also may note, if you are an astronomy buff, that it did not say “Publish Solarsytemmy”, or “Publish Galaxyally”, or even “Publish Universally”. Maybe because I just made some of those words up? Or, maybe, because you are working within the context of a site collection here – a “world” in SharePoint. I really have no idea – I don’t know who came up with the copy for that specific button, or, rather, any buttons anywhere in SharePoint Designer.

So, start by creating a new workflow, or, you can just use the one we did earlier if you’d like.

image

Give it a step, or else its not much of a workflow…

image

Ok, lets save the workflow…

image

and you’ll see in the Ribbon, that mysterious button Publish Globally. Go ahead – click it.

image

You will then be prompted by SharePoint Designer – telling you the intentions and ramifications, with not even a one word salutation, that publishing this workflow globally will publish it to all sites within the site collection. COOL! Do it!

image

Now, to see this in action, go back into your site, and create a new site.

image

Let’s go with a team site – simple, easy, and comes pre-populated with some lists.

image

Now, lets go into our document library, and check out the workflow settings to see if it is there…

image

Oh, wait – no workflows associated with this list. Let’s add one, to see if we can add ours…

image

And there it is!

image

 

Fun stuff, huh? Yeah, I know many of you who have already started toying with 2010 may have already seen, or even done, some or all of this. The truth of the matter is, I’ve had this sitting in my drafts folder since May 10th, and as you can also see, I am finally getting around to posting it.

Hope this helps – and if not, leave me a comment on where I can provide any clarification 🙂

 

Parachute deployment image borrowed from: http://www.cirruspilots.org/Content/CAPSHistory.aspx

Speaking at SharePoint Saturday Hartford – 2011

I found out this afternoon from Pradeepa Siva (@PipsTips), that I will be having two sessions at SharePoint Saturday Hartford! SharePoint Saturday Hartford will be taking place just outside Hartford, on January 29th, 2011. The other details have been kept secret up until this point… maybe we’ll host it inside an abandoned submarine in the middle of downtown Hartford? Or even better yet, the HARTFORD CIVIC CENTER! I hope I can do my session in the locker room of the Big Whale. That would rock. Being a hockey-playing Western-Massian, I love The Whale.

I will be there in my HFD Whaler’s shirt no doubt – so please Pradeepa, don’t bother ordering me a speaker shirt Smile

Oh – wait – what sessions am I doing might be good information to give out here…

Creating Custom Actions in SharePoint 2010

And, I will also be delivering, with one of my esteemed colleagues, Tim Farrell –

Producing a Custom Solution from the Ground Up

Should be a great event, and I am definitely looking forward to it!

Content Query Web Parts, Anonymous Access, and the Dreaded CopyUtil.aspx in SharePoint 2010

I spent some decent time over the past couple of days trying to get a Content Query Web Part in SharePoint 2010, that was aggregating blogs from several different sites to “just work”, and was not having any luck. Basically, the CopyUtil.aspx page, which resides in the SharePointRoot/TEMPLATE/LAYOUTS/ folder, redirects you based on the ListID, ItemID, and WebID of the target item within the Content Query Web Part.

This work is being done for a client, who is migrating their public website from SharePoint 2007 to SharePoint 2010. It’s been a great project for a great client, however, as with any project, there are always a few curveballs unique to that specific project. This was one of them.

In their prior version of the site, the previous developer implemented the solution which can be found here: http://www.sharepointforum.se/en-US/Bugday/Lists/Posts/Post.aspx?ID=9, a custom application page and a DLL to go with it. This did not work on my client’s 2010 environment, so I had to go looking elsewhere, and was not finding too much. My good friend, Christina Wheeler, happened to direct me to a blog post she did on the matter, which was a great idea, however, this one was also directed at 2007 – http://sharepoint.mindsharpblogs.com/ChristinaW/archive/2009/12/07/Content-Query-Web-Parts-and-Anonymous-Access.aspx, or at least, an environment that was not similar to my client. There was no dispform.aspx within the layouts folder, and dropping one copied out of a document library required a bit of toiling to work… and it would not reference the master page I was hoping to use.

All looked bleak and hopeless, however, the #2 method in Christina’s post was the ticket, and, I found the example code that I needed out on the interwebs as well! Hooray for the interwebs! Which led me to this blog post: http://www.sectorpoint.com/blog/post/2008/07/10/Anonymous-access-and-the-Content-by-Query-Web-Part-(CQWP).aspx

Now, the version there however, is for 2007 as well, but, looking at how they did it, made perfect sense, and I was able to put it to practice in SharePoint 2010.

Here are the steps to get this functional…

Go into the SharePointRoot/TEMPLATE/LAYOUTS/ folder –

NOTE: DO NOT DO ANYTHING TO THE ORIGINAL COPYUTIL.ASPX!

And, create a new file, for example, GVCopyUtil.aspx, and put the following code into it, the only change from CopyUtil.aspx, is the line highlighted below.

<%@ Assembly Name=”Microsoft.SharePoint.ApplicationPages, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”%>
<%@ Page Language=”C#” CodeFile=”CopyUtil.aspx.cs” Inherits=”CopyUtil” MasterPageFile=”~/_layouts/application.master” %>
<%@ Import Namespace=”Microsoft.SharePoint.ApplicationPages” %>
<%@ Register Tagprefix=”SharePoint” Namespace=”Microsoft.SharePoint.WebControls” Assembly=”Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c” %>
<%@ Register Tagprefix=”Utilities” Namespace=”Microsoft.SharePoint.Utilities” Assembly=”Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c” %>
<%@ Import Namespace=”Microsoft.SharePoint” %>
<%@ Assembly Name=”Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c” %>
<%@ Register TagPrefix=”wssuc” TagName=”TopNavBar” src=”~/_controltemplates/TopNavBar.ascx” %>
<%@ Register TagPrefix=”wssuc” TagName=”LinksTable” src=”/_controltemplates/LinksTable.ascx” %>
<%@ Register TagPrefix=”wssuc” TagName=”InputFormSection” src=”/_controltemplates/InputFormSection.ascx” %>
<%@ Register TagPrefix=”wssuc” TagName=”InputFormControl” src=”/_controltemplates/InputFormControl.ascx” %>
<%@ Register TagPrefix=”wssuc” TagName=”LinkSection” src=”/_controltemplates/LinkSection.ascx” %>
<%@ Register TagPrefix=”wssuc” TagName=”ButtonSection” src=”/_controltemplates/ButtonSection.ascx” %>
<%@ Register TagPrefix=”wssuc” TagName=”ActionBar” src=”/_controltemplates/ActionBar.ascx” %>
<%@ Register TagPrefix=”wssuc” TagName=”ToolBar” src=”/_controltemplates/ToolBar.ascx” %>
<%@ Register TagPrefix=”wssuc” TagName=”ToolBarButton” src=”/_controltemplates/ToolBarButton.ascx” %>
<%@ Register TagPrefix=”wssuc” TagName=”Welcome” src=”/_controltemplates/Welcome.ascx” %>
<%@ Register Tagprefix=”wssawc” Namespace=”Microsoft.SharePoint.WebControls” Assembly=”Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c” %>
<%@ Register Tagprefix=”SharePoint” Namespace=”Microsoft.SharePoint.WebControls” Assembly=”Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c” %>
<asp:Content ID=”Content1″ ContentPlaceHolderId=”PlaceHolderPageTitle” runat=”server”></asp:Content>

Now, save that, and create another file in the folder, called CopyUtil.aspx.cs, and paste the following C# code into that:

using Microsoft.SharePoint.ApplicationPages;

public partial class CopyUtil : Microsoft.SharePoint.ApplicationPages.CopyUtil
{
protected override bool AllowAnonymousAccess
{
get
{
return true;
}
}
}

Not so hard, huh? And actually, it is pretty simple, even if you are a non-developer, so don’t be scared. The first section, and more importantly, the highlighted section, says that the language of the page is C# – a programming language. CodeFile references the code it will use. Inherits, means that the page will utilize the class CopyUtil from the CodeFile mentioned previously. And the master page directive just states that we will use that as our master page.

How did we figure out the class to use? Easy, that is highlighted in the 2nd code snippet above.

Now for the second code snippet, all this does, is make use of the Microsoft.SharePoint.ApplicationPages namespace – found on the first line with “using”. We are then inheriting all of the code that makes up this page, and then overriding the boolean value for AllowAnonymousAccess, and setting that to TRUE, rather than it’s normal value, which is FALSE.

In any event, Christina really saved my tuckus today – so thank you Christina!