Friday, December 18, 2009

My Profile Availability Not Showing Up

Going to you’re My Profile site should show your availability based on your Exchange Calendar. However, there are instances when this isn’t displayed. Of course, if you aren’t looking for it, you probably aren’t seeing this feature fail. What would happen is that you open you’re my Profile page, then a Section appears called Availability, and it says, Checking Free/Busy…but then disappears. If you check your ULS logs during this time, you will probably notice the following error (where DOMAIN is equal to your domain):


ExchangeAutodiscover-GetAvailabilityUrl threw an exception: System.Net.WebException: The remote name could not be resolved: 'autodiscover.DOMAIN.com'


The problem seems to be that SharePoint is literally looking for autodiscover.domain.com rather than the actual exchange outlook web access site. A quick fix that I am using is to create a redirect in the DNS which point autodiscovery.domain.com to the Outlook Web Access site, something like owa.domain.com. I’m not sure why this problem occurs, but the redirect works like a charm.

Tuesday, November 10, 2009

How-to Hide Columns In List/Libraries Views and Forms

When creating lists and libraries in SharePoint, sometimes it necessary to hide certain information from users. You can easily create custom views and uncheck columns which you don’t want users to see, however, users will also be able to see/edit the unchecked items in the newform.aspx page (when you click new). So, here’s an additional step to make sure that you hide columns not only from views, but from the form:
  1. Navigate to the list or library which you need to hide the columns
  2. Under General Settings, select Advanced Settings
  3. Next to Content Types, select Yes to Allow management of content types
  4. Click OK
  5. Back in the Settings page, you will now notice a heading for Content Types
  6. Select the existing Content Type to edit it
  7. In the Content Type settings page, select the columns which you wish to hide.
  8. There are three options to choose from:
  9. Required (Must contain information)
  10. Optional (May contain information)
  11. Hidden (Will not appear in forms)
  12. Select Hidden to hide the column from the form
  13. Click OK when you are complete.

Don’t forget to uncheck the hidden column from your Views as well on the List/Library Settings page

User Profiles Changes Are Not Updating Across the Farm

This “feature” shows up when a user changes their last name, email address account name or any other information which is replicated from an external source. The best example is changing a last name in Active Directory, which then changes the email address and account name (i.e. Jane Doe changes to Jane Johnson and email changes to jdoe@email.com to jjohnson@email.com).
What should happen is that SharePoint picks up the changes and synchronizes the information with the user profile throughout the entire environment. But in a lot of cases the updated information is not reflected in the farm!

This happens because there are two user profiles in a Microsoft SharePoint Standard or Enterprise farm. This is because the base Windows SharePoint Services application has one profile and MOSS has one. This is because you can install Windows SharePoint Services without MOSS, but you cannot install MOSS without installing the base WSS. So, Windows SharePoint Services provides for a basic user profile, while the addition of MOSS adds a more advanced user profile.

So, what happens in the instance where the user information isn’t replicating, the problem is that the synchronization jobs are simply not happening. To force the synchronization to happen, you can use the following commands:


stsadm -o sync
-excludewebapps
-synctiming
·         "M" denotes every n minutes (m:5 means every 5 minutes).
·         "H" denotes every n hours (h:1 means every 1 hour)
·         "D" denotes the number of times per day (D:3 means three times per day)
-sweeptiming
-listolddatabases
-deleteolddatabases

Changes the Profile Sync job (MOSS)
stsadm -o sync –synctiming m:2

Changes the Quick Profile Sync job (WSS)
stsadm -o sync –sweeptiming 1

There’s another scenario for synchronization not happening. The example is when you first visit a site a record is recorded in the UserInfo table of the sites Content Database. The field tp_IsActive is defaulted to false, which means you have visited but have not interacted with the site.

The Sync process uses this value to determine if the user info should be replicated in the sync process. So, if you were to make a change to the profile information in AD and refresh the site that you had only visited and see the information is still the same, it was not updated.

If you now interact with the site, either add a document or edit a link, in effect become an active user of the site, and then run the stsadm -o sync command, the profile changes to the user name will be replicated to the site.

