Hurtig & Let: Omdøbe overførte fil ved hjælp af SharePoint-objektmodellen Via en hændelse Receiver

OPDATERING: Dette virker, men der er væsentlige begrænsninger, der er beskrevet i kommentarerne. Dette kan stadig være nyttigt i nogle omstaendighederne.

OPDATERING 2: I min aktuelle projekt, brugerne overføre altid dokumenter. Som et resultat, Jeg løbe ikke ind i et problem, hvor MS Word kører og mener, at filen blev omdøbt på det. Jeg løbe ind i et problem, "filen blev ændret af en anden" og løst dette via en simpel semaphore type flag. Brugernes savn hen til ændre en meta datafelt fra standardværdien til noget andet. Af itemupdated() modtageren ser til en gyldig værdi der før du faktisk udfører omdøbe og siden da, Jeg har ikke haft nogen problemer. Din kilometertal kan variere.

Jeg har en klient kravet om at ændre navnet på filer uploades til et bestemt dokumentbibliotek i overensstemmelse med en bestemt navngivningskonvention. API indeholder ikke et "Omdøb()" metode. I stedet, Vi bruger "MoveTo(…)". Her er en minimal smule kode til at opnå dette:

 offentlige tilsidesætte void ItemAdded(SPItemEventProperties egenskaber)
        {
            SPFile f = egenskaber.ListItem.File;

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

        }

Den kun tricky bit er "egenskaber. ListItem.ParentList.RootFolder.Url". MoveTo() metoden kræver en URL. Der mosede op streng point mig til rodmappen på mit aktuelle dokumentbibliotek. Dette tillader mig at undgå hårde kodning i min begivenhed modtager.

Dette er en mere nyttige version, der gør de samme ting, men tildeler navnet på filen til "Titel":

 offentlige tilsidesætte void ItemAdded(SPItemEventProperties egenskaber)
        {
            DisableEventFiring();

            // Tildele titlen på denne post til navnet på selve filen.
 // NOTE: Denne opgave skal finde sted, før vi ændrer selve filen.
 // Kræver opdatering() på SPFile synes at afkræfte egenskaber i
 // nogle følelse.  Opdateringer til "titel" mislykkedes indtil der ændrer (og opdatering() opkald)
 // blev flyttet foran ændringen til filnavnet.
            egenskaber.ListItem["Titel"] = egenskaber.ListItem.File.Name;

            egenskaber.ListItem.Update();

            SPFile f = egenskaber.ListItem.File;

            // Få en udvidelse af fil.  Vi har brug for det senere.
 streng spfileExt = nye FileInfo(f.Name).Udvidelse;

            // Omdøb filen til listeelementets ID og bruge fil forlængelsen at holde
 // del af det intakt.
            f.MoveTo(egenskaber.ListItem.ParentList.RootFolder.Url +
                "/" + egenskaber.ListItem["ID"] + spfileExt);

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

            EnableEventFiring();
        }

4 tanker om ”Hurtig & Let: Omdøbe overførte fil ved hjælp af SharePoint-objektmodellen Via en hændelse Receiver

  1. Intet navn
    Også, Hvis du gør det fra Word, det vil returnere en fejl og siger, at filen ikke eksisterer. Det er ikke fortalt om den nye webadresse. Jeg har endnu ikke fundet en måde at omgå dette.
    Svar
  2. Paul Galvin
    Tak for at påpege at. Jeg kender ikke et svar til, at man enten … vil være interessant at se, hvordan de skal håndtere det.
    RE: asynkron & omdirigering
    Gad vide, hvis flytter det til en ItemAdding vil løse det. Der er et stort hul.
    Tak!
    –Paul
    Svar
  3. Nadeem Mitha
    Fordi filen får flyttet asynkront, der er mulighed for at blive omdirigeret til EditForm.aspx før flytningen er forpligtet (og der er dårlig). Du vil se, at dette sker, hvis du laver koden sove før linjen MoveTo. Jeg har stadig ikke fundet ud af, hvad kan gøres noget ved dette problem bortset fra ved hjælp af en tilpasset Rediger formular.
    Svar

Efterlad et svar til Nadeem Mitha Annuller besvarelse

Din e-mail adresse vil ikke blive offentliggjort. Krævede felter er markeret *