none
Problema no EventReceiver RRS feed

  • Pergunta

  • Bom dia a todos,
    Fiz um eventreceiver, para que toda vez que o usuário insira um novo registro, um campo receba um valor automaticamente, um link. Faço o build da aplicação e não me dá erro algum, instalo ela e ativa, sem problema algum, mas ela não esta funcionando...??? Porque...???
    Abaixo segue os códigos.

    Class.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.SharePoint;
    using System.Text.RegularExpressions;

    namespace ClassPacto
    {
        public class PactoParecer : SPItemEventReceiver
        {
            public override void ItemAdded(SPItemEventProperties properties)
            {
                SPListItem Item = properties.ListItem;
                SPFieldUrlValue value = new SPFieldUrlValue();
                value.Description = "Parecer";
                string url = String.Format("http://srvwra12/sites/pacto/Lists/Tarefas/NewForm.aspx?Title={0}+Devedor={1}+Cliente={2}+Processo={3}", Item["Title"], Item["Devedor"], Item["Cliente"], Item["N_x00ba__x0020_do_x0020_Processo"]);
                url = Regex.Replace(url, "[0-9];#", "");
                value.Url = url;
                Item["Parecer"] = value;
                Item.SystemUpdate();
            }
        }
    }

    Elements.xml
    <?xml version="1.0" encoding="utf-8" ?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
      <Receivers ListTemplateId="100" ListTemplateOwner="2DF26521-E1E1-4781-80D6-8E2FA320B69F">
        <Receiver>
          <Name>Item Adicionado</Name>
          <Type>ItemAdded</Type>
          <SequenceNumber>10001</SequenceNumber>
          <Assembly>PactoParecer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=27022ff382474ca0</Assembly>
          <Class>ClassPacto.PactoParecer</Class>
          <Data></Data>
          <Filter></Filter>
        </Receiver>
      </Receivers>
    </Elements>

    Feature.xml
    <?xml version="1.0" encoding="utf-8" ?>
    <Feature Scope="Web"
       Title="PactoParecer"
       Description="EventReceiver que adiciona o link a coluna parecer."
       Id="4841C1BB-0B6F-408F-B0CD-1FD887494A06"
       xmlns="http://schemas.microsoft.com/sharepoint/">
      <ElementManifests>
        <ElementManifest Location="Elements.xml"/>
      </ElementManifests>
    </Feature>

    Atencsioamente,
    Emerson

    quinta-feira, 18 de fevereiro de 2010 12:10

