سؤال

انا املك الذي يعرض مجموعة متنوعة من العناصر في استنادا إلى أ SPView.

بالإضافة إلى ذلك، قمت بتنفيذ وحدة بحث والتي عند إدخال كلمة رئيسية يجب أن تحصل على جميع العناصر التي لها عنوان يحتوي على جزء من الكلمة الأساسية المدخلة، وذلك باستخدام SPQuery.

استخدام SPList.GetItems() يعمل بشكل جيد عند استخدام SPQuery =>

var itemCollection = SPList.GetItems(SPQuery);

الكود أعلاه يعطيني العناصر التي أريدها، ولكن للأسف أيضًا كل العناصر التي لا أريدها.ما أريده هو الحصول على كافة العناصر من SPView التي تطابق الكلمة الأساسية التي تم إدخالها.

اكتشفت أنه يمكنك استخدام SPQuery مع SPView =>

var itemCollection = SPList.GetItems(SPQuery, "viewName");

يبدو الأمر جيدًا جدًا، ولكن عند دراسته عن كثب يكشف أن "اسم العرض" يجب أن يكون في الواقع اسم الملف SPViewمعرف ToStringإد.وأنه إذا SPQuery يحتوي على <Where> جملة، فإن "viewName" يتجاوز هذا الاستعلام ويعيد فقط كل عنصر في طريقة العرض المحددة هذه.

لذا سؤالي، هل توجد طريقة للاستعلام عن أ SPView مباشرة أم لا بد لي من القيام بعمل مؤلم؟


رمز الحل

شكرا لك، سيمون دوي، على التلميح.

var query = new SPQuery(SPList.GetView(ListViewId))
{
    Query = string.Format(string.Concat(
            "<Where>",
                "<Or>",
                    "<Or>",
                        "<Contains>",
                            "<FieldRef Name='Title'/>",
                            "<Value Type='Text'>{0}</Value>",
                        "</Contains>",
                        "<Contains>",
                            "<FieldRef Name='FieldAutoGeneratedName'/>",
                            "<Value Type='Text'>{0}</Value>",
                        "</Contains>",
                    "</Or>",
                    "<Contains>",
                        "<FieldRef Name='FieldATTCode'/>",
                        "<Value Type='Text'>{0}</Value>",
                    "</Contains>",
                "</Or>",
            "</Where>"
            ), param)
};
var items = SPList.GetItems(query);

يقوم الكود أعلاه بإرجاع كافة العناصر من عرض القائمة المحدد المطابق لـ param

هل كانت مفيدة؟

المحلول

ماذا عن إنشاء كائن SPQuery باستخدام المنشئ حيث يمكنك تمرير SPView المناسب.

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.spquery.aspx

يمكنك بعد ذلك إضافة استعلام ليشمل العناصر المناسبة، مثل:-

var query = new SPQuery(spView); 

query.Query = String.Format("<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where>", keyword);

SPListItemCollection listItems = oList.GetItems(query);

نصائح أخرى

إذا قام SPQuery بإرجاع كافة عناصر القائمة، ففي معظم الحالات تكون سلسلة الاستعلام خاطئة.السلوك الافتراضي (في خياري الغريب) هو أنه في حالة وجود سلاسل استعلام خاطئة، يقوم Caml-Query بإرجاع جميع العناصر.

مثال على خطأ شائع:يجب ألا تتضمن سلسلة الاستعلام الخاصة بـ SPQuery.Query العلامة "<Query>".إذا كان الأمر كذلك، فإنه يقوم بإرجاع كافة العناصر ويتجاهل شرط المكان بالكامل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top