Monday, 1 September 2014

Generating CAML at Run Time.

For that we need List<> of String type i.e List<string> strArr = new List<string>(); and one string
string entireCAMLQuery = string.Empty; .

In strArr we can Add the CAML query like

strArr.Add("<BeginsWith><FieldRef Name='CandidateName' /><Value Type='Text'>" + filter.Value + "</Value></BeginsWith>");

Then check strArr is not equal to 0.

if (strArr.Count != 0)
 {
entireCAMLQuery = BuildingCAMLUsingStringArr(strArr);
query.Query = entireCAMLQuery.ToString();
query.ViewAttributes = "Scope=\"Recursive\"";  // for fetch data from folder of  SP list.
GetItemThroughtLoop(webSite, strList, query);

}

private string BuildingCAMLUsingStringArr(List<string> strArr)
        {
            string caml = string.Empty;
            try
            {
                if (strArr.Count == 1)
                {
                    caml = strArr[0] ;
                }
                else if (strArr.Count > 1)
                {
                    int count = strArr.Count - 1;
                    caml = CAMLRecursiveCall(strArr, count) ;
                }

            }
            catch { throw; }
            finally { }
            return @"<View><Query><Where>" + caml + "</Where></Query></View>";
        }
        private string CAMLRecursiveCall(List<string> strArr,int count)
        {
            StringBuilder strBuild= new StringBuilder();
            if(count>0)
            {
                strBuild.Append("<And>");
                strBuild.Append(CAMLRecursiveCall(strArr, count-1));
                strBuild.Append(strArr[count]);
                strBuild.Append("</And>");
            }
            else
                strBuild.Append(strArr[count]);
            return strBuild.ToString();
        }

public void GetItemThroughtLoop(SPWeb webSite, string strList, SPQuery serachQuery)
{
string site = webSite.Url;
SPList List = webSite.Lists(strList);
SPListItemCollection collListItems = List.GetItems(serachQuery);
 
//TO DO :  Do anything with list item collection
 

}

No comments:

Post a Comment