 |
| Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
| Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
|
 |
|
|
|
|
|
|
|
8/16/2010
This weekend we had a great time at SPSColumbus! As promised, here is a link to the slides I presented at SPSColumbus this weekend - Link to Slides.
Also, most of the examples in the slide deck have additional blog posts with instructions. You can click here to see a summary of all of my 2010 posts. 8/10/2010I have definitely been off the grid lately! I have been working on finishing up our book and to be honest that took just about everything I had, so sadly blogging got put on the back burner. The book is almost done, so I should be able to pick up blogging again. I wanted to start by sharing a few of the different events I will be at this year:
First off, here is the link to the book that I have been working on. It will be released later this fall. I have had an opportunity to work with some great co-authors and I am very excited to see the final product!
Beginning SharePoint 2010: Building Business Solutions with SharePoint
http://www.amazon.com/Beginning-SharePoint-2010-Building-Solutions/dp/0470617896
Next up is SharePoint Saturday Columbus. We have been planning the first SPS event in Columbus and we have had some great responses! I hope if you are in the Columbus area that you will be joining us!
SharePoint Saturday Columbus
http://www.sharepointsaturday.org/columbus/default.aspx

Here is the session I will be leading at SPSColumbus:
Working with Lists and Libraries in SharePoint 2010
Do you know all of the different things you can do using SharePoint lists and libraries? In this session, we will take a look at the different out-of-the-box list features and how they can be combined to build powerful no-code business solutions. We will look at the new features available in SharePoint 2010 and how they can be used to increase productivity. Some of the new features include working with lookup columns, new list settings, new view settings, inline editing and custom form creation.
Following SPSColumbus will be the Best Practices conference. This will be my first time attending / speaker and I am very excited! This is one of those conferences where you really get to dig into the "why" you should be doing things, or not doing things. There is an excellent line up of speakers and I am honored to be able to speak alongside them. In addition to conference sessions they have several "Ask the Experts" events as well as full day conference sessions. If you haven't checked out this conference yet, you should! Registration is still open, so it is not too late to make plans to attend!
Best Practices Conference
https://www.bestpracticesconference.com/
Here are the two sessions I will be leading at BPC10:
Best Practices for Managing an Effective SharePoint Team
At the root of every successful SharePoint implementation is a team supporting it and making it possible. But how did the team get started and who should be part of the team? In this session we will look at the best practice guidelines for building and maintaining an efficient SharePoint team.
There are many different ways to build solutions within SharePoint, from lists and libraries to workflows and alerts. How do you know what approach will work best for the solution you are building? In this session we will look at some best practices that can be followed to ensure that the approach you are taking with your site design is an approach that your users will understand. We will review what key factors should be considered up front to ensure that any solutions you develop are understood and embraced by your users.
And finally, this October I will be back in Boston for SPTechCon. I have been able to speak at all of the SPTechCon events so far and must say this is one of my favorite conferences. The atmosphere is small enough to make good connections, yet large enough to really get to see how the rest of the world does things!
SPTechCon
http://www.sptechcon.com/
Here are the two sessions I will be leading at BPC10:
Working with Lists and Libraries
Do you know all of the different things you can do using SharePoint lists and libraries? In this session, we will take a look at the different out-of-the-box list features and how they can be combined to build powerful no-code business solutions. We will look at the new features available in SharePoint 2010 and how they can be used to increase productivity. Some of the new features include working with lookup columns, new list settings, new view settings, inline editing and custom form creation.
Creating an Electronic Forms Solution Using InfoPath and SharePoint
Paper, paper everywhere! There are so many forms in an office to keep track of that the task can overwhelm both the people who create the forms and those who fill them out. This class will show you how to ensure everyone is using the correct version of the form and create dynamic forms using InfoPath 2007 and the Forms Server capabilities built into SharePoint.
I really hope to see some of you at these events! Hopefully in the next week I can start back up with my blogging and can get around to answering some of the comments that have been posted to the blog. I just need a few more hours in each day J 7/1/2010One of the Site Collection settings you can configure in SharePoint 2010 is the "Suggested Content Browser Locations". When configured, these locations will be displayed as a dropdown when you users select to add content from SharePoint. Keep in mind that publishing must be enabled for this option to be available within the site collection.
The steps to configure this are described below:
When the list loads, select the option to create a new item.
Now when a user selects the Insert Option - Picture -Insert from SharePoint they will see this link as a suggested location.
6/29/2010In most cases, you would want the SharePoint navigation to be security trimmed based on a user's access to the site. If they have no access then you wouldn't want them to see the link. In some cases however, you would like users to see the items and get an access denied message with the ability to request access. Once the publishing features have been activated within a site collection, this setting can easily be configured from the UI.
From Site Settings select the Site Collection Navigation Settings:
Remove the option for security trimming:
When a user doesn't have access they will see an access denied link, with the option to request access.
You can configure the email address that the request is sent to in the Manage Permissions page.
This will remove the security trimming from both the Global Navigation (top bar) and the Current Navigation (Quick Launch). 6/14/2010
There are a few things that come standard in 2010 that really make me happy. They are things that I have been doing for a while in 2007; however now in 2010 they can be done with just a simple click or two!
Scenario:
- List of Projects
- Library with Project Documents, lookup metadata to associate each document with a project
Goal:
- Display all the associated documents on the list display page for the Projects List.
To get started you will need to create your projects lists and your documents list and then add a lookup column to the documents list.
From there, the configuration is a breeze. Start by accessing your projects list. In the List tab of the Ribbon, under the customization section, select the Default Display form link.
Then select the Insert Ribbon option and the Insert Related Items Option. You will notice that all lists that have a lookup to this list are listed here and available for connection.
When you select the documents, a web part is added to the page, configured with a filter so only the associated documents are displayed. Also, since this is a standard web part, you can easily modify the way that the web part is displayed (change the view or other properties).
Here is a screenshot of the updated display page:
All of this in 5 easy clicks J If you are interested in seeing how this same task would be done in 2007, you can refer to this blog post. As you can see the improvements in 2010 will be quite the time saver! 6/10/2010Creating a new Quick Step allows you to add a ribbon item to perform a custom action, such as a workflow. When you create this Quick Step users can easily activate the workflow from the Ribbon. Below is a screenshot of the configured Quick Step in the ribbon:
To create this, from the Browser, select the List Ribbon and then select the Library Tab and the New Quick Step button.
From here, SharePoint Designer will open and you will be able to enter the data for the Quick Step:
You will notice that once you select ok you are redirected to the list page in SharePoint Designer and your Quick Step is listed under the Custom Action section.
Also notice the Ribbon. You will see that you have another location to create the custom actions. From this menu you can see that we can create the custom action in different locations and when you click one of those options you will see we have more options than just linking to a workflow.
When you select one of the items, you will see a similar entry screen that allows you to select the custom action you want to complete. You can navigate to a form, start a workflow or navigate to a URL.
Below are some screenshots with samples of the locations that you can add the items. I used a document library, so I don't have an example from the new item form that you would have in a list.
6/8/2010In a few of my classes lately, we have gone through an example of creating a simple Task Dashboard. I wanted to do a quick blog so my students would have something to reference if they needed it. This is a pretty basic example of using all OOTB (out of the box) features and combining them to quickly build a solution.
Scenario:
Solution:
To build this solution we will be using several different tools available in SharePoint, all included in the list below:
- Task List
Task List Views
- We will create views for each of the different ways we want to see the data displayed on our dashboard.
- Web Part Page
- List View Web Parts
- Custom Navigation
The first thing we will do is create our task lists and then configure all the views that we need. To create the list, go to View All Site Content, Create and then select the Task list.
Next, we will need to configure our custom views. To do this, we can select the view drop down and select to create new views.
Now, we just need to give our view a name and set the specific criteria.
Below is a table that describes the configuration for the different views we are creating for this example:
View | Description | Image | Open Tasks Assigned to Them | Show all open tasks that are assigned to me. | 
| Overdue Tasks | Show all open tasks that the due date is less than today. | 
| Tasks Due This Week | Show all tasks that are due in the next 7 days. | 
| Task Calendar | Show the tasks in a calendar format that shows the start and end date as the duration. | 
| Tasks Assigned to Others | Show all the tasks grouped by the person they were assigned to and the status. | 
|
Now that we have the views created, we will create the web part page. We are creating this web part page to give us some more real estate to display the data. We could in theory add the web parts to the home page; however we want to be careful not to get our home page too cluttered. Since we don't want to clutter the home page, the web part page is a good alternative. Once we have the page created, we will simply add it is a tab to our home site so users can easily access it. To create the web part page go to view all site content and then create (same steps that we used to create the task list). This time on the selection page we will choose to create a web part page.
On the creation page you will need to give the page a name, select a layout and also select the library that will be used to store the list. Every web part page you create must be stored in a document library. If you are going to create many pages, or if you think having the page in an existing library would be confusing, you could create a library dedicated to storing only web part pages.
Now that we have the page created, we can simply add our web parts to the page and select the view that we want to be displayed in each of the web parts. We can also modify the Title Bar properties to change the page title, image and add a caption.
Here are the steps that would need to be repeated for each web part you add to the page:
- Add the Web Part
- Modify the Properties to change the View and the Web Part Title
Here is a screenshot of the finished Dashboard page.
And here is the page in edit view to show how the web parts have been arranged on the page.
As a final last step, we are going to add a link to this page to the global navigation for the site. To access the settings, go to the site settings page and then select the navigation link. We are working with a site that has publishing enabled, so our link is for navigation. If you don't have publishing enabled you will want to use the Top Link Bar link.
Once this step has been completed, you will be able to easily access the Task Dashboard using the global navigation.

