문제

I have created a Feature named Feature1. Feature1 is activated in a SharePoint site. I create a Web Part that contains the following code.

SPSite site = new SPSite("http://intranet/site1");

SPWeb web = site.OpenWeb();

SPFeatureDefinition feature = SPFarm.Local.FeatureDefinitions("Feature1");

I need to modify the Web Part to activate Feature1 in Site1 only.

Should I use? site.Features.Add(feature.Id) or web.Features.Add(feature.Id)

Whats the difference between the two instructions?

도움이 되었습니까?

해결책

In the object model, an SPSite is a Site Collection, whereas an SPWeb is a site. Yes, it is a little confusing.

So if you have a feature that needs to be activated at the Site level (not Site Collection level), then you want to use the SPWeb, which your code calls web.

다른 팁

The difference is the scope of the Feature, which depends on the content of the feature. Here's a starter for reading material about this:

http://weblogs.asp.net/soever/archive/2007/05/03/sharepoint-features-elements-scope-and-other-info.aspx

if (feature.Scope == SPFeatureScope.Web)
 web.Features.Add(feature.Id)
else if (feature.Scope == SPFeatureScope.Site)
 site.Features.Add(feature.Id)

Luis based on your question

I need to modify the Web Part to activate Feature1 in Site1 only

You should use
web.Features.Add(feature.Id);

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top