Inquiridor
Erro Falha do controle de origem dos dados ao executar o comando inserir.

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.
Todas as Respostas
-
-
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
-
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 -
-
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
-
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!!
-
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 -
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!
-
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