コード例 #1
0
        private void SaveWork()
        {
            bool bHasChangedWork       = false;
            bool bHasChangedAssignedTo = false;
            bool bHasChangedStartDate  = false;
            bool bHasChangedDueDate    = false;

            Guid   siteId    = _siteId;
            Guid   listId    = _listItem.ParentList.ID;
            string listTitle = _listItem.ParentList.Title;

            try
            {
                //List item "work" fields -- START
                string sWork       = string.Empty;
                string sAssignedTo = string.Empty;
                object startDate   = DBNull.Value;
                object dueDate     = DBNull.Value;

                if (ItemHasValue(_listItem, "Work"))
                {
                    try
                    {
                        sWork = _listItem["Work"].ToString();

                        switch (_properties.EventType)
                        {
                        case SPEventReceiverType.ItemAdded:
                            bHasChangedWork = true;
                            break;

                        case SPEventReceiverType.ItemUpdated:
                            if (_properties.ListItem["Work"] != null &&
                                Math.Round(Convert.ToDouble(_currentValues["Work"].ToString()), 2) !=
                                Math.Round(Convert.ToDouble(sWork), 2))
                            {
                                bHasChangedWork = true;
                            }
                            break;
                        }
                    }
                    catch { }
                }

                if (ItemHasValue(_listItem, "AssignedTo"))
                {
                    try
                    {
                        sAssignedTo = ReportData.AddLookUpFieldValues(_listItem["AssignedTo"].ToString(), "id");

                        switch (_properties.EventType)
                        {
                        case SPEventReceiverType.ItemAdded:
                            bHasChangedAssignedTo = true;
                            break;

                        case SPEventReceiverType.ItemUpdated:
                            if (_properties.ListItem["AssignedTo"] != null)
                            {
                                var lIdsBefore =
                                    new List <int>(
                                        _currentValues["AssignedToIDs"].ToString()
                                        .TrimEnd(',')
                                        .Split(',')
                                        .Select(int.Parse));
                                var lookupValAfter =
                                    new SPFieldLookupValueCollection(_properties.ListItem["AssignedTo"].ToString());
                                List <int> lIdsAfter = lookupValAfter.Select(v => v.LookupId).ToList();

                                bool execute = false;
                                if (lIdsBefore.Count() != lIdsAfter.Count())
                                {
                                    execute = true;
                                }
                                else
                                {
                                    bool containsAll = lIdsBefore.All(lIdsAfter.Contains);
                                    if (!containsAll)
                                    {
                                        execute = true;
                                    }
                                }

                                if (execute)
                                {
                                    bHasChangedAssignedTo = true;
                                }
                            }
                            break;
                        }
                    }
                    catch { }
                }


                if (ItemHasValue(_listItem, "StartDate"))
                {
                    try
                    {
                        startDate = _listItem["StartDate"];

                        switch (_properties.EventType)
                        {
                        case SPEventReceiverType.ItemAdded:
                            bHasChangedStartDate = true;
                            break;

                        case SPEventReceiverType.ItemUpdated:
                            if (_properties.ListItem["StartDate"] != null)
                            {
                                DateTime dateBefore =
                                    Convert.ToDateTime(_currentValues["StartDate"].ToString())
                                    .ToUniversalTime()
                                    .Date;
                                DateTime dateAfter =
                                    Convert.ToDateTime(_properties.ListItem["StartDate"].ToString())
                                    .ToUniversalTime()
                                    .Date;

                                if (dateBefore != dateAfter)
                                {
                                    bHasChangedStartDate = true;
                                }
                            }
                            break;
                        }
                    }
                    catch { }
                }


                if (ItemHasValue(_listItem, "DueDate"))
                {
                    try
                    {
                        dueDate = _listItem["DueDate"];

                        switch (_properties.EventType)
                        {
                        case SPEventReceiverType.ItemAdded:
                            bHasChangedDueDate = true;
                            break;

                        case SPEventReceiverType.ItemUpdated:
                            if (_properties.ListItem["DueDate"] != null)
                            {
                                DateTime dueDateBefore =
                                    Convert.ToDateTime(_currentValues["DueDate"].ToString()).ToUniversalTime().Date;
                                DateTime dueDateAfter =
                                    Convert.ToDateTime(_properties.ListItem["DueDate"].ToString())
                                    .ToUniversalTime()
                                    .Date;

                                if (dueDateBefore != dueDateAfter)
                                {
                                    bHasChangedDueDate = true;
                                }
                            }
                            break;
                        }
                    }
                    catch { }
                }



                if (!bHasChangedWork && !bHasChangedAssignedTo && !bHasChangedStartDate && !bHasChangedDueDate)
                {
                    return;
                }

                if (_myWorkReportData.ProcessAssignments(sWork.Replace("'", ""), sAssignedTo, startDate, dueDate,
                                                         listId, siteId, _listItem.ID, listTitle))
                {
                    return;
                }

                _myWorkReportData.LogStatus(Convert.ToString(listId), listTitle, "SaveWork() failed.",
                                            _myWorkReportData.GetError().Replace("'", ""), 2, 3, string.Empty);
            }
            catch (Exception ex)
            {
                _myWorkReportData.LogStatus(Convert.ToString(listId), listTitle,
                                            string.Format("SaveWork() failed. Web: {0} List: {1} Item: {2} ", _listItem.ParentList.ParentWeb.Title,
                                                          listTitle, _listItem.Title, ex.Message.Replace("'", "")), ex.StackTrace.Replace("'", ""), 2, 3,
                                            string.Empty);
            }
        }