Snelle & Gemakkelijk: Naam van geüploade bestand met behulp van SharePoint-objectmodel Via een Event Receiver

UPDATE: Dit werkt maar er zijn belangrijke beperkingen die worden beschreven in de commentaren. Dit kan nog steeds nuttig in sommige doen zijn.

UPDATE 2: In mijn huidige project, gebruikers uploaden altijd documenten. Als een resultaat, Ik lopen niet in een probleem waar MS Word wordt uitgevoerd en denkt dat het bestand werd gewijzigd op het. Ik heb lopen in een probleem, "het bestand is bewerkt door iemand anders" en dit opgelost via een eenvoudige semafoor type vlag. Gebruikers moeten een meta data-veld wijzigen van de standaardwaarde naar iets anders. De itemupdated() ontvanger zoekt naar een geldige waarde er voordat u eigenlijk de naam wijzigen en sindsdien, Ik heb niet had ieder problematiek. Jouw snelheid kan variëren.

Ik heb een vereiste van de client de naam van de bestanden naar een bepaalde documentbibliotheek om te voldoen aan een bepaalde naamgevingsconventie wijzigen. De API voorziet niet in een "hernoemen()" methode. In plaats daarvan, We gebruiken "MoveTo(…)". Hier is een minimale beetje van code om dit te bereiken:

 openbare overschrijven VOID ItemToegevoegd (ItemAdded)(SPItemEventProperties eigenschappen)
        {
            SPFile f = eigenschappen.ListItem.File;

            f.moveTo(Eigenschappen.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.update();

        }

De alleen lastig bit is de "Eigenschappen. ListItem.ParentList.RootFolder.Url". De VerplaatsenNaar() methode vereist een URL. Die puree tekenreeks punten mij naar de root-map van mijn huidige documentbibliotheek. Dit kan ik om te voorkomen dat een harde codering in mijn gebeurtenis ontvanger.

Dit is een meer nuttige versie die het zelfde ding doet, maar de naam van het bestand wordt toegewezen aan "Titel":

 openbare overschrijven VOID ItemToegevoegd (ItemAdded)(SPItemEventProperties eigenschappen)
        {
            DisableEventFiring();

            // De titel van dit item toewijzen aan de naam van het bestand zelf.
 // OPMERKING: Deze toewijzing moet plaatsvinden voordat we het bestand zelf wijzigen.
 // Update aanroepen() lijkt op de SPFile om de eigenschappen in ongeldig te maken
 // sommige zin.  Updates voor "titel" totdat dat wijzigen is mislukt (en update() oproep)
 // voor de verandering werden verplaatst naar de bestandsnaam.
            Eigenschappen.ListItem["Titel"] = Eigenschappen.ListItem.File.Name;

            Eigenschappen.ListItem.Update();

            SPFile f = eigenschappen.ListItem.File;

            // Krijgen de extensie van het bestand.  Wij moeten dat later.
 tekenreeks spfileExt = Nieuw FileInfo(f.name).Extensie;

            // Hernoem het bestand naar het item in de lijst-ID en de extensie gebruiken om te houden
 // dat deel van het intact.
            f.moveTo(Eigenschappen.ListItem.ParentList.RootFolder.Url +
                "/" + Eigenschappen.ListItem["ID"] + spfileExt);

            // Plegen de verhuizing.
            f.update();

            EnableEventFiring();
        }

4 gedachten over "Snelle & Gemakkelijk: Naam van geüploade bestand met behulp van SharePoint-objectmodel Via een Event Receiver

  1. Geen naam
    Ook, Als u dit op vanuit Word doen, het zal een fout en zeggen dat het bestand bestaat niet. Het is niet verteld over de nieuwe URL. Ik heb nog niet een manier rond dit gevonden.
    Antwoord
  2. Paul Galvin
    Bedankt voor deze opmerking. Ik weet niet een antwoord op dat men ofwel … zal interessant zijn om te zien hoe om het te beheren.
    RE: async & omleiding
    Ik vraag me af als het wordt verplaatst naar een ItemAdding zal oplossen. Dat is een groot gat.
    Bedankt!
    –Paul
    Antwoord
  3. Nadeem Mitha
    Omdat het bestand asynchroon wordt verplaatst, Er is een mogelijkheid van omgeleid naar EditForm.aspx voordat de verhuizing vastgelegd wordt (en dat is slecht). U zult zien dat dit gebeurt als u de code slapen voor de VerplaatsenNaar-regel maken. Ik nog steeds bedacht niet wat kan worden gedaan over dat probleem afgezien van het gebruik van een aangepast bewerkingsformulier.
    Antwoord

Laat een antwoord achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *