Updating Template Parts
Let's say that your IT department has finally completed the AddressBlock template part and distributed it to the entire company. It has been six months, and now hundreds of form templates use this address block. Form template designers love this component because it saves them a lot of time and energy. Instead of having to add the address block to their form templates manually, they can now just insert the AddressBlock template part and their work is done.
However, users have been complaining that it's cumbersome to have to type the city and state every time they use a form that collects address information. They would like to choose this data from a list of cities and states. The designers in the IT department have graciously decided to make that change to improve the usability of forms throughout the company. They have updated the AddressBlock template part to replace the two Text Box controls for city and state with two cascading Combo Box controls—one that contains the state and another that shows the cities in the chosen state. (Also, the list of states will depend on which country is chosen from the country Combo Box. See Chapter 7 if you need a refresher about how to implement cascading List Box controls in a form template.) Figure 10.12 shows the new version of the AddressBlock template part after making these changes.
Figure 10.12 AddressBlock template part with cascading Combo Box controls
The other piece of feedback the IT department has received, this time from the form template designers, is that the AddressBlock component uses the default icon for all template parts. This makes it difficult to quickly differentiate between multiple template parts in the Controls task pane. So, the designers in the IT department decide to change the icon as well. Let's walk through how to do this.
To change the icon, first open the Template Part Properties dialog for the template part (Figure 10.13). You can open this dialog by clicking on the Properties menu item on the File menu while designing the template part. From this dialog, you can change the name of the template part, the ID, and the icon associated with the template part. The name and ID are generated automatically the first time you save your template part. (We'll change these later in this chapter.) The icon is set to a default icon for all template parts. The dialog in Figure 10.13 shows the Template Parts Properties dialog after changing the icon.
Figure 10.13 Template Part Properties dialog
Updating a Form Template That Contains the AddressBlock Template Part
Once the designers in the IT department have completed all the necessary changes to the AddressBlock template part, they tell all the form template designers in the company that a new version of the AddressBlock is available. As a form template designer, you want to take advantage of these changes. You also want an easy way to update the form templates that use existing AddressBlock template parts. It could be quite tiring to open each form template and search for all the template parts in every view before you can update them. Fortunately, there is an easier way to do this. You do have to open each of the form templates, but, once you do, you can update all instances of the AddressBlock throughout the form template (even across multiple views).
The first thing you must do is install the new AddressBlock. You install the new template part the same way you did the first time you installed the component. (If you have previously set up a repository of template parts using the registry key we talked about earlier, this step isn't necessary. In that case, InfoPath will load the new template part automatically.) Once you install the new version of the AddressBlock template part, all the existing AddressBlock components in the form template will now have a warning design-time visual, as shown in Figure 10.14. This visual simply alerts you to the fact that there is a new version of this component. When you see this design-time visual, if you then right-click on the tab at the bottom of the Section for the template part, you can choose Update from the context menu. This will update all the template parts of that type throughout your form template, even in different views. This is quite useful if you have a form template that uses many instances of the same template part.
Figure 10.14 Design-time visual shown on the new AddressBlock template part
In addition to the Update context menu item, you will see a More Details menu item on the context menu. Clicking on this item opens the dialog shown in Figure 10.15, which will give you more information about why there is a warning design-time visual on this Section control. You can then choose to update all AddressBlock template parts in the form template by clicking the Update button.
Figure 10.15 More details for the new template part
As we mentioned earlier, when you insert a template part into a form template, it's no longer an atomic component. The controls contained in the template part become part of the current form template. You are free to move the controls around or delete them entirely. However, when you update a template part, the component will be reinserted. That means that view changes are lost. For example, let's say that you deleted the city Combo Box from the template part. When you update the template part, the city Combo Box will be reinserted. (If you have previously moved pieces of the template part around in the view, those items will remain in the view.)
Also, when you update template parts, any view changes will be incorporated into the current form template, as will any calculated default values, rules, data validation, or data connections associated with the template part. When you update a template part that contains these features, as is the case when inserting a template part into an existing form template, any existing values, rules, data validation, or data connections will be replaced, as we talked about earlier, and not simply appended to the form template. In addition, in the case of updating an existing template part, if the component has any conditional formatting associated with it, those conditions and actions will also be replaced. Of course, when you update your template part, you will be warned that you may lose this data, but that won't help you if you've spent hours making those changes to your form templates in the first place. So, as we mentioned earlier, it's always a good idea to back up your form template before you update a template part.
Locating All Template Parts That Need to Be Updated
As you can tell, updating all template parts is relatively easy. However, what if you want to identify all the template parts that need to be updated not only in the current view but also in every view of your form template? You may, for example, want to inspect all instances of a template part before you choose to update them all so that you can determine whether there are any customizations (e.g., conditional formatting, rules, and so on) that you want to save. Locating all template parts that need to be updated is relatively easy as well.
First, go to the Design Tasks pane by clicking on the menu item of the same name on the View menu. Then, click on the Design Checker link in the task pane. This opens the Design Checker task pane (Figure 10.16). The Design Checker task pane provides you with a way to check your form template for various types of issues. This includes updates needed for template parts as well as many other items (which we'll talk about in more detail in Chapter 14).
Figure 10.16 Design Checker task pane showing template parts that need to be updated
Notice that a warning appears in the Design Checker task pane shown in Figure 10.16. (There will be one warning for each template part in the form template.) This warning tells you that there is an AddressBlock template part in the form template that needs to be updated. If you click on the warning text in the task pane, the template part that needs to be updated will be located. If the component is in the current view, it will simply be selected. If the component is outside of the viewable area of the current view, the view will be scrolled to show it. If the template part is in another view, the view will be switched to that view and the template part will be selected. Once you've located all the instances of the template part that need to be updated, and you've determined that it's okay to update them, you can then right-click on one of the components and update the current template part and any other template parts of this type by clicking the Update menu item as you normally would.