UPDATE: Ini bekerja tetapi ada keterbatasan yang signifikan yang dijelaskan dalam komentar. Ini masih mungkin berguna dalam beberapa cirumstances.
UPDATE 2: Dalam proyek saya saat ini, pengguna selalu meng-upload dokumen. Akibatnya, Aku tidak lari ke masalah mana MS Word berjalan dan berpikir bahwa file yang diubah namanya di atasnya. Aku lari ke masalah, "file yang diubah oleh orang lain" dan memecahkan ini melalui sederhana Semafor jenis bendera. Pengguna harus mengubah meta data lapangan dari nilai default untuk sesuatu yang lain. Itemupdated() Penerima mencari nilai yang valid yang ada sebelum benar-benar melakukan rename dan sejak itu, Saya tidak punya masalah. Anda mungkin berbeda.
Saya punya klien persyaratan untuk mengubah nama file upload ke pustaka dokumen tertentu agar sesuai dengan konvensi penamaan tertentu. API tidak memberikan nama"()" metode. Sebaliknya, Kami menggunakan "MoveTo(…)". Berikut adalah sedikit sedikit kode untuk mencapai hal ini:
Umum override Batal ItemAdded(SPItemEventProperties properti) { SPFile f = properti.ListItem.File; f.MoveTo(properti.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.Update(); } |
Bit hanya rumit adalah "sifat. ListItem.ParentList.RootFolder.Url". MoveTo() metode ini mengharuskan URL. Yang dihaluskan string poin saya ke root folder dari dokumen perpustakaan saya saat ini. Hal ini memungkinkan saya untuk menghindari coding apapun keras dalam acara saya Penerima.
Ini adalah versi lebih berguna yang melakukan hal yang sama, tetapi menetapkan nama file "Judul":
Umum override Batal ItemAdded(SPItemEventProperties properti) { DisableEventFiring(); // Menetapkan judul item ini untuk nama file itu sendiri. // CATATAN: Tugas ini harus dilakukan sebelum kita memodifikasi file itu sendiri. // Memanggil update() pada SPFile tampaknya membatalkan pada properti di // beberapa pengertian. Pembaruan "judul" gagal sampai yang mengubah (dan update() panggilan) // dipindahkan di depan perubahan nama file. properti.ListItem["Judul"] = properti.ListItem.File.Name; properti.ListItem.Update(); SPFile f = properti.ListItem.File; // Dapatkan ekstensi file. Kita perlu yang kemudian. string spfileExt = baru FileInfo(f.Name).Ekstensi; // Mengubah nama file ke daftar item ID dan menggunakan ekstensi file untuk menjaga // Bagian itu utuh. f.MoveTo(properti.ListItem.ParentList.RootFolder.Url + "/" + properti.ListItem["ID"] + spfileExt); // Melakukan langkah. f.Update(); EnableEventFiring(); } |