как использовать caml-запросы для необязательных значений поиска в sharepoint - PullRequest
0 голосов
/ 07 июня 2010

У меня есть пользовательская поисковая веб-часть в Sharepoint, которая имеет 7 фильтров. Я получаю данные из списка Sharepoint с помощью CAML Query. Я хочу написать обобщенный SPQuery, который будет отфильтровывать данные на основе параметров поиска. Параметры поиска являются необязательными. Если пользователь вводит любые 2 параметра, то мне нужно получить данные, соответствующие указанным 2 параметрам. Как мне использовать CAML Query для достижения этой цели? Я не могу придумать обобщенный подход для генерации моего caml-запроса на основе параметров поиска.

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Вот фрагмент кода, который я использовал в Silverlight для генерации CAML-запроса на основе параметров поиска. Может быть, это полезно.

    private ClientContext context;
    private Microsoft.SharePoint.Client.List SampleSPList;
    private Microsoft.SharePoint.Client.ListItemCollection SampleSPCollection;

    //Load the List
    void LoadList()
    {
        SampleSPList = context.Web.Lists.GetByTitle("Sample");
        context.Load(SampleSPList);

        CamlQuery query = new Microsoft.SharePoint.Client.CamlQuery();

        string camlQueryXml = "";
        bool existsWhere = false;

        if (searchString.Text != "")
        {
            camlQueryXml = camlQueryXml + "<Contains><FieldRef Name='sampleString' /><Value Type='Text'>" + searchString.Text + "</Value></Contains>";
            if (existsWhere == true) {
                camlQueryXml = "<And>" + camlQueryXml + "</And>";
            }
            existsWhere = true;
        }

        if (searchTextArea.Text != "")
        {
            camlQueryXml = camlQueryXml + "<Contains><FieldRef Name='sampleTextArea' /><Value Type='Text'>" + searchTextArea.Text + "</Value></Contains>";
            if (existsWhere == true)
            {
                camlQueryXml = "<And>" + camlQueryXml + "</And>";
            }
            existsWhere = true;
        }

        if (existsWhere == true) { camlQueryXml = "<View><Query><OrderBy><FieldRef Name='ID' /></OrderBy><Where>" + camlQueryXml + "</Where></Query></View>"; }
        else { camlQueryXml = "<View><Query><OrderBy><FieldRef Name='ID' /></OrderBy></Query></View>"; }

        query.ViewXml = camlQueryXml;

        SampleSPCollection = SampleSPList.GetItems(query);
        context.Load(SampleSPCollection);
        context.ExecuteQueryAsync(ListLoaded, ListLoadFailed);
    }
0 голосов
/ 11 июня 2010

фактически решил проблему, написав логику для динамического генерирования запроса

...