تعداد splist.files سيئة
-
22-09-2019 - |
سؤال
أبحث عن طريقة لإضافة ملف نصي إلى قائمة SharePoint التي لا تعدد مجموعة الملفات بأكملها. بالنسبة الى هذه مقالة SharePoint Best Practices ، يجب ألا تصل إلى خاصية splist.files لأنها تعدد المجموعة بأكملها. ما لم تكن تريد بالفعل كل عنصر ، فهو غير فعال للغاية. كل ما أريد القيام به هو إضافة ملف نصي واحد إلى المجلد الجذر لقائمة SharePoint. حتى الآن أنا أستخدم ما يلي:
using (MemoryStream stream = new MemoryStream())
{
StreamWriter writer = new StreamWriter(stream, Encoding.UTF8);
// write some stuff to the stream ...
// create a file-name-safe URL ...
// create a SPFileCollectionAddParameters object ...
// add the file
SPFile newFile = loggingList.RootFolder.Files.Add(fileURL, stream, addProperties);
}
لذلك ، يعدد splist.rootfolder.files مثل splist.files ، في هذه الحالة (نظرًا لوجود مجلد جذر فقط مع ملفات نصية) وإذا كان الأمر كذلك ، فهل هناك طريقة لإضافة ملف واحد دون تعداد مجموعة الملفات؟
شكرا لك مقدما. :د
المحلول
في الواقع ، لا حرج في استدعاء الملفات. ببساطة الوصول إلى العضو لن يعدد المجموعة. إذا كنت تريد الاتصال بـ getenumerator () عليها أو استخدامها في حلقة foreach ، فإن ذلك من شأنه أن يؤدي إلى التعداد.
نصائح أخرى
الخوف من الاستخدام SPList.Items
(مشابه ل SPList.Files
, ، ولكن المستخدمة في قوائم بسيطة ، وليس مكتبات المستندات) ، أنشأنا وظيفة مساعد تُرجع مجموعة فارغة ، وبالتالي لا تجلب جميع العناصر من الخادم:
public static SPListItemCollection CreateEmptyCollection(SPList List)
{
const string EmptyQuery = "0";
SPQuery q = new SPQuery {Query = EmptyQuery};
return List.GetItems(q);
}
ثم ، عند إضافة عناصر إلى قائمة ، نفعل ذلك مثل هذا:
ListItem = CreateEmptyCollection(someList).Add("/sites/somesite/lists/somelist/path/to/required/folder", SPFileSystemObjectType.File, "");
شكرا السذاجة. لقد ذكرت أنني رأيت ذات مرة مقالًا اقترح نفس الشيء ولكن كطريقة تمديد على Splist:
public static SPListItem AddItemOptimized(this SPList list, string folderUrl,
SPFileSystemObjectType underlyingObjectType, string leafName)
{
const string EmptyQuery = "0";
SPQuery q = new SPQuery
{
Query = EmptyQuery
};
return list.GetItems(q).Add(folderUrl, underlyingObjectType,leafName);
}