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