Cepat & Mudah: Mengubah nama File Upload menggunakan obyek SharePoint Model melalui acara penerima

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();
        }

4 pemikiran tentang “Cepat & Mudah: Mengubah nama File Upload menggunakan obyek SharePoint Model melalui acara penerima

  1. Tidak ada nama
    Juga, Jika Anda melakukan ini dari dalam Word, akan kembali kesalahan dan mengatakan file tidak ada. Itu tidak diberitahu tentang URL baru. Saya belum menemukan jalan di sekitar ini.
    Balasan
  2. Paul Galvin
    Terima kasih untuk menunjukkan hal itu. Aku tidak tahu jawaban yang baik … akan menarik untuk melihat bagaimana mengelola itu.
    RE: async & pengalihan
    Aku bertanya-tanya jika pindah ke ItemAdding akan memecahkan itu. Itulah lubang besar.
    Terima kasih!
    –Paul
    Balasan
  3. Nadeem Mitha
    Karena file mendapat pindah asynchronously, ada kemungkinan diarahkan ke EditForm.aspx sebelum bergerak berkomitmen (dan itu buruk). Anda akan melihat bahwa hal ini terjadi jika Anda membuat kode tidur sebelum baris MoveTo. Aku masih belum tahu apa yang dapat dilakukan tentang masalah itu selain menggunakan formulir sunting disesuaikan.
    Balasan

Tinggalkan balasan

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai *