private double getListItemCount(SPWeb web, SPField f, string project)
        {
            string list   = f.GetCustomProperty("ListName").ToString();
            string query  = f.GetCustomProperty("ListQuery").ToString();
            string lookup = "";

            try
            {
                lookup = f.GetCustomProperty("LookupColumn").ToString();
            }
            catch { }
            string aggtype = "";

            try
            {
                aggtype = f.GetCustomProperty("AggType").ToString();
            }
            catch { }
            string aggcolumn = "";

            try
            {
                aggcolumn = f.GetCustomProperty("AggColumn").ToString();
            }
            catch { }

            try
            {
                if (lookup == "")
                {
                    lookup = "Project";
                }

                SPList tList = web.Lists[list];

                if (query != "")
                {
                    query = "<And>" + query + "<Eq><FieldRef Name='" + lookup + "'/><Value Type='Text'>" + project + "</Value></Eq></And>";
                }
                else
                {
                    query = "<Eq><FieldRef Name='" + lookup + "'/><Value Type='Text'>" + project + "</Value></Eq>";
                }

                SPQuery q = new SPQuery();
                q.Query = "<Where>" + query + "</Where>";

                switch (aggtype)
                {
                case "Sum":
                    double val = 0;
                    foreach (SPListItem li in tList.GetItems(q))
                    {
                        try
                        {
                            string sval = li.Fields.GetFieldByInternalName(aggcolumn).GetFieldValue(li[aggcolumn].ToString()).ToString();
                            if (sval.Contains(";#"))
                            {
                                sval = sval.Replace(";#", "\n").Split('\n')[1];
                            }
                            val += double.Parse(sval);
                        }
                        catch { }
                    }
                    return(val);

                case "Avg":
                    double val1    = 0;
                    double counter = 0;
                    foreach (SPListItem li in tList.GetItems(q))
                    {
                        counter++;
                        try
                        {
                            string sval = li.Fields.GetFieldByInternalName(aggcolumn).GetFieldValue(li[aggcolumn].ToString()).ToString();
                            if (sval.Contains(";#"))
                            {
                                sval = sval.Replace(";#", "\n").Split('\n')[1];
                            }
                            val1 += double.Parse(sval);
                        }
                        catch { }
                    }
                    if (counter == 0)
                    {
                        return(0);
                    }
                    return(val1 / counter);

                default:
                    return(tList.GetItems(q).Count);
                }
            }
            catch (Exception ex)
            {
                Response.Write("ERR ROLLUP: " + ex.Message + " " + HttpUtility.HtmlEncode(query) + "<br>");
            }
            return(0);
        }
Exemplo n.º 2
0
        protected void UpdateButton_Click(object sender, EventArgs e)
        {
            string connString  = _field.GetCustomProperty("ConnectionString").ToString();
            string queryString = _field.GetCustomProperty("QueryString").ToString();

            SharedModule.CheckConnectionProperties(_field.Title, connString, queryString);

            var       dm   = new DataManager(connString, queryString);
            DataTable data = null;

            SPSecurity.RunWithElevatedPrivileges(() => data = dm.GetRecords());

            int changedCount          = 0;
            var deletedFromBDMessages = new List <string>();

            bool textChanged = false;

            foreach (SPListItem item in _list.Items)
            {
                if (item[_field.Id] == null || item[_field.InternalName + "ID"] == null || item[_field.InternalName + "ID"].ToString() == "")
                {
                    continue;
                }

                string resultText = "";

                if (_field.TypeAsString == "CustomExternalLookup")
                {
                    string value = item[_field.InternalName + "ID"].ToString();
                    string text  = item[_field.Id].ToString();

                    DataRow row = data.Rows.Find(Convert.ToInt32(value));
                    if (row != null)
                    {
                        if (row["Value"].ToString() != text)
                        {
                            text        = row["Value"].ToString();
                            textChanged = true;
                            ++changedCount;
                        }
                    }
                    else
                    {
                        deletedFromBDMessages.Add(string.Format("<a href=\"{0}\" target=\"_blank\">{1}</a>: {2}", SPHttpUtility.UrlPathEncode(_web.Site.MakeFullUrl(_list.DefaultDisplayFormUrl + "?ID=" + item.ID.ToString()), false), item.Title, text));
                    }

                    resultText = text;
                }
                else if (_field.TypeAsString == "CustomExternalLookupMulti")
                {
                    var mcValues = new SPFieldMultiColumnValue(item[_field.InternalName + "ID"].ToString());
                    var mcTexts  = new SPFieldMultiColumnValue(item[_field.Id].ToString());

                    for (int i = 0; i < mcValues.Count; ++i)
                    {
                        DataRow row = data.Rows.Find(Convert.ToInt32(mcValues[i]));
                        if (row != null)
                        {
                            if (row["Value"].ToString() != mcTexts[i])
                            {
                                mcTexts[i]  = row["Value"].ToString();
                                textChanged = true;
                                ++changedCount;
                            }
                        }
                        else
                        {
                            deletedFromBDMessages.Add(string.Format("<a href=\"{0}\" target=\"_blank\">{1}</a>: {2}", SPHttpUtility.UrlPathEncode(_web.Site.MakeFullUrl(_list.DefaultDisplayFormUrl + "?ID=" + item.ID.ToString()), false), item.Title, mcTexts[i]));
                        }
                    }
                    resultText = mcTexts.ToString();
                }

                if (textChanged)
                {
                    item[_field.Id] = resultText;
                    item.Update();
                }
            }

            ResultLiteral.Text = string.Format("Обновлено значений: {0}. Значений, ссылающихся на удалённые данные: {1}", changedCount, deletedFromBDMessages.Count);

            if (deletedFromBDMessages.Count > 0)
            {
                ResultLiteral.Text = ResultLiteral.Text + "<br/><br/>Ссылаются на удалённые данные:<br/>";
                foreach (string val in deletedFromBDMessages)
                {
                    ResultLiteral.Text = ResultLiteral.Text + string.Format("{0}<br/>", val);
                }
            }

            CancelButton.Text = "Закрыть";
        }
        string GetFieldValue(SPField field)
        {
            string val = "";
            if (field != null)
            {
                 val = Convert.ToString(field.GetCustomProperty("Items"));
                if (string.IsNullOrEmpty(val))
                {
                    SPFieldLookupValue spVal = field.FieldRenderingControl.ItemFieldValue as SPFieldLookupValue;

                    if (spVal != null)
                    {
                        return spVal.LookupId.ToString();
                    }
                    else
                    {
                        SPFieldLookupValueCollection valColl = field.FieldRenderingControl.ItemFieldValue as SPFieldLookupValueCollection;
                        if (valColl != null && valColl.Count > 0)
                        {
                            foreach (SPFieldLookupValue v in valColl)
                            {
                                val += v.LookupId.ToString() + ":";
                            }
                        }
                    }
                }
            }
            return val;
        }