سيناريو العمل:
توفير أسلوب يسمح للمستخدمين بإدخال طلبات شراء دقيقة بسرعة.
المشكلة التجارية:
يقوم العميل التجارية مع البائعين مئات عدة.
البائعين هم "نوع" محددة. وهذا يعني أن بائع يبيع المعدات الحاسوبية (مثلاً. ديل) أو اللوازم المكتبية (مثلاً. دبابيس).
كيف يمكننا تمكين المستخدمين النهائيين الذين يقومون بإنشاء تحديد طلبات شراء بائع صالحة?
حلول الأعمال التجارية:
التفريق بين البائعين في النظام عن طريق "النوع".
تمكين المستخدمين من تحديد نوع "" من المنتج ثم قم بتوفير مجموعة المصفاة من البائعين المناسبة.
الحل التقني:
وقد صمم نموذج InfoPath أن تمكين المستخدمين من الدخول على شبكة الإنترنت شراء طلبات الشراء.
قوائم الاختيار InfoPath اثنين التحكم في اختيار البائعين. الأولى, يقوم المستخدم بتحديد نوع "شراء". وهذا يحصر قائمة اختيار ثانية تحتوي على البائعين التي تبيع لهذا النوع من الشراء فقط. هذا منسدلة متتالية الكلاسيكية.
يتم تخزين البائعين في قائمة مخصصة موس مع أعمدة مخصصة لسمات البائع مثل اسم, عنوان وخاصة "النوع".
تنفيذ خدمة ويب لعميل InfoPath للاستهلاك التي يكرر فيها عن طريق قائمة الموردين مخصصة, العودة فقط البائعين مطابقة المتوفر "نوع".
استدعاء خدمة ويب عن طريق نموذج InfoPath.
الدروس المستفادة:
- الأولى, يبدو من الضروري أن يذهب هذا الطريق. كان يفضل القيام بتصفية تماما داخل InfoPath وعدم إنشاء أي وظائف خدمة ويب هنا. ومع ذلك, ولم يوفر الملقم أشكال قدرات التصفية المطلوبة. نستطيع أن نضع قاعدة إلى نوع "" اختيار قائمة في النموذج إلى نوع من إعادة فتح الاستعلام البائع, ولكن لا يمكن أن نحصل عليه للعمل بشكل صحيح. ولذلك, كان من الضروري تنفيذ خدمة ويب.
- هذه كلاسيك "متتالية اختيار قائمة" يشكل مشكلة في InfoPath العالم الملقم وهناك العديد من الأمثلة الجيدة هناك التي تشرح كيفية حل هذه المشكلة.
- قيمة فارغة للعمود في قائمة الموردين لا يقوم بإرجاع سلسلة فارغة عند الرجوع إليها مثل هذا: إينيتيتيم["اسم المورد"]. وبدلاً من ذلك, تقوم بإرجاع قيمة خالية null.
بعض الملاحظات الأخرى:
- إرجاع صفيف[] للبائعين لأن صعوبة بعض العائدين ArrayList. InfoPath كانت تشكو من وأنا لم يكن لديها الوقت أو الميل لمكافحة أكثر من ذلك. وهذا, طبعًا, يضع حدا مصطنعة على العدد الإجمالي للبائعين. أنها أيضا اضطرني إلى تنفيذ القطع() الأسلوب في الصفيف لأنني أكره فكرة العودة إلى الوراء 100 من البائعين فارغة. لا يهمه InfoPath, بل أنها مزعجة في وجهي. (مرة أخرى, وكان هذا أسهل من القتال InfoPath على أرايليستس).
- أنا نفذت جيتسبيسيفيكفيندوربينامي() الدالة، فضلا عن, التي قد يكون من المفيد.
التعليمة البرمجية:
استخدام نظام;
استخدام System.Web;
استخدام System.Web.Services;
استخدام System.Web.Services.Protocols;
استخدام Microsoft.SharePoint;
استخدام System.Configuration;
/// <موجز>
/// خدمة المورد: يوفر المورد المتصلة خدمات اليوم التي يتم استهلاكها بواسطة نموذج عميل infopath.
///
/// التاريخ:
/// ——–
/// 07/24/07: الأولى الترميز, Paul J. غافن كونتشانجو.
///
/// </موجز>
[خدمة ويب(Namespace = "http://www.conchango.com/")]
[ويبسيرفيسيبيندينج(كونفورمستو = وسيبروفيليس.BasicProfile1_1)]
العامة فئة فيندورسيرفيسي : System.Web.Services.خدمة ويب
{
/// <موجز>
/// يمثل مورد من قائمة sharepoint مخصصة التي تحتفظ بها مسوسا.
/// </موجز>
العامة فئة بائع
{
العامة بائع() { }
العامة بائع(سبيتيم إينيتيتيم)
{
إذا كان (! (إينيتيتيم["اسم المورد"] == null)) VendorName = إينيتيتيم["اسم المورد"].ToString();
إذا كان (! (إينيتيتيم["العنوان 1"] == null)) VendorAddress1 = إينيتيتيم["العنوان 1"].ToString();
إذا كان (! (إينيتيتيم["عنوان 2"] == null)) VendorAddress2 = إينيتيتيم["عنوان 2"].ToString();
إذا كان (! (إينيتيتيم["المدينة"] == null)) فيندورسيتي = إينيتيتيم["المدينة"].ToString();
إذا كان (! (إينيتيتيم["فيندورفوني"] == null)) فيندورفوني = إينيتيتيم["فيندورفوني"].ToString();
إذا كان (! (إينيتيتيم["بورتشاسيتيبي"] == null)) فيندورتيبي = إينيتيتيم["بورتشاسيتيبي"].ToString();
إذا كان (! (إينيتيتيم["الدولة"] == null)) فيندورستاتي = إينيتيتيم["الدولة"].ToString();
إذا كان (! (إينيتيتيم["الرمز البريدي"] == null)) فيندورزيب = إينيتيتيم["الرمز البريدي"].ToString();
إذا كان (!(إينيتيتيم["الفاكس"] == null)) فيندورفاكس = إينيتيتيم["الفاكس"].ToString();
إذا كان (!(إينيتيتيم["ساليسريبنامي"] == null)) فيندورساليسريبنامي = إينيتيتيم["ساليسريبنامي"].ToString();
فيندوريتيميد = initItem.ID; // معرف فريد المحافظة عن طريق موس.
}
العامة int فيندوريتيميد;
العامة السلسلة VendorName;
العامة السلسلة VendorAddress1;
العامة السلسلة VendorAddress2;
العامة السلسلة فيندورسيتي;
العامة السلسلة فيندورستاتي;
العامة السلسلة فيندورزيب;
العامة السلسلة فيندورفوني;
العامة السلسلة فيندورتيبي;
العامة السلسلة فيندورساليسريبنامي;
العامة السلسلة فيندورفاكس;
}
العامة فيندورسيرفيسي () {
//قم بإلغاء السطر التالي في حالة استخدام المكونات المصممة
//InitializeComponent();
}
القطاع الخاص بائع[] جينيراتيتيستفيندورس()
{
بائع[] ريسولتليست;
ريسولتليست = الجديد بائع[100];
بائع v;
v = الجديد بائع();
v.VendorAddress1 = "v1_address1";
v.VendorAddress2 = "v1_address2";
v.VendorCity = "v1_city";
v.VendorName = "v1_vendorname";
v.VendorPhone = "v1_vendorphone";
v.VendorState =
v.VendorType = "v1_type";
v.VendorZip = "v1_zip";
ريسولتليست[0] = v;
v = الجديد بائع();
v.VendorAddress1 = "v2_address1";
v.VendorAddress2 = "v2_address2";
v.VendorCity = "v2_city";
v.VendorName = "v2_vendorname";
v.VendorPhone = "v2_vendorphone";
v.VendorState = "v2_st";
v.VendorType = "v2_type";
v.VendorZip = "v2_zip";
ريسولتليست[1] = v;
v = الجديد بائع();
v.VendorAddress1 = "v3_address1";
v.VendorAddress2 = "v3_address2";
v.VendorCity = "v3_city";
v.VendorName = "v3_vendorname";
v.VendorPhone = "v3_vendorphone";
v.VendorState = "v3_st";
v.VendorType = "v3_type";
v.VendorZip = "v3_zip";
ريسولتليست[2] = v;
عودة ريسولتليست;
}
[WebMethod]
العامة بائع جيتسبيسيفيكفيندوربييد(int معرف المورد)
{
السلسلة سبفيندورسيتينامي; // اسم الموقع موس الفعلي الذي يستضيف قائمة مخصصة البائع.
السلسلة سبفيندورليستنامي; // اسم قائمة المعايير الأمنية التنفيذية الدنيا الفعلية التي تحتوي على البائعين.
سبفيندورسيتينامي = كونفيجوراتيونسيتينجس.AppSettings["فيندورليسثوستينجسيتي"].ToString();
سبفيندورليستنامي = كونفيجوراتيونسيتينجس.AppSettings["فيندورليست"].ToString();
استخدام (SPSite الموقع = الجديد SPSite(سبفيندورسيتينامي))
{
استخدام (SPWeb ويب = الموقع. أبنوب())
{
سبليست كورينتليست = ويب. قوائم[سبفيندورليستنامي];
سبيتيم سبيسيفيسيتيم = currentList.Items[معرف المورد];
عودة الجديد بائع(سبيسيفيسيتيم);
} // استخدام ويب spweb = site.openweb()
} // استخدام موقع spsite = spsite جديد("http://localhost/ميزوهو ")
}
[WebMethod]
// ويفترض أن اسم المورد فريدة من نوعها, من منظور الأعمال التجارية
العامة بائع جيتسبيسيفيكفيندوربيفيندورنامي(السلسلة vendorName)
{
السلسلة سبفيندورسيتينامي; // اسم الموقع موس الفعلي الذي يستضيف قائمة مخصصة البائع.
السلسلة سبفيندورليستنامي; // اسم قائمة المعايير الأمنية التنفيذية الدنيا الفعلية التي تحتوي على البائعين.
سبفيندورسيتينامي = كونفيجوراتيونسيتينجس.AppSettings["فيندورليسثوستينجسيتي"].ToString();
سبفيندورليستنامي = كونفيجوراتيونسيتينجس.AppSettings["فيندورليست"].ToString();
استخدام (SPSite الموقع = الجديد SPSite(سبفيندورسيتينامي))
{
استخدام (SPWeb ويب = الموقع. أبنوب())
{
سبليست كورينتليست = ويب. قوائم[سبفيندورليستنامي];
foreach (سبيتيم فيندوريتيم في currentList.Items)
{
إذا كان (فيندوريتيم["اسم المورد"] == null) مواصلة;
إذا كان (فيندوريتيم["اسم المورد"].ToString().يساوي(vendorName))
عودة الجديد بائع(فيندوريتيم);
}
بائع v = الجديد بائع();
v.VendorPhone = تعذر العثور على ": " + vendorName;
عودة v;
عودة null;
} // استخدام ويب spweb = site.openweb()
} // استخدام موقع spsite = spsite جديد("http://localhost/ميزوهو ")
} // الأسلوب
[WebMethod]
العامة بائع[] جيتفيندورسوفتيبي (السلسلة filterType)
{
السلسلة سبفيندورسيتينامي; // اسم الموقع موس الفعلي الذي يستضيف تي
قال بائع قائمة مخصصة.
السلسلة سبفيندورليستنامي; // اسم قائمة المعايير الأمنية التنفيذية الدنيا الفعلية التي تحتوي على البائعين.
سبفيندورسيتينامي = كونفيجوراتيونسيتينجس.AppSettings["فيندورليسثوستينجسيتي"].ToString();
سبفيندورليستنامي = كونفيجوراتيونسيتينجس.AppSettings["فيندورليست"].ToString();
بائع[] ريسولتليست;
int فيندورينديكس = 0;
ريسولتليست = الجديد بائع[1000];
// تهيئة القائمة مع رسالة ودية افتراضية.
بائع v = الجديد بائع();
v.VendorName = "تحديد نوع مورد لملء هذه القائمة.";
ريسولتليست[0] = v;
// تحويل عامل التصفية إلى حالة أقل لمقارنة السلسلة أسهل لاحقاً.
filterType = filterType.ToLower();
// إذا تم تمرير نوع عامل التصفية "اختبار", تولد بعض البيانات البسيطة.
#المنطقة تصفية نوع = "اختبار"
إذا كان (يساوي filterType.("اختبار"))
عودة جينيراتيتيستفيندورس();
#اندريجيون
إذا كان (صحيح)
{
استخدام (SPSite الموقع = الجديد SPSite(سبفيندورسيتينامي))
{
استخدام (SPWeb ويب = الموقع. أبنوب())
{
v = null;
سبليست كورينتليست = ويب. قوائم[سبفيندورليستنامي];
// التكرار خلال كافة العناصر في قائمة الموردين.
foreach (سبيتيم فيندوريتيم في currentList.Items)
{
السلسلة لوويرفيندورتيبي;
لوويرفيندورتيبي = فيندوريتيم["بورتشاسيتيبي"].ToString().String.tolower();
لوويرفيندورتيبي = lowerVendorType.Substring(3);
إذا كان (يساوي لوويرفيندورتيبي.(filterType))
{
ريسولتليست[فيندورينديكس ] = الجديد بائع(فيندوريتيم);
}
} // التكرار من خلال جميع البائعين في قائمة
عودة تريمفيندوراراي(فيندورينديكس, ريسولتليست);
// عودة ريسولتليست;
} // استخدام ويب spweb = site.openweb()
} // استخدام موقع spsite = spsite جديد("http://localhost/ميزوهو ")
} // إذا كان هذا صحيحاً
عودة null;
}
القطاع الخاص بائع[] تريمفيندوراراي(int نيوسيزي, بائع[] أوريجينالفيندوراراي)
{
بائع[] تريميداراي;
إذا كان (نيوسيزي = = 0) نيوسيزي = 1;
تريميداراي = الجديد بائع[نيوسيزي];
int كورينتكونتير = 0;
من أجل (كورينتكونتير = 0; كورينتكونتير < نيوسيزي; كورينتكونتير )
{
تريميداراي[كورينتكونتير] = أوريجينالفيندوراراي[كورينتكونتير];
}
عودة تريميداراي;
}
}