Live Chat Here!
PointFire and Content Types
Posted by Martin Laplante on 08 December 2010 08:58 AM
Most of the following applies to both PointFire 2007 and to PointFire 2010. The use of content type hubs is only available in SharePoint 2010 Server.
There is a complex interaction between content types and lists or document libraries that needs to be understood when making list or libraries multilingual.
When PointFire makes a list or library multilingual, it attempts to add a number of columns to it, and to every document type within it at the time. Which columns are added depends on the current settings and on the current state of the list or library. For the purpose of this article we will use the terms “list” and “document library” interchangeably. If the list doesn’t already have the “Item Language” column, PointFire will add it in order to make the list multilingual. Depending on the settings, it will also attempt to add the language Variation columns, that is to say “English Variation”, “French Variation”, etc.
At the time that it adds these columns, it will try to apply them to every content type in the list. Sometimes it fails, since content types are often read-only, leaving the list in a state where the list itself has those columns, but some or all content types within the list do not have them, and consequently many of the items or documents do not have them. This can also happen if a content type is added to the list after it has already been made multilingual. In addition, sometimes a previous attempt at adding these columns has failed but has not been completely removed. In that case, when PointFire adds the columns, it may be adding a duplicate of the column that looks identical but has a different internal name, causing PointFire to ignore it.
Recommendation: Item Language in the Content Type
When content types are used in a document library or list, our recommendation is to put "Item Language" into the parent site content type manually, and to let PointFire add the Language Variation columns to the individual lists and document libraries, which will have the effect of adding the columns to the list content types, whose parent is the site content type.
The reason for adding “Item Language” manually to the content types or their parents is that it is a mandatory field and the means to give it a value at the time that an item is created or added may be associated with the content type, which is difficult if the column is not part of the content type. The possible drawbacks are that the list of available languages will be fixed in the content type itself; if you ever want to add additional languages, you must change the content-type (or site column) to add the additional language choices and not rely on PointFire to make the necessary change. The other drawback is that by virtue of having the proper Item Language column, PointFire will treat any list or library that contains such a type as a multilingual list. However some of the multilingual functionality of the list will not work until the PointFire command is called to make multilingual the apparently already multilingual list, resulting in potential support issues. The language variations columns cannot be part of the content type because they are lookup columns.
A column which is an exact copy of the Item Language column that PointFire would normally add to lists should be put in the content-type itself. The name is "Item Language" and the internal name is "Item_x0020_Language". The type is "Choice", "Require that this column contains information" should be Yes in most cases. The allowed values are "English", "French" etc, to be spelled precisely like PointFire does it. In general we want to use "radio boxes" and no other choice or default. To be certain, it is a good idea to create a disposable test list without content types, use PointFire to make it multilingual, then copy the Item Language column definition exactly.
The addition of a content type that includes Item Language to a list or library adds the Item Language to the list or library and makes PointFire consider it to be multilingual. The user must ensure that every content type in that list or library contains the Item Language column, because PointFire will not add it to the Content Types that don't have it.
When using a content type hub, it is usually best to put the Item Language column in the content type itself on the hub, then allow it to propagate the content type and the site column.
PointFire’s effect on Content Types
When PointFire executes the command to make the list or library multilingual, it will detect that the Item Language column item is already there and not add it, but will try to add the Language Variation columns. It is important to remember that a document library may have the "Item Language" column even if none or only some of the content types have the column. When a language filter is applied, none of the documents or items having content types that do not have "Item Language" will show up in any language. It is important to ensure that the "Item Language" column is present in every content type in the list, or that it is absent from all of them and from the list itself. When there is a mix of content types in a single library, with some "Item Language" and others not, PointFire will filter out all items that do not have a language defined.
One should also be careful, when adding columns manually or via content type, that the internal name and the name of the static column is truly "Item_x0020_Language". If you made a mistake, or if you add a new content type having the "Item Language" after having made the document library multilingual, could get a duplicate column whose internal name is "Item_x0020_Language0" with a zero at the end. Both have a display name of "Item Language”.
When making a list or document library multilingual, PointFire will try to change the "list content type" of all content types currently used in the list or library. Each of these list content types is a child of the "site content type" which itself is copied from the Hub. In order of PointFire to do this, the list content type must not be "read-only. In general it is easier if the parent "site content type" is also not read-only at the time when changes are being made, even if the parent itself is not changed in the process. The use of a Hub typically sets content types as being read-only.
Read-only Content Types and Synchronization with a Hub
Provided that all the content-type of the list are not read-only, you can then use the PointFire function to make the list multilingual. If the type "Item Language" is completely absent from the list of Content Type, it will be added to all list content type, but not to their parents. Same thing for Language Variation columns.
As a general rule, when adding new columns to a "list content type" used in the list, these columns will not be affected by synchronization from the hub or a change in the parent site content type, as long as the parent does not have those columns. The changes made centrally to the columns defined by the content type hub, for example by adding another language to Item Language, will be propagated to all children.
Recommended Sequence of Steps
1. (Recommended but optional) make a disposable test list multilingual, then create an “Item Language” column definition in a content type by copying this definition exactly. Do this in the content type hub if you use one.
2. (Recommended but optional) If you have done the above, propagate the content type(s) and ensure that the internal column name is exactly correct
3. All content types must have been added to the list/library before it is made multilingual
4. All relevant "list content types" must have "read only" set to OFF
5. All relevant "site content types" (parents of the list content types) must have "read only" set to OFF
6. Any earlier attempt to make the list multilingual must be completely removed from the list/library and from the list and site content types must be completely removed, failing which a duplicate field with a different internal name may be created.
7. Make the list or document library multilingual using the appropriate PointFire menu item or ribbon icon. This should offer to “Add Variation Fields” but if the content type already contains the Item Language field, the “Add Item Language Field” option should be missing.
8. No other content type should added to the list/library after it has been made multilingual - otherwise these will be missing the language fields, be filtered out of all LFWP views, and have unpredictable effects on Manage Variations.