موس: الوظيفية مثال – نوع البيانات المخصصة

سيناريو العمل:

التنفيذ على مستوى المؤسسة للمعايير الأمنية التنفيذية الدنيا للشركة المصنعة مع 30+ مواقع وبضع عشرات من إدارات الشركات.

هدف الأعمال:

وعلى الرغم من العديد من المجموعات التجارية (الإدارات, مواقع, إلخ), ينبغي الإبقاء على بعض البيانات على الصعيد العالمي. وعلى سبيل المثال, قائمة رئيسية موثوقة لجميع المواقع الفعلية للشركة (مثلاً. مرافق التصنيع, مواقع المستودعات, مكاتب المبيعات) وينبغي أن يحتفظ في موقع مركزي.

مشكلة فنية:

تصنيف المؤسسة تم تنفيذها باستخدام مجموعات موقع متعددة. كنا نود لإنشاء قائمة موثوقة للمواقع الفعلية في قائمة WSS مخصصة. ثم, عندما كنا بحاجة إلى وجود عمود في نوع محتوى (أو إضافة عمود إلى مكتبة قائمة أو doc) يحتوي على مواقع الشركات, ونحن سوف إنشاء عمود باستخدام "بحث" نوع البيانات، وأشر إلى هذه القائمة الرئيسية.

للأسف, البحث عن أنواع بيانات يجب الوصول إلى قائمة مصدر "محلياً" بمعنى أن لدينا قائمة موثوقة لا يمكن أن تمتد مجموعات الموقع.

الحل التقني:

تنفيذ نوع بيانات مخصصة جديدة تنفذ على أساس سبفيلد وممثله DropDownList في واجهة المستخدم التي ListItems تعبئة من القائمة الرئيسية WSS.

قمنا بإنشاء مجموعة موقع جديدة تسمى "http://localhost/EnterpriseData". هناك, قمنا بإنشاء قائمة مخصصة تسمى "مواقع الشركات". يستخدم هذه القائمة مجرد عنوان "القياسية" الحقل تحتوي قائمة بمواقع الشركات الفعلية.

واحد يتبع عدة خطوات منفصلة إنشاء نوع بيانات مخصصة في WSS. وهم:

  1. تعريف فئة التي ترث من سبفيلد (واحد قد ترث حقول أخرى إذا لزم الأمر).

هنا هو رمز لذلك:

العامة فئة إكسيززيكوربوراتيلوكاتيونفيلد : سبفيلدتيكست
{
العامة إكسيززيكوربوراتيلوكاتيونفيلد
(سبفيلدكوليكشن الحقول, السلسلة typeName, السلسلة اسم العرض)
: قاعدة(الحقول, typeName, اسم العرض) { }

العامة إكسيززيكوربوراتيلوكاتيونفيلد
(سبفيلدكوليكشن الحقول, السلسلة اسم العرض)
: قاعدة(الحقول, اسم العرض) { }

العامة تجاوز باسيفيلدكونترول فيلدرينديرينجكونترول
{
الحصول على
{
باسيفيلدكونترول التحكم = الجديد إكسيززيكوربوراتيلوكاتيونفيلدكونترول();
عنصر التحكم. FieldName = وهذا.إينتيرنالنامي;
عودة عنصر التحكم;
} //الحصول على
} // فيلدرينديرينجكونترول

العامة تجاوز السلسلة جيتفاليداتيدسترينج(كائن القيمة)
{
إذا كان (وهذا.مطلوب || القيمة. ToString().يساوي(السلسلة.فارغة))
{
رمي الجديد سبفيلدفاليداتيونيكسسيبشن ("لم يتم تعيين الإدارة.");
}
عودة قاعدة.جيتفاليداتيدسترينج(القيمة);
} // جيتفاليداتيدسترينج

} // إكسيزيكوربوراتيلوكيشن

  1. تعريف فئة أخرى أن يرث من عنصر تحكم الحقل الأساسي, كما هو الحال في:

العامة فئة إكسيززيكوربوراتيلوكاتيونفيلدكونترول : باسيفيلدكونترول
{
محمية القائمة المنسدلة إكسيززيكوربوراتيلوكاتيونسيليكتور;

محمية تجاوز السلسلة ديفاولتيمبلاتينامي
{
الحصول على
{
عودة "إكسيززيكوربوراتيلوكاتيونفيلدكونترول";
}
} // ديفاولتيمبلاتينامي

العامة تجاوز كائن القيمة
{
الحصول على
{
انسوريتشيلدكونترولس();
عودة وهذا.XYZZYCorporateLocationSelector.SelectedValue;
} // الحصول على
تعيين
{
انسوريتشيلدكونترولس();
وهذا.XYZZYCorporateLocationSelector.SelectedValue = (السلسلة)وهذا.إيتيمفيلدفالوي;
} // تعيين
} // تجاوز قيمة الكائن

محمية تجاوز باطلة كريتتشيلدكونترولس()
{

إذا كان (وهذا.حقل = = null || وهذا.كونترولمودي = = سبكونترولمودي.عرض)
عودة;

قاعدة.كريتتشيلدكونترولس();

وهذا.إكسيززيكوربوراتيلوكاتيونسيليكتور =
(القائمة المنسدلة)تيمبلاتيكونتاينير. فيندكونترول("إكسيززيكوربوراتيلوكاتيونسيليكتور");

إذا كان (وهذا.إكسيززيكوربوراتيلوكاتيونسيليكتور = = null)
رمي الجديد الاستثناء("خطأ: لا يمكن تحميل. ملف ASCX!");

إذا كان (!وهذا.الصفحة IsPostBack.)
{

استخدام (SPSite الموقع = الجديد SPSite("http://localhost/انتيربريسيداتا"))
{
استخدام (SPWeb ويب = الموقع. أبنوب())
{

سبليست كورينتليست = ويب. قوائم["مواقع الشركات"];

foreach (سبيتيم إكسيزيكوربوراتيلوكيشن في currentList.Items)
{
إذا كان (إكسيزيكوربوراتيلوكيشن["عنوان"] == null) مواصلة;

السلسلة ثيتيتلي;
ثيتيتلي = إكسيزيكوربوراتيلوكيشن["عنوان"].ToString();

وهذا.XYZZYCorporateLocationSelector.Items.Add
(الجديد عنصر القائمة(ثيتيتلي, ثيتيتلي));

} // foreach

} // استخدام ويب spweb = site.openweb()
} // استخدام موقع spsite = spsite جديد("http://localhost/انتيربريسيداتا ")

} // إذا لم إعادة النشر

} // كريتتشيلدكونترولس

} // إكسيززيكوربوراتيلوكاتيونفيلدكونترول

