استخدام SPQuery مع SPList.GetItems(SPView)
-
10-12-2019 - |
سؤال
انا املك جزء الويب الذي يعرض مجموعة متنوعة من العناصر في com.spgridview استنادا إلى أ 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>".إذا كان الأمر كذلك، فإنه يقوم بإرجاع كافة العناصر ويتجاهل شرط المكان بالكامل.