คลังเก็บหมวดหมู่: พัฒนาของ SharePoint

อธิบายอย่างง่าย: “ค่าไม่ได้อยู่ภายในช่วงที่คาดไว้”

โปรแกรมปรับปรุง: โปสเตอร์แบบที่เหลือคิดดีเกี่ยวกับชื่อภายใน. ให้แน่ใจว่าได้อ่าน.

เมื่อทำงานกับผู้รับเหตุการณ์และอื่น ๆ รหัสที่อ้างอิงตัวเลือกรายการ SharePoint ผ่านโมเดลวัตถุ, มักจะทำผิดพลาดที่สร้างข้อผิดพลาดนี้ขณะใช้งานจริง:

ข้อผิดพลาดการโหลดและรันเหตุการณ์รับ Conchango.xyzzyEventReceiver ใน xyzzy, รุ่น = 1.0.0.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 0dc50a750396c3ac. ข้อมูลเพิ่มเติมได้ด้านล่าง. : ค่าไม่อยู่ในช่วงที่คาดไว้.

ผมคิดว่า นี้เป็นข้อผิดพลาดค่อนข้างทั่วไปที่อาจเกิดจากหลายวิธี. อย่างไรก็ตาม, คำอธิบายอย่างหนึ่งคือ ว่า ผมกำลังอ้างอิงเขตข้อมูลไม่ถูกต้อง. ถ้าชื่อของฟิลด์ "วันที่", ฉันต้องถึงเช่นนี้การรับเหตุการณ์:

คุณสมบัติListItem["วัน"]

เมื่อผมสะกดผิด หรือใช้กรณีไม่ถูกต้องเมื่อฟิลด์อ้างอิง, SharePoint สร้างข้างต้นกล่าวถึงข้อผิดพลาดรันไทม์. ตัวอย่าง, นี้ไม่ถูกต้อง:

คุณสมบัติListItem["วัน"]

</สิ้นสุด>

สมัครสมาชิกไปยังบล็อกของฉัน.

แท็กของ Technorati:

ด่วน & ง่าย: การสร้างโฟลเดอร์ และกำหนดชนิดของเนื้อหา (หรือ, มีของ KPIs และกินมากเกินไป)

เพื่อแก้ไขปัญหา KPI ผมเขียนเกี่ยวกับที่นี่, ผมได้ทดสอบบาง และค้นพบงานที่ KPI กับโฟลเดอร์ที่มีข้อมูลเมตาแบบเดียวกับที่พวกเขาทำงานกับเอกสาร หรือรายการสินค้า. พิสูจน์มันออกมา โดยการสร้างชนิดเนื้อหาใหม่ในโฟลเดอร์เนื้อหา และเพิ่มฟิลด์บางฟิลด์. ฉันสร้างตัวบ่งชี้บางอย่าง และพิสูจน์กับตัวเองที่ Kpi ทำงานตามที่คาดไว้. นี้เป็นข่าวยินดีต้อนรับ. ไม่เหมาะสม, เพราะลึกคุณได้รับจาก KPI กับโฟลเดอร์คือไม่ ว่าคุณต้องการ. นี้ไม่คืนเงินมากเกินไปในกรณีของฉันเนื่องจาก 1) ผู้ไม่รู้ใด ๆ ที่ดีกว่า และ 2) ลึกไปยังโฟลเดอร์. ก็คลิกที่ชื่อโฟลเดอร์ และรายการ. ก็คลิกที่สองแทนหนึ่ง, ซึ่งไม่ใช่จุดสิ้นสุดของโลก.

นี้เกิดขึ้นได้ดีในงานที่ฉันทำ. ฉันกำลังสร้างโฟลเดอร์สำหรับเอกสารทั้งหมดที่ได้รับการอัปโหลด. นี้จะกระทำโดยผ่านการรับเหตุการณ์. เป็นผล, จึงปอกให้การ โฟลเดอร์หลัก ข้อมูลเมตาที่ซิงค์ข้อมูล meta ขับเคลื่อน KPI จากแฟ้มเนื่องจากไฟฟ้าที่มีอยู่แล้วในตัวเอง. This allows me to have my KPI’s and eat them too 🙂

ฉันปรับเปลี่ยนรับเหตุการณ์การเพิ่มโฟลเดอร์ และการตั้งค่าชนิดเนื้อหาของโฟลเดอร์ใหม่แล้ว ของฉันเองเป็น kpi ของเนื้อหาชนิด. บิตของรหัสนี้ไม่หลอกลวง:

 SPFolderCollection srcFolders = targetWeb.GetFolder("เอกสาร").โฟลเดอร์ย่อย;
  SPFolder addedFolder = srcFolders.Add(คุณสมบัติListItem.ID.ToString());
  SPContentTypeId kpiCT = ใหม่ SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["เนื้อหารหัสชนิด"] = kpiCT;
  addedFolder.Item.Update();

การค้นหา ID ชนิดเนื้อหาจริง, ฉันเข้าถึงชนิดของเนื้อหาที่ผ่านการตั้งค่าไซต์ และคัดลอก/วางได้จาก URL ดัง:

รูปภาพ

</สิ้นสุด>

สมัครสมาชิกไปยังบล็อกของฉัน!

แท็กของ Technorati: ,

ง่าย และรวดเร็ว: ได้รับ SPFolder ของ SPListItem ที่ในการรับสัญญาณของเหตุการณ์

ฉันเกลียดการยอมรับมัน, แต่ฉันต่อสู้กับคนนี้ทุกวัน. ฉันรับเหตุการณ์ที่ต้องปรับปรุงเขตข้อมูลของโฟลเดอร์หลัก. นี้มากแสดงวิธีการทำมัน:

ส่วนตัว โมฆะ UpdateParentFolder(SPItemEventProperties คุณสมบัติ)
{

SPFolder thisItemFolder =คุณสมบัติListItem.File.ParentFolder;
thisItemFolder.Item["ZZ สถานะการอนุมัติ"] = "ข่าวดี, ทุกคน!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

ในกรณีนี้, ฉันทำงานกับไลบรารีเอกสาร และคุณสมบัติมาจากเหตุการณ์ ItemAdded.

หลอกลวงคือการ ที่คุณไม่ได้ SPFolder ของสินค้าโดยตรงจากรายการเอง (อาทิ. คุณสมบัติListItem.Folder เป็น null). แทน, ไปยังรายการการเชื่อมโยงไฟล์ และโฟลเดอร์ของแฟ้มที่ได้รับ.

</สิ้นสุด>

สมัครสมาชิกไปยังบล็อกของฉัน!

แท็กของ Technorati:

ยัง ตัวรับสัญญาณเหตุการณ์อื่นตรวจแก้จุดบกพร่องหลอกลวง

ผมมั่นใจว่า ฉันไม่คนแรกมา ด้วยนี้. อย่างไรก็ตาม, ไม่ได้สังเกตคนประกาศหลอกลวงเช่นนี้ตั้งแต่ผมเริ่มจ่ายใส่ชุมชนเดือนกรกฎาคมล่าสุด. ดังนั้น, ฉันคิดว่า ฉันจะลงเคล็ดลับนี้ ง่ายดีบัก.

ทำการรับเหตุการณ์ที่เริ่มต้นในการสร้างข้อผิดพลาดนี้ในการ 12 กลุ่ม:

ข้อผิดพลาดการโหลดและรันเหตุการณ์รับ Conchango.xyzzyEventReceiver ใน xyzzy, รุ่น = 1.0.0.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = blahbalhbalh. ข้อมูลเพิ่มเติมได้ด้านล่าง. : ไม่ได้ตั้งค่าอินสแตนซ์ของวัตถุอ้างอิงวัตถุ.

ไม่รู้ที่ผมได้นำข้อผิดพลาดนี้เนื่องจากผมได้ทำกิจกรรมมากเกินไปในหนึ่งรอบของฉันรหัส/ใช้งาน/ทดสอบ.

ฉันพยายาม โซลูชันนี้ รับ pdb ของฉัน มีความหวังกับ SharePoint นั้น 12 กลุ่มจะแสดงการสืบค้นกลับการกองซ้อน, แต่โชคไม่. ผมไม่ทราบว่า ถ้าเป็นไปได้ และ ถ้าคนไม่, กรุณาแจ้งให้เราทราบ 🙂

ฉันรู้ว่า มันเป็นไป เขียนข้อความบันทึกของคุณเอง 12 กลุ่ม. ตรงไปตรงมา, ฉันต้องสิ่งน่ากลัวเล็กน้อยน้อย และเร็วกว่าการใช้.

มันเกิดขึ้นกับฉันว่า ฉันน้อยสามารถรับข้อมูลติดตามพื้นฐานบางอย่าง โดยการจับโยนข้อยกเว้นทั่วไปเช่นนี้อีก:

  ลอง {
    UpdateEditionDate(คุณสมบัติ);
  }
  จับ (ข้อยกเว้น อี)
  {
    โยน ใหม่ ข้อยกเว้น("ผู้จัดส่ง, UpdateEditionDate(): ข้อยกเว้น: [" + e.ToString() + "].");
  }

นี้พบว่าในการ 12 กลุ่ม thusly:

ข้อผิดพลาดการโหลดและรันเหตุการณ์รับ Conchango.xyzzyEventReceiver ใน xyzzy, รุ่น = 1.0.0.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = blahblahblah. ข้อมูลเพิ่มเติมได้ด้านล่าง. : ผู้จัดส่ง, UpdateEditionDate(): ข้อยกเว้น: [System.NullReferenceException: ไม่ได้ตั้งค่าอินสแตนซ์ของวัตถุอ้างอิงวัตถุ. ที่ Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(คุณสมบัติ SPItemEventProperties) ที่ Conchango.xyzzyManagementEventReceiver.Dispatcher(คุณสมบัติ SPItemEventProperties, สตริ eventDescription)].

ที่ให้รายละเอียดทั้งหมดที่ฉันต้องติดตามว่าปัญหาเฉพาะฉัน และฉันคาดว่าจะใช้มันมากไป.

</สิ้นสุด>

สมัครสมาชิกไปยังบล็อกของฉัน!

โซลูชั่น: SPQuery ค้นหาโฟลเดอร์

ฟิลด์นี้ถูกใช้งานสัปดาห์ที่ผ่านมาการ "พัฒนา" โซลูชั่นสำหรับไคลเอนต์ที่ใช้ BDC และ SPQuery และประสบปัญหาบางอย่างใช้ SPQuery กับไลบรารีเอกสารที่ประกอบด้วยโฟลเดอร์. บรรทัดด้านล่าง: กำหนดซ้ำ"" ถึงแอตทริบิวต์ของมุมมองของแบบสอบถาม.

สถานการณ์สมมติของฉัน:

  • วันจันทร์, ผมอัปโหลดเอกสาร และจัดหาข้อมูลบาง meta.
  • ในสัปดาห์ถัดไป, Upload เอกสารใหม่. ของข้อมูลเมตาของเอกสารนี้ใหม่ตามเอกสารที่ผมอัพโหลดวันจันทร์ (ซึ่งเราเรียก "เอกสารหลัก").
  • เราได้สร้างซุ้มบริการเว็บที่มีอินเทอร์เฟซแบบ BDC มิตรในรายการเพื่อให้ผู้ใช้สามารถหาเอกสารวันจันทร์ที่ผ่านการค้นหาชื่อเรื่อง.
  • คอลัมน์ BDC ข้อมูลช่วยให้ผู้เป็นมิตร. (นี้เป็นส่วนหนึ่งของความพยายามของฉันที่ใช้ BDC สำหรับคอลัมน์ค้นหาง่ายขึ้น).

ซุ้มบริการขั้นสุดท้ายของ BDC ใช้แบบสอบถามเช่นนี้จะทำการค้นหา:

 // ใช้เครื่องมือ U2U เพื่อช่วยในการสร้างแบบสอบถามนี้ CAML.
      oQuery.Query =
        "<ที่>";

      ถ้า (titleFilter.Length > 0)
        oQuery.Query  =
          "  <และ>";

      oQuery.Query  =
        "    <และ>" +
        "      <Geq>" +
        "        <ชื่อ FieldRef =  "DocumentId" />" +
        "        <ค่าชนิด =  "Text">" + minId + "</ค่า>" +
        "      </Geq>" +
        "      <แบล็คไลท์>" +
        "        <ชื่อ FieldRef =  "DocumentId" />" +
        "        <ค่าชนิด =  "Text">" + maxId + "</ค่า>" +
        "      </แบล็คไลท์>" +
        "    </และ>";

      ถ้า (titleFilter.Length > 0)
        oQuery.Query  =
          "    <ประกอบด้วย>" +
          "      <ชื่อ FieldRef =  "Title" />" +
          "      <ค่าชนิด =  "Text">" + titleFilter + "</ค่า>" +
          "    </ประกอบด้วย>" +
          "  </และ>";
      oQuery.Query  =
        "</ที่>";

ในระหว่างระยะเริ่มต้นของการพัฒนา, นี้ทำงานดี. อย่างไรก็ตาม, เราแนะนำโฟลเดอร์ในไดเรกทอรีเพื่อแก้ปัญหา และทันที, ตัวเลือกของฉัน BDC จะไม่ส่งคืนผลลัพธ์ใด ๆ. ติดตามนี้ลงไปความจริงที่ว่า SPQuery ที่จะไม่ส่งคืนผลลัพธ์ใด ๆ. เราใช้โฟลเดอร์หลักเพื่อให้แฟ้มหลายแฟ้มที่ มีชื่อเดียวกันที่สามารถอัปโหลด แต่ มีข้อมูลเมตาที่แตกต่างกัน. เมื่ออัปโหลดแฟ้ม, เราสร้างโฟลเดอร์ขึ้นอยู่กับรหัสของรายการ และจากนั้น ย้ายแฟ้มมี (ผมเขียนว่า ที่นี่; เราเคย ผลผสม ด้วยวิธีนี้ แต่ทั้งหมด, ทำงานดี). ผู้ใช้ไม่สนใจ เกี่ยวกับโฟลเดอร์ และในความเป็นจริง, ไม่จริง ๆ เข้าใจว่า มีโฟลเดอร์ใด ๆ. เราได้กำหนดค่ามุมมองทั้งหมดในไลบรารีจะแสดงรายการโดยไม่คำนึงถึงโฟลเดอร์.

ฉันตีปัญหานี้สองครั้งเป็นการนำเทคนิคพัฒนา และแก้ไขมันแตกต่างกันแต่ละครั้ง. เป็นครั้งแรก, ฉันไม่ได้ใช้ตัว CONTAINS ในแบบสอบถาม. โดยตัวดำเนินการ CONTAINS, ผมแก้ปัญหา โดยการระบุมุมมองของ SPQuery contructor. แทนการใช้ตัวสร้างค่าเริ่มต้น:

Splist.update() oList =เว็บรายการ["เอกสาร"];

SPQuery oQuery = ใหม่ SPQuery();

แต่ใช้ตัวสร้างที่ระบุมุมมอง:

Splist.update() oList =เว็บรายการ["เอกสาร"];

SPQuery oQuery = ใหม่ SPQuery(oList.Views["เอกสารทั้งหมด"]);

ที่แก้ไขปัญหา และฉันเริ่มที่จะได้รับผลของฉัน.

แล้วเพิ่มตัว CONTAINS เข้าผสม และยากจนอีก. ดังปรากฎว่าที่ดำเนิน CONTAINS, ตราบใดที่ฉันสามารถบอก, ไม่ทำงานกับมุมมองแบบเดียวกับ GEQ ง่ายกว่า / ตัวแบล็คไลท์. ฉันทำบางค้น และเรียนรู้ว่า การสอบถาม ViewAttributes ควรตั้งค่า "ซ้ำ", เช่นใน:

oQuery.ViewAttributes = "ขอบเขต = "Recursive"";

ที่แก้ไขปัญหาสำหรับ CONTAINS. อันที่จริง, นี้ยังแก้ไขปัญหาค้นหาเดิมของฉัน และถ้าฉันมีระบุการเกิดซ้ำของแอตทริบิวต์ครั้งแรก, ฉันจะไม่ได้ทำงานเป็นปัญหาอีก.

ความจริงที่ว่า SPQuery ที่ตามดูการทำงานสำหรับผู้ประกอบการบาง (GEQ/แบ ล็คไลท์) และอื่น ๆ (ประกอบด้วย), ควบคู่กับความจริงที่ดูเหมือนจะไม่ ทำงานกับไลบรารีเอกสารที่ประกอบด้วยโฟลเดอร์เป้าหมายให้ฉันเชื่อว่า SPQuery มีบางประเด็น orthogonality Kpi.

ขอขอบพระคุณ:

</สิ้นสุด>

สมัครสมาชิกไปยังบล็อกของฉัน!

จุดบกพร่องของ KPI มอส? รายการตัวบ่งชี้ที่โยงกับไลบรารีเอกสารกับโฟลเดอร์

โปรแกรมปรับปรุง 02/29/08: ฉันแก้ไขปัญหานี้ โดยการสร้างโฟลเดอร์ และจากนั้น กำหนดชนิดเนื้อหาไปยังโฟลเดอร์ที่มีข้อมูลเมตาสำหรับ Kpi ต้อง. ผมอธิบายที่น้อยละเอียดที่นี่.

เราได้ดำเนินการแก้ไขปัญหาทางเทคนิคที่ผู้ใช้อัปโหลดเอกสารไปยังไลบรารีเอกสาร. รับเหตุการณ์การสร้างไดเรกทอรี และย้ายแฟ้มไดเรกทอรีนั้น (การใช้เทคนิคที่คล้ายกับสิ่งที่ผมเขียนเกี่ยวกับ ที่นี่). เราได้นำทางสถานปัญหาเกิดจากผู้รับเหตุการณ์ที่เปลี่ยนชื่อแฟ้มที่อัปโหลดเสร็จเรียบร้อยแล้ว (เพราะผู้ใช้เริ่มต้นของเอกสาร โดยคลิกที่ "ใหม่ไม่เคย" แต่สร้างเอกสารภายในแทน และอัปโหลด).

ข้อมูลเมตาสำหรับเอกสารเหล่านี้มีใช่/ไม่มีคอลัมน์ไซต์เรียกว่า "ด่วน" และคอลัมน์ไซต์อื่นเรียกว่า "สถานะ". เราต้องตอบสนองความต้องการทางธุรกิจที่แสดงเปอร์เซ็นต์ของ "ด่วน" เอกสารที่มีสถานะเป็น "รอ".

นี่คือมักง่ายในการทำ และอธิบายไว้อย่างมากเช่นนี้ที่พอ ๆ กับ SharePoint ของจอถ้าคุณสนใจ.

หมู่, ค่ะต่อไปนี้:

  • สร้างมุมมองในไลบรารีเอกสารที่เรียกว่า "ค้างอยู่".
  • กำหนดค่ามุมมองเฉยโครงสร้างโฟลเดอร์.
  • สร้างรายการ KPI.
  • สร้างตัวบ่งชี้ในรายที่ไป lib เอกสารและ "ค้างอยู่" ดู.

เพียงแค่ทำงาน. KPI แสดงเป้าหมายของฉัน (เช่น. เอกสารเร่งด่วน 5) แต่แสดงจำนวนที่แท้จริงของเอกสารเร่งด่วนเป็นศูนย์เสมอ. Paradoxically, ถ้าลึกรายละเอียด, แสดงเอกสารเร่งด่วน 5 ในรายการ. สร้างสถานการณ์ง่ายมากสองเอกสาร, หนึ่งในโฟลเดอร์และไม่. นี่คือภาพหน้าจอ:

รูปภาพ

หน้าจอข้างต้นได้แสดงมีเอกสารสองในมุมมองแต่ค่า"อย่างชัดเจน" เป็นหนึ่ง. "CamlSchema" ด้วยเอกสารเปล่า Id อยู่ในโฟลเดอร์ราก และอื่น ๆ ที่อยู่ในโฟลเดอร์ที่ชื่อว่า "84".

เหมือนกับฉันที่ถึงแม้ว่าคุณระบุมุมมอง, KPI ไม่เกียรติ "แสดงรายการทั้งหมดโดยไม่" การตั้งค่า และแทน, confines ตัวเองไปยังโฟลเดอร์ราก.

ถ้าผมคิดผิด, โปรดปล่อยฉันเป็นบรรทัด หรือแสดงความคิดเห็น.

</สิ้นสุด>

สมัครสมาชิกไปยังบล็อกของฉัน!

แท็กของ Technorati:

วิธีแก้ไขปัญหา: “FileNotFoundException” ด้วยตัวรับสัญญาณของฉันคุณลักษณะ.

ผมทำงานประกอบในสัปดาห์ที่จะเพิ่มบางเหตุการณ์สำหรับอินสแตนซ์ที่เฉพาะรายการ. (ฉัน blogged บิตเกี่ยวกับรายรับที่นี่).

ใช้บรรทัดคำสั่ง, ฉันสามารถติดตั้งคุณลักษณะข้อผิดพลาดไม่ (แต่ดูด้านล่างซ่อนข้อผิดพลาด). เมื่อฉันพยายามที่จะใช้งานลักษณะการทำงานบนเว็บไซต์, มอสแนะนำของ "FileNotFoundException" ข้อผิดพลาด. รายการบล็อกนี้อธิบายถึงวิธีที่ผมแก้.

นี่คือข้อผิดพลาดที่มอสส์พบฉันในเว็บเบราว์เซอร์:

คุณลักษณะ ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ ไม่สามารถติดตั้งเนื่องจากการโหลดแอสเซมบลีรับเหตุการณ์ "xyzzyFeatureReceiver_0" ล้มเหลว: System.IO.FileNotFoundException: ไม่สามารถโหลดแฟ้มหรือแอสเซมบลี ' xyzzyFeatureReceiver_0’ หรืออ้างอิงของ. ระบบไม่พบแฟ้มที่ระบุ.
ชื่อแฟ้ม: ' xyzzyFeatureReceiver_0’
ที่ System.Reflection.Assembly.nLoad(ชื่อ AssemblyName, สตริ codeBase, หลักฐาน assemblySecurity, แอสเซมบลี locationHint, StackCrawlMark& stackMark, ThrowOnFileNotFound บูลีน, ForIntrospection บูลีน)
ที่ System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, หลักฐาน assemblySecurity, StackCrawlMark& stackMark, ForIntrospection บูลีน)
ที่ System.Reflection.Assembly.InternalLoad(สตริ assemblyString, หลักฐาน assemblySecurity, StackCrawlMark& stackMark, ForIntrospection บูลีน)
ที่ System.Reflection.Assembly.Load(สตริ assemblyString)
ที่ Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: เปิดบันทึกรวมแอสเซมบลีออฟ.
การเปิดใช้การบันทึกประกอบผูกล้มเหลว, ตั้งค่ารีจิสทรี [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) ถึง 1.
หมายเหตุ: มีโทษบางประสิทธิภาพที่เชื่อมโยงกับแอสเซมบลีผูกล้มเหลวเข้าสู่ระบบ.
เมื่อต้องการปิดคุณลักษณะนี้, ลบค่ารีจิสทรี [HKLMSoftwareMicrosoftFusion!EnableLog].

