none
Erro Falha do controle de origem dos dados ao executar o comando inserir. RRS feed

  • Pergunta

  • Olá a todos ,

    Estamos tendo um problema com o SharePoint.

    Temos uma lista e um Formulario customizado para inserir os dados do mesmo. Temos tambem uma Feature de Event Receiver.

    Essa lista tem permissão de inclusão por qualquer pessoa, e não existe nenhuma especie de login para chegar ao formulario(é um formulario de cadastro).

    A Feature grava os dados e redireciona para uma tela com um "resumo" do cadastro.

    Quando estamos logados no admim do site collection  o formulario funciona perfeitamente , porem quando estamos como usuario anonio temos o erro acima.

     

    Alguem já passou por isso e pode dar uma luz no caminho que devemos seguir?

     

    Abraços.

     

    Leandro.

     

    quarta-feira, 23 de junho de 2010 15:29

Todas as Respostas

  • Opa

    Tenta no momento da gravação utilizar o

    SPSecurity.RunWithElevatedPrivileges

    Pode ser alguma questão de segurança...

     


    Desenvolvedor.Net
    quinta-feira, 24 de junho de 2010 18:20
  • Cara ,

     Obrigado pela ajuda , mas mesmo utilizando o SPSecurity.RunWithElevatedPrivileges continuo tendo o mesmo erro.

    Não sei se pode ajudar , mas quando eu desativo a feature o cadastro funciona normalmente. mas ele me redireciona para o allitems da lista.

     

    Segue abaixo a ativação da feature e o inserir caso esteja comendo bola em uma coisa simples.

     

     public class AtivarER : SPFeatureReceiver
      {
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
          try
          {
            
            using (SPSite site = properties.Feature.Parent as SPSite)
            {
              using (SPWeb web = site.RootWeb)
              {
                string AssemblyName = System.Reflection.Assembly.GetExecutingAssembly().FullName;
                string ClassName = "EventReceiverMinhaLista.ERGravarConsolidado";
    
                //Adicionando o Event Receiver na Lista Selecionada
                web.Lists["MinhaLista"].EventReceivers.Add(SPEventReceiverType.ItemAdding, AssemblyName, ClassName);
              }
            }
          }
          catch
          {
            throw;
          }
        }
    public override void ItemAdding(SPItemEventProperties properties)
        {
    
          SPSecurity.RunWithElevatedPrivileges(delegate()
           {
             SPSite siteColl = new SPSite(properties.SiteId);
             SPWeb site = siteColl.OpenWeb(properties.RelativeWebUrl);
             SPList list = site.Lists[properties.ListId];
    
             DisableEventFiring();
    
             SPListItem itemToAdd = list.Items.Add();
    
             itemToAdd["NOME"] = properties.AfterProperties["NOME"].ToString();
             itemToAdd["CPF"] = properties.AfterProperties["CPF"].ToString();
             itemToAdd["SEXO"] = properties.AfterProperties["SEXO"].ToString();
             itemToAdd["EMAIL"] = properties.AfterProperties["EMAIL"].ToString();
             itemToAdd["DT_NASC"] = Convert.ToDateTime(properties.AfterProperties["DT_NASC"].ToString());
             itemToAdd["TELEFONE"] = properties.AfterProperties["TELEFONE"].ToString();
             itemToAdd["CELULAR"] = properties.AfterProperties["CELULAR"].ToString();
             itemToAdd["RECEBER_INFO"] = properties.AfterProperties["RECEBER_INFO"].ToString();
    
             itemToAdd.Update();
    
             string strID = itemToAdd.ID.ToString();
    
             EnableEventFiring();
    
             site.Dispose();
             siteColl.Dispose();
    
             SPUtility.Redirect("http://sharepoint/sites/siteteste/Lists/MinhaLista/DispForm.aspx?ID=" + strID, SPRedirectFlags.Default, _currentContext);
           });
        }

    Obrigado !

    Leandro Justo

    sexta-feira, 25 de junho de 2010 17:35
  • Oi Leandro!

    Tudo bem?

     

    Você está com os últimos Service Packs instalados? Há um bug conhecido que pode ocasionar este erro. Tente atualizar seu ambiente para o mais recente possível (SP2+ tanto para o WSS 3.0 quando para o MOSS 2007, aplique os patches das duas tecnologias).

     

    Abraço!


    Thiago Silva SharePoint Specialist - Done IT http://www.doneit.com.br http://www.canalsharepoint.com.br
    sexta-feira, 25 de junho de 2010 20:22
  • Oi Thiago,

    Já está instalado sim.

    segunda-feira, 28 de junho de 2010 00:11
  • Olá a todos ,

     

    Depois de muita luta acabamos resolvendo entrar em contato com o suporte da MS.

    Falamos com o pessoal do SP Dev Team e isso é um erro (ou uma caracteristica) conhecida no SP. Segue o KB falando do Assunto :  http://support.microsoft.com/kb/970869

    Como é algo esperado não tem um jeito "facil" de resolver o problema. A Sugestão dada foi criar um Http Module que logaria um usuário quando o usuario anonimo entrar nesta pagina e deslogaria ele quando ele sair dessa pagina. Com isso conseguimos resolver o problema que estavamos passando.

    caso alguem tenha mais duvidas pode perguntar por aqui ou então mandar pro meu e-mail ojusto@gmail.com

    terça-feira, 6 de julho de 2010 13:18
  • Caro Leandro,

    Estou passando exatamente por esse problema. Criei um formulário simples de "Fale conosco", para inserir dados como nome, email, comentários em uma lista. Criei também um workflow para disparar um e-mail com os dados inseridos. Funciona para usuários logados mas não para o usuário anônimo.

    Vc poderia passar mais detalhes de como criar esse HTTP Module, por favor?

    Obrigado!!

    quarta-feira, 11 de agosto de 2010 13:56
  • Pessoal,

    Ao tentar inserir um item programaticamente contra o banco de dados de conteúdo do SharePoint, devemos permitir alterações não seguras via código. Para isso, podemos fazer da seguinte forma:

     

             SPSite siteColl = new SPSite(properties.SiteId);
             SPWeb site = siteColl.OpenWeb(properties.RelativeWebUrl);
             SPList list = site.Lists[properties.ListId];

             site.AllowUnsafeUpdates = true;


             DisableEventFiring();

             SPListItem itemToAdd = list.Items.Add();

             itemToAdd["NOME"] = properties.AfterProperties["NOME"].ToString();
             itemToAdd["CPF"] = properties.AfterProperties["CPF"].ToString();
             itemToAdd["SEXO"] = properties.AfterProperties["SEXO"].ToString();
             itemToAdd["EMAIL"] = properties.AfterProperties["EMAIL"].ToString();
             itemToAdd["DT_NASC"] = Convert.ToDateTime(properties.AfterProperties["DT_NASC"].ToString());
             itemToAdd["TELEFONE"] = properties.AfterProperties["TELEFONE"].ToString();
             itemToAdd["CELULAR"] = properties.AfterProperties["CELULAR"].ToString();
             itemToAdd["RECEBER_INFO"] = properties.AfterProperties["RECEBER_INFO"].ToString();

             itemToAdd.Update();

             string strID = itemToAdd.ID.ToString();

             EnableEventFiring();

             site.AllowUnsafeUpdates = false;


             site.Dispose();
             siteColl.Dispose();

             SPUtility.Redirect("http://sharepoint/sites/siteteste/Lists/MinhaLista/DispForm.aspx?ID=" + strID, SPRedirectFlags.Default, _currentContext);

     

    Abraços

    Rodrigo A. Romano
    -
    SharePoint Specialist
    Microsoft MCP e MCTS
    -

    http://rodrigo-romano.spaces.live.com
    http://www.canalsharepoint.com.br

    http://www.doneit.com.br

    quarta-feira, 11 de agosto de 2010 20:56
  • Rodrigo,

    Não tenho acesso ao servidor do Sharepoint aqui da empresa... como proprietário de um site, o máximo de customizações que consigo fazer é usando o Sharepoint Designer. Nesse cenário é possível implementar a sua idéia (ou a solução do Leandro)?

    Obrigado!

    quinta-feira, 12 de agosto de 2010 19:28
  • Zenho,

    Não entendi a sua dúvida.

    Você quer conseguir gravar itens em uma lista sem utilizar códigos Server-Side?

    Para isso, você poderia utilizar os WebServices do SharePoint para gravar itens na lista.

     

    Abraços

    Rodrigo A. Romano
    -
    SharePoint Specialist
    Microsoft MCP e MCTS
    -

    http://rodrigo-romano.spaces.live.com
    http://www.canalsharepoint.com.br

    http://www.doneit.com.br

    quinta-feira, 12 de agosto de 2010 19:30