вторник, 27 мая 2008 г.

Protect you custom list's fields.

If you have strong dependence between you code and structure of your list, you can protect it from changing and deleting fields by Handling events.
Use SPListEventReciever class override methods fieldDeleting and fieldChanging.

class FieldEventHandler : SPListEventReceiver
{
public override void FieldDeleting(SPListEventProperties properties)
{
base.FieldDeleting(properties);
String fieldsList = ConfigurationManager.AppSettings["Fields"];
if (fieldsList.Contains("#" + properties.FieldName + ";"))
{
properties.Cancel = true;
}
}
public override void FieldUpdating(SPListEventProperties properties)
{
base.FieldUpdating(properties);
String fieldsList = ConfigurationManager.AppSettings["Fields"];
if (fieldsList.Contains("#" + properties.FieldName + ";"))
{
properties.Cancel = true;
}
}
}

Use web config as a storage of key value where you put names of your fields.

<appsettings>
<add key="Fields" value="#name1;#name2;">
</add>
</appsettings>

Install your EventHandler with feature.

private string assemblyName = @"AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=key";
private string className = @"NameSpace.FieldEventHandler";

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWeb web = (SPWeb)properties.Feature.Parent;
SPList lst = web.Lists["ListName"];
lst.EventReceivers.Add(SPEventReceiverType.ItemAdding, assemblyName, className);
lst.EventReceivers.Add(SPEventReceiverType.ItemAdded, assemblyName, className);
lst.Update();
}

Комментариев нет: