คลังเก็บหมวดหมู่: SharePoint

วิธีการแก้ไขข้อผิดพลาดของ SharePoint ที่ลึกลับ.

ภาพรวม:

การดีบักได้ยากเมื่อมีการพัฒนาฟังก์ชันที่กำหนดเองสำหรับ Windows SharePoint Services 3.0 (WSS) Microsoft Office SharePoint Server (มอส). เป็นผู้ร้ายหลักว่า SharePoint ปกติจัดการข้อมูลการวินิจฉัยน้อยมากบนเว็บเบราว์เซอร์เมื่อเกิดข้อผิดพลาด. รายการบล็อกนี้อธิบายถึงวิธีการค้นหาข้อมูลเพิ่มเติมโดยระบบวินิจฉัยที่มักจะสามารถให้บริการเสริมที่จำเป็นระบุสาเหตุรากของรายละเอียดว่า. นี้แล้วสามารถนำไปสู่การแก้ปัญหา.

ฉันได้ใช้เทคนิคนี้ได้ประสบความสำเร็จเพื่อแก้ไขข้อผิดพลาดมิฉะนั้นลึกลับ.

วิธีการ:

SharePoint จะบันทึกข้อมูลมากการวินิจฉัยล็อกในแฟ้มบันทึกในการ 12 กลุ่ม.

"12 กลุ่ม" โดยปกติห้อง "C:\โปรแกรม Extensions12 FilesCommon FilesMicrosoft SharedWeb เซิร์ฟเวอร์ ". (ผมไม่แน่ใจว่าเป็นไปได้ 12 กลุ่มอยู่ที่ใดบ้าง, อันที่จริง).

ความคิดคือการ ค้นหาแฟ้มบันทึกปัจจุบัน, บังคับให้ข้อผิดพลาด และจากนั้น เปิดขึ้นอย่างรวดเร็ว. แฟ้มบันทึกเหล่านี้มีลักษณะโดย:

  • จำนวนข้อมูลที่ copious. SharePoint สร้างจำนวนมากของข้อมูลวิเคราะห์ และเขียนเรื่องที่ล็อกไฟล์ได้อย่างรวดเร็ว. คุณต้องการอย่างรวดเร็ว ด้วยมือเพื่อรวบรวม.
  • มากมายหลายหลาก. SharePoint ไม่ได้เขียนลงในแฟ้มบันทึกเดียว แต่ค่อนข้าง สร้างแฟ้มบันทึกหลายลำดับ.
  • คัดลอก และวางลงใน MS Excel อย่างดี.

วิธีของฉันชื่นชอบ:

  1. เปิดวินโดว์สชี้ไป 12 hivelogs.
  2. เรียงลำดับมุมมองเพื่อแสดงตามวันปรับเปลี่ยน (แรกสุด).
  3. เน้นแฟ้มบันทึกล่าสุด.
  4. ในเว็บเบราว์เซอร์, บังคับข้อผิดพลาดเกิดขึ้น.
  5. เปิดแฟ้มบันทึกปัจจุบัน และคัดลอกเนื้อหาไปยัง MS Excel อย่างรวดเร็ว.
  6. ข้ามไปยังจุดสิ้นสุด และวิเคราะห์รายการเกี่ยวข้อง.

หมายเหตุอื่น ๆ:

โดยค่าเริ่มต้น, บันทึกการวินิจฉัยอยู่ 12 ไดเรกทอรี hiveLOGS.

ปฏิบัติส่วน MS (ต่อไมค์ T. ของ Microsoft) รัฐที่แฟ้มบันทึกควรบันทึกลงในฮาร์ดดิสก์แยกต่างหาก. หนึ่งทำผ่าน admin กลาง. ผู้ดูแลระบบของคุณอาจมีดำเนินการนี้, ในกรณี คุณจะแน่นอนต้องการค้นหาแฟ้มล็อกมีแทนที่จะเริ่มต้น 12 สถานที่ตั้งกลุ่ม).

รายการนี้อยู่ปัญหาเช่น:

  • กระแสงาน SharePoint ล้มเหลวเมื่อต้องการเริ่มต้นเนื่องจากข้อผิดพลาดภายใน.
  • (เพิ่มเติมจะเพิ่มช่วงเวลา)
  • รายการนี้ได้รับคำวินิจฉัยข้อผิดพลาดในลำดับงาน (เช่น. "ลำดับงานไม่สามารถเริ่มต้นเนื่องจากข้อผิดพลาดภายใน").

มอส: แนะนำองค์กรอย่างมีประสิทธิภาพ

(รายการนี้ข้ามการลงรายการบัญชีระหว่าง http://paulgalvin.spaces.live.com/blog/ และ http://blogs.conchango.com)

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

ภาพรวม:

รายการนี้อธิบายข้อมูลพื้นหลังบางบนขนาดใหญ่ (3,000 ผู้ใช้) Microsoft Office SharePoint Server (มอส) ไวร์เลสและสิ่งที่เราได้รับข้อมูล ในลักษณะที่ลูกค้ามีความสุขและ ลงเส้นทางอย่างที่ลงท้าย ด้วยการยอมรับทั้งหมดของชุดคุณลักษณะมอ. เป็นการเขียนรายการ, เราเป็นประมาณ 50% มีเฟสแรกของโครงการ. เป็นความคืบหน้ากิจกรรม, ฉันจะปรับปรุงรายการนี้ หรือเขียนรายการใหม่.

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

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

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

เรากำลังเผชิญกับปัญหานี้อีกครั้ง … MOSS มีองค์กรที่เข้ากับชุดคุณลักษณะขององค์กร, ยัง ลูกค้าแม้แต่ค่อนข้างซับซ้อนมีเวลายากจิตใจดื่มด่ำคุณลักษณะเหล่านั้น, ให้เพจเศษเห็นนั้นเป็นกิจวัตรประจำวันของพวกเขาคนเดียว.

ไม่มีการแก้ไขปัญหาวิเศษ. แทนแค่ตอนแรกที่เรากับลูกค้าเพื่อนำพวกเขาลงเส้นทางให้เกมประสบความสำเร็จระยะยาว.

ขอบเขต:

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

  • จัดการเอกสารได้อย่างง่าย ๆ โดยใช้ไลบรารีเอกสาร, ชนิดของตัวควบคุมและเนื้อหารุ่น.
  • ผลการค้นหาตามชนิดของเนื้อหา และค้นหาที่กำหนดเอง (ผ่านคุณสมบัติจัดการ, XSLT เพื่อผลลัพธ์ที่สวย, ฯลฯ).

นอกจากคุณลักษณะดังกล่าวทั่วทั้งองค์กร (หมายความ ว่า พวกเขาจะถูกรีดออกแผนกและผู้ใช้ทั้งหมด), เราได้เพิ่มต่อไปนี้ซิงเกิลตันในขอบเขตขนาดเล็กโครงการ:

  • หลักฐานของแนวคิดรวม BDC.
  • กระบวนการลำดับงานหลายขั้นตอน และหลายสาขาที่สร้างขึ้น โดย SPD.
  • ฟอร์ม InfoPath ที่ซับซ้อน.
  • ซ่อมแซมผิวหน้าของ KPI สำหรับกระบวนการทางธุรกิจบางอย่าง (คง HR พรสวรรค์ซื้อในกรณีของเรา, แต่ ที่อาจเปลี่ยนแปลง).

ไม่มีขอบเขตที่นี่ 100% ถูกต้อง แต่ตัวแทนของวิธีการของเรา และเพียงพอสำหรับวัตถุประสงค์ของฉันที่นี่, ซึ่งจะอธิบายอะไรต้องพิจารณาให้ มีประสิทธิภาพ"" แนะนำของมอสที่จะตั้งค่าไคลเอนต์อย่างลงเส้นทองยอมรับมอสทั้งหมด.

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

อะไรไม่ได้เราแนะนำ และเหตุผล?

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

ได้พบจึงยากที่จะอธิบายชนิดของเนื้อหา โดยไม่มีภาพช่วย. เทคนิคเพิ่มเติมพื้นสามารถเดินออกไปจากการสนทนาเกี่ยวกับเนื้อหาชนิดเมื่อของ CT ไว้ในฐานข้อมูล. "A CT มีลักษณะคล้ายกับตารางฐานข้อมูล, มีคอลัมน์ และกำหนดคอลัมน์ในชนิดข้อมูล, แต่ชนิดข้อมูล CT มีมากกว่าวันละเรื่องจำนวนเต็ม, แต่ยัง "ทางเลือก" และการ "ค้นหา" และเช่น" เราสามารถพูดคุยเกี่ยวกับ "ขยาย" ชนิดเนื้อหา, เหมือนหนึ่งสามารถสืบทอดงานจากคลาสพื้นฐานภาษาเชิงวัตถุ. แต่ ไม่เห็นประโยชน์สำหรับบุคคล admin กรมขนส่งที่มีเบื้องหลังทางเทคนิคไม่. เช่น, เกือบทุกคนที่สำคัญในการไวร์เลสมอส.

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

นี้นำเราไปสู่สถานที่เชื่อมโยงไปถึงปัจจุบัน และมีประสิทธิภาพเพื่อให้ไกลที่สุดของเรา: ไซต์ sandbox มอสส์ถูกกำหนดค่าให้แสดงคุณลักษณะเหล่านี้.

การใช้ไซต์การ sandbox, เราแสดงให้เห็นถึง:

  • ชนิดเนื้อหา:
    • สร้าง CT ที่ มีชนิดข้อมูลหลายชนิด (ข้อความ, วัน, ทางเลือก, บูลีน, การค้นหา, ฯลฯ).
    • ขยายตัว CT ด้วย CT ใหม่ที่ยึดหลัก.
    • ค้นหาเอกสารโดยใช้ CT metadata.
  • ไลบรารีเอกสาร:
    • เชื่อมโยง CT เดียวกับรี.
    • เกิดอะไรขึ้นเมื่อเราอัพโหลดเอกสารไปที่ไลบรารี?
    • ประกอบของ CT หลายไลบรารีเอกสาร.
    • เกิดอะไรขึ้นเมื่อเราอัพโหลดเอกสารไปที่ไลบรารี?
    • กรองและเรียงลำดับผ่านคอลัมน์ใน lib เอกสาร.
    • มุมมองไลบรารีเอกสาร:
      • การเรียงลำดับ
      • การจัดกลุ่ม
      • "รายการด่วน" (มุมมองแผ่นข้อมูล)
      • "ข้อมูล untagged" (จะช่วยเหลือ ด้วยการโยกย้ายมอสส์จากแหล่งเนื้อหาอื่น ๆ; เพิ่มเติมด้านล่างนี้).

ไซต์ Sandbox:

เราออกแบบเว็บไซต์ของเรา sandbox เป็น ลักษณะถาวรในสภาพแวดล้อมการพัฒนาที่จะใช้สำหรับวัตถุประสงค์การฝึกอบรมยาวหลังจากเราเสร็จสิ้นโครงการ และรวมสิ่งประดิษฐ์ต่าง ๆ ตามที่อธิบายไว้:

ชนิดเนื้อหา:

เรากำหนดชนิดเนื้อหาต่อไปนี้: ใบแจ้งหนี้, ใบสั่งซื้อ, บริการใบแจ้งหนี้.

เราเลือกสั่งซื้อและใบแจ้งหนี้เนื่องจากพวกเขาจะเกลียดชังน้อยภายใต้
ยืนเอนทิตี. ทุกคนในธุรกิจเข้าใจว่าใบแจ้งหนี้ต้องชำระเงินในการ ลูกค้า สำหรับการ ยอดเงิน ออกในบาง วัน จะต้องจ่ายตามบาง เงื่อนไขการชำระเงิน. นี้นำไปสู่คำจำกัดความธรรมชาติของ CT ซึ่งเราเรียกว่า "ใบแจ้งหนี้การฝึกอบรม" (จากใบแจ้งหนี้ประเภทอื่น ๆ). ในทำนองเดียวกันได้มีกำหนดใบสั่งซื้อ. นอกจากนี้เรายังสร้าง "ฝึกอบรมบริการใบ" โดยการสร้าง CT ใหม่ที่ยึดตามอินวอยซ์ฝึกอบรม"" CT และเพิ่มเพียงหนึ่งคอลัมน์, "บริการ".

กับข้างต้น, เราสามารถตอนนี้แสดงให้เห็นถึงบางคุณลักษณะที่สำคัญของของ CT โดยไม่ได้รับ bogged ลงพยายามอธิบายแนวคิดนามธรรมเป็นครั้งแรก; ทุกคนแล้วเข้าใจสิ่งที่เราหมายถึง โดย "ใบแจ้งหนี้" และ "ใบสั่งซื้อ" และสามารถเน้นกลศาสตร์ของ CT จะแทนตัวเอง.

รายการที่กำหนดเอง:

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

เราสร้างรายการกำหนดเองเหมือนกับ "ผู้จัดการ" สำหรับใบสั่งซื้อ"" CT.

ไลบรารีเอกสาร:

เราสร้างไลบรารีเอกสารสอง: "ใบแจ้งหนี้" และ "ผสมเอกสาร".

เรากำหนดค่าไลบรารีเอกสารใบแจ้งหนี้การจัดการเอกสารเฉพาะชนิด CT "วอยซ์".

เรากำหนด "ผสมเอกสาร" ไลบรารีการจัดการสามของ CT ทั้งหมด.

สร้างมุมมองต่าง ๆ ที่เรียงลำดับ, กรอง, แผ่นงานข้อมูลและการจัดกลุ่ม.

ค้นหา:

เรากำหนดคุณสมบัติจัดการใหม่สอง และแมปไปยังหมายเลขใบแจ้งหนี้และลูกค้า.

เราสร้างไซต์ใหม่ล่วงหน้ากำหนดเองค้นหา และปรับปรุงเพื่อให้ผู้ใช้ต้องการค้นหา "ใบแจ้งหนี้" ใช้แมปคุณสมบัติสอง.

แก้ไข XSLT เพื่อให้หมายเลขใบแจ้งหนี้และลูกค้า, เมื่อนำเสนอ, ปรากฏในตาราง HTML ในสีสดใส. วัตถุประสงค์ที่นี่คือการ แสดงให้เห็นว่า รูปแบบดังกล่าวได้.

ใส่ทั้งหมดเข้าด้วยกัน:

เราจัดให้สำหรับผู้ใช้หลักการมีส่วนร่วมในการสาธิต.

เราทำตามสคริปต์นี้ง่าย:

  1. อธิบายความหมายและวัตถุประสงค์ของการ CT, ใช้ใบแจ้งหนี้และใบสั่งซื้อเป็นตัวอย่าง.
  2. แสดงคำนิยาม CT แจ้งหนี้ขณะพร้อมมั่นใจได้ว่า พวกเขาไม่จำเป็นต้องใช้ที่หน้าจอตัวเอง, เพียงรับแนวคิด.
  3. ไปที่ไลบรารีเอกสารใบแจ้งหนี้.
  4. อัปโหลดเอกสาร.
  5. แสดงให้เห็นว่า ลูกค้าหล่นจริง ๆ มาจากรายการที่กำหนดเอง.
  6. เพิ่มลูกค้าใหม่รายชื่อลูกค้า และจากนั้น ปรับปรุงข้อมูลเมตาของใบแจ้งหนี้ล่าสุดอัพโหลดกับลูกค้าสร้างขึ้นใหม่.
  7. สลับกับ "ผสมเอกสาร" ไลบรารีและอัปโหลดเอกสาร. อธิบายวิธีการระบบแสดงพร้อมท์สำหรับชนิดเอกสาร.
  8. ไปกลับไปยังไลบรารีเอกสารใบแจ้งหนี้และแสดงวิธีการคลิกที่ชื่อคอลัมน์เปลี่ยนแปลงลำดับการจัดเรียง.
  9. แสดงให้เห็นถึงการกรองระดับคอลัมน์.
  10. แสดงมุมมองต่าง ๆ ที่เรียงลำดับหลายระดับ, กรอง และจัดกลุ่ม.
  11. แสดงมุมมองแผ่นข้อมูล.
  12. อธิบายวัตถุประสงค์ของการ "untagged เอกสาร" ดู.
  13. สลับไปยังการค้นหาขั้นสูงที่กำหนดเอง.
  14. โดยขณะนี้, เพิ่งอัพโหลดเอกสารควรถูกตระเวน และดัชนี, เพื่อ ทำการค้นหาที่แสดงให้เห็นถึงความสามารถในการค้นหาใบแจ้งหนี้ที่ผ่านคุณสมบัติถูกแมป.
  15. เราแสดงให้เห็นถึงความแตกต่างระหว่างการค้นหาผ่านเทียบกับคุณสมบัติที่ถูกแมป. เพียงค้นหาข้อความ.

ณ จุดนี้, เราจะทำน้อย ด้วยการสาธิต. ดูเหมือนว่าจะเกี่ยวกับ 30 ถึง 45 นาที, ขึ้นอยู่กับจำนวนคำถามคนถาม.

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

โดยสรุป:

เราได้สร้างสภาพแวดล้อมการ sandbox ที่เราสามารถใช้เพื่อแสดงให้เห็นถึงคุณลักษณะบางมอหลักอุทธรณ์มีทั่วทั้งองค์กร.

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

ห่างจากผู้ใช้ทางธุรกิจรอบผลงานด้วย "การบ้าน" ในรูปแบบของเอกสาร excel ที่จะตอนนี้เชี่ยวชาญการกรอก และใช้สำหรับชนิดเนื้อหาของตนเองก่อนตัดออก.

ขั้นตอนสุดท้าย, ขณะที่เราทำตัวอย่างช่วงเวลา, สมาชิกในทีมของลูกค้าตัวเองเป็นมากขึ้นสามารถยก, ทำการสาธิตของตัวเอง และโดยทั่วไปเพิ่มส่วนของเราทำงานในเรื่องที่ซับซ้อนมากขึ้น, เช่นระบบโลก, ลำดับงานที่ซับซ้อน, BDC และเช่น.

มอส: ตัวอย่างหน้าที่ – ชนิดข้อมูลที่กำหนดเอง

สถานการณ์ของธุรกิจ:

งานทั่วทั้งองค์กรของมอสสำหรับบริษัทผู้ผลิตด้วย 30+ ไซต์และแผนกของบริษัทกี่โหล.

วัตถุประสงค์ทางธุรกิจ:

แม้ มีความหลากหลายของกลุ่มธุรกิจ (แผนก, สถานที่เก็บ, ฯลฯ), ควรเก็บข้อมูลในระดับสากล. ตัวอย่าง, รายการหลักเชื่อถือของตำแหน่งทางกายภาพทั้งหมดของบริษัท (เช่น. ผลิตสิ่งอำนวยความสะดวก, ที่ตั้งคลังสินค้า, สำนักงานขาย) ควรเก็บในสถานที่กลาง.

ปัญหาทางเทคนิค:

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

แต่น่าเสียดาย, ชนิดข้อมูลการค้นหาต้องเข้าถึงแหล่งที่มารายการ "ท้อง" หมายความ ว่า รายการของเราเชื่อถือไม่สามารถขยายไซต์คอลเลกชัน.

ด้านเทคนิค:

ใช้ชนิดข้อมูลที่กำหนดเองใหม่ดำเนินการตาม SPField และแสดงเป็น DropDownList ใน UI ListItems สร้างจากรายการ WSS หลัก.

เราได้สร้างชุดของไซต์ใหม่เรียกว่า "http://localhost/EnterpriseData". มี, เราสร้างรายการแบบกำหนดเองที่ชื่อ "ที่ตั้งขององค์กร". รายการนี้ใช้เพียงชื่อมาตรฐาน "เรื่อง" ฟิลด์จะประกอบด้วยรายการของที่ตั้งของบริษัทจริง.

หนึ่งดังต่อไปนี้ไม่ต่อเนื่องหลายขั้นตอนเพื่อสร้างชนิดข้อมูลที่กำหนดเองใน WSS. พวกเขาจะ:

  1. กำหนดคลาสซึ่งสืบทอดมาจาก SPField (หนึ่งอาจมาจากฟิลด์อื่น ๆ ถ้าจำเป็น).

นี่คือรหัสที่:

สาธารณะ คลาส XYZZYCorporateLocationField : SPFieldText
{
สาธารณะ XYZZYCorporateLocationField
(SPFieldCollection เขตข้อมูล, สายอักขระ typeName, สายอักขระ displayName)
: ฐาน(เขตข้อมูล, typeName, displayName) { }

สาธารณะ XYZZYCorporateLocationField
(SPFieldCollection เขตข้อมูล, สายอักขระ displayName)
: ฐาน(เขตข้อมูล, displayName) { }

สาธารณะ การแทน BaseFieldControl FieldRenderingControl
{
รับ
{
BaseFieldControl การควบคุม = ใหม่ XYZZYCorporateLocationFieldControl();
ควบคุม ชื่อเขตข้อมูล = นี้.InternalName;
เที่ยวกลับ ควบคุม;
} //รับ
} // fieldrenderingcontrol

สาธารณะ การแทน สายอักขระ GetValidatedString(วัตถุ ค่า)
{
ถ้า (นี้.ต้องระบุ || ค่า ToString().เท่ากับ(สายอักขระ.ว่างเปล่า))
{
โยน ใหม่ SPFieldValidationException ("กรมไม่กำหนดให้");
}
เที่ยวกลับ ฐาน.GetValidatedString(ค่า);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. กำหนดคลาสอื่นที่สืบทอดมาจากตัวควบคุมเขตข้อมูลพื้นฐาน, เช่นใน:

สาธารณะ คลาส XYZZYCorporateLocationFieldControl : BaseFieldControl
{
ได้รับการป้องกัน DropDownList XYZZYCorporateLocationSelector;

ได้รับการป้องกัน การแทน สายอักขระ DefaultTemplateName
{
รับ
{
เที่ยวกลับ "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

สาธารณะ การแทน วัตถุ ค่า
{
รับ
{
EnsureChildControls();
เที่ยวกลับ นี้.XYZZYCorporateLocationSelector SelectedValue;
} // รับ
ชุด
{
EnsureChildControls();
นี้.XYZZYCorporateLocationSelector.SelectedValue = (สายอักขระ)นี้.ItemFieldValue;
} // ชุด
} // แทนวัตถุค่า

ได้รับการป้องกัน การแทน โมฆะ CreateChildControls()
{

ถ้า (นี้.ฟิลด์== null || นี้.ControlMode == SPControlMode.จอแสดงผล)
เที่ยวกลับ;

ฐาน.CreateChildControls();

นี้.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer FindControl("XYZZYCorporateLocationSelector");

ถ้า (นี้.XYZZYCorporateLocationSelector == null)
โยน ใหม่ ข้อยกเว้น("ข้อผิดพลาด: ไม่สามารถโหลด ASCX แฟ้ม!");

ถ้า (!นี้.หน้า IsPostBack)
{

โดยใช้ (SPSite ไซต์ = ใหม่ SPSite("http://localhost/enterprisedata"))
{
โดยใช้ (SPWeb เว็บไซต์ = OpenWeb())
{

Splist.update() currentList =เว็บ รายการ["ตำแหน่งขององค์กร"];

foreach (SPItem XYZZYCorporateLocation ใน currentList.Items)
{
ถ้า (XYZZYCorporateLocation[ชื่อเรื่อง""] == null) « « «;

สายอักขระ theTitle;
theTitle = XYZZYCorporateLocation[ชื่อเรื่อง""].ToString();

นี้.XYZZYCorporateLocationSelector.Items.Add
(ใหม่ ListItem(theTitle, theTitle));

} // foreach

} // ใช้เว็บ spweb = site.openweb()
} // ใช้ spsite ไซต์ = spsite ใหม่("http://localhost/enterprisedata")

} // ถ้า ไม่มีการ postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

รหัสข้างต้นใช้ตรรกะสำหรับกำลังเติมข้อมูล DropDownList มีค่าจากรายการแบบกำหนดเอง WSS อยู่โดยทั่วไป http://localhost/enterprisedata และชื่อ "แผนกขององค์กร".

ฉันกำหนดชั้นเรียนทั้งในไฟล์เดียว.cs, คอมไพล์มัน และใส่ลงใน GAC การ (ต้องแข็งแรง, แน่นอน).

  1. ใช้แม่แบบตัวควบคุม (.ascx) ดังที่แสดง:

<%@ ควบคุม ภาษา= "C#" สืบทอด="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,รุ่น = 12.0.0.0 วัฒนธรรม =เป็นกลาง,PublicKeyToken = 71e9bce111e9429c" compilationMode= "เสมอ" %>
<%
@ การลงทะเบียน Tagprefix= "wssawc" Namespace="Microsoft.SharePoint.WebControls" แอสเซมบลี="Microsoft.SharePoint, รุ่น = 12.0.0.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 71e9bce111e9429c" %> <%@ การลงทะเบียน Tagprefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" แอสเซมบลี="Microsoft.SharePoint, รุ่น = 12.0.0.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID= "XYZZYCorporateLocationFieldControl" runat= "เซิร์ฟเวอร์">
<แม่แบบ>
<asp:DropDownList ID= "XYZZYCorporateLocationSelector" runat= "เซิร์ฟเวอร์" />
</แม่แบบ>
</
SharePoint:RenderingTemplate>

ดังกล่าวจะถูกบันทึกเป็น c:\โปรแกรม filescommon filesmicrosoft sharedweb เซิร์ฟเวอร์ extensions12controltemplates.

  1. ขั้นตอนสุดท้าย, เราสร้างแฟ้ม XML ที่จะบันทึกลงใน... 12XML ไดเรกทอรี. นี่คือ CAML ที่กำหนดชนิดของข้อมูลที่กำหนดเองและตัวของฉัน, ลักษณะเช่นนี้:

<?xml เวอร์ชัน="1.0" การเข้ารหัส="utf-8" ?>
<
FieldTypes>
<
FieldType>
<
ฟิลด์ ชื่อ="TypeName">CorporateLocations</ฟิลด์>
<
ฟิลด์ ชื่อ="ParentType">ข้อความ</ฟิลด์>
<
ฟิลด์ ชื่อ="TypeDisplayName">ที่ตั้งบริษัท</ฟิลด์>
<
ฟิลด์ ชื่อ="TypeShortDescription">ตำแหน่ง XYZZY องค์กรทั้งหมดรวมทั้งสิ่งอำนวยความสะดวกในการผลิต หรืออื่น ๆ.</ฟิลด์>
<
ฟิลด์ ชื่อ="UserCreatable">อย่างแท้จริง</ฟิลด์>
<
ฟิลด์ ชื่อ="ShowInListCreate">อย่างแท้จริง</ฟิลด์>
<
ฟิลด์ ชื่อ="ShowInDocumentLibraryCreate">อย่างแท้จริง</ฟิลด์>
<
ฟิลด์ ชื่อ="ShowInSurveyCreate">อย่างแท้จริง</ฟิลด์>
<
ฟิลด์ ชื่อ="ShowInColumnTemplateCreate">อย่างแท้จริง</ฟิลด์>
<
ฟิลด์ ชื่อ="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, รุ่น = 1.0.0.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = b0b19e85410990c4</ฟิลด์>
<
RenderPattern ชื่อ="DisplayPattern">
<
สวิตช์>
<
Expr>
<
คอลัมน์ />
</
Expr>

<กรณี ค่า=""/>

<ค่าเริ่มต้น>
<
HTML>
<![CDATA[
<ครอบคลุมลักษณะ = "สี:สีแดง"><b>]]>
</
HTML>

<
คอลัมน์ SubColumnNumber="0" HTMLEncode="อย่างแท้จริง"/>

<HTML><![CDATA[</b></ขยาย>]]></HTML>

</
ค่าเริ่มต้น>
</
สวิตช์>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
แฟ้ม XML นี้เพิ่มชนิดข้อมูลที่กำหนดเอง WSS "ไลบรารี" ตรงนี้ขึ้นกับการ GAC มีแอสเซมบลี.

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

มอส: ปรับปรุงรายการที่กำหนดเอง

มีหลายตัวอย่างของการปรับปรุงรายการที่กำหนดเองผ่าน SDK. นี่คือยังอื่น.

ปัญหาธุรกิจ: ฟอร์ม InfoPath ได้รับการออกแบบที่ช่วยให้ผู้ใช้ป้อนออนไลน์ใบขอซื้อ. ใบ PO เลขควรลำดับดั้งเดิมตามค่าจำนวนเต็ม และคำนวณโดยอัตโนมัติ.

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

ด้านเทคนิค: สร้างบริการเว็บที่เข้าถึงได้ โดยไคลเอ็นต์ InfoPath. บริการเว็บการส่งกลับค่าหมายเลขใบขอซื้อถัดไปกลับ และปรับปรุงค่าของรายการ.

บทเรียนที่เรียนรู้:

  • เมื่อมีการเพิ่มบริการเว็บนี้เป็นแหล่งข้อมูลให้กับฟอร์ม InfoPath, ผมพบว่ามันจำเป็นต้องแปลงเป็น udc และเก็บลงในไลบรารีการเชื่อมต่อข้อมูล.
  • ยังพบว่าจำเป็นต้องเปิดใช้งานสคริปต์ข้ามโดเมนผ่านการจัดการบริการศูนย์กลาง // จัดการโปรแกรมประยุกต์ // ตั้งค่าคอนฟิกเซิร์ฟเวอร์ของฟอร์ม.
  • ครั้งแรกแบบพยายามที่จะเข้าถึงบริการเว็บ, ในขณะที่ใช้ และในบางโอกาส, มันจะหมดเวลา. ผมเล่นการตั้งค่าในแบบฟอร์มการกำหนดค่าเซิร์ฟเวอร์เพื่อขยายการตั้งค่าการหมดเวลา และที่ดูเหมือนจะช่วย.

รหัส:

โดยใช้ ระบบ;
โดยใช้ System.Web;
โดยใช้ System.Web.Services;
โดยใช้ System.Web.Services.Protocols;
โดยใช้ Microsoft.SharePoint;
โดยใช้ System.Configuration;

[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
สาธารณะ คลาส PoService : System.Web.Services.WebService
{
สาธารณะ PoService () {

//Uncomment บรรทัดต่อไปนี้ถ้าใช้ออกแบบส่วนประกอบ
//InitializeComponent();
}

/// <สรุป>
/// ได้รับใบ PO po เลขควบคุมรายการ sharepoint.
/// เพิ่มหมายเลข PO ในรายการ.
/// </สรุป>
/// <ส่งกลับค่า></ส่งกลับค่า>
[WebMethod]
สาธารณะ สายอักขระ GetNextPoNumber()
{
สายอักขระ SpPoControlSiteName; // ชื่อของมอไซต์จริงที่เป็นโฮสต์ให้กับรายการควบคุม PO.
สายอักขระ SpPoControlListName; // ชื่อของรายการมอจริงที่ประกอบด้วยการควบคุมปอ.

SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();

สายอักขระ nextPoReqNumber = "xyzzy";

โดยใช้ (SPSite ไซต์ = ใหม่ SPSite(SpPoControlSiteName))
{
โดยใช้ (SPWeb เว็บไซต์ = OpenWeb())
{

Splist.update() currentList =เว็บ รายการ[SpPoControlListName];

foreach (SPItem controlItem ใน currentList.Items)
{

ถ้า (((สายอักขระ)controlItem["ControlField"]).เท่ากับ("NextPoNumber"))
{
nextPoReqNumber = (สายอักขระ)controlItem["ControlValue"];

int int_nextPoReqNumber;
int_nextPoReqNumber = แปลง.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}

} // ค้นหา, การอ่าน และการปรับปรุงหมายเลข PO ในรายการ.


} // ใช้เว็บ spweb = site.openweb()
} // ใช้ spsite ไซต์ = spsite ใหม่("http://localhost/mizuho")

เที่ยวกลับ nextPoReqNumber;

}
}