There are instances where the two commands don’t necessarily solve the problem. This happens when content databases become stale or have not been synchronized. In this case, there are stale records which need to be cleaned up prior to synchronization.

The following command should cleanup stale records.
Lists Old Content Databases
stsadm -o sync -listolddatabases 2

Cleans up Old Records (Does Not delete databases, just the old records corresponding to the databases)
stsadm -o sync -deleteolddatabases 2

Thursday, October 15, 2009

Updating Existing Alerts After URL Change

When you change your SharePoint URL it does not automatically update alert subscriptions to reflect the change. For example, changing the URL from http://inside.sharepoint.com to http://mysharepoint.com would result in Alerts holding the old URL rather than taking the new. This is because those Alert Subscriptions are holding absolute paths. When you change the SharePoint URL, you will also need to take these additional steps (NOTE: I'm suggesting doing this in the database, so use at your own risk):


Run the following against SQL:
update immedsubscriptions
set siteurl = replace(siteurl,'http://', 'https://')


update schedsubscriptions
set siteurl = replace(siteurl,'http://', 'https://')


Note that you need to update both the immediate subscriptions table and the scheduled subscriptions tables.
To run these you need to connect to your content database in SQL Server Management studio, open a new query window and run the above SQL.

Wednesday, October 14, 2009

Hiding Columns in Lists/Library Views and Forms

When creating lists and libraries in SharePoint, sometimes it necessary to hide certain information from users. You can easily create custom views and uncheck columns which you don’t want users to see, however, users will also be able to see/edit the unchecked items in the newform.aspx page (when you click new). So, here’s an additional step to make sure that you hide columns not only from views, but from the form:

1. Navigate to the list or library which you need to hide the columns

2. Under General Settings, select Advanced Settings

3. Next to Content Types, select Yes to Allow management of content types

4. Click OK

5. Back in the Settings page, you will now notice a heading for Content Types

6. Select the existing Content Type to edit it

7. In the Content Type settings page, select the columns which you wish to hide.

8. There are three options to choose from:

· Required (Must contain information)

· Optional (May contain information)

· Hidden (Will not appear in forms)

9. Select Hidden to hide the column from the form

10. Click OK when you are complete.

Don’t forget to uncheck the hidden column from your Views as well on the List/Library Settings page

Tuesday, October 13, 2009

Updating Profile Information in SharePoint 2007

Once you have added users to a SharePoint environment, you may have the need to update their information. For example, if a user’s last name changes and they want to modify their email address or user name. Luckily, SharePoint uses ADUIDs to help synchronize information in the system. Since it’s very unlikely that the ADUID will ever change, this is a great model and means you can change information as you need without harming the system. However, let’s say you’ve updated Active Directory and the updates in SharePoint still don’t show up. Here’s how to update that information:

1. As a Farm Administrator, navigate to the Central Administration Page

2. Select the Shared Service Provider used to host the site where the user wants to change information

3. Under the User Profiles and My Sites heading, select User Profiles and Properties

Note: You can check the Import schedule for full and incremental. What causes the issue of Profile information not updating is when there is no full import scheduled. SharePoint will “see” the ADUIDs match and won’t update the information. Schedule a full import to allow this process to be automatic

4. From the User Profiles and Properties screen, select View User Profiles

5. Locate the user which you wish to update. Hover over the user to see the dropdown menu. Select Edit from the dropdown menu.

6. From the Edit User Profile screen you will be able to change all profile information for the user.

When done, click Save and Close

Monday, October 12, 2009

Start or Stop a Full Crawl in Windows SharePoint Services 3.0

Sometime the crawl in Windows SharePoint Services gets stuck, doesn’t run or simply misses sites because of other issues (security, configuration, etc.). In MOSS and Search Express, it’s easy to kickoff full crawls when these kinds of problems happen. You would need to initiate a full crawl, because nothing new would be crawled during the outage and when you have resolved your search problems, you would be missing that data in your results.

Thankfully, this one is quite easy. Utilizing the STSADM command out of the hive, you can start and stop full crawls. In some cases, I've even added this as a scheduled windows task to make sure that WSS runs a weekly full crawl.

