Cascaded Lookup: Finally, a Simple Solution by SharePointBoost(referrence)

Without fail, when I and other Officetalk SharePoint Consultants are assisting with SharePoint projects we get the dreaded question: "Yes, but how do I add another level to the list?". Ok, the wording changes, but they all want to have a drop-down list based on the entry they entered on a previous list…

The basic SharePoint Lookup feature is quite basic and just gives a list of the entries on another field on the current site. Yes, with SharePoint Designer and Data Views you can combine data from lists on several sites, but it is quite a complex process. Out of the box SharePoint falls short here, but SharePointBoost's Cascaded Lookup takes it to the next level.

Being a football fan (the great Aston Villa) I have used Cascaded Lookup to set up a European Players list. It starts with all the European Countries and the leagues in each and then has a list for each of the teams in each league. So, now using Cascaded Lookup the user can enter an individual players’ details and have a field called 'Team' that is filtered first by Country and then by League.

cascaded-lookup

Bottom Line:

It may get slightly confusing when trying to add a secondary filter (i.e. filtering City by Continent and then by Country), but overall Cascaded Lookup is a simple, but a very useful tool. It is also very reasonably priced, and offers a free 30-day trial.

Written by Andy Dale

Some Posts You Need Take A Look Most!

Q:
I have search for probable answer to this, but I can't seem to get it working.
I have a MOSS 2007 that uses the computer name as the default url name, how can I change this url to something else such as the name of the company.
Also, I can achieve this during actual set up of the MOSS farm.


A: Here is a quick procedure:
1)Open up your IIS
A)Expand the Web Sites folder
B)Right click on the site that you are using.
C)Click on Properties.
D)Make sure you are on the Web Site tab and click on the advanced button by IP address box.
E)Click Add and enter the following values:
i)IP address: (All Unassigned)
ii)TCP port: (use the port number associated with your site)
iii)Host Header Value: collaborate.kwd.ad.kellwood.com/sites/
iv)Click OK, OK, OK
2) Open Central Administration
A) Click on the Operations tab
B) Under the Global Configuration section, click on Alternate Access Mappings
C) Click on Add Internal URLs. Enter the following values.
i)Alternate Access Mapping Collection: Change the alternate access mapping collection to your site
ii)URL, protocol, host and port: collaborate.kwd.ad.kellwood.com/sites
iii) Click Save
3) Now you need to update the DNS to point to your SharePoint Server.



Q:
I am wondering about the login prompt and if it is appearing too often. When I 1st access my sharepoint site it pops up and asks me to login, no problem with that, however if I go to a document library and open a word doc, each time I open the word doc I am prompted to log in again, this is very annoying and is this necessary or can I switch it off?


A:
Option One: Put your site either in a) Trusted Sites (IE6)
or b) Intranet Sites (IE7)
then you shouldn't get the additional login when opening a word doc. If you are working in a domain, you will probably be able to avoid the first login by changing your Login settings for the security zone of the site to "Automatic login using current name and password.
Q:
If the document is checked-out to me in a document library, they are not visible to other users (administrator or contributor) on site.

How do I make them visible to others they are checked-out to me?

A:
Go to document library settings-> versioning settings, then select “Any user who can read items” for “who should see draft items in this document library?”

Q:
I have an excel report done with Performance Point Server and is deployed on a SharePoint site. Now in my SharePoint site I am able to see that report as it is deployed but what I also see is a scroll bar. If I click on modify shared web parts and if I change the height then I will not see the scroll bar but I don’t want to change the size.
Is there any way to hide that scroll bar??


A:
Give this shot. Had the same problem this seems to work for me....
I created a new aspx page via SharePoint designer.
Add web part zone, add excel web access part & configure to show your excel file.
Attach your master page.
Ok to the scrollbars:
To remove the horizontal ones change the "columns to display" to something low like 10 or 5.
This can be done on the web part itself.
For vertical, go to the web part properties in SharePoint designer (should be on left hand side).
Change the height to something big like 1000px. This should remove the horizontal scrollbars.
Now, the trick is to slim down the height little by little so you aren't scrolling way down the page to see the footer.
For my application, a web part height of 775px is just right for displaying 50 excel rows.
-with that, my worksheet will never be larger than a max of 50 rows. if your height will be dramatically changing on a frequent basis then this probably won't be your best bet. But it's an option for those who don't need dynamic sizing (which I have no idea how to do).

