فئة المحفوظات: موس

موس التخصيص البحث المتقدم — يهم القضية في البحث المتقدم XSLT

لا يمكنني تعديل البحث المتقدم XSLT في كثير من الأحيان, لذا يبدو أن أنا تسلق الجبال تلال صغيرة كل مرة.

هذا الدرس الأحدث: حالة المسائل عند الإشارة إلى عمود. في بلدي البحث المتقدم, لدى الأعمدة المعرفة كهذا:

<الجذر xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
الأعمدة>
<
عمود اسم="جافتراينينجينفويسينومبير" />
<
عمود اسم="جافترينينجينفويسيلوكيشن" />
<
عمود اسم="معرف العمل"/>
<
عمود اسم="رتبة"/>
<
عمود اسم="العنوان"/>
<
عمود اسم="الكاتب"/>
<
عمود اسم="حجم"/>
<
عمود اسم="مسار"/>
<
عمود اسم="وصف"/>
<
عمود اسم="الكتابة"/>
<
عمود اسم="اسم الموقع"/>
<
عمود اسم="كولابسينجستاتوس"/>
<
عمود اسم="هيثيغلايتيدسوماري"/>
<
عمود اسم="هيثيغلايتيدبروبيرتيس"/>
<
عمود اسم="كونتينتكلاس"/>
<
عمود اسم="إيسدوكومينت"/>
<
عمود اسم="بيكتوريثومبنايلورل"/>
</
الأعمدة>
</
الجذر>

وقد تم XLST الذي يعرض الموقع عدد والفاتورة فاتورة:

<p>
رقم الفاتورة التدريب: <xsl:القيمة حدد="جافتراينينجينفويسينومبير"/>
<
br></br>
موقع التدريب الفاتورة: <xsl:القيمة حدد="جافترينينجينفويسيلوكيشن"/>
</
p>

ومع ذلك, وقد حدد الرجوع الخاصية في حالة انخفاض جميع, كما هو الحال في:

<p>
رقم الفاتورة التدريب: <xsl:القيمة حدد="جافتراينينجينفويسينومبير"/>
<
br></br>
موقع التدريب الفاتورة: <xsl:القيمة حدد="جافترينينجينفويسيلوكيشن"/>
</
p>


حتى صحح هذا, نتائج البحث أظهرت التسميات (الأول-هاء. "التدريب رقم الفاتورة") ولكن لا توجد بيانات.

موس / InfoPath Forms Server (InfoPath 2007) الأداء القائمة المنسدلة

فئة إضافية: InfoPath

ملخص: InfoPath 2007 نموذج نشرة إلى خادم موس يوفر قائمة منسدلة من البائعين مرتبطة بقائمة مخصصة في موس. عند تحديد أحد البائعين, قواعد تعيين قيم الحقل لحفنة من حقول النص مثل اسم مندوب المبيعات, عنوان, مدينة, الدولة, الرمز البريدي والهاتف. الأداء أمر فظيع. ونلاحظ أن الأداء تزداد سوءا (بطريقة غير خطية) لكل حقل إضافي نقوم بتحديث هذه الطريقة. أي, إذا كنا فقط تحديث اسم مندوب المبيعات, فإنه يأخذ [x] مقدار الوقت. إذا نقوم بتحديث مندوب المبيعات, العنوان 1, عنوان 2, مدينة, الدولة, الرمز البريدي, فإنه يأخذ 10 أوقات أطول.

الحل: كتابة خدمة ويب (يمكن العثور على نموذج التعليمات البرمجية هنا) أن يتم تمرير اسم مورد وأنها ترجع إلى الوراء تفاصيل المورد. ثم, تعيين الحقول بهذه الطريقة. على الرغم من أن هذا يبدو جداً بطيئة, كان هناك أي اختلاف ملحوظ في الأداء عند تعيين نحن 1 ميدان مقابل 8 الحقول. كمكافأة إضافية, للمستخدمين الحصول على بارد "الاتصال بالخادم" سيلون تأثير في حين أنها تنتظر النموذج للاحتجاج وتستهلك الخدمة النتائج.

موس: حدث استثناء. (استثناء من HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

التحديث: نحن ابدأ تحديد السبب الجذري لهذه المشكلة وأنها السطحية ابدأ مرة أخرى.

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

تسجيل الدخول كمسؤول مجموعة موقع، ومحاولة إضافة أحد هؤلاء المستخدمين كمسؤول موقع وهذا الوقت, عند الضغط على "موافق", نحصل على هذه الرسالة:

حدث استثناء. (استثناء من HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

لقد أمضينا بعض الوقت في البحث عن هذا وسوء الحظ, لم يخرج بأي شيء مفيد. وكانت هناك بعض الرسائل في سجل التشخيص, ولكن كان من الصعب ربط لهم تماما مع هذه المسألة.

وفي نهاية المطاف, نحن مجموعة الموقع حذف وإعادة إنشاء فإنه وأن تحل.

إذا كان يمكنني معرفة ما تسبب هذا في المستقبل, سوف أقوم بتحديث هذه الوظيفة.

موس: بالتكرار عن طريق القوائم المخصصة وإعادة البيانات المصفاة إلى InfoPath

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

توفير أسلوب يسمح للمستخدمين بإدخال طلبات شراء دقيقة بسرعة.

المشكلة التجارية:

يقوم العميل التجارية مع البائعين مئات عدة.

البائعين هم "نوع" محددة. وهذا يعني أن بائع يبيع المعدات الحاسوبية (مثلاً. ديل) أو اللوازم المكتبية (مثلاً. دبابيس).

كيف يمكننا تمكين المستخدمين النهائيين الذين يقومون بإنشاء تحديد طلبات شراء بائع صالحة?

حلول الأعمال التجارية:

التفريق بين البائعين في النظام عن طريق "النوع".

تمكين المستخدمين من تحديد نوع "" من المنتج ثم قم بتوفير مجموعة المصفاة من البائعين المناسبة.

الحل التقني:

وقد صمم نموذج 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 = "v1_st";
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; كورينتكونتير < نيوسيزي; كورينتكونتير )
{
تريميداراي[كورينتكونتير] = أوريجينالفيندوراراي[كورينتكونتير];
}

عودة تريميداراي;

}
}