Snabb & Lätt: Byt namn på överförda filen med hjälp av SharePoint-objektmodellen Via ett händelse-mottagare

UPPDATERING: Detta fungerar men det finns betydande begränsningar som beskrivs i kommentarerna. Detta kan fortfarande vara användbart i vissa fall.

UPPDATERING 2: I mitt nuvarande projekt, användare alltid ladda upp dokument. Som en följd, Jag kör inte in i ett problem där MS Word körs och tycker att filen byttes namn på den. Jag stött på ett problem, "filen ändrades av någon annan" och löste detta via en enkel semafor typ flagga. Förbrukaren behov till ändra en meta datafält från standardvärdet till något annat. Itemupdated() mottagaren ser ut för ett giltigt värde det innan du faktiskt utför nytt namn och sedan dess, Jag har inte haft några problem. Användbarheten kan variera.

Jag har ett krav på klienten att ändra namn på filer som laddas upp till ett visst dokumentbibliotek att överensstämma med en viss namnkonvention. API tillhandahåller inte en "Byt namn()" metoden. I stället, Vi använder "MoveTo(…)". Här är lite minimal kod för att åstadkomma detta:

 offentliga åsidosätta void ItemAdded(SPItemEventProperties egenskaper)
        {
            SPFile f = egenskaper.ListItem.File;

            f.moveTo(egenskaper.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

Den bara knepiga biten är "egenskaper. ListItem.ParentList.RootFolder.Url". MoveTo() metoden kräver en URL. Som mosade upp strängen poäng mig till rotmappen på min nuvarande dokumentbibliotek. Detta gör att jag slipper någon hård kodning i min händelsemottagare.

Detta är en mer användbar version som gör samma sak, men tilldelas namnet på filen "Titel":

 offentliga åsidosätta void ItemAdded(SPItemEventProperties egenskaper)
        {
            DisableEventFiring();

            // Tilldela namnet på själva titeln på denna punkt.
 // ANMÄRKNING: Den här tilldelningen måste äga rum innan vi ändrar själva filen.
 // Kräver uppdatering() på SPFile verkar ogiltigförklara egenskaperna i
 // någon mening.  Uppdateringar till "titel" Det gick inte att förändras (och uppdatera() Ring)
 // flyttades framför ändringen till i filnamnet.
            egenskaper.ListItem["Rubrik"] = egenskaper.ListItem.File.Name;

            egenskaper.ListItem.Update();

            SPFile f = egenskaper.ListItem.File;

            // Få förlängning av filen.  Vi behöver som senare.
 sträng spfileExt = nya FileInfo(f.Name).Förlängning;

            // Byt namn på filen till listan Objektets ID och använder filnamnstillägget att hålla
 // den del av det intakt.
            f.moveTo(egenskaper.ListItem.ParentList.RootFolder.Url +
                "/" + egenskaper.ListItem["ID"] + spfileExt);

            // Begå flytten.
            f.Update();

            EnableEventFiring();
        }

4 tankar på "Snabb & Lätt: Byt namn på överförda filen med hjälp av SharePoint-objektmodellen Via ett händelse-mottagare

  1. Inget namn
    Också, Om du gör det från inom Word, den kommer att returnera ett fel och säga filen inte existerar. Det är inte berättade om den nya URL:. Jag har ännu inte hittat ett sätt runt detta.
    Svar
  2. Paul Galvin
    Tack för upplysningen. Jag vet inte ett svar som man antingen … blir intressant att se hur man kan hantera det.
    RE: asynkrona & Omdirigering
    Jag undrar om flytta den till en ItemAdding löser det. Det är ett stort hål.
    Tack!
    –Paul
    Svar
  3. Nadeem Mitha
    Eftersom filen har flyttats asynkront, Det finns en möjlighet att dirigeras till EditForm.aspx innan flytten är engagerad (och det är illa). Du ser att detta händer om du gör koden sova innan raden MoveTo. Jag inte har fortfarande listat ut vad kan göras åt detta problem bortsett från med hjälp av en anpassad Redigera formulär.
    Svar

Lämna svar

Din e-postadress kommer inte att publiceras. behövliga fält är markerade *