Pergunta

Escrevi um formulário de edição personalizado para uma lista, o que significa que perco alguns recursos prontos para uso, como Anexos, pois fazia parte do formulário pronto para uso.A maneira como implementei o formulário foi escrevendo uma web part visual personalizada usando ASP.NET e código C# por trás e, durante a implantação, escondo a web part de edição existente na página EditForm.aspx e, em seguida, adiciono minha web part a ela.

A forma como desenvolvi o formulário é com uma separação adequada de preocupações, onde meu formulário realmente não sabe nada sobre o SharePoint e apenas passa um objeto de dados para um objeto gerenciador de dados que então grava os dados no SharePoint.

O problema surge com o formulário de anexos que escrevi.O que eu descobri é que SPContext.Current.ListItem.Attachments contém imediatamente o arquivo no FileUpload controle na postagem de volta.Não precisei escrever nenhum código para que isso acontecesse - apenas acione um postback enquanto um arquivo é selecionado no controle.

Na maioria dos casos, posso simplesmente ignorar o fato de que isso acontece e tudo funciona bem, porque nunca atualizo essa instância do item da lista.Mas em alguns casos extremos, como o upload de um arquivo onde já existe um anexo com o mesmo nome, o formulário explode sem sequer tocar no meu código.

Também descobri que existe uma AttachmentsControl no SPContext.Current.FormContext.FieldControlCollection e removendo isso em todos Page_Init evento do UserControl não ajuda em nada o problema.

A razão pela qual quero meu formulário dentro do contexto do item da lista é para que todas as barras de ferramentas/faixa/menus de contexto prontos para uso/etc.ainda vincular corretamente ao formulário.Eu poderia redirecionar do formulário de edição para uma página fora de contexto com minha web part, mas isso parece hackeado e desnecessário (sem mencionar apenas a codificação incorreta).

Alguém tem alguma ideia de por que esse comportamento está acontecendo e como posso contornar isso?Parece um design muito ruim para qualquer formulário de lista sequestrar automaticamente um controle para seu próprio uso como este.Sinto que o SharePoint deveria ter seu próprio controle e simplesmente deixar o controle do ASP.NET em paz, mas parece não ser o caso.

Foi útil?

Solução

Em um formulário de lista padrão, se um anexo com o mesmo nome tiver sido adicionado várias vezes.Se o item for armazenado, o formulário lança uma exceção, informando que um dos anexos foi adicionado várias vezes e impede a adição do item.

No seu caso, você substitui essa exceção, o que faz com que nenhum anexo esteja disponível quando você tenta armazenar o item da lista.Para evitar esse comportamento, você precisa verificar manualmente se um anexo foi adicionado várias vezes, caso contrário você sempre falhará.

Você precisa remover a web part NewForm padrão em vez de ocultá-la.Então a exceção não será levantada e você poderá obter os anexos.

Outras dicas

Se você anexar um manipulador de eventos ao evento itemAdding, ele será acionado nas condições de erro?Você pode usar isso para executar algum código personalizado para manipular o evento ou, possivelmente, apenas suprimir a mensagem de erro do sistema e fornecer uma mensagem melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top