แก้ไขปัญหา ด้วย Windows SharePoint Services.

ฉันรู้วิธีการทำให้เกิดข้อผิดพลาดที่จงใจ: ไม่ติดตั้งแอสเซมบลีใน GAC การ. แต่, ใน GAC การ. ฉันปกติติดตั้งแอสเซมบลีใน GAC ที่ โดยลากลงใน c:\windowsassembly โฟลเดอร์โดยใช้ windows explorer. ผมไม่เคยรู้สึก 100% สะดวกสบายที่ทำเนื่องจากเสมอคิด gacutil ที่มีเหตุผล … ดังนั้น พยายามที่. มันไม่แตกต่าง.

ฉันค้น Internets และพบกระทู้นี้: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

โปสเตอร์ที่เกิดขึ้นต้อง ใช้บิตรากเดียวกันของรหัส (จากหนังสือภายใน WSS จากรายการนี้) เพื่อที่ได้เครื่องที่มีความหวัง. อย่างไรก็ตาม, คำแนะนำของผสมที่ประกอบด้วยการ [แอสเซมบลี: ] คำสั่งไม่ได้ทำให้รู้สึกถึงฉัน. ฉันพยายามต่อไป และผมด้านขวา. มันไม่แตกต่าง.

จากนั้น ผมสังเกตเห็นว่า คำจำกัดความคลาฉันไม่สาธารณะ. ฉันทำมันสาธารณะ และที่ทำไม่แตกต่าง.

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

ฉันใส่เสื้อหนาวของฉันไปค้น Internets อีกครั้ง และพบว่า คนที่มีปัญหานี้มากเกินไป. การสนทนาที่ยาวนานในบัญชี peters ปิดเป็นอะไร และไม่พบปัญหา.

ไม่ย้ายแอสเซมบลีของฉันเป็นหนึ่งในสถานที่ล็อกอ้างว่า เป็นการค้นหา และทำการความคืบหน้าน้อยมาก. ฉันกำลังรับข้อผิดพลาดใหม่ในเบราว์เซอร์รางวัลเมื่อพยายามเปิดใช้งานลักษณะการทำงาน:

ไม่สามารถสร้างวัตถุคุณลักษณะรับจากแอสเซมบลี "xyzzyFeatureReceiver_0", พิมพ์ "Conchango.xyzzyFeatureReceiver" สำหรับลักษณะการทำงาน b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: ค่าไม่สามารถเป็น null.
ชื่อพารามิเตอร์: ชนิด
ที่ System.Activator.CreateInstance(ชนิดชนิด, NonPublic บูลีน)
ที่ System.Activator.CreateInstance(ชนิดชนิด)
ที่ Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

แก้ไขปัญหา ด้วย Windows SharePoint Services.

เวลา Internets หนึ่งเที่ยวล่าสุด!

