سؤال

أبحث عن طريقة لإضافة ملف نصي إلى قائمة 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);
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top