/// <summary> /// Gets my work fields. /// </summary> /// <param name="data">The data.</param> /// <returns></returns> public string GetMyWorkFields(string data) { try { var dataElement = new XElement("Data"); List <string> fields; using (var myWorkReportData = new MyWorkReportData(Web.Site.ID)) { fields = myWorkReportData.GetFields(); } foreach (string field in fields) { dataElement.Add(new XElement("Field", new XAttribute("Name", field))); } return(new XElement("GetMyWorkFields", new XElement("Params"), dataElement).ToString()); } catch (APIException) { throw; } catch (Exception exception) { throw new APIException((int)Errors.GetMyWorkFields, exception.GetBaseException().Message); } }
/// <summary> /// Initializes the specified populate columns. /// </summary> /// <param name="populateColumns">if set to <c>true</c> [populate columns].</param> /// <param name="properties">The properties.</param> /// <returns></returns> private bool Initialize(bool populateColumns, SPItemEventProperties properties) { try { _listName = properties.ListTitle; if (_listName.Equals("My Work")) { return(false); } _siteId = properties.SiteId; _listId = properties.ListId; _listItem = properties.ListItem; _properties = properties; _myWorkReportData = new MyWorkReportData(_siteId); _siteName = _myWorkReportData.SiteName; _siteUrl = _myWorkReportData.SiteUrl; if (!populateColumns) { return(true); } _currentValues = GetItemFieldValueFromDB(properties.ListId.ToString(), properties.ListItemId.ToString()); _defaultColumns = new ArrayList { "siteid", "webid", "listid", "itemid", "weburl" }; _mandatoryHiddenFlds = new ArrayList { "commenters", "commentersread", "commentcount", "workspaceurl" }; _listColumns = _myWorkReportData.GetListColumns("My Work"); if (_listColumns == null) { return(false); } _listColumns = _listColumns.DefaultView.ToTable(true, (from DataColumn dataColumn in _listColumns.Columns select dataColumn.ColumnName).ToArray()); return(true); } catch (Exception exception) { SPSecurity.RunWithElevatedPrivileges( () => LogEvent(exception, 6004, "EPMLive My Work Reporting Item Initializing")); return(false); } }
/// <summary> /// Gets the data from reporting DB. /// </summary> /// <param name="spWeb">The sp web.</param> /// <param name="data">The data.</param> /// <returns></returns> private static IEnumerable <DataTable> GetDataFromReportingDb( SPWeb spWeb, string data) { Guard.ArgumentIsNotNull(spWeb, nameof(spWeb)); SqlDateTime dateTimeFrom; SqlDateTime dateTimeTo; bool getCompletedItems; var listIdQuery = ListIdQuery(data, out dateTimeFrom, out dateTimeTo, out getCompletedItems); Guid myWorkListId; var theWeb = spWeb; var lockedWeb = CoreFunctions.getLockedWeb(theWeb); using (var configWeb = Utils.GetConfigWeb(theWeb, lockedWeb)) { myWorkListId = configWeb.Lists[MyWorkText].ID; } var tables = new List <DataTable>(); DataTable myWorkDataTable; DataTable fieldsTable; DataTable flagsTable; var siteId = spWeb.Site.ID; using (var myWorkReportData = new MyWorkReportData(siteId)) { MapCompleteField(spWeb, myWorkReportData); string sql; var currentUser = CurrentUser(spWeb, listIdQuery, getCompletedItems, siteId, dateTimeFrom, dateTimeTo, out sql); IEnumerable <string> columns; IList <string> lists; IEnumerable <DataTable> enumerable = null; if (ProcessDataTables(myWorkReportData, sql, tables, myWorkListId, out myWorkDataTable, out columns, out lists, ref enumerable)) { return(enumerable); } sql = $@"SELECT ColumnName, InternalName, SharePointType, RPTListId AS ListId FROM dbo.RPTColumn WHERE (ColumnName IN ({string.Join(Comma, columns.ToArray())})) AND (RPTListId IN ({string.Join(Comma, lists.ToArray())}))"; fieldsTable = myWorkReportData.ExecuteSql(sql); sql = $@"SELECT ListId, ItemId, Value FROM dbo.PERSONALIZATIONS WHERE [Key] = 'Flag' AND UserId = N'{currentUser.LoginName.ToSqlCompliant()}'"; flagsTable = myWorkReportData.ExecuteEpmLiveSql(sql); flagsTable.PrimaryKey = new[] { flagsTable.Columns[ListId], flagsTable.Columns[ItemId] }; } AddTables(spWeb, myWorkDataTable, fieldsTable, flagsTable, tables); return(tables); }
/// <summary> /// Maps the complete field. /// </summary> /// <param name="spWeb">The sp web.</param> /// <param name="myWorkReportData">My work report data.</param> private static void MapCompleteField(SPWeb spWeb, MyWorkReportData myWorkReportData) { Guard.ArgumentIsNotNull(spWeb, nameof(spWeb)); Guard.ArgumentIsNotNull(myWorkReportData, nameof(myWorkReportData)); using (var spSite = new SPSite(spWeb.Site.ID)) { using (var web = spSite.OpenWeb(CoreFunctions.getLockedWeb(spWeb))) { bool added; bool.TryParse(CoreFunctions.getConfigSetting(web, EpmLiveMyWorkCompleteFieldAdded), out added); if (added) { return; } var query = $@"SELECT DISTINCT dbo.RPTList.RPTListId AS ListId, dbo.RPTColumn.InternalName AS Col FROM dbo.RPTList INNER JOIN dbo.RPTColumn ON dbo.RPTList.RPTListId = dbo.RPTColumn.RPTListId WHERE (dbo.RPTList.ListName = N'My Work') AND (dbo.RPTList.SiteId = '{spWeb.Site.ID}')"; var table = myWorkReportData.ExecuteSql(query); table.PrimaryKey = new[] { table.Columns[ListId], table.Columns[Col] }; var listId = table.Rows[0][ListId]; var row = table.Rows.Find(new[] { listId, Complete }); if (row == null) { try { var columns = new List <ColumnDef> { new ColumnDef(Complete, Complete, Complete, SPFieldType.Boolean, SqlDbType.Bit) }; myWorkReportData.InsertListColumns((Guid)listId, columns); myWorkReportData.AddColumns(LstMyWork, columns); } catch (Exception exception) { Trace.WriteLine(exception); throw new APIException(2014, UnableToMapReportingDatabase); } } CoreFunctions.setConfigSetting(web, EpmLiveMyWorkCompleteFieldAdded, true.ToString()); } } }
public void SetUp() { _shimsContext = ShimsContext.Create(); _adoShims = AdoShims.ShimAdoNetCalls(); _sharepointShims = SharepointShims.ShimSharepointCalls(); _testObj = new MyWorkReportData(new Guid(), ReportData, Server, false, Username, Password); _privateObj = new PrivateObject(_testObj); ShimSPList.AllInstances.ParentWebGet = _ => new ShimSPWeb(); ShimSPWeb.AllInstances.SiteGet = _ => new ShimSPSite(); ShimDateTime.NowGet = () => DefaultDate; }
/// <summary> /// Gets my work data for resources. /// </summary> /// <param name="resources">The resources.</param> /// <param name="reportingScope">The reporting scope.</param> /// <param name="startDate">The start date.</param> /// <param name="dueDate">The due date.</param> /// <returns></returns> private DataTable GetMyWorkDataForResources(IEnumerable <SPFieldUserValue> resources, ReportingScope reportingScope, DateTime startDate, DateTime dueDate) { DataTable dataTable; using (var myWorkReportData = new MyWorkReportData(Web.Site.ID)) { dataTable = myWorkReportData.GetData(new Dictionary <string, IEnumerable <object> > { { "AssignedToId", from r in resources select(object) r.LookupId }, { "StartDate", new[] { (object)startDate } }, { "DueDate", new[] { (object)dueDate } }, }, reportingScope, Web); } return(dataTable); }
private static bool ProcessDataTables( MyWorkReportData myWorkReportData, string sql, IList <DataTable> tables, Guid myWorkListId, out DataTable myWorkDataTable, out IEnumerable <string> columns, out IList <string> lists, ref IEnumerable <DataTable> enumerable) { Guard.ArgumentIsNotNull(myWorkReportData, nameof(myWorkReportData)); Guard.ArgumentIsNotNull(tables, nameof(tables)); var dataTable = myWorkReportData.ExecuteSql(sql); myWorkDataTable = new DataTable(); foreach (DataColumn dataColumn in dataTable.Columns) { myWorkDataTable.Columns.Add(dataColumn.ColumnName, dataColumn.DataType); } IEnumerable <DataTable> dataTables = null; if (DataFromReportingDb(dataTable, myWorkDataTable, tables, ref dataTables)) { { enumerable = dataTables; columns = null; lists = null; return(true); } } columns = from DataColumn dataColumn in myWorkDataTable.Columns select $@"N'{dataColumn.ColumnName}'"; lists = new List <string> { $@"N'{myWorkListId.ToString() .Replace(OpenCurlyBrace, string.Empty) .Replace(ClosedCurlyBrace, string.Empty)}'" }; foreach (DataRow dataRow in myWorkDataTable.Rows) { var listId = dataRow[ListId].ToString(); var lstId = $@"N'{listId}'"; if (!lists.Contains(lstId)) { lists.Add(lstId); } var uniqueId = (listId + dataRow[WebIdText] + dataRow[SiteId]).Md5(); if (!GetMyWorkParams.WorkTypes.ContainsKey(uniqueId)) { GetMyWorkParams.WorkTypes.Add(uniqueId, dataRow[WorkType].ToString()); } } return(false); }