none
C# фильтр для списка SharePoint при выгрузке из csv-файла RRS feed

  • Вопрос

  • Есть csv-файл из которого нужно выгружать в список SharePoint, но нужно огранизовать проверку элементов списка с элементами в файле, есть примерный код, подскажите как правильно нужно организовать проверку, чтобы не было дублирования записи в списке SharePoint из csv-файла?

    using Microsoft.SharePoint;
    using System.Data.SqlClient;
    using System.Data;
    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    
    namespace EventDeployTest2.EventReceiver2
    {
        public class EventReceiver2 : SPItemEventReceiver
        {
            public override void ItemUpdated(SPItemEventProperties properties)
            {
                using (SPSite oSPsite = new SPSite("http://sp/sites/test"))
                {
                    using (SPWeb oSPWeb = oSPsite.OpenWeb())
                    {
                        oSPWeb.AllowUnsafeUpdates = true;
                        SPList list = oSPWeb.Lists["Календарь"];
                        string[] lines = System.IO.File.ReadAllLines(@"\\sp\sites\test\SiteAssets\Calendar.csv");
                        SPListItem itemToAdd = null;
                        foreach (string line in lines)
                            {
                                string[] arr = line.Split(';');
                                string titlecvs = Convert.ToString(arr[0]);
                                SPListItemCollection items = list.GetItems(new SPQuery()
                                {
                                    //фильтр по Title 
                                    Query = @"<Where><And><Eq><FieldRef Name='Created'/><Value Type='DateTime'><Today/></Value></Eq><Eq><FieldRef Name='Title' /><Value Type='Text'>" + titlecvs + "</Value></Eq></And></Where>"
                                });
                                    foreach (SPListItem item in items)
                                    {
                                       string calendarlist = item["Title"].ToString();
                                    //добавляем элементы из cvs-файла
                                        itemToAdd = list.Items.Add();
                                        itemToAdd["Title"] = Convert.ToString(arr[0]);
                                        itemToAdd["EventDate"] = Convert.ToString(arr[1]);
                                        itemToAdd["EndDate"] = Convert.ToString(arr[2]);
                                        itemToAdd.Update();
                            }
                        }
                    }
                }
            }         
        }
      }
    }
    • Изменено Lion SP 30 марта 2018 г. 15:18
    30 марта 2018 г. 14:52

Ответы

  • Добрый день!

    После того, как как получили отфильтрованную коллекцию элементов (вот тут:

    ...

    SPListItemCollection items = list.GetItems(new SPQuery()

    ...

    )

    Можно сделать проверку:

    int countItems = items.Count;

    Если countItems равно 0, то тогда добавляем элемент в список. В этом случае нет необходимости использовать foreach: foreach (SPListItem item in items).

    Небольшое замечание, если переменная titlecvs уже объявлена, то её же можно использовать и при добавлении нового элемента: itemToAdd["Title"] = titlecvs.


    • Изменено Alexander Karakulov 2 апреля 2018 г. 4:58
    • Помечено в качестве ответа Lion SP 3 апреля 2018 г. 15:43
    2 апреля 2018 г. 4:55

Все ответы

  • Добрый день!

    После того, как как получили отфильтрованную коллекцию элементов (вот тут:

    ...

    SPListItemCollection items = list.GetItems(new SPQuery()

    ...

    )

    Можно сделать проверку:

    int countItems = items.Count;

    Если countItems равно 0, то тогда добавляем элемент в список. В этом случае нет необходимости использовать foreach: foreach (SPListItem item in items).

    Небольшое замечание, если переменная titlecvs уже объявлена, то её же можно использовать и при добавлении нового элемента: itemToAdd["Title"] = titlecvs.


    • Изменено Alexander Karakulov 2 апреля 2018 г. 4:58
    • Помечено в качестве ответа Lion SP 3 апреля 2018 г. 15:43
    2 апреля 2018 г. 4:55
  • Спасибо, попробую.
    2 апреля 2018 г. 7:00