Как активировать функцию sharepoint 2007 в определенной библиотеке документов - PullRequest
0 голосов
/ 23 ноября 2010

Я создал пользовательскую функцию для sharepoint 2007 с использованием Visual Studio 2010. Когда я активирую эту функцию, она, конечно, запускается во всех библиотеках документов в семействе сайтов.Может ли кто-нибудь дать мне пример того, как заставить функцию запускаться на конкретном экземпляре библиотеки / списка документов.

1 Ответ

0 голосов
/ 05 января 2011

Сначала вам нужно добавить EventReceiver к вашей функции, а затем в xml вашей функции добавить ReceiverClass, например:

<Feature  Id="f68efad8-ea0a-42a2-9994-db3b74aa67f8"
      Title="My features title"
      Description="Blah blah blah"
      Version="12.0.0.0"
      Hidden="FALSE"
      Scope="Web"
      DefaultResourceFile="core"
      ReceiverAssembly="MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c4f34f956cd0552b"
      ReceiverClass="MyProject.FeatureCode.EventHandler" <!-- This is where you set the EventReceiver -->
      xmlns="http://schemas.microsoft.com/sharepoint/">

EventHandler , являющийся EventReceiver, когдаПовторная функция активирована.

Мой пример Во-первых, мой приемник событий:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        var assembly = typeof(PermissionHandler).Assembly.ToString();
        var classList = typeof(PermissionHandler).FullName;

        var web = SPContext.Current.Web;
        web.AllowUnsafeUpdates = true;
        try
        {
            var list = web.Lists["MyList"];
            list.EventReceivers.Add(SPEventReceiverType.ItemAdded, assembly, classList);
            list.EventReceivers.Add(SPEventReceiverType.ItemUpdated, assembly, classList);
        }
        catch (Exception ex)
        {
            EventLogger.LogError("Sample feature failed to run.", this, ex);
        }

    }

В приведенном выше примере я хочу добавить некоторые разрешения для элементов в MyList.Как вы можете видеть, я делаю 2 переменные, которые являются typeof (PermissionHandler), который является открытым классом, который я создал для выполнения этой работы.Я добавил 5 элементов в список, прежде чем активировать эту функцию, поэтому я хочу, чтобы уже существующие элементы также получили разрешения, которые я устанавливаю для новых элементов.Вот как я это делаю:

private void updateItemPermissions(SPItemEventProperties properties)
    {
        DisableEventFiring();
        SPListItem listItem = properties.ListItem;
        SPSecurity.RunWithElevatedPrivileges(() =>
        {
             SPSite site = new SPSite(listItem.ParentList.ParentWeb.Site.ID);
             SPWeb web = site.OpenWeb(listItem.ParentList.ParentWeb.ID);
             SPList list = web.Lists[listItem.ParentList.ID];
             SPListItem item = list.Items.GetItemById(properties.ListItem.ID);

             item.BreakRoleInheritance(true);
             if (item.RoleAssignments.Count > 0)
             {
                 for (var i = item.RoleAssignments.Count - 1; i >= 0; i--)
                      item.RoleAssignments.Remove(i);
             }

             var group = item.Web.Site.RootWeb.Groups["Visitors"];
             AddPermissions(item, web, SPRoleType.Reader, group);

        });

        EnableEventFiring();
    }

    private static void AddPermissions(SPListItem curItem, SPWeb web, SPRoleType roleType, SPPrincipal principal)
    {
        SPRoleDefinition roleDefinition = web.RoleDefinitions.GetByType(roleType);
        SPRoleAssignment roleAssignment = new SPRoleAssignment(principal);
        roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
        curItem.RoleAssignments.Add(roleAssignment);
        curItem.Update();
    }

Я надеюсь, что это помогло вам:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...