To start a full crawl of the content, use the following syntax:

Stsadm -o spsearch -action fullcrawlstart

To stop a full crawl of the content, use the following syntax:

Stsadm -o spsearch -action fullcrawlstop

Remove Metadata and Personal Information from a document

So you have collected a lot of Metadata on your Office 2007 document and you are ready to publish the final document and share the document. However, before you share an important document you probably want to review the contents of the document to ensure that everything is correct and the document does not contain anything you do not want to share with other people, especially hidden data or personal information that might be stored in the document itself or in the document properties (metadata). Here’s how to do it:

  1. Open the Office document that you want to inspect for hidden data or personal information.
  2. Click the Microsoft Office Button, click Save As, and then type a name in the File name box to save a copy of your original document.

It is a good idea to use the Document Inspector on a copy of your original document because it is not always possible to restore the data that the Document Inspector removes.

  1. In the copy of your original document, click the Microsoft Office Button, point to Prepare, and then click Inspect Document.
  2. In the Document Inspector dialog box, select the check boxes to choose the types of hidden content that you want to be inspected.
  3. Click Inspect.
  4. Review the results of the inspection in the Document Inspector dialog box.
  5. Click Remove All next to the inspection results for the types of hidden content that you want to remove from your document.

If you remove hidden content from your document, you might not be able to restore it by clicking Undo.

The inspectors for Comments and Annotations, Document Properties and Personal Information, and Headers and Footers cannot be used in an Excel workbook that has been saved as a shared workbook (Review tab, Shared Workbook command). This is because shared workbooks use personal information to enable different people to collaborate on the same workbook. To remove this information from a shared workbook, you can copy the workbook, and then unshare it. To unshare a workbook, on the Review tab, click Shared Workbook. On the Editing tab, clear the Allow changes by more than one user at the same time check box.

Tuesday, July 28, 2009

SharePoint Versions

With all of the patches, hotfixes and service packs coming out, its hard to keep track of your farm and it's patch level. It's also difficult to verify what version you should be at after applying patches, hotfixes and service packs. This goes along with another post that I had to show database version and database schema version. Here's the lists of patches and versions up to June:

MOSS 2007 or WSS 3.0 June 2009 Cumulative update: 12.0.0.6510
MOSS 2007 or WSS 3.0 April 2009 Cumulative update: 12.0.0.6504
MOSS 2007 or WSS 3.0 Service Pack 2: 12.0.0.6421
MOSS 2007 or WSS 3.0 Feb 2009 Cumulative update: 12.0.0.6341
MOSS 2007 or WSS 3.0 Aug 2008 Cumulative update: 12.0.0.6327
MOSS 2007 or WSS 3.0 Infrastructure Update: 12.0.0.6318
MOSS 2007 or WSS 3.0 post-SP1 hotfix: 12.0.0.6303
MOSS 2007 or WSS 3.0 post-SP1 hotfix: 12.0.0.6301
MOSS 2007 or WSS 3.0 post-SP1 hotfix: 12.0.0.6300
MOSS 2007 or WSS 3.0 SP1: 12.0.0.6219
MOSS 2007 or WSS 3.0 October public update: 12.0.0.6039
MOSS 2007 or WSS 3.0 August 24, 2007 hotfix package: 12.0.0.6036
MOSS 2007 or WSS 3.0 RTM: 12.0.0.4518
MOSS 2007 or WSS 3.0 Beta 2 TR: 12.0.0.4407
MOSS 2007 or WSS 3.0 Beta 2: 12.0.0.4017
Office 12 (PDC image - pre-beta): 12.0.0.3111