Q:
We deployed SharePoint 2007 Server, in which we have a document library. We have couple of content types. These content types have some columns; and for one column there is a parent child relationship. When user selects first column (parent) second column (child) values should be filtered based on parent column selection (basically getting Country and state functionality; when user selects country in first drop down list all the states of that country should be filtered and displayed in second column drop down box. It is just kind of “list in list”.
A:
I don't believe this functionality is available natively in MOSS2007. If it's critical that you need it, you can either custom code your own web part to pull the two lists together, or look at someone like CorasWorks that provide this functionality as part of their plug-in product. In my case I am using a tool called SharePoint Cascaded Lookup, which works fine. I recommend you take a look at it.

How to create a SharePoint slipstream using the latest updates(referred)

With the announcement of the December 2008 Cumulative Update and the changes in the software update model it brings, we felt it was a good time to revisit the topic of slipstreaming. This post provides the process for creating a slipstream installation source that uses the December 2008 CU as an example. You can simply replace the December 2008 CU with the February 2009 CU, April 2009 CU, and so on going forward because the process will be the same.

Here are the steps to create a slipstream to the latest bits:

1. Copy the RTM (release) media into a new local folder such as C:\SPSlipstream
2. Extract SP1 and copy the extracted contents into the C:\SPSlipstream\UPDATES folder that was copied when you performed step 1.
3. Extract the December 2008 CU and copy the contents into the C:\SPSlipstream\UPDATES folder.
4. If you are not using Windows SharePoint Services only, delete the wsssetup.dll file from C:\SPSlipstream\UPDATES folder.

A few notes:

1. Use the following command to extract a software package to a folder: /extract:C:\myfolder to extract to C:\myfolder. If you already agree to the EULA, use the /quiet switch to suppress the EULA.
2. If you have a Windows SharePoint Services-only deployment, SP1 above is defined as Windows SharePoint Services SP1 while December 2008 CU is defined as the December 2008 Windows SharePoint Services CU package.
3. If you have a Microsoft Office SharePoint Server 2007 deployment, SP1 above is defined as both Windows SharePoint Services SP1 and Microsoft Office SharePoint Server 2007 SP1 while December 2008 CU is defined as the December 2008 Windows SharePoint Services CU package and the December 2008 Microsoft Office SharePoint Server 2007 CU package.
4. If you have a Project Server deployment, first pick either A or B, and for SP1 add Project Server SP1 to the slipstream source. For the December 2008 CU you can simply install the Microsoft Office SharePoint Server 2007 CU package (even if Microsoft Office SharePoint Server 2007 is not deployed).
5. If you follow this process with the December 2008 CU and want to use it again for the next cumulative update, you can either
1. Choose to start over the process from scratch.
2. Repeat steps 3-4 and add the next CU to your existing slipstream.

FAQ [Updated on 01/13/09]:

Q1. What about Infrastructure Update? Is it included in December CU?
A: Yes, it is included.

Q2. How do you include language packs?
A: The original Language Packs included wsslpk.msi and wssmui.msi. These are in the specific locale of the language pack itself. We updated both of these at SP1. The WSSMUI package specifically has been updated through hotfixes (including the December Cumulative Update), and is commonly referred to as the "localized patch". As mentioned in the prior post at http://blogs.msdn.com/sharepoint/archive/2008/12/17/announcing-december-cumulative-update-for-office-sharepoint-server-2007-and-windows-sharepoint-services-3-0.aspx, the local patches are included in the December CU packages 960010 and 960011. Therefore, applying the December CU to Language Packs is as simple as ensuring the Language Pack is installed, as with the product we also suggest installing the SP1 version of the language pack, and then the latest Cumulative Update such as 960010 or 960011.

Q3. Thanks for nice post. i have a confusion with it. I already installed the Sp1 and infrastructure updates. So still i need to download and extract the sp1. I am using MOSS then you say no need of wss updates, what its mean?
A: For MOSS installation, WSS updates are recommended, but not a requirement.

Q4. If I'm starting with the single download of WSS 3.0 with SP1, do I just do note a and skip step 2?
A: Yes. To start with WSS 3.0 with SP1, you don't need to do step 2 since it is already included in the package.

Q5. Where is wsssetup.dll? I cannnot find it.
A: If you start with MOSS 2007 with SP1, step 4 is not necessary because the file wsssetup.dll is already removed. You won't find it in the directory.

Q6. Thanks for the info - v.useful. Just to be clear though, is the logic below right? "4. If you are not using Windows SharePoint Services only" If that is literally what is meant - perhaps it would be clearer to say "If you are using MOSS...."
A: Yes, if you are using MOSS RTM you should delete this file.

Q7. Do you confirm that you are talking about "svrsetup.dll" instead of "Servicessetup.dll" as mentionned?
A: This is a replacement mistake when do the posting, the correct one is "wsssetup.dll". It is corrected now.

Dan Winter

SharePoint Program Manager

Jie Li

SharePoint Technical Product Manager
referred from http://blogs.msdn.com/sharepoint/

SharePoint List Collection, smart tool to collect lists from different sites

SharePoint list collection is a SharePoint web part used to display items from different lists or sites. Meanwhile, the user can create different views as needed and edit items as in original lists or sites.

This list collection web part is developed by SharePointBoost. It greatly expands the default SharePoint list collection function, and adds some new features, such as enable users create different views and edit items in list collection view. It is indeed a great improvement on the function of list collection.

SharePoint list collection is a powerful web part for users to apply in practice. SharePoint list collection greatly expands the default function of SharePoint, thus makes it quite convenient for users to display items in one list. With SharePoint list collection, the user can consolidate various list items from different areas and web sites into a single grid view web part, and create public view or personal view for a SharePoint list collection to filter, sort or group information. Furthermore, the user can also create and manipulate items in SharePoint list collection as in default SharePoint list view. These three functions make SharePoint list collection the best choice for users.

SharePoint list collection can be widely applied by users from all kind of industries in practice. For instance, the accountant can view different items in financial statement by collecting them into one list, create different kinds of views as he/she is pleased to do, and avoid tedious operation to edit items in original lists or sites. SharePoint list collection can also be used by HR staff to view, edit information of different staffs in a list just as in original areas.

30 days free trial is now available at:
http://www.sharepointboost.com/listcollection.html

SharePoint conferences Best Practice Conferences, Connections, SPTechCon

SharePoint Conferences, Best Practice Conferences, Connections, SPTechCon and Tech Eds Oh My!

If you're looking at this next calendar year and trying to decide what conference to go to you've got a daunting task ahead of you. Sooo many good choices! I've had this post in draft and have been planning on putting out my calendar... Essentially after I saw Dave Pae put out conference list, I realized I had a lot of things on my calendar... Here's what I'm aware of, plus more.

I see the first official mention of a SharePoint Conference in 2009. I also see the link to sign up to find out about the SharePoint Conference 2009 is on the mssharepointconference.com site. I guess we can rule out that this conference will NOT be before Tech Ed. I can't speculate, but I do recommend getting on this email list.

image

SharePoint Related Conferences

SharePoint Technology Conference
January 27–29, 2009: Burlingame, CA
For three exciting days in January, you'll be eating, drinking, sleeping, talking and living Microsoft Office SharePoint Server and Windows SharePoint Services. The first day at SPTechCon is filled with intense full and half-day workshops, half in the morning, half in the afternoon. The next two days are filled with more than 50 break-out classes to choose from. Build your own custom program! This conference is hosted by BZ Media LLC. Line up includes Tom as keynote. Speakers include many MVPs and leaders including Shane Young, Todd Klindt, and Nicola Young, John Ross, and Mike Watson.

SharePoint Best Practices Conference
February 2–4, 2009: San Diego, CA
The SharePoint Best Practices Conference eliminates design, deploy, organization and administration confusion, replacing disorder with Clarity, Direction and Confidence. This conference is hosted by Mindsharp. Keynote, Joel Oleson. This line up is MOST impressive: Ben Curry, Mike Watson, Bill English, Bob Fox, Bob Mixon.... I already did a post on this best practices conference.

2009 SharePoint .Org Conference

March 22-24: Baltimore, MD

For Associations and Not for Profit Organizations, SharePoint Conference for networking and education networking

Sharepoint Connections -- Dev Connections Spring 2009

March 22-25, Orlando FL

Ritz Carlton & JW Marriott - Penton Media. 150+ Sessions from Microsoft, MVPs, and more. I'll be giving a couple sessions in the IT and Leadership track.

European SharePoint Best Practices Conference

April 6-8 2009:

London, UK. Hosted by Combined Knowledge. This is sure to be the best SharePoint related Conference in Europe, this year. It already has an amazing speaker line up. This conference was just announced this week, and hey, I am Keynote! Woohoo! Check out the killer line up of the SharePoint greats. Steve Smith MVP, Spence MVP, Mike Watson (X MSFT), Todd Bleeker MVP, Andrew Connell MVP, Penny Coventry MVP, Bob Fox MVP, Andrew Woodward MVP, Natalya Voskresenskaya MVP (Blogger think Squirrel)
Montreal SharePoint Summit

April 6-8: Montreal, Canada

Centre-Mont-Royal

Third annual SharePoint summit. Speakers include Errin O'Connor, Mike Fitzmaurice, and Bill English
Conferences that will have lots of SharePoint Sessions

Microsoft FASTforward '09 (SEARCH+)
February 9–11, 2009: Las Vegas, NV
3 days of compelling discussion on the evolving business environment and how search is enabling companies to succeed. This conference is hosted by Microsoft. (Text from SharePoint Team blog)

Microsoft MIX09 (WEB+)
March 18-20, 2009: Las Vegas, NV
Now in its fourth year, MIX is a unique technology conference that connects web professionals with industry thought leaders to explore the future of the Web together. This conference is hosted by Microsoft. There are usually a few SharePoint Conferences, but you'll see a lot of other .NET and Social Networking sites.

Microsoft Tech·Ed North America 2009

May 11-15: Los Angeles, Convention Center

"Seventeenth year as the best technical education and networking event in the industry."

Tech Ed Global

You can navigate to the other Teched's through the WW drop down in the corner. My favorites are South East Asia, NZ, and Australia.



More SharePoint Details Coming soon... TEC - The Experts Conference (Exchange, AD and Identity, Las Vegas - Spring, Berlin - Fall)
Free Conferences SharePoint Saturday and Code Camps:

Virginia Beach SharePoint Saturday

Jan 10: Joel Oleson, Michael Lotter, Paul Galvin, Mark Miller (Free community event) - Yep I'll be there.

NYC SharePoint in the Real World, Imagine Event (SharePoint Saturday)

Jan 21: NYC (Many partners)

Kansas City SharePoint Saturday

Feb 7 - Free event. Still in the planning stages

South Florida Code Camp

Code Camp is a FREE one day GEEK FEST held on Saturday February 7, 2009

Boise Code Camp

March 28th, 2009
Twin Cities Code Camp

April 4, 2009

SharePoint Cascaded Lookup, freely build cascaded lookup relationship between sites

SharePoint Cascaded Lookup is a quite useful to perform cross-site lookup and filtered information from different lists of other sites.

In daily work, cascaded lookup is quite helpful to IT staff; however, SharePoint does not support this feature by default. SharePoint Cascaded Lookup is a powerful cascaded lookup tool. It not only allows users to lookup other lists in different sites, but also can easily filter field. Furthermore, SharePoint Cascaded Lookup provides two-way conversion to SharePoint default lookup type or SharePoint cross-site lookup type.

SharePoint Cascaded Lookup introduces Filter Column and Parent Column to filter field values to narrow the range of choices. As a result, users can lookup field values more quickly and accurately. Filter Column is in the same list with the looked-up column. If users set a column as Filter column for the looked-up column, when edit/create an item, the choice of the cascaded lookup column will be filtered according to the value of the Filter Column. Parent Column, which is also used to filter looked-up values, is in the same list with the Cascaded Lookup column. When users set a column as Parent Column of a cascaded lookup column, in the edit/new form of an item, the choices of Cascaded lookup column in dropdown list will be different according to the value of Parent Column.

This new product is now available for 30 days free trial, you can download it from:
http://www.sharepointboost.com/cascaded-lookup.html

SharePoint Workflow Assocation Page base class

public enum AssociationType
{
List,
ContentType,
ContentTypeOnList,
}

public abstract class AssociationPageBase : LayoutsPageBase
{
protected string workflowAssociationName = string.Empty;
protected Guid workflowTemplateId;
protected SPWorkflowTemplate workflowTemplate;
protected bool workflowAssociationExists;
protected bool updateContentTypesOnLists;
protected AssociationType associationType;
protected Guid listId;
protected SPList list;
protected SPContentTypeId contentTypeId;
protected SPContentType contentType;
protected SPWorkflowAssociation workflowAssociation;
protected Guid workflowAssociationId;
protected bool newTaskListRequired = false;
protected string newTaskListName = string.Empty;
protected bool newHistoryListRequired = false;
protected string newHistoryListName = string.Empty;
protected SPList taskList;
protected SPList historyList;

protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.workflowAssociationName = this.Request.Params["WorkflowName"];
this.workflowTemplateId = new Guid(this.Request.Params["WorkflowDefinition"]);
this.workflowTemplate = this.Web.WorkflowTemplates[this.workflowTemplateId];
if (!string.IsNullOrEmpty(this.Request.Params["GuidAssoc"]))
{
this.workflowAssociationExists = true;
this.workflowAssociationId = new Guid(this.Request.Params["GuidAssoc"]);
}
this.updateContentTypesOnLists = (this.Request.Params["UpdateLists"] == "TRUE");
if (!string.IsNullOrEmpty(this.Request.Params["List"]))
{
this.listId = new Guid(this.Request.Params["List"]);
this.list = Web.Lists[this.listId];
}
if (string.IsNullOrEmpty(this.Request.Params["ctype"]))
{
this.associationType = AssociationType.List;
if (this.workflowAssociationExists)
{
this.workflowAssociation = this.list.WorkflowAssociations[this.workflowAssociationId];
}
}
else
{
this.contentTypeId = new SPContentTypeId(this.Request.Params["ctype"]);
if (this.list == null)
{
this.associationType = AssociationType.ContentType;
this.contentType = this.Web.AvailableContentTypes[this.contentTypeId];
}
else
{
this.associationType = AssociationType.ContentTypeOnList;
this.contentType = this.list.ContentTypes[this.contentTypeId];
}
if (this.workflowAssociationExists)
{
this.workflowAssociation = this.contentType.WorkflowAssociations[this.workflowAssociationId];
}
}
string taskListId = this.Request.Params["TaskList"];
if (taskListId[0] == 'z')
{
this.newTaskListRequired = true;
this.newTaskListName = taskListId.Substring(1);
}
else
{
if (this.associationType == AssociationType.ContentType)
{
try
{
this.taskList = this.Web.Lists[taskListId];
}
catch (Exception)
{
this.newTaskListRequired = true;
this.newTaskListName = taskListId;
}
}
else
{
this.taskList = this.Web.Lists[new Guid(taskListId)];
}
}
string historyListId = this.Request.Params["HistoryList"];
if (historyListId[0] == 'z')
{
this.newHistoryListRequired = true;
this.newHistoryListName = historyListId.Substring(1);
}
else
{
if (this.associationType == AssociationType.ContentType)
{
try
{
this.historyList = this.Web.Lists[historyListId];
}
catch (Exception)
{
this.newHistoryListRequired = true;
this.newHistoryListName = historyListId;
}
}
else
{
this.historyList = this.Web.Lists[new Guid(historyListId)];
}
}
}

protected void Submit()
{
if (this.newTaskListRequired)
{
Guid taskListId = this.Web.Lists.Add(this.newTaskListName, this.newTaskListName, SPListTemplateType.Tasks);
this.taskList = this.Web.Lists[taskListId];
}
if (this.newHistoryListRequired)
{
Guid historyListId = this.Web.Lists.Add(this.newHistoryListName, this.newHistoryListName, SPListTemplateType.WorkflowHistory);
this.historyList = this.Web.Lists[historyListId];
}
switch (this.associationType)
{
case AssociationType.List:
if (this.workflowAssociationExists)
{
this.UpdateWorkflowAssociation();
this.list.UpdateWorkflowAssociation(this.workflowAssociation);
}
else
{
this.workflowAssociation = SPWorkflowAssociation.CreateListAssociation(
this.workflowTemplate, this.workflowAssociationName, this.taskList, this.historyList);
this.UpdateWorkflowAssociation();
this.list.AddWorkflowAssociation(this.workflowAssociation);
}
break;
case AssociationType.ContentType:
if (this.workflowAssociationExists)
{
this.UpdateWorkflowAssociation();
this.contentType.UpdateWorkflowAssociation(this.workflowAssociation);
if (this.updateContentTypesOnLists)
{
this.contentType.UpdateWorkflowAssociationsOnChildren(true, true, true);
}
}
else
{
this.workflowAssociation = SPWorkflowAssociation.CreateSiteContentTypeAssociation(
this.workflowTemplate,
this.workflowAssociationName,
this.taskList.Title,
this.historyList.Title);
this.UpdateWorkflowAssociation();
this.contentType.AddWorkflowAssociation(this.workflowAssociation);
if (this.updateContentTypesOnLists)
{
this.contentType.UpdateWorkflowAssociationsOnChildren(true, true, true);
}
}
break;
case AssociationType.ContentTypeOnList:
if (this.workflowAssociationExists)
{
this.UpdateWorkflowAssociation();
this.contentType.UpdateWorkflowAssociation(this.workflowAssociation);
}
else
{
this.workflowAssociation = SPWorkflowAssociation.CreateListContentTypeAssociation(
this.workflowTemplate, this.workflowAssociationName, this.taskList, this.historyList);
this.UpdateWorkflowAssociation();
this.contentType.UpdateWorkflowAssociation(this.workflowAssociation);
}
break;
}
SPUtility.Redirect(this.GetRedirectUrl(), SPRedirectFlags.RelativeToLayoutsPage, HttpContext.Current);
}

protected abstract string CollectAssociationData();

protected void Cancel()
{
SPUtility.Redirect(this.GetRedirectUrl(), SPRedirectFlags.RelativeToLayoutsPage, HttpContext.Current);
}

private void UpdateWorkflowAssociation()
{
this.workflowAssociation.Name = this.workflowAssociationName;
this.workflowAssociation.AutoStartCreate = (this.Request["AutoStartCreate"] == "ON");
this.workflowAssociation.AutoStartChange = (this.Request["AutoStartChange"] == "ON");
this.workflowAssociation.AllowManual = (this.Request["AllowManual"] == "ON");
this.workflowAssociation.AssociationData = this.CollectAssociationData();
if (this.workflowAssociation.TaskListTitle != this.taskList.Title)
{
this.workflowAssociation.SetTaskList(this.taskList);
}
if (this.workflowAssociation.HistoryListTitle != this.historyList.Title)
{
this.workflowAssociation.SetHistoryList(this.historyList);
}
}

private string GetRedirectUrl()
{
string redirectUrl = string.Empty;
switch (this.associationType)
{
case AssociationType.List:
redirectUrl = string.Format("WrkSetng.aspx?List={0}", this.listId);
break;
case AssociationType.ContentType:
redirectUrl = string.Format("WrkSetng.aspx?ctype={0}", this.contentTypeId);
break;
case AssociationType.ContentTypeOnList:
redirectUrl = string.Format("WrkSetng.aspx?List={0}&ctype={1}", this.listId, this.contentTypeId);
break;
}
return redirectUrl;
}
}

How to use:
1. Use this class as the base class of your custom workflow assocation page;
2. Use the protected field member to get the related list, workflow template, content type etc;
3. Override CollectAssociationData to collect data from web form and get your custom assocation data(xml format etc.);
4. Invoke Submit when you click "OK" to commit your change, invoke Cancel when you click "Cancel".
Hope to help you, any question please add comments.