Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <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);
        }
Пример #4
0
        /// <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;
        }
Пример #6
0
        /// <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);
        }