I shpejtë & I lehtë: Rename Skedari i ngarkuar duke përdorur modelin SharePoint Object Via një marrës Event

UPDATE: This works but there are significant limitations which are described in the comments. This may still be useful in some cirumstances.

UPDATE 2: Në projektin tim aktual, users always upload documents. Si rezultat, I don’t run into a problem where MS Word is running and thinks that the file was renamed on it. I did run into a problem, "the file was modified by someone else" and solved this via a simple semaphore type flag. Users need to change a meta data field from its default value to something else. The itemupdated() marrës duket për një vlerë të vlefshme atje para se të vërtetë kryerjen e riemërtoj dhe që atëherë, I have not had any problems. Your mileage may vary.

I have a client requirement to change the name of files uploaded to a specific document library to conform with a particular naming convention. The API does not provide a "rename()" metodë. Në vend të kësaj, ne përdorim "MoveTo(…)". Here is a minimal bit of code to accomplish this:

 publik shkel pavlefshme ItemAdded(SPItemEventProperties Prona të paluajtshme)
        {
            SPFile f = properties.ListItem.File;

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

        }

The only tricky bit is the "properties.ListItem.ParentList.RootFolder.Url". The MoveTo() method requires a URL. That mashed up string points me to the root folder of my current document library. This allows me to avoid any hard coding in my event receiver.

Ky është një version më i dobishëm që e bën të njëjtën gjë, but assigns the name of the file to "Title":

 publik shkel pavlefshme ItemAdded(SPItemEventProperties Prona të paluajtshme)
        {
            DisableEventFiring();

            // Cakto titullin e këtij zëri në emër të vetë dosjes.
 // SHËNIM: Kjo detyrë duhet të bëhet para se të modifikojë file vetë.
 // Thirrja përditësim() në SPFile duket të zhvlerësojë pronat në
 // disa ndjenja.  Updates to "Title" arriti deri në atë ndryshim (dhe perditesimi() thirrje)
 // u zhvendos në frontin e ndryshimit të emrit të file.
            properties.ListItem["Title"] = Properties.ListItem.File.Name;

            properties.ListItem.Update();

            SPFile f = properties.ListItem.File;

            // Get zgjatjen e dosjes.  Ne kemi nevojë që më vonë.
 varg spfileExt = i ri FileInfo(f.Name).Zgjatje;

            // Rename file me ID e list item-së dhe të përdorni të file extension për të mbajtur
 // se një pjesë e saj e paprekur.
            f.MoveTo(properties.ListItem.ParentList.RootFolder.Url +
                "/" + properties.ListItem["ID"] + spfileExt);

            // Commit lëvizje.
            f.Update();

            EnableEventFiring();
        }

4 mendime mbi "I shpejtë & I lehtë: Rename Skedari i ngarkuar duke përdorur modelin SharePoint Object Via një marrës Event

  1. No name
    Edhe, Nëse ju bëni këtë nga brenda Word, ajo do të kthehet një gabim dhe thonë se dosja nuk ekziston. Kjo nuk është thënë në lidhje me URL të reja. Unë nuk e kanë gjetur ende një mënyrë rreth kësaj.
  2. Paul Galvin
    Thanks for pointing that out. I don’t know an answer to that one either … do të jetë interesante për të parë se si të menaxhojnë atë.
    RE: Asinkron & redirection
    I wonder if moving it to an ItemAdding will solve it. That’s a big hole.
    Falënderim!
    –Paul
  3. Nadeem Mitha
    Sepse skedar merr lëvizur asynchronously, ekziston një mundësi e duke u ridrejtuar në EditForm.aspx para veprim është kryer (dhe kjo është e keqe). You’ll see that this happens if you make the code sleep before the MoveTo line. I still haven’t figured out what can be done about that problem aside from using a customized edit form.

Lini një Përgjigju

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar *