Thursday, July 16, 2015

Build Dynamically CAML Query in SharePoint 2013 Client Object Model

Build Dynamically CAML Query in SharePoint 2013 Client Object Model :- 
public class CamlQueryElements
    {
        public string LogicalJoin { get; set; }
        public string ComparisonOperators { get; set; }
        public string FieldName { get; set; }
        public string FieldType { get; set; }
        public string FieldValue { get; set; }
    }

internal DataTable GetReturnTable(ClientContext clientContext, string strKeyWordSearch)
        {
            bool isExist = false;
            string status = string.Empty;
            string strWhere = string.Empty;
            DataTable dtReturn = new DataTable();
            DataRow dr;
            Microsoft.SharePoint.Client.List returnList = clientContext.Web.Lists.GetByTitle("LIST_NAME");
            clientContext.Load(returnList);
            clientContext.ExecuteQuery();
            IList<CamlQueryElements> lstOfElement = new List<CamlQueryElements>();
            lstOfElement.Add(new CamlQueryElements { ComparisonOperators = "Contains", FieldName = "Column1", FieldType = "Text", FieldValue = strKeyWordSearch, LogicalJoin = "Or" });
            lstOfElement.Add(new CamlQueryElements { ComparisonOperators = "Eq", FieldName = "Column2", FieldType = "DateTime", FieldValue = strKeyWordSearch, LogicalJoin = "Or" });
            lstOfElement.Add(new CamlQueryElements { ComparisonOperators = "Contains", FieldName = "Column3", FieldType = "Text", FieldValue = strKeyWordSearch, LogicalJoin = "Or" });
            lstOfElement.Add(new CamlQueryElements { ComparisonOperators = "Contains", FieldName = "Column4", FieldType = "Text", FieldValue = strKeyWordSearch, LogicalJoin = "Or" });           
            lstOfElement.Add(new CamlQueryElements { ComparisonOperators = "IsNotNull", FieldName = "ID", FieldType = "", FieldValue = "", LogicalJoin = "And" });
            lstOfElement.Add(new CamlQueryElements { ComparisonOperators = "Eq", FieldName = "Column5", FieldType = "Text", FieldValue = "Open", LogicalJoin = "And" });
            strWhere = GenerateQuery(lstOfElement);
            if (returnList != null && returnList.ItemCount > 0 && strWhere != null && strWhere.ToString() != "")
            {
                Microsoft.SharePoint.Client.CamlQuery camlQuery = new CamlQuery();
                camlQuery.ViewXml =
                    @"<View>" +
                        "<Query>" +
                            strWhere +
                        "<OrderBy><FieldRef Name='ID' Ascending='FALSE' /></OrderBy>" +
                        "</Query>" +
                        "<ViewFields>" +
                            "<FieldRef Name='ID' />" +
                            "<FieldRef Name='ReqeuestID' />" +
                        "</ViewFields>" +
                    "<RowLimit>30</RowLimit>" +
                    "</View>";
                SPClient.ListItemCollection returnListItems = returnList.GetItems(camlQuery);
                clientContext.Load(returnListItems);
                clientContext.ExecuteQuery();
                if (returnListItems != null && returnListItems.Count > 0)
                {
                    foreach (var field in returnListItems[0].FieldValues.Keys)
                    {
                        dtReturn.Columns.Add(field);
                    }
                    isExist = IsFieldExists(dtReturn, "Days");
                    if (!isExist)
                    {
                        dtReturn.Columns.Add("Days");
                    }
                    foreach (var item in returnListItems)
                    {
                        dr = dtReturn.NewRow();
                        foreach (var obj in item.FieldValues)
                        {
                            if (obj.Key == "ID")
                            {
                            }
                            if (obj.Value != null)
                            {
                                string type = obj.Value.GetType().FullName;
                                if (type == "Microsoft.SharePoint.Client.FieldLookupValue")
                                {
                                    dr[obj.Key] = ((FieldLookupValue)obj.Value).LookupValue;
                                }
                                else if (type == "Microsoft.SharePoint.Client.FieldUserValue")
                                {
                                    dr[obj.Key] = ((FieldUserValue)obj.Value).LookupValue;
                                }
                                else if (type == "Microsoft.SharePoint.Client.FieldUserValue[]")
                                {
                                    FieldUserValue[] multValue = (FieldUserValue[])obj.Value;
                                    foreach (FieldUserValue fieldUserValue in multValue)
                                    {
                                        dr[obj.Key] += (fieldUserValue).LookupValue + "<br>";
                                    }
                                }
                                else if (type == "System.DateTime")
                                {
                                    if (obj.Value.ToString().Length > 0)
                                    {
                                        var date = obj.Value.ToString().Split(' ');
                                        if (date[0].Length > 0)
                                        {
                                            if (obj.Key == "ReturnDate")
                                            {
                                                dr[obj.Key] = date[0];
                                                DateTime dtReturnDate = DateTime.Parse(date[0]);
                                                DateTime TodayDate = Common.getTodayDateTime();
                                                TimeSpan ts = TodayDate - dtReturnDate;
                                                dr["Days"] = ts.Days.ToString();
                                            }
                                            else
                                            {
                                                dr[obj.Key] = date[0];
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    dr[obj.Key] = obj.Value;
                                }
                            }
                            else
                            {
                                dr[obj.Key] = null;
                            }
                        }
                        dtReturn.Rows.Add(dr);
                    }
                }
            }
            return dtReturn;
        }

        internal static string GenerateQuery(IList<CamlQueryElements> camlIlist)
        {
            StringBuilder queryJoin = new StringBuilder();
            string query;
            if (camlIlist.Count > 0)
            {
                int itemCount = 0;
                foreach (CamlQueryElements element in camlIlist)
                {
                    if (element.ComparisonOperators.ToString() != "IsNotNull")
                    {
                        query = @"<{0}><FieldRef Name='{1}' /><Value {2} Type='{3}'>{4}</Value></{5}>";
                    }
                    else
                    {
                        query = @"<{0}><FieldRef Name='{1}' /></{5}>";
                    }
                    itemCount++;
                    string date = string.Empty;                   
                    if (String.Compare(element.FieldType, "DateTime", true) == 0)
                    {
                        date = "IncludeTimeValue='false'";
                        DateTime dt = new DateTime();
                        if (element.FieldValue.IndexOf("/") != -1)
                        {
                            DateTime.TryParse(element.FieldValue, out dt);
                            element.FieldValue = dt.ToString("yyyy-MM-dd");
                        }
                    }
                    queryJoin.AppendFormat(string.Format(query, element.ComparisonOperators, element.FieldName, date, element.FieldType, element.FieldValue, element.ComparisonOperators));
                    if (itemCount >= 2)
                    {
                        queryJoin.Insert(0, string.Format("<{0}>", element.LogicalJoin));
                        queryJoin.Append(string.Format("</{0}>", element.LogicalJoin));
                    }
                }
                queryJoin.Insert(0, "<Where>");
                queryJoin.Append("</Where>");
            }
            return Convert.ToString(queryJoin);
        }

        internal static bool IsFieldExists(DataTable dt, string FieldName)
        {
            bool IsFieldExists = false;
            for (int I = 0; I < dt.Columns.Count; I++)
            {
                if (dt.Columns[I].ColumnName.ToUpper() == FieldName.ToUpper())
                {
                    IsFieldExists = true;
                }
            }
            return IsFieldExists;
        }

Tuesday, July 14, 2015

Read User Properties From Active Directory

Read User Properties From Active Directory:-
lblMessage.Text = GetEmployeeID("name@company.com"); 
internal static string GetEmployeeID (string strmail)
        {
            StringBuilder sbQuery = new StringBuilder();
            string stremployeeid = string.Empty;           
            string strLdapPath = "LDAP://DC=company_domain,DC=com";
            try
            {
                if (string.IsNullOrEmpty(Convert.ToString(sbQuery)))
                {
                    sbQuery.Append("(&(objectClass=user)(|(mail=" + strmail + ")");
                }
                sbQuery.Append("))");
                DirectoryEntry entry = new DirectoryEntry(strLdapPath);
                DirectorySearcher userSearch = new DirectorySearcher(entry);
                userSearch.Filter = Convert.ToString(sbQuery);
                userSearch.PropertiesToLoad.Add("mail");
                userSearch.PropertiesToLoad.Add("employeeid");
                SearchResultCollection sresultcoll = userSearch.FindAll();
                foreach (SearchResult sresult in sresultcoll)
                {
                    if (sresult != null)
                    {
                        if (sresult.Properties["mail"].Count == 1)
                        {
                            stremployeeid = sresult.Properties["employeeid"].Count > 0 ? Convert.ToString(sresult.Properties["employeeid"][0]) : string.Empty;
                            if (stremployeeid != null && stremployeeid.Length > 0)
                            {
                                return stremployeeid;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return stremployeeid;
        }

Featured Post

Protect an API by using OAuth 2.0 with Azure Active Directory and API Management

Protect an API by using OAuth 2.0 with Azure Active Directory and API Management https://docs.microsoft.com/en-us/azure/api-management/api-...

Popular posts