6/5/2010
In this post I would like to give an example of a scenario within SharePoint 2010. Since this is just a sample post and since I want to keep it to a minimal size, I am planning on skimming over the details and not providing step by step instructions for the entire example. Instead, I will assume some of the basics and then go into detail on only the specifics. This particular post is based on a scenario we have internally, but I am certain this scenario can apply to many different examples as well.
Scenario: Time Sheet Entry
Use Cases / Components of the Solution:
- A project list that shows the total hours assigned to the project as well as the hours used to date and the remaining hours. The only users that can add items to this list are account managers. Everyone can read this list.
- A timesheet where any user can enter the time they have billed against the client. Once the entry is submitted it should automatically update the remaining project hours. Once the timesheet has been updated the item should become read only since no other changes should be made.
Solution:
Steps for building the solution:
- Create the lists and assign permissions as needed.
- Create a custom workflow for the timesheet list that will update the Projects list.
From within the list, use the Ribbon to Create a Workflow in SharePoint Designer
SharePoint Designer will open and allow you to create a new workflow. You will be prompted to enter a name and description for this workflow.
Once we select ok, we will be redirected to the screen that allows us to build the workflow rules. By default you will see a step block called Step 1. Since our workflow will be modifying a list that only certain users have access to, we will need to instead use an impersonation step. This means that the workflow will run in the context of the workflow author and not the current user. This means that since the author has full control, we will be able to modify any list and set permissions on items (which is not something that the current user will have permissions to do). We can add the impersonation step to the workflow and then delete the default Step 1.
Once you complete these two steps, you should have something similar to what I have below:
Now, we will need to build the logic within our workflow. Listed below is a screenshot of the logic for this example:
When you complete the workflow, your screen should look like the screenshot above. I think there is value in walking through the creation of each of these items, so we will spend the rest of the blog working through them. The first thing we are going to do is to compare the Submit as Final field to ensure that the value is yes. This means that in order for the workflow to start, the user editing the timesheet entry must first select that the entry is ready to be submitted. This step is accomplished using the "If Current Item Field Equals" condition. Once you had the condition added you can simply click on the blue text to enter the parameters.
Next, we want to capture the current number of hours used from the projects list. To do this we will use the "Set Workflow Variable" action.
When you select the workflow variable entry, select to create a new workflow variable and name it "Hours Used to Date". Select the Value entry to configure the lookup to the projects list. The screenshot below explains the logic that is being used for this example.
Next, we will want to use the action "Do Calculation" to add the variable we just created with the current hours in the project. The results will get stored in a new variable, which we are calling "Updated Hours to Date".
Now, we will need to take this new total and update the value in the projects list. To do this we use the "Update List Item" action. We will need to configure this to update the list item that matches the corresponding project list entry. This will be very similar to the configuration that we had above.
Here is a screenshot of the configuration screen for the "this list" option.
Our final steps are to remove the contribute permissions and then add the read permissions for the site members. We will use the "Remove List Permissions" and "Add List Permission" actions.
The steps to add the read permissions are essentially the same as removing the permissions. Once we have this step completed, our workflow is ready to go. The screenshots below show the before and after for both the projects list and the timesheet list. I am running the example using an account that is a member within my site collection and therefore once the workflow is completed, I will only have read permissions on the item.
Project List Before:
New Timesheet Entry:
Workflow status of complete:
Timesheet list item is now read only:
And finally, the projects list has been updated with the new total:
This post is just an example of how you could get started to do some of the various configurations of having one list dynamically update the values in another list. Hopefully you found it helpful and are able to apply it to many scenarios other than the one listed in this post.
6/4/2010I have heard a lot of request on the steps required to create a filtered dropdown within SharePoint 2010. I wanted to just create a quick post that will walk you through the steps. The example is pretty simple, but should be enough to get you started.
In our example we are entering data into a timesheet. We want to be able to select a client and a project. Once the client is selected then we would want to filter the list of projects to show only projects related to that client.
To get started we need 3 lists:
- Clients
- Projects
- Timesheet
At a high level, here are the steps we are taking:
- Create the Client Lists in SharePoint.
- Create the Projects List in SharePoint and add a lookup column to link with the Client.
- In the Timesheet list add two lookup columns, one for client and one for project.
Edit the Timesheet list form in InfoPath 2010 :
- Apply and desired style changes
- Add a Data Connection that we can use for the Filtering
- Add a Rule to Reset the Projects Field whenever the Client Field is updated
Since I am assuming you are familiar with creating lists and adding lookups, I will spend the rest of the blog focused on step 4, editing the form in InfoPath.
From the library Ribbon, select the Customize Form option.
The form will open in InfoPath and you can then make any desired design changes to the form. In my example I have changed the background style, inserted an image, added some header text and removed the attachments row. My changes to the form are shown below:
Next up, we will want to create a data source that we can use for the filtering. We already have 2 data sources that have been added from our lookup columns, but those only retrieve the title and we are looking for additional information from the list. To add a new data source select the Manage Data Connections link on the toolbar.
From this menu, select to add a new data source connection to receive data from a SharePoint list. As you work through the menu, you will be prompted to enter the particular list data that you want to reference in your lookup. We will first enter the URL for the site we are referencing, then the specific list and then finally the fields that we want to use in our data source. As a final step you will need to give this connection a unique name, in my example we are using Project_Details.
Now that we have the data source in place we can create the filter on our projects field. We will need to right click on the field we want to filter and select the option for the Drop-Down List Box Properties.
We first need to update the Data Source to point to the data source we added earlier. Once we do this, we can filter the entries (to enter in the option to see the entries, select the icon next to the entries field).
The filter we want to set up can be explained like this: Only show the Project Options when the Client field on the form is equal to the Client field in the Projects list. Below are the screenshots for the configuration.
For the filter we will first select the client field on the form:
Our operator will be "is equal to" and our final selection will be the client field in the projects list:
Now that we have the filter configured, the final step is to add a rule that resets the project field whenever the client field is modified. This way we can be sure that if they change the client, they will also need to update the project. The ribbon makes creating rules in InfoPath very easy. Simply select the field the rule will apply to and then select the rule you want to apply. In our case we want to set the rule to occur whenever the field changes and we want to reset another field's value.
The menu screen is displayed and we can quickly use the icons to pick the field we want to set and then enter the value. In our case we leave value blank because we want the value to reset to a blank entry.
Now, we simply need to publish the form back to SharePoint using the Quick Publish option.
Now whenever we select to create a new item, our custom form is displayed and the options for project will filter based on the client selected.
Here is a screenshot of our list, which allows you to see that the filters about are working correctly.

4/6/2010In one of my previous posts we looked at the different ways you could validate column content, but what happens if you want to compare one column value with another for validation before the item is saved? Well with SharePoint 2010 you can do this using the list validation features. In this post we are going to walk through a simple example, where we want to make sure that users enter a due date for the tasks that is greater than the start date. This can be configured using a very simple formula, show in the example below.
First, start with a Task List:
From the Ribbon, select the List Settings option:
Under the General Settings you should see an option for Validation Settings:
On this screen you can enter the formula that must equate to true and the message to present to the user if it does not evaluate to true (for our example, our formula is [Due Date] > [Start Date]:
Once you save these settings, the user will get the following message if they enter a due date that is prior to the start date:
This is just one example of the features inside SharePoint 2010 that can help ensure only meaningful data is added to the site.
| Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /blogs/jennifer/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /blogs/jennifer/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
|
|
|
|
|
|