Nhanh chóng & Dễ dàng: Đổi tên tập tin được tải lên bằng cách sử dụng mô hình đối tượng SharePoint thông qua một bộ tiếp nhận sự kiện

CẬP NHẬT: Điều này làm việc nhưng cũng có những hạn chế quan trọng được mô tả trong các ý kiến. Điều này vẫn có thể hữu ích trong một số cirumstances.

CẬP NHẬT 2: Trong dự án hiện tại của tôi, người dùng luôn luôn tải tài liệu. Kết quả là, Tôi không chạy vào một vấn đề nơi MS Word chạy và nghĩ rằng các tập tin đã được đổi tên vào nó. Tôi đã chạy vào một vấn đề, "các tập tin được sửa đổi lần bởi người khác" và giải quyết điều này thông qua một lá cờ loại đơn giản semaphore. Người dùng cần phải thay đổi một trường dữ liệu meta từ giá trị mặc định của nó để một cái gì đó khác. Itemupdated() nhận sẽ cho một giá trị hợp lệ có trước khi thực sự thực hiện việc đổi tên và kể từ đó, Tôi đã không có bất kỳ vấn đề. Mileage của bạn có thể thay đổi.

Tôi có một yêu cầu của khách hàng để thay đổi tên của tập tin tải lên một thư viện tài liệu cụ thể để phù hợp với một quy ước đặt tên cụ thể. API không cung cấp một "đổi tên()" phương pháp. Thay vào đó, chúng tôi sử dụng "MoveTo(…)". Dưới đây là một chút tối thiểu của mã thực hiện việc này:

 công cộng ghi đè void ItemAdded(SPItemEventProperties thuộc tính)
        {
            SPFile f = thuộc tính.ListItem.File;

            f.MoveTo(bất động sản.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

Chút khôn lanh chỉ là "thuộc tính. ListItem.ParentList.RootFolder.Url". Ổn() phương pháp đòi hỏi một URL. Mà nghiền lên chuỗi điểm tôi vào thư mục gốc của thư viện tài liệu hiện tại của tôi. Điều này cho phép tôi để tránh bất kỳ mã hóa cứng trong nhận sự kiện của tôi.

Đây là một phiên bản hữu dụng hơn mà không cùng một điều, nhưng sẽ gán tên tệp cho "Tiêu đề":

 công cộng ghi đè void ItemAdded(SPItemEventProperties thuộc tính)
        {
            DisableEventFiring();

            // Chỉ định tên của khoản mục này đến tên của tập tin riêng của mình.
 // LƯU Ý: Chuyển nhượng này phải diễn ra trước khi chúng tôi sửa đổi các tập tin riêng của mình.
 // Gọi Cập Nhật() về SPFile có vẻ vô tài sản tại
 // một số ý nghĩa.  Cập Nhật của "tiêu đề" thất bại cho đến khi có thay đổi (và Cập Nhật() cuộc gọi)
 // đã được di chuyển ở phía trước của sự thay đổi để tên tập tin.
            bất động sản.ListItem["Tiêu đề"] = thuộc tính.ListItem.File.Name;

            bất động sản.ListItem.Update();

            SPFile f = thuộc tính.ListItem.File;

            // Có được phần mở rộng của tập tin.  Chúng ta cần mà sau này.
 chuỗi spfileExt = mới FileInfo(f.name).Phần mở rộng;

            // Đổi tên tập tin để mục danh sách ID và sử dụng phần mở rộng file để giữ
 // đó là một phần của nó còn nguyên vẹn.
            f.MoveTo(bất động sản.ListItem.ParentList.RootFolder.Url +
                "/" + bất động sản.ListItem["ID"] + spfileExt);

            // Cam kết việc di chuyển.
            f.Update();

            EnableEventFiring();
        }

4 Những suy nghĩ trên "Nhanh chóng & Dễ dàng: Đổi tên tập tin được tải lên bằng cách sử dụng mô hình đối tượng SharePoint thông qua một bộ tiếp nhận sự kiện

  1. Không tên
    Cũng, Nếu bạn làm điều này từ trong Word, nó sẽ trả lại một lỗi và nói rằng các tập tin không tồn tại. Nó không phải nói về URL mới. Tôi đã không được tìm thấy một khoảng cách này.
  2. Paul Galvin
    Cảm ơn bạn đã chỉ ra rằng. Tôi không biết câu trả lời cho rằng một hoặc … sẽ thú vị để xem làm thế nào để quản lý nó.
    TÁI: async & chuyển hướng
    Tôi tự hỏi nếu di chuyển nó đến một ItemAdding sẽ giải quyết nó. Đó là một lỗ lớn.
    Cảm ơn!
    –Paul
  3. Nadeem Mitha
    Bởi vì các tập tin được di chuyển không đồng bộ, There is a possibility of bị chuyển hướng đến EditForm.aspx trước khi di chuyển là cam kết (và đó là xấu). Bạn sẽ thấy rằng điều này sẽ xảy ra nếu bạn làm cho mã ngủ trước khi dòng ổn. Tôi vẫn chưa tìm ra những gì có thể được thực hiện về vấn đề mà một số tồn tại bằng cách sử dụng một hình thức tùy chỉnh sửa.

Để lại một trả lời Nadeem Mitha hủy trả lời

Địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *