Rápido & Fácil: Renomear arquivo carregado usando o modelo de objeto SharePoint através de um receptor de eventos

ATUALIZAÇÃO: Isso funciona, mas existem limitações significativas, que são descritas nos comentários. Isto ainda pode ser útil em algumas circunstâncias.

ATUALIZAÇÃO 2: No meu projeto atual, os usuários sempre fazer upload de documentos. Como resultado, Eu não corro em um problema onde o MS Word está sendo executado e acha que o arquivo foi renomeado nele. Eu funcionei em um problema, "o arquivo foi modificado por outro usuário" e isto resolvido através de um sinalizador de tipo semáforo simples. Os usuários precisam mudar um campo de dados de meta de seu valor padrão para outra coisa. O itemupdated() receptor procura lá um valor válido antes de realmente executar a renomeação e desde então, Eu não tive quaisquer problemas. Sua milhagem pode variar.

Eu tenho uma exigência do cliente para alterar o nome de arquivos carregados para uma biblioteca de documentos específica conformar-se com uma Convenção de nomenclatura específica. A API não oferece uma "renomear()" Método. Em vez disso, Nós usamos "MoveTo(…)". Aqui está um pouco mínimo de código para realizar essa tarefa:

 público substituir privatevoid ItemAdded(SPItemEventProperties Propriedades)
        {
            SPFile t: Microsoft.SharePoint.SPFile f = Propriedades.ListItem.File;

            f.MoveTo(Propriedades.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

O bit apenas complicado é as "Propriedades. ListItem.ParentList.RootFolder.Url". O MoveTo() método requer uma URL. Que mínimo pontos de seqüência de caracteres para a pasta raiz de minha biblioteca do documento atual. Isso me permite evitar qualquer codificação difícil no meu receptor de eventos.

Esta é uma versão mais útil que faz a mesma coisa, mas atribui o nome do arquivo para "Título":

 público substituir privatevoid ItemAdded(SPItemEventProperties Propriedades)
        {
            DisableEventFiring();

            // Atribuir o título deste item para o nome do próprio arquivo.
 // OBSERVAÇÃO: Esta atribuição deve ter lugar antes de nós modificar o próprio arquivo.
 // Atualização de chamada() sobre o SPFile t: Microsoft.SharePoint.SPFile parece invalidar as propriedades em
 // algum sentido.  Atualizações para "título" falha até que altere (e atualização() chamar)
 // passaram em frente da mudança para o nome do arquivo.
            Propriedades.ListItem["Título"] = Propriedades.ListItem.File.Name;

            Propriedades.ListItem.Update();

            SPFile t: Microsoft.SharePoint.SPFile f = Propriedades.ListItem.File;

            // Obter a extensão do arquivo.  Precisamos que mais tarde.
 Cadeia de caracteres spfileExt = Novo FileInfo(f.Name).Extensão;

            // Renomeie o arquivo para ID do item de lista e use a extensão de arquivo para manter
 // parte dele intacta.
            f.MoveTo(Propriedades.ListItem.ParentList.RootFolder.Url +
                "/" + Propriedades.ListItem["ID"] + spfileExt);

            // Confirmar a mudança.
            f.Update();

            EnableEventFiring();
        }

4 pensamentos "Rápido & Fácil: Renomear arquivo carregado usando o modelo de objeto SharePoint através de um receptor de eventos

  1. Sem nome
    Também, Se você fizer isso de dentro do Word, Ele irá retornar um erro e dizer que o arquivo não existe. Ele não é dito sobre a nova URL. Eu ainda não encontrei uma maneira de contornar isso.
    Resposta
  2. Paul Galvin
    Obrigado por apontar que. Também não sei uma resposta para aquele … será interessante ver como gerenciá-lo.
    RE: Async & redirecionamento
    Pergunto-me se movendo-a para um ItemAdding vai resolver isso. Isso é um grande buraco.
    Obrigado!
    –Paulo
    Resposta
  3. Nadeem Mitha
    Porque o arquivo Obtém movido de forma assíncrona, existe a possibilidade de está sendo redirecionado para EditForm. aspx antes que o movimento está empenhado (e isso é ruim). Você verá que isso acontece se você tornar o código dormir antes da linha MoveTo. Ainda não descobri o que pode ser feito sobre esse problema, além de usar um personalizado Editar formulário.
    Resposta

Deixar uma resposta

seu endereço de e-mail não será publicado. Campos obrigatórios são marcados *