UPDATE: Ini kerja-kerja tetapi terdapat limitasi penting yang dihuraikan dalam komen. Ini mungkin berguna dalam sesetengah cirumstances.
UPDATE 2: Dalam projek semasa saya, pengguna sentiasa muat naik dokumen. Hasilnya, Saya tidak menghadapi masalah di mana MS Word berjalan dan berfikir bahawa fail yang dinamakan di atasnya. Saya pula menghadapi masalah, "fail telah diubahsuai oleh orang lain" dan diselesaikan ini melalui jenis bendera semafor mudah. Pengguna perlu menukar bidang data meta dari nilai lalai kepada sesuatu yang lain. Itemupdated yang() penerima mencari nilai yang sah ada sebelum benar-benar melaksanakan menamakan semula dan sejak itu, Saya tidak mempunyai sebarang masalah. Perbatuan anda mungkin berbeza-beza.
Saya mempunyai pelanggan keperluan untuk menukar nama fail yang dimuat naik ke sebuah perpustakaan dokumen tertentu untuk mematuhi konvensyen penamaan yang tertentu. API tidak menyediakan sebuah "Namakan semula()" kaedah. Sebaliknya, kita gunakan "MoveTo(…)". Berikut adalah sedikit rendah kod untuk mencapai matlamat ini:
awam mengatasi membatalkan ItemAdded(SPItemEventProperties hartanah) { SPFile f = properties.ListItem.File; f.MoveTo(properties.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.Update(); } |
Bit hanya rumit adalah sebagai "hartanah. ListItem.ParentList.RootFolder.Url". MoveTo yang() Kaedah memerlukan URL. Yang mashed rentetan tempat saya ke folder akar Perpustakaan dokumen saya semasa. Ini membolehkan saya untuk mengelakkan mana-mana coding yang keras pada saya sekiranya penerima.
Ini adalah versi yang lebih berguna yang melakukan perkara yang sama, tetapi menguntukkan nama fail itu kepada "Tajuk":
awam mengatasi membatalkan ItemAdded(SPItemEventProperties hartanah) { DisableEventFiring(); // Berikan tajuk item ini untuk nama fail sendiri. // NOTA: Tugasan ini mesti berlaku sebelum kita mengubah suai fail itu sendiri. // Panggilan update() pada SPFile nampaknya membatalkan hartanah di // erti kata lain. Pengemaskinian untuk "tajuk" gagal sehingga perubahan yang (dan kemas kini() memanggil) // dipindahkan di hadapan perubahan kepada nama fail. properties.ListItem["Tajuk"] = Properties.ListItem.File.Name; properties.ListItem.Update(); SPFile f = properties.ListItem.File; // Dapatkan lanjutan fail. Kita perlu yang kemudiannya. rentetan spfileExt = baru Fileinfo(f.Name).Tambahan; // Menamakan semula fail ke ID item senarai dan menggunakan sambungan fail untuk menyimpan // bahawa sebahagian daripada ia tidak terjejas. f.MoveTo(properties.ListItem.ParentList.RootFolder.Url + "/" + properties.ListItem["ID"] + spfileExt); // Melakukan langkah. f.Update(); EnableEventFiring(); } |