ด่วน & ง่าย: เปลี่ยนชื่อแฟ้มที่อัปโหลดโดยใช้โมเดลวัตถุของ SharePoint ผ่านตัวรับสัญญาณของเหตุการณ์

โปรแกรมปรับปรุง: ใช้งาน แต่มีข้อจำกัดสำคัญที่อธิบายไว้ในข้อคิดเห็น. นี้ยังอาจมีประโยชน์ในบาง cirumstances.

โปรแกรมปรับปรุง 2: ในโครงการปัจจุบัน, ผู้ใช้จะอัปโหลดเอกสาร. เป็นผล, ฉันไม่ทำงานเป็นปัญหาที่ MS Word อยู่ และคิดว่า แฟ้มถูกเปลี่ยนชื่อใน. ฉันไม่ได้ทำงานเป็นปัญหา, "แฟ้มถูกปรับเปลี่ยน โดยคนอื่น" และแก้ไขนี้ผ่านธงชนิดเซมาฟอร์ง่าย. ผู้ใช้จำเป็นต้องเปลี่ยนเขตข้อมูลเมตาจากค่าเริ่มต้นของอย่างอื่น. Itemupdated() ตัวรับสัญญาณค้นหาค่าถูกต้องมีก่อนที่ จะดำเนินการเปลี่ยนชื่อตัวจริง และ ตั้งแต่นั้น, ฉันไม่มีปัญหาใด ๆ. ระยะอาจแตกต่างกัน.

มีความต้องการลูกค้าเพื่อเปลี่ยนชื่อของแฟ้มที่อัปโหลดในไลบรารีเอกสารเฉพาะเพื่อให้สอดคล้องกับแผนการตั้งชื่อที่เฉพาะ. API ให้เปลี่ยนชื่อ"()" วิธีการ. แทน, เราใช้ "MoveTo(…)". นี่คือบิตต่ำสุดของรหัสการทำ:

 สาธารณะ การแทน โมฆะ ItemAdded(SPItemEventProperties คุณสมบัติ)
        {
            SPFile f =คุณสมบัติListItem.File;

            f.MoveTo(คุณสมบัติListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

"คุณสมบัติ การเป็นบิตหากินเท่านั้น ListItem.ParentList.RootFolder.Url". การ MoveTo() วิธีต้องการ URL. ที่ทำขึ้นจุดสายผมไปยังโฟลเดอร์รากของไลบรารีเอกสารปัจจุบัน. นี้ช่วยให้ฉันเพื่อหลีกเลี่ยงการเขียนโค้ดใด ๆ ยากในรับเหตุการณ์ของฉัน.

นี้เป็นรุ่นมีประโยชน์มากที่เดียว, แต่กำหนดชื่อของแฟ้มเมื่อต้องการ "ชื่อเรื่อง":

 สาธารณะ การแทน โมฆะ ItemAdded(SPItemEventProperties คุณสมบัติ)
        {
            DisableEventFiring();

            // กำหนดชื่อเรื่องของรายการนี้เป็นชื่อของแฟ้มเอง.
 // หมายเหตุ: การกำหนดนี้ต้องเกิดขึ้นก่อนที่เราปรับเปลี่ยนแฟ้มเอง.
 // เรียกการปรับปรุง() บน SPFile ดูเหมือนว่าจะ โมฆะคุณสมบัติใน
 // ความรู้สึกบางอย่าง.  การปรับปรุงชื่อเรื่อง"" ล้มเหลวจนกว่าที่เปลี่ยน (และปรับปรุง() โทร)
 // ถูกย้ายไปหน้าการเปลี่ยนแปลงไปชื่อแฟ้ม.
            คุณสมบัติListItem[ชื่อเรื่อง""] =คุณสมบัติListItem.File.Name;

            คุณสมบัติListItem.Update();

            SPFile f =คุณสมบัติListItem.File;

            // ส่วนขยายของแฟ้มที่ได้รับ.  เราจำเป็นที่ในภายหลัง.
 สายอักขระ spfileExt = ใหม่ FileInfo(f.Name).นามสกุล;

            // เปลี่ยนชื่อแฟ้มกับ ID ของรายการ และใช้นามสกุลของแฟ้มเพื่อเก็บ
 // ส่วนที่ยังคงอยู่.
            f.MoveTo(คุณสมบัติListItem.ParentList.RootFolder.Url +
                "/" + คุณสมบัติListItem["ID"] + spfileExt);

            // ยืนยันการย้าย.
            f.Update();

            EnableEventFiring();
        }

4 คิดเกี่ยวกับ“ด่วน & ง่าย: เปลี่ยนชื่อแฟ้มที่อัปโหลดโดยใช้โมเดลวัตถุของ SharePoint ผ่านตัวรับสัญญาณของเหตุการณ์

  1. ไม่มีชื่อ
    นอกจากนี้, ถ้าคุณทำเช่นนี้จากภายใน Word, มันจะส่งกลับข้อผิดพลาด และพูดว่า ไม่มีแฟ้มอยู่. ไม่มีการบอกว่า เกี่ยวกับ URL ใหม่. ฉันยังไม่ได้พบวิธีจัดการกับปัญหานี้.
  2. Paul Galvin
    ขอบคุณสำหรับการชี้ที่ออก. ไม่ทราบว่าคำตอบอย่างใดอย่างหนึ่ง … จะน่าสนใจเพื่อดูวิธีการจัดการ.
    RE: การ & การเปลี่ยนเส้นทาง
    ฉันสงสัยว่า ถ้า ย้ายไป ItemAdding จะแก้ปัญหา. ที่เป็นหลุมใหญ่.
    ขอขอบคุณ!
    –พอล
  3. Nadeem Mitha
    เนื่องจากแฟ้มได้รับย้ายแบบอะ, มีความเป็นไปได้ของการเปลี่ยนเส้นทางไป EditForm.aspx ก่อนย้ายมุ่งมั่น (และที่ไม่ถูกต้อง). คุณจะเห็นว่า นี้เกิดขึ้นถ้าคุณทำรหัสนอนก่อนบรรทัด MoveTo. ผมยังไม่ได้คิดว่าทำอย่างไรเกี่ยวกับปัญหาที่นอกเหนือจากการใช้ฟอร์มแบบกำหนดเองแก้ไข.

ทิ้งคำตอบไว้

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่. ช่องที่ต้องการถูกทำเครื่องหมาย *