ลงกับการลงโฆษณาขายรถในเขตเบอร์เกน, NJ ในคืนวันอาทิตย์. ฉันได้รับการสอบถามผ่านทางอีเมล์หลายมิช้ามินาน และปิดการเจรจากับคนในคืนวันอังคาร.
เกือบจะดีเกินจริง …
ลงกับการลงโฆษณาขายรถในเขตเบอร์เกน, NJ ในคืนวันอาทิตย์. ฉันได้รับการสอบถามผ่านทางอีเมล์หลายมิช้ามินาน และปิดการเจรจากับคนในคืนวันอังคาร.
เกือบจะดีเกินจริง …
ฉันไม่ปรับเปลี่ยนการค้นหาขั้นสูง XSLT บ่อย, ดังนั้นจึงดูเหมือนว่าผมกำลังปีนเนินเขาขนาดเล็กทุกครั้ง.
นี่คือบทเรียนของฉันใหม่ล่าสุด: กรณีเรื่องเมื่ออ้างอิงคอลัมน์. ในการค้นหาขั้นสูงของฉัน, มีคอลัมน์ที่กำหนดไว้เช่นนี้:
<ราก xmlns:xsi="http://www.w3.org/ 2001/XMLSchema-อินสแตนซ์">
<คอลัมน์>
<คอลัมน์ ชื่อ="GafTrainingInvoiceNumber" />
<คอลัมน์ ชื่อ="GafTrainingInvoiceLocation" />
<คอลัมน์ ชื่อ="WorkId"/>
<คอลัมน์ ชื่อ="อันดับ"/>
<คอลัมน์ ชื่อ="ชื่อเรื่อง"/>
<คอลัมน์ ชื่อ="ผู้เขียน"/>
<คอลัมน์ ชื่อ="ขนาด"/>
<คอลัมน์ ชื่อ="เส้นทาง"/>
<คอลัมน์ ชื่อ="คำอธิบาย"/>
<คอลัมน์ ชื่อ="เขียน"/>
<คอลัมน์ ชื่อ="SiteName"/>
<คอลัมน์ ชื่อ="CollapsingStatus"/>
<คอลัมน์ ชื่อ="HitHighlightedSummary"/>
<คอลัมน์ ชื่อ="HitHighlightedProperties"/>
<คอลัมน์ ชื่อ="ContentClass"/>
<คอลัมน์ ชื่อ="IsDocument"/>
<คอลัมน์ ชื่อ="PictureThumbnailURL"/>
</คอลัมน์>
</ราก>
XLST ที่แสดงที่ตั้งหมายเลขและใบแจ้งหนี้ใบแจ้งหนี้ได้:
<p>
หมายเลขอินวอยซ์ของการฝึกอบรม: <xsl:ค่าของ เลือก="GafTrainingInvoiceNumber"/>
<br></br>
สถานฝึกอบรมใบแจ้งหนี้: <xsl:ค่าของ เลือก="GafTrainingInvoiceLocation"/>
</p>
อย่างไรก็ตาม, เลือกมีการอ้างอิงคุณสมบัติในทุกกรณี, เช่นใน:
<p>
หมายเลขอินวอยซ์ของการฝึกอบรม: <xsl:ค่าของ เลือก="gaftraininginvoicenumber"/>
<br></br>
สถานฝึกอบรมใบแจ้งหนี้: <xsl:ค่าของ เลือก="gaftraininginvoicelocation"/>
</p>
จนกว่าฉันแก้ไขที่, ผลการค้นหาพบป้ายชื่อ (อาทิ. "การฝึกอบรมหมายเลข") แต่ไม่มีข้อมูล.
สถานการณ์ของธุรกิจ:
งานทั่วทั้งองค์กรของมอสสำหรับบริษัทผู้ผลิตด้วย 30+ ไซต์และแผนกของบริษัทกี่โหล.
วัตถุประสงค์ทางธุรกิจ:
แม้ มีความหลากหลายของกลุ่มธุรกิจ (แผนก, สถานที่เก็บ, ฯลฯ), ควรเก็บข้อมูลในระดับสากล. ตัวอย่าง, รายการหลักเชื่อถือของตำแหน่งทางกายภาพทั้งหมดของบริษัท (เช่น. ผลิตสิ่งอำนวยความสะดวก, ที่ตั้งคลังสินค้า, สำนักงานขาย) ควรเก็บในสถานที่กลาง.
ปัญหาทางเทคนิค:
ระบบองค์กรที่ดำเนินการโดยใช้หลายเว็บไซต์. เราจะชอบสร้างรายการไทม์ที่ตั้งทางกายภาพใน WSS รายการกำหนดเอง. แล้ว, เมื่อเราต้องมีคอลัมน์ในชนิดเนื้อหา (หรือเพิ่มคอลัมน์ในไลบรารีเอกสารหรือรายการ) ที่อยู่ที่ตั้งบริษัท, เราจะสร้างคอลัมน์โดยใช้การค้นหา"" ชนิดข้อมูลและชี้ไปยังรายการหลัก.
แต่น่าเสียดาย, ชนิดข้อมูลการค้นหาต้องเข้าถึงแหล่งที่มารายการ "ท้อง" หมายความ ว่า รายการของเราเชื่อถือไม่สามารถขยายไซต์คอลเลกชัน.
ด้านเทคนิค:
ใช้ชนิดข้อมูลที่กำหนดเองใหม่ดำเนินการตาม SPField และแสดงเป็น DropDownList ใน UI ListItems สร้างจากรายการ WSS หลัก.
เราได้สร้างชุดของไซต์ใหม่เรียกว่า "http://localhost/EnterpriseData". มี, เราสร้างรายการแบบกำหนดเองที่ชื่อ "ที่ตั้งขององค์กร". รายการนี้ใช้เพียงชื่อมาตรฐาน "เรื่อง" ฟิลด์จะประกอบด้วยรายการของที่ตั้งของบริษัทจริง.
หนึ่งดังต่อไปนี้ไม่ต่อเนื่องหลายขั้นตอนเพื่อสร้างชนิดข้อมูลที่กำหนดเองใน WSS. พวกเขาจะ:
นี่คือรหัสที่:
สาธารณะ คลาส 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 การ (ต้องแข็งแรง, แน่นอน).
<%@ ควบคุม ภาษา= "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 เวอร์ชัน="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 บนเซิร์ฟเวอร์และควรเริ่มต้นทั้งหมดที่ทำงานดี.
ประเภทเพิ่มเติม: CAML
ที่นี่ มีการลงรายการบัญชีที่ดี โดยเพื่อนชื่อ "เครก" ในเทคนิคในการค้นหาข้อกำหนด CAML สำหรับฟิลด์ชนิดเนื้อหาที่ใช้ออกข้อกำหนดของสดจริงจากไซต์.
ลงเขากล่าวมันทั้งหมด. สังเขป:
ประเภทเพิ่มเติม: Visual Studio 2005
ให้ประโยชน์ intellisense สำหรับคุณลักษณะ, องค์ประกอบ, ฯลฯ ในภาพสตูดิโอ 2005:
ขณะนี้มีการเปิดใช้งาน Intellisense สำหรับเอกสาร XML นั้น.
ดู ที่นี่ สำหรับข้อมูลเพิ่มเติม ในเรื่องนี้ และ สำหรับคำแนะนำเกี่ยวกับวิธีการเชื่อมโยง WSS intellisense กับแฟ้ม XML ใด ๆ โดยอัตโนมัติ.
ผมใช้เวลา และผ่านการทดสอบดังกล่าวข้างต้นนี้. พบสอบยาก และยุติธรรม.
มีการขาดแคลนข้อมูลนี้สอบบนเว็บแบบย่อ. ผมไม่แน่ใจว่าทำไม.
ได้แน่นอนจะไม่รับลงในรายละเอียดใด ๆ เกี่ยวกับการสอบที่ผมเอา, แต่ฉันคิดว่า ฉันสามารถพูดได้อย่างปลอดภัยต่อไปนี้:
แสดงรายการสิ่งที่คุณต้องรู้ผ่านการสอบและ, IMO, ถูกต้องมาก.
</สิ้นสุด>สมัครสมาชิกไปยังบล็อกของฉัน!
ประเภทเพิ่มเติม: InfoPath
สรุป: มี InfoPath 2007 ฟอร์มจัดวางเซิร์ฟเวอร์ MOSS แสดงรายการแบบหล่นลงของผู้ขายที่เชื่อมโยงกับรายการมอสเอง. เมื่อเลือกผู้จัดจำหน่าย, กฎกำหนดค่าฟิลด์ที่กำมือของเขตข้อมูลข้อความเช่นชื่อพนักงานขาย, ที่อยู่, เมือง, รัฐ, ไปรษณีย์และโทรศัพท์. ประสิทธิภาพเป็นน่ากลัว. เราสังเกตว่า ประสิทธิภาพลม (แฟชั่นไม่ใช่เชิงเส้น) สำหรับแต่ละฟิลด์เพิ่มเติม เราปรับปรุงด้วยวิธีนี้. เช่น, ถ้าเราเพียง ปรับปรุงชื่อตัวแทนขาย, มันต้องใช้เวลา [x] จำนวนเวลา. ถ้าเราปรับปรุงตัวแทนขาย, address1, address2, เมือง, รัฐ, ไปรษณีย์, มันต้องใช้เวลา 10 เวลาอีกต่อไป.
โซลูชั่น: เขียนเว็บเซอร์วิส (สามารถพบรหัสตัวอย่าง ที่นี่) ที่ถูกส่งผ่านชื่อของผู้จัดจำหน่าย และคืนกลับรายละเอียดผู้จัดจำหน่าย. แล้ว, กำหนดฟิลด์วิธีนี้. แม้ว่าดูเหมือนเกินไปนี้ ช้า, มีความแตกต่างไม่ discernable ประสิทธิภาพเมื่อเรากำหนดให้ 1 ฟิลด์เมื่อเทียบกับ 8 เขตข้อมูล. เป็นโบนัส, ผู้ใช้ได้รับเย็น "ติดต่อเซิร์ฟเวอร์" Cylon ผลผลในขณะที่พวกเขารอแบบฟอร์ม การเรียกใช้บริการ.
โปรแกรมปรับปรุง: เราไม่เคยพิจารณาสาเหตุหลักของปัญหานี้และมันไม่เคยผิวอีกครั้ง.
เราสังเกตเห็นในระหว่างการดำเนินการพัฒนาเว็บไซต์นั้นทันที, มีผู้ใช้สองคนสามารถเข้าถึงไซต์คอลเลกชัน. บัญชีผู้ใช้เหล่านั้นสามารถรับรองความถูกต้องไปยังไซต์หลัก, แต่ เมื่อพยายามเข้าถึงคอลเลกชันของไซต์ที่เฉพาะเจาะจง, พวกเขาเพิ่งได้รับหน้าจอว่าง. ไม่มีข้อผิดพลาดที่แสดงอยู่, เพียงแค่สีขาวหน้าเปล่า.
เราเข้าสู่ระบบในฐานะ admin เป็นคอลเลกชันของไซต์ และพยายามเพิ่มผู้ใช้เหล่านั้นอย่างใดอย่างหนึ่งเป็น admin ของเว็บไซต์และในเวลานี้, เมื่อกด "OK", เราได้รับข้อความนี้:
เกิดข้อยกเว้น. (ข้อยกเว้นจาก hresult ใน: 0x 80020009 (DISP_E_EXCEPTION))
เราใช้เวลาบางครั้งที่ทำการวิจัยนี้ และขออภัย, ไม่ได้มากับสิ่งที่มีประโยชน์. มีบางข้อความในแฟ้มบันทึกการวินิจฉัย, แต่มันยากตรงสัมพันธ์กับปัญหานี้.
ในสุด, เราลบไซต์คอลเลกชัน และถูกสร้างขึ้นใหม่ได้และการที่แก้ไขได้.
ถ้าฉันสามารถหา สิ่งที่เกิดนี้ในอนาคต, จะปรับปรุงการลงรายการบัญชีนี้.