وهناك العديد من الأمثلة الجيدة لتحديث قوائم مخصصة عن طريق SDK. هنا هو آخر.
المشكلة التجارية: وقد تم تصميم نموذج InfoPath أن طلبات الشراء يتيح للمستخدمين للدخول على الإنترنت. طلب بو ينبغي أن تكون أرقام التسلسل التقليدي على أساس قيم الإعداد الصحيحة وحسابها تلقائياً.
حلول الأعمال التجارية: إنشاء قائمة مخصصة طحلب يحتوي على عمودين: "كونترولفيلد" و "كونترولفالوي". قيمة العمود يحتوي على رقم طلب الشراء القادم. لاحظ أنه العام "التحكم" وتنص الاتفاقية التسمية مستقبلا مراقبة الحقول التي يمكن استخدامها حسب الحاجة.
الحل التقني: إنشاء خدمة ويب الوصول إليها من قبل عميل InfoPath. خدمة ويب تقوم بإرجاع رقم طلب الشراء القادم مرة أخرى وتحديث القيمة القائمة.
الدروس المستفادة:
- عند إضافة هذه الخدمة ويب كمصدر بيانات لنموذج InfoPath, لقد وجدت أنه من اللازم تحويله إلى udc وتخزينها في مكتبة ملفات اتصال البيانات.
- كذلك وجدت أنها ضرورية تمكين البرمجة النصية عبر مجال عن طريق إدارة الخدمات المركزية // إدارة التطبيقات // تكوين ملقم نموذج.
- في المرة الأولى حاول النموذج للوصول إلى خدمة ويب, يستغرق بعض الوقت، وفي بعض الأحيان, أن مهلة. أنا مغشوش مع الإعدادات في تكوين ملقم نموذج توسيع إعدادات المهلة، ويبدو أن ذلك يساعد.
التعليمة البرمجية:
استخدام نظام;
استخدام System.Web;
استخدام System.Web.Services;
استخدام System.Web.Services.Protocols;
استخدام Microsoft.SharePoint;
استخدام System.Configuration;
[خدمة ويب(Namespace = "http://www.conchango.com/")]
[ويبسيرفيسيبيندينج(كونفورمستو = وسيبروفيليس.BasicProfile1_1)]
العامة فئة بوسيرفيسي : System.Web.Services.خدمة ويب
{
العامة بوسيرفيسي () {
//قم بإلغاء السطر التالي في حالة استخدام المكونات المصممة
//InitializeComponent();
}
/// <موجز>
/// الحصول على رقم بو القادمة من قائمة عنصر تحكم sharepoint بو رقم.
/// زيادة رقم بو في تلك القائمة.
/// </موجز>
/// <تقوم بإرجاع></تقوم بإرجاع>
[WebMethod]
العامة السلسلة جيتنيكستبونومبير()
{
السلسلة سبوكونترولسيتينامي; // اسم الموقع موس الفعلي الذي يستضيف قائمة "التحكم بو".
السلسلة سبوكونتروليستنامي; // اسم قائمة المعايير الأمنية التنفيذية الدنيا الفعلية التي تحتوي على عنصر التحكم بو.
سبوكونترولسيتينامي = كونفيجوراتيونسيتينجس.AppSettings["بوكونتروليسثوستينجسيتي"].ToString();
سبوكونتروليستنامي = كونفيجوراتيونسيتينجس.AppSettings["بوكونتروليست"].ToString();
السلسلة نيكستبوريقنومبير = "xyzzy";
استخدام (SPSite الموقع = الجديد SPSite(سبوكونترولسيتينامي))
{
استخدام (SPWeb ويب = الموقع. أبنوب())
{
سبليست كورينتليست = ويب. قوائم[سبوكونتروليستنامي];
foreach (سبيتيم كونتروليتيم في currentList.Items)
{
إذا كان (((السلسلة)كونتروليتيم["كونترولفيلد"]).يساوي("نيكستبونومبير"))
{
نيكستبوريقنومبير = (السلسلة)كونتروليتيم["كونترولفالوي"];
int int_nextPoReqNumber;
int_nextPoReqNumber = تحويل.ToInt32(نيكستبوريقنومبير);
int_nextPoReqNumber ;
كونتروليتيم["كونترولفالوي"] = int_nextPoReqNumber;
controlItem.Update();
}
} // تحديد موقع, قراءة وتحديث عدد بو في قائمة.
} // استخدام ويب spweb = site.openweb()
} // استخدام موقع spsite = spsite جديد("http://localhost/ميزوهو ")
عودة نيكستبوريقنومبير;
}
}