เวลานี้ที่ฉันค้นหา, ฉายพอ, มอที่ปัญหาข้อผิดพลาดนี้ได้เนื่องจากแอสเซมบลีที่ไม่ได้อยู่ใน GAC.

อยากจะได้รับเพิ่มจากนี้ และพยายามที่จะภูมิใจเล็กน้อยที่เราได้สร้างการ ผู้ต้องหาของแอสเซมบลี MSIL, แต่มันไม่ทำงาน. ฉันรำคาญเพียง plain. ค้นหาตัวเอง muttering "ไก่หรือไข่" ภายใต้ลมหายใจของฉัน.

ผมก็ตัดสินใจอินเทอร์เน็ต. ฉันสร้างเป็นโครงการใหม่ทั้งหมด และคัดลอก/วางรหัสในโครงการทำงาน incredible-cloaked-from-the-GAC-assembly ผ่านไปโครงการนี้ใหม่. (ฉันมองหาธงสร้างเรียกว่าสิ่งที่ชอบ "ซ่อนจากผูกถ้าติดตั้งใน GAC การแอสเซมบลี" แต่ไม่สามารถหา).

ผมติดตั้งคุณลักษณะนี้ และเปิดใช้งาน และ … การทำงาน! ดังนั้น, หลังจากนั้นทั้งหมด, ผมจะเป็นพื้น ' เริ่มต้น’ โครงการของฉัน. นี่คืออีกเหตุผลที่ทำไมฉันเกลียดคอมพิวเตอร์.