تنفذ التعليمات البرمجية أعلاه أساسا منطق ملء 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= "وساوك" 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:رينديرينجتيمبلاتي معرف= "إكسيززيكوربوراتيلوكاتيونفيلدكونترول" runat= "الملقم">
<قالب>
<آسيا والمحيط الهادئ:القائمة المنسدلة معرف= "إكسيززيكوربوراتيلوكاتيونسيليكتور" runat= "الملقم" />
</قالب>
</
SharePoint:رينديرينجتيمبلاتي>

يتم حفظ ما ورد أعلاه في ج:\البرنامج الملفات المشتركة مايكروسوفت المشتركة الملقم extensions12controltemplates.

  1. وأخيراً, نقوم بإنشاء ملف XML حفظ إلى... 12XML الدليل. هذا هو CAML الذي يقوم بتعريف نوع البيانات المخصص لنا، وعلى سبيل المثال بلدي, يشبه هذا:

<?xml الإصدار="1.0" ترميز="الرموز العالمية لتحوير الهيئة-8" ?>
<
فيلدتيبيس>
<
FieldType>
<
حقل اسم="TypeName">كوربوراتيلوكيشنز</حقل>
<
حقل اسم="بارينتيبي">النص</حقل>
<
حقل اسم="تيبيديسبلاينامي">مواقع الشركات</حقل>
<
حقل اسم="تيبيشورتديسكريبشن">جميع مواقع الشركات XYZZY بما في ذلك مرافق التصنيع أو غيرها.</حقل>
<
حقل اسم="أوسيركريتابل">صحيح</حقل>
<
حقل اسم="شووينليستكريتي">صحيح</حقل>
<
حقل اسم="شوويندوكومينتليبراريكريتي">صحيح</حقل>
<
حقل اسم="شووينسورفيكريتي">صحيح</حقل>
<
حقل اسم="شووينكولومنتيمبلاتيكريتي">صحيح</حقل>
<
حقل اسم="فيلدتيبيكلاس">Conchango.XYZZYCorporateLocationField, إكسيززيكوربوراتيلوكاتيونفيلد, الإصدار = 1.0.0.0, الثقافة = المحايدة, PublicKeyToken = b0b19e85410990c4</حقل>
<
رينديرباتيرن اسم="ديسبلايباتيرن">
<
رمز التبديل>
<
Expr>
<
عمود />
</
Expr>

<القضية القيمة=""/>

<الافتراضي>
<
إتش تي أم ال>
<![CDATA[
<تمتد نمط = "لون:الأحمر "><ب>]]>
</
إتش تي أم ال>

<
عمود سوبكولومنومبير="0" هتملينكودي="صحيح"/>

<إتش تي أم ال><![CDATA[</ب></تمتد>]]></إتش تي أم ال>

</
الافتراضي>
</
رمز التبديل>

</
رينديرباتيرن>
</
FieldType>
</
فيلدتيبيس>
يضيف هذا الملف XML نوع البيانات المخصصة إلى WSS "مكتبة" ويطابق ذلك ضد GAC قد الجمعية.

بعد نقل جميع هذه القطع في مكانها, iisreset في الخادم، وأنه ينبغي بدء كل عمل جيد.

3 افكار عن "موس: الوظيفية مثال – نوع البيانات المخصصة

  1. Alejandro
    مرحبا بول,
    أولاً وقبل كل شيء, شكرا للمقالة, لأنها مثيرة جداً للاهتمام. سؤال واحد فقط;
    هل تعرف إذا posible تقديم بشكل صحيح من نوع حقل مخصص في طريقة عرض ورقة البيانات لقائمة?
    لأن كل نوع حقل مخصص إنشاء فإنه يظهر أنه للقراءة فقط في طريقة عرض "ورقة البيانات" (وموقع MSDN, فعلى سبيل المثال, لا يساعدني كثيرا :-S).
    بفضل
    الرد
  2. ليندسي

    وأنا في محاولة لتنفيذ الحل الخاص بك. ومع ذلك أنا بدلاً من القائمة المنسدلة, ليس لدى سوى خيار دروبدوونتشويسيليست. هل يحدث ذلك لمعرفة كيفية إضافة عناصر إلى دروبدوونتشويسيليست? أننا باستخدام SharePoint 2007 وحزمة الخدمة SP1 Visual Studio 2005 حزمة الخدمة SP1.

    الرد

اترك ردًا

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها *