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(); } |