Aqui vão algumas dicas no desenvolvimento de handlers de sharepoint:

  • Um event handler relativamente a items, usa as permissões do utilizador que o submete.

Terá de se ter cuidado, pois esta situação representa um enorme factor de bugs/problemas. Em caso de se manipular informação não acessivel a todos os utilizadores, fazer impersonate. Ver http://dotnetjunkies.com/WebLog/victorv/archive/category/2032.aspx .

  • Existe uma enorme confusão relativamente às propriedades After e BeforeProperties.

Nos testes efectuados estas propriedades não apareciam preenchidas no evento ItemUpdated, logo não tinha forma de obter valores anteriores ao update. A solução passa por escrever em properties.AfterProperties (properties.BeforeProperties é read only) os dados desejados no evento ItemUpdating.

properties.AfterProperties["xpto"] = properties.ListItem["xpto"]

 Assim em ItemUpdated, poderemos sempre obter o "estado anterior" do item.

  •  Para criar/editar as permissões de qualquer item submetido, dá imenso jeito usar o objecto Contact (Microsoft.Office.Workflow.Utility). O mesmo poderá ser criado usando o seguinte método estático Contact.FromName(contactName, site).

        internal static void SetPermissions(SPWeb web, ref SPListItem listItem, IList<Contact> itemUsers, SPRoleType roleType)
        {
            if (itemUsers != null && itemUsers.Count > 0)
            {               
                //Get Role Definition from SPWeb
                SPRoleDefinition roleDefinition = web.RoleDefinitions.GetByType(roleType);

                foreach (Contact contact in itemUsers)
                {
                    SPRoleAssignment roleAssignment = new SPRoleAssignment(contact.LoginName,
                                                                        contact.EmailAddress,
                                                                        contact.DisplayName,
                                                                        null);

                    roleAssignment.RoleDefinitionBindings.Add(roleDefinition);                                                        
                    listItem.RoleAssignments.Add(roleAssignment);                   
                }
            }
        }

LEAVE A REPLY

Please enter your comment!
Please enter your name here