AKTUALIZOVAT: To funguje, ale existují značné omezení, které jsou popsány v komentářích. Ještě to může být užitečné v některých okolností.
AKTUALIZOVAT 2: V aktuálním projektu, uživatelé vždy uložit dokumenty. Jako výsledek, Nechci běžet na problém kde MS Word je spuštěn a si myslí, že soubor byl přejmenován na něm. Já jsem běžet do problému, "byl soubor změněn jiným uživatelem" a to prostřednictvím jednoduchého semaforu typ příznaku. Uživatelé musí změnit meta datové pole výchozí hodnotu na něco jiného. Itemupdated() přijímač vyhledá platnou hodnotu před jeho skutečným provedením přejmenování a od té doby, Jsem neměl žádné problémy. Váš se může lišit.
Mám požadavek klienta ke změně názvu souborů ukládaných do určité knihovny dokumentů v souladu s konkrétní konvence pojmenování. API neposkytuje přejmenovat"()" Metoda. Místo toho, používáme "MoveTo(…)". Tady je trochu minimální kódu ke splnění tohoto úkolu:
veřejné přepsat void ItemAdded(SPItemEventProperties vlastnosti) { Soubor SPFile f = vlastnosti.ListItem.File; f.MoveTo(vlastnosti.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.Update(); } |
Jediná choulostivá je "vlastnosti. ListItem.ParentList.RootFolder.Url". MoveTo() metoda vyžaduje URL. Kaše se řetězec bodů mě kořenové složce mé aktuální knihovny dokumentů. To mi umožňuje vyhnout jakékoliv pevné kódování v mém přijímač událostí.
To je mnohem užitečnější verzi, která dělá totéž, ale přiřadí název souboru "Title":
veřejné přepsat void ItemAdded(SPItemEventProperties vlastnosti) { DisableEventFiring(); // Název této položky přiřadit název souboru. // POZNÁMKA:: Toto přiřazení musí proběhnout dříve než budeme měnit samotný soubor. // Volání aktualizace() na soubor SPFile zdá znehodnotit vlastnosti v // nějaký smysl. Aktualizace názvu"" selhala, dokud se to změnit (a aktualizovat() volání) // byly přesunuty před změnou názvu souboru. vlastnosti.ListItem["Titul"] = vlastnosti.ListItem.File.Name; vlastnosti.ListItem.Update(); Soubor SPFile f = vlastnosti.ListItem.File; // Získejte příponu souboru. Potřebujeme to později. řetězec spfileExt = nové FileInfo(f.Name).Prodloužení; // Soubor přejmenujte na ID položky seznamu a použijte příponu souboru, aby // Tahle část je neporušená. f.MoveTo(vlastnosti.ListItem.ParentList.RootFolder.Url + "/" + vlastnosti.ListItem["ID"] + spfileExt); // Potvrdit přesunutí. f.Update(); EnableEventFiring(); } |