Vinnige & Maklik: Herbenoem Opgelaai lêer SharePoint Object Model Via 'n gebeurtenis Ontvanger

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

UPDATE 2: In my huidige projek, users always upload documents. As 'n gevolg, 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() receiver looks for a valid value there before actually performing the rename and since then, 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()" metode. In plaas daarvan, we use "MoveTo(…)". Here is a minimal bit of code to accomplish this:

 openbare oorheers nietig ItemAdded(SPItemEventProperties eienskappe)
        {
            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.

This is a more useful version that does the same thing, but assigns the name of the file to "Title":

 openbare oorheers nietig ItemAdded(SPItemEventProperties eienskappe)
        {
            DisableEventFiring();

            // Assign the title of this item to the name of file itself.
 // NOTA: This assignment must take place before we modify the file itself.
 // Calling update() on the SPFile seems to invalidate the properties in
 // some sense.  Updates to "Title" failed until that change (and update() call)
 // were moved in front of the change to the file name.
            properties.ListItem["Title"] = properties.ListItem.File.Name;

            properties.ListItem.Update();

            SPFile f = properties.ListItem.File;

            // Get the extension of the file.  We need that later.
 string spfileExt = nuwe FileInfo(f.Name).Extension;

            // Rename the file to the list item's ID and use the file extension to keep
 // that part of it intact.
            f.MoveTo(properties.ListItem.ParentList.RootFolder.Url +
                "/" + properties.ListItem["ID"] + spfileExt);

            // Commit the move.
            f.Update();

            EnableEventFiring();
        }

4 gedagtes oor "Vinnige & Maklik: Herbenoem Opgelaai lêer SharePoint Object Model Via 'n gebeurtenis Ontvanger

  1. Geen naam
    Ook, If you do this from within Word, it will return an error and say the file does not exist. It is not told about the new URL. I have not yet found a way around this.
    Antwoord
  2. Paul Galvin
    Thanks for pointing that out. I don’t know an answer to that one either … will be interesting to see how to manage it.
    RE: async & redirection
    I wonder if moving it to an ItemAdding will solve it. That’s a big hole.
    Dankie!
    –Paul
    Antwoord
  3. Nadeem Mitha
    Because the file gets moved asynchronously, there is a possibility of being redirected to EditForm.aspx before the move is committed (and that’s bad). 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.
    Antwoord

Laat 'n antwoord te Nadeem Mitha Kanseleer antwoord

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk *