What is a resource-hidden feature? It is a feature that is hidden from the user using a loophole in the SPFeatureDefinition API that is intended to show locale specific features.
Basically the feature element API says that the attribute RequireResources=”true” will prevent a feature from appearing in the GUI feature list if a resource file for the locale cannot be found. A resource-hidden feature exploits this by providing no resources for any locales. Here is what the feature.xml looks like:
<?xml version="1.0" encoding="utf-8"?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/"
Id="C595997F-F3DD-4677-82CF-02AF9FB73451"
Title="$Resources:Resource_hidden_feature_DO_NOT_LOCALIZE"
Description="$Resources:Resource_hidden_feature_DO_NOT_LOCALIZE"
RequireResources="true"
Hidden="false"
Scope="Site">
<ActivationDependencies>
<ActivationDependency FeatureId="0D7EE02B-F92F-4ed2-97F7-349AEC1E0517" />
<ActivationDependency FeatureId="5730DE72-D669-4fc7-9EA1-BC50826EF575" />
<ActivationDependency FeatureId="C3BAA93D-B3DE-424c-850A-E19253068473" />
</ActivationDependencies>
</Feature>
You might ask why would you use a resource-hidden feature instead of a regular hidden feature with the attribute Hidden=”true”? Simply because the two have different behaviors:
· Activation – Hidden features auto-activate in the feature dependency chain. Resource-hidden features do not.
· Deactivation – Hidden features which are dependent features, deactivate when the last feature depending upon them deactivates. Resource-hidden features do not.
· Dependency Tree – Hidden features cannot have any ActivationDependencies. Resource-hidden features can.
Remember resource-hidden features cannot be seen in the UI and do not auto-activate so they must be programmatically activated by adding them to a SPFeatureCollection.
No comments:
Post a Comment