สถานการณ์ของธุรกิจ:
งานทั่วทั้งองค์กรของมอสสำหรับบริษัทผู้ผลิตด้วย 30+ ไซต์และแผนกของบริษัทกี่โหล.
วัตถุประสงค์ทางธุรกิจ:
แม้ มีความหลากหลายของกลุ่มธุรกิจ (แผนก, สถานที่เก็บ, ฯลฯ), ควรเก็บข้อมูลในระดับสากล. ตัวอย่าง, รายการหลักเชื่อถือของตำแหน่งทางกายภาพทั้งหมดของบริษัท (เช่น. ผลิตสิ่งอำนวยความสะดวก, ที่ตั้งคลังสินค้า, สำนักงานขาย) ควรเก็บในสถานที่กลาง.
ปัญหาทางเทคนิค:
ระบบองค์กรที่ดำเนินการโดยใช้หลายเว็บไซต์. เราจะชอบสร้างรายการไทม์ที่ตั้งทางกายภาพใน WSS รายการกำหนดเอง. แล้ว, เมื่อเราต้องมีคอลัมน์ในชนิดเนื้อหา (หรือเพิ่มคอลัมน์ในไลบรารีเอกสารหรือรายการ) ที่อยู่ที่ตั้งบริษัท, เราจะสร้างคอลัมน์โดยใช้การค้นหา"" ชนิดข้อมูลและชี้ไปยังรายการหลัก.
แต่น่าเสียดาย, ชนิดข้อมูลการค้นหาต้องเข้าถึงแหล่งที่มารายการ "ท้อง" หมายความ ว่า รายการของเราเชื่อถือไม่สามารถขยายไซต์คอลเลกชัน.
ด้านเทคนิค:
ใช้ชนิดข้อมูลที่กำหนดเองใหม่ดำเนินการตาม SPField และแสดงเป็น DropDownList ใน UI ListItems สร้างจากรายการ WSS หลัก.
เราได้สร้างชุดของไซต์ใหม่เรียกว่า "http://localhost/EnterpriseData". มี, เราสร้างรายการแบบกำหนดเองที่ชื่อ "ที่ตั้งขององค์กร". รายการนี้ใช้เพียงชื่อมาตรฐาน "เรื่อง" ฟิลด์จะประกอบด้วยรายการของที่ตั้งของบริษัทจริง.
หนึ่งดังต่อไปนี้ไม่ต่อเนื่องหลายขั้นตอนเพื่อสร้างชนิดข้อมูลที่กำหนดเองใน WSS. พวกเขาจะ:
- กำหนดคลาสซึ่งสืบทอดมาจาก 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
- กำหนดคลาสอื่นที่สืบทอดมาจากตัวควบคุมเขตข้อมูลพื้นฐาน, เช่นใน:
สาธารณะ คลาส 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 การ (ต้องแข็งแรง, แน่นอน).
-
ใช้แม่แบบตัวควบคุม (.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.
- ขั้นตอนสุดท้าย, เราสร้างแฟ้ม 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 บนเซิร์ฟเวอร์และควรเริ่มต้นทั้งหมดที่ทำงานดี.
ใช้ System.Web.UI;
ใช้ System.Web.UI.WebControls;
ฉันพยายามใช้โซลูชันของคุณ. อย่างไรก็ตามฉันแทน DropDownList, มีตัวเลือกสำหรับการ DropDownChoiceList เท่านั้น. คุณบังเอิญรู้วิธีการเพิ่มรายการ DropDownChoiceList? เราใช้ SharePoint 2007 SP1 และ Visual Studio 2005 SP1.