You can go to your Central Administration Operations page and select Servers In Farm to pull your Farm and Server Versions, or you can use Powershell (if it's loaded) and run thi command on each server to pull the version:

(get-item "hklm:software\microsoft\shared tools\web server extensions\12.0").getvalue("version")

project cannot be opened in read-write mode because a previous checkin for this project is not complete

Problem
You try to open your project in the professional client, but you get a message box saying that the project is already checked out to you (or someone else).
This project cannot be opened in read-write mode because a previous checkin for this project is not complete.

Explanation
This sometimes occurs if:
  • You close the professional client window with the plan still open inside (by clicking on the x in the top right corner of the window).
  • The client closes before the check-in process is completed and the project stays checked out.
  • You shutdown the client via the task manager with a plan still open
  • You shutdown windows with a running MS Project session.
Resolution
This issue was first addressed with Service Pack 2, but because of the nature of how it is caused, the issue may still occur

Check in the Project Center of Project Web Access
  1. Navigate to Project Web Access
  2. From the Quick Launch Bar, select Project Center, under the Project heading
  3. From the Project Center Screen, change the view to Summary
  4. Scroll the project details to the right to verify Owner, Checked Out Status and Checked Out By information
If the check-out state is "yes", you can request for an administrator to perform a force check-in of your project

To do a force check-in:
  1. Navigate to Project Web Access
  2. From the Quick Launch Bar, select Project Center, under the Project heading
  3. From the Project Center Menu, select Go To
  4. From the drop down, select Check In My Projects
  5. Select the check box next to the project to force check-in and click the Check In button
  6. Give Project Server a couple of minutes to process the transaction before re-trying to open
If your project is not checked out or if you force check-in and continue to receive the error, you will need to clear your project cache:
  1. Start Microsoft Office Project 2007 Professional
  2. Logon to the Microsoft Office Project Server Account
  3. From the Tools menu, select Local Project Cache
  4. From the fly-out menu, select Cleanup Cache
  5. From the default Project Filter (Project not checked out to you) select, your project and click Remove From Cache
  6. If your project does not appear in the default filter, change the Project Filter to Projects checked out to you
  7. Select your project from the list and click Remove From Cache
  8. Click Close
  9. Restart Microsoft Office Project 2007 Professional and try to open your project again

Monday, June 1, 2009

SharePoint Config Wizard fails after Infrastructure Updates

After building out a new farm and applying the various SharePoint updates, you received the following error after installing the Infrastructure Updates and running the Config wizard:

“An exception of type Microsoft.SharePoint.PostSetupConfiguration.PostSetupConfigurationTaskException was thrown. Additional exception information: Failed to upgrade SharePoint Products and Technologies.”

The reason this happens is because the farm doesn’t have any Web Apps provisioned so the Web.config file which is supposed to be in the 12\template\Layouts folder is missing.

To resolve this, simply copy the Web.config file in the 12\Config folder and paste it into your 12\templates\Layouts. Now run the Config wizard again and everything should work smoothly.

Tuesday, May 26, 2009

SharePoint 2007 Service Pack 2 Changing SharePoint to Trial Mode After Installation

More fun from Redmond! Microsoft is warning customers of SharePoint Server 2007 SP2 of a bug that causes the program to stop functioning at 180 days. Microsoft is working on a fix.

"During the installation of SP2, a product expiration date is improperly activated. This means SharePoint will expire as though it was a trial installation 180 days after SP2 is deployed. The activation of the expiration date will not affect the normal function of SharePoint up until the expiration date passes. Furthermore, product expiration 180 days after SP2 installation will not affect customer’s data, configuration or application code but will render SharePoint inaccessible for end-users."

The bug is activated by applying Service Pack 2 to Office SharePoint Server 2007, Project Server 2007, Form Server 2007, Search Server 2008 and Search Server 2008 Express. Windows SharePoint Services 3.0 is not affected.

Although Microsoft is still working on a hotfix, a workaround is available.

What can you do to fix it?

  • To work around this issue you will need to re-enter your Product ID numbers (PID) on the Convert License Type page in Central Administration. Your can see this KB article for detailed steps.
  • You can also wait for the hotfix (available for free from http://support.microsoft.com) to resolve this issue.
  • Note: For Search Server 2008 Express the only way to resolve this issue is to apply the hotfix.

For more information, your customers can go to the Sharepoint Team blog

http://blogs.msdn.com/sharepoint/archive/2009/05/21/attention-important-information-on-service-pack-2.aspx

Thursday, May 14, 2009

Register A New Project Workspace Template

Note, before you can register a New Project Workspace Template, you will need to create one. Be sure that you crate the new template based of the Project Workspace Site template. Make sure you do not modify any of the lists, libraries of column names or types. You can add additional lists and libraries as well as add custom column types and names to any existing lists, but Project Server will expect certain data to be passed from the site to the server. If you change the default values, you will experience failures during project server synchronization

When you are done creating the template, you will want to save the site as a template and then download the site template (*.STP) to a location on the WFE Server that is hosting your project server.

After you create a project workspace template, you must promote it to global status before Project Server allows it to be used for Project Workspace provisioning.
  1. Log on to any one of the servers in the farm that hosts Project Web Access.
  2. Open a Command Prompt window and navigate to the hive.
  • cd %ProgramFiles%"\Common Files\Microsoft Shared\web server extensions\12\BIN"
  1. Run the command to add the template to the global list of templates, as shown in the following example. Replace Template Path with the location, MyWorkspaceTemplate.stp with the STP created and title with the new title name
  • stsadm -o addtemplate -filename "
  1. Run the command IISReset. Your new template is now registered for global use within Web applications associated with the SSP that contains the instance of Project Web Access.
  2. To see the list of registered templates, run the command stsadm -o enumtemplates. For the example template, the command outputs the following. 
  • Test Workspace Title - Language: 1033 - Site Template: _GLOBAL_#0 - Template Id: 6215 

Wednesday, May 13, 2009

Embedding Video On Your SharePoint Site

Have you ever wanted to simply add some video to a landing page in SharePoint? There are a lot of hefty applications out there that do this quite well, utilizing Silverlight and Ajax, but, did you know that you can do this with out of the box SharePoint? It's actually quite simple. Here's how!

  1. Upload a media file to a standard SharePoint Document Library
  2. Navigate to the site where you want to embed the video
  3. Edit the page and select Add a Web Part
  4. Under Miscellaneous, insert a Content Editor Web Part
  5. From the Web select Open the Tool Pane
  6. From Tool Pane, select Source Editor
  7. Copy in the following code (replace http://link to video here with the actual link to the video in the library):

<div align="center">

   <embed src="http://link to video here"

      autoplay="true"

      loop="false"

      width="200"

      height="200"

   </embed>

</div>

Click Apply. Its just a matter of formatting after that!

Wednesday, April 29, 2009

iFilter Not Working After Applying Microsoft Update

After applying any Microsoft Update, in this case we were applying the February Cumulative patches for WSS and SharePoint, that your Foxit PDF IFilter has stopped working. I'll wait while you go perform a search and notice you are not getting the expected results. You can even build the index and notice that it's building in record time!

Well, the resolution for this is quite simple. First get your install documentation that you originally used to install Foxit PDF IFilter and make sure you note the way that your IFilter is currently configured. Now, all you need to do is uninstall the Foxit PDF IFilter and reinstall. If you attempt to just reinstall/repair you will get error messages.

Monday, April 27, 2009

Sharepoint 2007 version query

Ok, so you might wonder how to tell what version your Sharepoint 2007 farm is? Sometimes the Central Admin screen can show one thing, while dll's show a different thing, and even running a patch to completion doesn't necessarily mean you were upgraded (I found that out the hard way). The best way for sure is to query the database, and it will tell you where you started, where you've been and where you are currently.

Run this query against your SharePoint Config Database:
SELECT version FROM .dbo.versions

You will see several lines in the results, hopefully more than 4, if you dont see 5 at least, you need some patches in a bad way. Here are some of the results you may see for cumulative updates and service packs.
Service Pack 1
Version: 12.0.0.6219
3.0.7.0 (initial Database Schema)
3.0.10.0 (Current databas schema)

Service Pack 2
Version: 12.0.0.6421
3.0.8.0 (initial Database Schema)
3.1.3.0 (Current Database schema)

April Cumulative
12.0.0.6504
3.0.8.0  (initial Database Schema)
3.0.10.0 (Current Database schema)

Thursday, April 2, 2009

Cascading Dropdown Lists in InfoPath 2007

This one has come up a couple of times for me. Basically, it’s the need to create a series of filtered drop-down lists in an InfoPath form that ultimately populates a read-only text box control. A logical example would be choosing a car manufacturer, then selecting the car type and then color and finally putting the price in the test box. Here’s a simple method of doing this exact thing using some simple XML and InfoPath 2007. Keep in mind through this exercise, I’m going to present it the long way to make it easier to understand.

  1. Open InfoPath 2007
  2. Under the Design a form heading, select Design a Form Template
  3. Select Blank and then click OK. Make sure you UNCHECK the box next to, Enable Browser-compatible features only before clicking OK
  4. From the Design Tasks Pane, select Controls
  5. Insert two (2) Drop-Down List Box controls and one (1) Text Box control. Note: you can either drag and drop the controls onto the form page, or you can simply click on the control to have it automatically insert. You can change the formatting later. At this point, if you click on Controls, in the Design Task pane, you can select Data Sources. You will notice a Main data source with a group folder called myFields. Under the group folder you will notice the fields which were entered above, automatically created, automatically named and the data types defaultedto text. These data fields are uniquely bound to each control inserted.
  6. Double-click on the first Drop-Down List Box control, which should be named field1 as default, to open the Drop-Down List Box Properties
  7. With List box entries set to Enter list box entries manually, click Add…
  8. Add, Ford and then GM and then Lexus, then click OK
  9. Now, open a Microsoft Notepad (click Start->All Programs->Accessories->Notepad), this seems to be the easiest method to put the XML datasource together. What we want to be able to do is filter on the manufacturer Drop-Down List that you defined above as Ford, GM or Lexus. What we want to return is the model and then the price for that model. For this exercise, we’ll use four (4) XML tags, as follows. NOTE: XML Tags are useually in pairs, an opening and closing tag, referred to as a tag pair. All data that belongs to a specific element will be appearing within this tag pair. In our case, we will be embedding tag pairs within tag pairs to define data all the way to the price:

  10. <AUTOINDUSTRY></AUTOINDUSTRY>
    <AUTOMODELS></AUTOMODELS>
    <MODEL></MODEL>
    <PRICE></PRICE>
    We’ll also use a tag called AUTOMAKER that will be defined later.

  11. Now we can setup the XML in the Notepad to be able to filter data and return a value, in this case the price. First we’ll add the filters for Manufacturer, but we need to format the XML tags. First put in the AUTOINDUSTRY tag pair. This will represent the start and finish of the XML:

  12. <AUTOINDUSTRY>
    </AUTOINDUSTRY>

  13. Now Insert the AUTOMODELS tag pair inside the AUTOINDUSTRY tag pair. Between these tags is where the logic we are going to use will be embedded:

  14. <AUTOINDUSTRY>
    <AUTOMODELS>
    </AUTOMODELS>

    </AUTOINDUSTRY>

  15. Now we need to setup the filters from the dropdown selection from the list we created earlier, this is also where we define the AUTOMAKER tag listed above:

  16. <AUTOINDUSTRY>
    <AUTOMODELS AUTOMAKER="Ford">
    </AUTOMODELS>
    <AUTOMODELS AUTOMAKER="GM">
    </AUTOMODELS>
    <AUTOMODELS AUTOMAKER="Lexus">
    </AUTOMODELS>
    </AUTOINDUSTRY>

  17. Next we’ll add the models tag pair for the selected manufacturer inside the AUTOINDUSTRY tag pair

  18. <AUTOINDUSTRY>
    <AUTOMODELS AUTOMAKER="Ford">
    <MODEL>Mustang</MODEL>
    </AUTOMODELS>
    <AUTOMODELS AUTOMAKER="GM">
    <MODEL>Corvette</MODEL>
    </AUTOMODELS>
    <AUTOMODELS AUTOMAKER="Lexus">
    <MODEL>IS</MODEL>
    </AUTOMODELS>
    </AUTOINDUSTRY>

  19. Finally, we’ll add the price for the selected model

  20. <AUTOINDUSTRY>
    <AUTOMODELS AUTOMAKER="Ford">
    <MODEL>Mustang</MODEL>
    <PRICE>20,000</PRICE>
    </AUTOMODELS>
    <AUTOMODELS AUTOMAKER="GM">
    <MODEL>Corvette</MODEL>
    <PRICE>30,000</PRICE>
    </AUTOMODELS>
    <AUTOMODELS AUTOMAKER="Lexus">
    <MODEL>IS</MODEL>
    <PRICE>30,000</PRICE>
    </AUTOMODELS>
    </AUTOINDUSTRY>

  21. To add multiple Models, we’ll have to copy an entire AUTOMODELS tag, we’ll add one for this example:

  22. <AUTOINDUSTRY>
    <AUTOMODELS AUTOMAKER="Ford">
    <MODEL>Mustang</MODEL>
    <PRICE>20,000</PRICE>
    </AUTOMODELS>
    <AUTOMODELS AUTOMAKER="Ford">
    <MODEL>Focus</MODEL>
    <PRICE>10,000</PRICE>
    </AUTOMODELS>

    <AUTOMODELS AUTOMAKER="GM">
    <MODEL>Corvette</MODEL>
    <PRICE>30,000</PRICE>
    </AUTOMODELS>
    <AUTOMODELS AUTOMAKER="Lexus">
    <MODEL>IS</MODEL>
    <PRICE>30,000</PRICE>
    </AUTOMODELS>
    </AUTOINDUSTRY>

  23. Now, save the file that you’ve been working on to your local machine and name it auto.xml
  24. Back in the InfoPath form, double-click the second drop down control, which should be field2 and to open the Drop-Down List Box Properties box
  25. Under List Box Entries, select Look up values from an external data source and then click Add
  26. Select Create a new connection to: and select Receive data and click Next
  27. Select XML Document and click Next
  28. Click Browse and then select the auto.xml file we created earlier and click Next
  29. Select Include the data as a resource file in the form template or template part and click next
  30. Enter the name auto in the field provided for Enter a name for this data connection and check the box next to Automatically retrieve data when form is opened and click Finish
  31. Next to Entries, back on the Drop-Down List Box Properties, click the Select XPath button (this looks like a little + with a document next to it, just to the right of the box)
  32. On the Select a Field or Group popup, select AUTOMODELS and then click Filter Data…
  33. Add a new filter, by clicking Add…
  34. Change the first dropdown box to AUTOMAKER. This is the tag we created earlier in the XML file. This will compare what has been selected to what is in the XML file for filtering purposes.
  35. The second drop down should be is equal to
  36. On the third drop down select, Select a field or group
  37. Change data source to Main and select field1 and click OK
  38. The third drop down should now display field1, click OK to accept the filter rule
  39. Click OK to accept the new filter
  40. Click OK to accept the Xpath
  41. Click the XPath button next to Value and change it to PRICE and click OK
  42. Click the XPath button next to Display Name and change it to MODEL and click OK
  43. Click OK to accept the new property changes.
  44. Finally, on the Text Box, double click on it to open the Text Box properties, this should be field3
  45. Next to Value, select the Xpression button to open the formula box (this should look like an F with a small x to the right of the box)
  46. Click Insert Field or Group and select field2 from the Main data source
  47. Click OK, to accept the selection
  48. Click OK to accept the formula
  49. Click Apply to accept the changes
  50. You can now click the Preview button to test the form or you can also click File->Preview->Form, which will do the same thing

What you have essentially done is, setup one dropdown list loaded with values. Based on the selection that you make on that initial drop down list, you are comparing it to values in the XML, in this case AUTOMODELS. Every instance of AUTOMODELS which matches the selection from the initial drop down list is then pushed into the second drop down. Then, based on your selection of that filtered list, an additional value is pulled, in this case, the price that we set on the models. We then display the model to the user and store the price as the value. Finally, we pass the set value into the text box to display the price.

Additionally, you can set some conditional formatting on the second drop down to disable the control if the first drop down is blank. You could also change the display properties on the Text Box to make it read-only. In this manner, the user would have to select a manufacturer before they could select a model and there’s no way for them to change the price. You can also do some formatting to clean up the value in the second dropdown to render information that's relevant to the first choice. Good Luck!