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); }
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; }