Todas as Respostas

  • Emerson,

    Você precisa verificar qual é o seu modelo de lista, se for Lista Customizada você pode usar o seguinte XML para vincular o evento:

    <?xml version="1.0" encoding="utf-8" ?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
      <Receivers ListTemplateId="100">
        <Receiver>
          <Name>Item Adicionado</Name>
          <Type>ItemAdded</Type>
          <Assembly>PactoParecer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=27022ff382474ca0</Assembly>
          <Class>ClassPacto.PactoParecer</Class>
        </Receiver>
      </Receivers>
    </Elements>
    Agora, caso seu modelo de lista seja uma Biblioteca de Documentos, você precisa mudar o atributo ListTemplateId para o valor 101, ficando dessa forma:

    <?xml version="1.0" encoding="utf-8" ?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
      <Receivers ListTemplateId="101">
        <Receiver>
          <Name>Item Adicionado</Name>
          <Type>ItemAdded</Type>
          <Assembly>PactoParecer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=27022ff382474ca0</Assembly>
          <Class>ClassPacto.PactoParecer</Class>
        </Receiver>
      </Receivers>
    </Elements>
    

    ...... =) ............
    MCTS - Windows Sharepoint Services - Application Development
    quinta-feira, 18 de fevereiro de 2010 18:33
  • Bom dia André,
    Minha lista é customizada sim, e se você verificar no primeiro post, verá que meu arquivo Elements.xml, já está especificada, com a seguinte linha

    <Receivers ListTemplateId="100" ListTemplateOwner="2DF26521-E1E1-4781-80D6-8E2FA320B69F">

    Inclusive, coloco a GUID da lista para ser mais específico e o EventReceiver funcionar apenas naquela lista, mas não esta funcionando, não sei porque, se você tiver alguma idéia me indique.
    Atenciosamente,
    Emerson
    quinta-feira, 18 de fevereiro de 2010 19:25
  • Emerson,

    O atributo ListTemplateOwner identifica o proprietário do modelo de lista, esse cara é opcional e eu recomendo que você retire esse atributo da Feature, você pode dar uma olhada nesse link http://msdn.microsoft.com/pt-br/library/ms431081.aspx, ele explica direitinho o que significa esse atributo.

    Como o modelo de lista Lista Customizada é padrão do SharePoint, a mesma é instalada pela seguinte feature C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\FEATURES\CustomList, caso você queira utilizar o atributo, eu recomendo que você use o seguinte GUID com a sua feature.
    <Receivers ListTemplateId="100" ListTemplateOwner="00BFEA71-DE22-43B2-A848-C05709900100">
    Abraços,

    Espero que consiga.
    MCTS - Windows Sharepoint Services - Application Development
    quinta-feira, 18 de fevereiro de 2010 20:09
  • Ola emerson, 

    Uma coisa que te posso recomendar é utilizar este projecto para realizar o registo do Event Handler na Lista pretendida, alem de listar os Event Handler associados a Lista.

    Se o event Handler da Lista estiverem listados e instalados correctamente, entao recomendo fazer o Debug para captura do Erro que possas ter no Codigo para ver porque nao está a fazer o codigo.
    Podes realizar o Debug atraves to attach do processo w3w.exe 
    How to: Debug SharePoint Applications

    Tambem podes realizar o Registo do Event Handler atraves de activação da Feature conjuntamente com o code behind para registo.
    exemplo:
    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        SPWeb web = properties.Feature.Parent as SPWeb;
        web.Lists["Nome da Lista"].EventReceivers.Add(
          SPEventReceiverType.ItemAdded,
          “Eventhandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=[tokenKey]”,
          “Eventhandlers.ItemEventHandler”);
    }

    Espero que ajude.

    André Lage Microsoft SharePoint, CRM and Sybase Consultant
    Blog:http://aaclage.blogspot.com
    Codeplex:http://spupload.codeplex.com/http://simplecamlsearch.codeplex.com/
    sexta-feira, 19 de fevereiro de 2010 01:56
    Moderador
  • Olá pessoal,

    Bom dia, tudo bem?

    Legal ver a comunidade de SharePoint interagindo tanto. :D

    Emerson, acho que acima você já tem bastante informação para alcançar a solução do seu problema, para adicionar deixo também 2 artigos que escrevi sobre Event Receivers, um inclusive que mostra como passo-a-passo você pode habilitar um Event Receiver para uma lista específica. ;)

    Ativando Event Receiver para uma Lista Específica no SharePoint 2007
    http://www.linhadecodigo.com.br/Artigo.aspx?id=2665

    Criando e Explorando os Event Receivers no MOSS 2007 \ WSS 3.0
    http://www.linhadecodigo.com.br/Artigo.aspx?id=2574

    Qualquer dúvida, manda ai.

    Abraços!


    Wagner Amorim
    -
    Sharepoint Specialist
    MSF & SCRUM Practitioner 
    Microsoft MCP, MCTS e MCPD
    -

    http://waamorim.spaces.live.com
    http://www.canalsharepoint.com.br

    Wagner M. Amorim
    sexta-feira, 19 de fevereiro de 2010 09:58
  • Boa tarde Wagner,
    Foi seguindo a sua lista que fiz este EventReceiver. Mas vou verificar e fazer o Debug como o André falou para ver se descubro mais alguma coisa.
    Qualquer coisa eu posto aqui. De qualquer forma obrigado a todos pela ajuda.
    Emerson
    sexta-feira, 19 de fevereiro de 2010 15:54