ไม่ได้เรียนสิ่งที่เป็นประโยชน์จากนี้. ฉันได้รับการติดตั้งคุณลักษณะโดยใช้บรรทัดคำสั่งหรือตลอดทั้งวัน และใช้การ "-แรง" เลือกจากนิสัย. เหตุผลบางประการ, ผมไม่ได้ใช้ตัวเลือกแรงเมื่อติดตั้งโครงการใหม่. คราวนี้, ฉันไม่ได้จริง ๆ, ลืมการคัดลอกโครงการนี้ใหม่แอสเซมบลีใน GAC แท้จริง. เป็นผล, ฉันได้รับที่ FielNotFoundException"" ข้อผิดพลาด. คราวนี้, ได้รับจาก, ไม่เมื่อพยายามเปิดใช้งานลักษณะการทำงานผ่านเว็บเบราว์เซอร์. ดังนั้น, -แรงจริงเล่นสองบทบาท. อนุญาตให้คุณติดตั้งคุณลักษณะที่มีอยู่. มันยังช่วยให้คุณสามารถติดตั้งคุณลักษณะรถที่ไม่ทำงานขณะใช้งานจริง โดยเมื่อข้อผิดพลาด. มันคงว่า มากในความช่วยเหลืออยู่ แต่ฉันไม่เคยพบมัน.

</สิ้นสุด>

ด่วน & ง่าย: เปลี่ยนชื่อแฟ้มที่อัปโหลดโดยใช้โมเดลวัตถุของ 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();
        }

คำแนะนำด่วน: Web part สำหรับแบบสอบถามเนื้อหา, ค่าคอลัมน์การค้นหาและ XSL

มีชื่อคอลัมน์ในชนิดเนื้อหาที่มีชื่อว่า "สถานที่อสังหาริมทรัพย์".

คอลัมน์ที่มีชนิด "ค้นหา".

ได้ปรับเปลี่ยน <CommonViewFields> และ ItemStyle.xsl เพื่อแสดงคอลัมน์.

แบบง่าย ๆ <xsl:ค่าของเลือก =…> ส่งกลับค่ากลับเป็นค่าภายในที่มีข้อมูลแสดงลำดับตำแหน่ง, เช่น:

1;#ไมอามี

การรับค่ามิตรบุคคล, ใช้ xsl สตริงย่อยหลัง, ดังที่แสดง:

<xsl:เลือก valuxslf = "ด้วยหลัง(@Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></xsl:ค่าของ>

ใช้เทคนิคนี้เมื่อใดก็ ตามที่คุณกำลังทำงานกับค่าการค้นหาในการแปลง XSL และจำเป็นต้องรับค่ามิตรบุคคล.

<สิ้นสุด />

แท็กของ Technorati: , ,

ง่าย และรวดเร็ว: ตรวจสอบภายในคอลัมน์ชื่อของคอลัมน์ของไซต์

โปรแกรมปรับปรุง: Thake เจเรมี มี blogged เกี่ยวกับเรื่องนี้ และวางบาง รหัสแอพลิเคชันคอนโซล ที่แสดงชื่อภายใน.

ผมพยายามสอบถามเนื้อหา web part เพื่อแสดงวันครบกำหนดจากงานที่ได้รับและเนื่องจากป้ายชื่อที่หน้าจอ "วัน", ถือว่าที่ชื่อคอลัมน์ใช้ใน <CommonViewFields> เป็น "Due_x0020_Date".

ไม่ถูกต้อง!

ชื่อจริงคอลัมน์ในกรณีนี้คือ "DueDate".

วิธีทำหามัน? ใหม่อ่านเฮ รายการบล็อกของโซโลมอนในปรับเปลี่ยน CQWP การแสดงคอลัมน์เพิ่มเติมข้อมูล. เธออธิบายถึงกระบวนการในขั้นตอนนี้ #13. เชื่อถือได้. ถูกต้อง. น้อย, ถูกต้องสำหรับฉัน. ฉันไม่เชื่อถือเรื่องแรกสำหรับคอลัมน์อื่นที่มีชื่อยาวมาก.

ผมบอกว่า "เชื่อถือได้" เพราะฉันไม่เชื่อถือได้ และอาจสูญเสีย ใกล้ butting ศีรษะขึ้นกับกำแพงสองชั่วโมง. หลังจากแก้ไข "DueDate" ชื่อ, อยากจะเพิ่มฟิลด์อื่นที่จะ <CommonViewFields>. การใช้เทคนิคโซโลมอน, ก็คือการชื่อคอลัมน์เช่น "XYZ_x0020_Project_x0020_Due_x00".

คิดกับตัวเอง, เป็นชื่อที่ตัดอย่างชัดเจน. เดินไปข้างหน้า และยังไม่ได้ตัดมันไม่ดี. สุดท้ายใช้ชื่อดูเหมือนตัด และทำงาน.

คำแนะนำพิเศษ: เมื่อผมทำงานกับ CQWP, ถ้าเพิ่มชื่อภายในที่ดีจะ <CommonViewFields>, CQWP จะบอกว่า แบบสอบถามมีส่งกลับผลลัพธ์ใด ๆ. แต่, ถ้าเพิ่มชนิดข้อมูลชื่อเขตข้อมูล, มันจะส่งกลับผลลัพธ์. เพิ่มข้อมูลชนิดจริงหลอกลวงปัญหาเนื่องจากผมได้อ้างอิงถึงเขตข้อมูลไม่มีอยู่. ฉันสามารถเพิ่ม, แต่ เมื่อฉันพยายามจะแสดงค่าของ, ฉันจะเรียกช่องว่าง.

นี้ไม่ได้หน้ากากข้อผิดพลาด:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

นี้ไม่ได้หน้ากากข้อผิดพลาด:

<CommonViewFields>Due_x0020_Date,วันที่และเวลา;</CommonViewfields>

</สิ้นสุด>