none
Problema com ItemAdded RRS feed

  • Pergunta

  • Pessoal,

    Estou utilizando o seguinte codigo

    public override void ItemAdded(SPItemEventProperties properties)
            {
                CrmService CrmService = new CrmService();
                CrmService = Funcoes.getCrmService();
    
                new_documentosanexo Documento = new new_documentosanexo();
    
                SPListItem Item = properties.ListItem;
                
                //Guardo o Título do Registro SharePoint no CRM
                Documento.new_name = Item["Título"].ToString();            
    
                //Guarda o ID do Registro SharePoint no CRM
                int Id = Item.ID;
                Documento.new_idsharepoint = Id.ToString();
    
                CrmService.Create(Documento);
    
                                       
                Item["Id_Documento"] = GuidDocumento.ToString();
    
                Item.SystemUpdate();
    
    
                
                
            }

    Quando crio um novo documento ele funciona normal, porém no segundo já da erro. O erro é o seguinte:

    : Referência de objeto não definida para uma instância de um objeto.

    Muito estranho, pois a primeira vez funciona, no segundo registro dá o erro. Detalhe importante, se dar iisreset e criar novamente,  o primeiro registro cria e o segundo não....


    Luiz Henroqie
    terça-feira, 17 de novembro de 2009 18:47

Respostas

  • Luiz,

    Eu já tive problemas ao usar o properties.ListItem, por um motivo X qualquer ele vem nulo de vez em quando, o que deve acarretar o erro que você colocou no primeiro post.

    Tem um link que pode te ajudar, acho que o problema é o mesmo.

    http://social.msdn.microsoft.com/forums/en-US/sharepointdevelopment/thread/8712648e-cf09-4f7b-ab13-1c6aacdf588a/

    No meu caso (eu detesto workarounds) mais precisei recuperar o último item inserido na lista da seguinte forma:

    ListItem oListItem = SPWeb.Lists[properties.ListId].Items.GetItemById(properties.ListItemId);
    Com este bloco de código eu consegui recuperar o Item de lista que disparou o evento. (Melhore este código, eu só coloquei assim encavalado pra demonstrar).

    Espero que consiga cara...

    Abraços... =) .....
    MCTS - Windows Sharepoint Services - Application Development
    quinta-feira, 19 de novembro de 2009 02:57

Todas as Respostas

  • Deve haver algum objecto ou campo que esteja a retornar vazio, acontece muitas vezes quando estamos adicionar novos campos.
    Recomendo-te fazer o Debug do sharepoint para capturar o objecto errado.
    How to: Debug SharePoint Applications

    faz a validação do Objecto,
    exemplo:
    if (Documento!=null)
    {
    ....
    }


    André Lage Microsoft SharePoint, CRM and Sybase Consultant
    Blog:http://aaclage.blogspot.com
    Codeplex:http://spupload.codeplex.com/http://simplecamlsearch.codeplex.com/
    terça-feira, 17 de novembro de 2009 19:10
    Moderador
  • Andre,

    Obrigado pela resposta.

    Fiz as alterações porém não apareceu nenhum mensagem de erro, só consigo visualizar o erro no event view.

    Fiz um teste e gostaria de sua ajuda para entender o problema.

    Coloquei o seguinte código:

    public override void ItemAdded(SPItemEventProperties properties)
            {
                CrmService CrmService = new CrmService();
                CrmService = Funcoes.getCrmService();
    
                new_documentosanexo Documento = new new_documentosanexo();
    
              Documento.new_name = "Teste";            
    
                
                CrmService.Create(Documento);
    
                                       
       
                
                
            }
    Com este código funciona normalmente, posso criar 20 novos documentos que ele cria os registros no crm, porém se acrescentar o seguinte código só funciona no primeiro registro.

    SPListItem Item = properties.ListItem;
    //Guardo o Título do Registro SharePoint no CRM
    if (Item["Título"].ToString() != null)
    {
    Documento.new_name = Item["Título"].ToString();           
    }
    else
    {
    Documento.new_name = "Item Vazio";
    }

    o que pode ser ?
    Luiz Henroqie
    quarta-feira, 18 de novembro de 2009 13:27
  • Andre,

    Veja que estranho. Fiz um outro teste, quando carrego um documento do tipo xml o código funciona normalmente, 1,2,3... registros... Qualquer outro xls,doc,txt.... só o primeiro registro.
    Luiz Henroqie
    quarta-feira, 18 de novembro de 2009 16:35
  • Mais uma observação.

    Dentro do servidor sharepoint está funcionando, porém a integração só funciona quando e carregado um documento do word, qualquer outro documento a integração funciona.

    Resumindo:

    - Fora do servidor sharepoint só funciona na primeira vez que cria ou carrega o documento. Para voltar funcionar é preciso dar um iisreset daí volta a funcionar somente o primeiro !!!..... No segundo aparece o erro:  Referência de objeto não definida para uma instância de um objeto.

    - Dentro do servidor funciona normal, quantas vezes for necessário, porém somente quando o arquivo é word, qualquer outro a integração não funciona.
    Luiz Henroqie
    quarta-feira, 18 de novembro de 2009 17:42
  • Luiz,

    Eu já tive problemas ao usar o properties.ListItem, por um motivo X qualquer ele vem nulo de vez em quando, o que deve acarretar o erro que você colocou no primeiro post.

    Tem um link que pode te ajudar, acho que o problema é o mesmo.

    http://social.msdn.microsoft.com/forums/en-US/sharepointdevelopment/thread/8712648e-cf09-4f7b-ab13-1c6aacdf588a/

    No meu caso (eu detesto workarounds) mais precisei recuperar o último item inserido na lista da seguinte forma:

    ListItem oListItem = SPWeb.Lists[properties.ListId].Items.GetItemById(properties.ListItemId);
    Com este bloco de código eu consegui recuperar o Item de lista que disparou o evento. (Melhore este código, eu só coloquei assim encavalado pra demonstrar).

    Espero que consiga cara...

    Abraços... =) .....
    MCTS - Windows Sharepoint Services - Application Development
    quinta-feira, 19 de novembro de 2009 02:57