/// <summary> /// Convert ReviewsetDocumentBEOs to BulkDocumentInfoBEOs /// </summary> /// <param name="reviewsetDocuments">List of ReviewsetDocumentBEOs</param> /// <returns>List of BulkDocumentInfoBEOs</returns> private List <BulkDocumentInfoBEO> ConvertToBulkDocumentInfoBEO(List <ReviewsetDocumentBEO> reviewsetDocuments) { reviewsetDocuments.ShouldNotBe(null); var currentUser = EVSessionManager.Get <UserSessionBEO>(Constants.UserSessionInfo); var bulkTagDocuments = new List <BulkDocumentInfoBEO>(); reviewsetDocuments.ForEach(document => bulkTagDocuments.Add(new BulkDocumentInfoBEO { CreatedBy = currentUser != null ? currentUser.UserGUID : string.Empty, DocumentId = document.DocumentId, DCN = document.DCN, FamilyId = document.FamilyId, FromOriginalQuery = true })); return(bulkTagDocuments); }
/// <summary> /// Atomic work 1) Search 2) Notify 3) Update task details back to database. /// </summary> /// <param name="task"></param> /// <param name="jobParameters"></param> /// <returns></returns> protected override bool DoAtomicWork(SearchAlertsTaskBEO task, SearchAlertsJobBEO jobParameters) { var statusFlag = Constants.FAILURE; // Function return status. var queryTostore = string.Empty; DocumentQueryEntity searchBizEntityObj = null; try { //Get Previous Run Details var prevAlertRunDetails = m_Helper.GetPreviousAlertRunDetails(task.SearchAlert.AlertId); if (prevAlertRunDetails.Count > 0 && prevAlertRunDetails.Count == 7) { m_AlertLastRunTimestamp = Convert.ToDateTime(prevAlertRunDetails[0]); m_LastResultCount = Convert.ToInt32(prevAlertRunDetails[1]); m_ManualAlertNextRunDate = Convert.ToDateTime(prevAlertRunDetails[2]); var searchQuery = prevAlertRunDetails[3]; if (!string.IsNullOrEmpty(searchQuery)) { searchBizEntityObj = (DocumentQueryEntity) XmlUtility.DeserializeObject(searchQuery, typeof(DocumentQueryEntity)); if (searchBizEntityObj != null) { m_PrevSearchQuery = HttpUtility.HtmlDecode( (searchBizEntityObj.QueryObject.DisplayQuery.Split(new[] { Constants.ThreeTilde }, StringSplitOptions.None))[0]); } } var createdBy = prevAlertRunDetails[6]; //the below block of code is required to pass the user details who has actually created or updated the alert so that search can use the same // to check various business rules. var adminUserSession = EVSessionManager.Get <UserSessionBEO>(Constants.UserSessionInfo); var currentAlertUser = UserBO.GetUserUsingGuid(createdBy); if (currentAlertUser != null) { SetContext(adminUserSession, currentAlertUser, true); } var originalQuery = HttpUtility.HtmlDecode(task.SearchAlert.DocumentQuery.QueryObject.DisplayQuery); var generatedQuery = PopulateQuery(task, originalQuery, currentAlertUser.Timezone); //now modify the query in order to distinguish between all results and new results. This will be used in the UI. queryTostore = originalQuery + Constants.QUERY_DELIMETER + generatedQuery.Item3; // 1st time both will be the same so execute search only once. if (generatedQuery.Item1) { // Get only the all doc result count. This will be executed only for 1st time. m_AllResultCount = GetAlertResultCount(searchBizEntityObj, originalQuery); m_NewResultCount = m_AllResultCount; } else { // Get the new result count m_NewResultCount = GetAlertResultCount(searchBizEntityObj, generatedQuery.Item2); // Get the all docs result count m_AllResultCount = GetAlertResultCount(searchBizEntityObj, originalQuery); } ConstructNotificationMessage(task, originalQuery, searchBizEntityObj); statusFlag = Constants.SUCCESS; } } catch (EVException ex) { HandleEVException(ex, MethodBase.GetCurrentMethod().Name, task); statusFlag = Constants.FAILURE; var taskException = new EVTaskException(ex.GetErrorCode(), ex, TaskLogInfo); throw (taskException); } catch (Exception ex) { // Handle exception in initialize LogMessage(ex.Message, MethodBase.GetCurrentMethod().Name, EventLogEntryType.Error, task); statusFlag = Constants.FAILURE; var taskException = new EVTaskException(ErrorCodes.ProblemInDoAtomicWork, ex, TaskLogInfo); throw (taskException); } finally { try { task.SearchAlert.ActualOccurrenceCount = task.SearchAlert.ActualOccurrenceCount + 1; task.SearchAlert.DocumentQuery.QueryObject.QueryList.Clear(); task.SearchAlert.DocumentQuery.QueryObject.QueryList.AddRange(new List <Query> { new Query { SearchQuery = queryTostore, Precedence = 1 } }); // 3. Update alert details back to database m_Helper.UpdateAlertPostNotification(task.SearchAlert.ActualOccurrenceCount, DateTime.UtcNow, m_NewResultCount, m_AllResultCount, m_ManualAlertNextRunDate != DateTime.MinValue ? m_ManualAlertNextRunDate : m_Helper.CalculateNextRunTimeStampForAlert( task.SearchAlert.Duration, task.SearchAlert.NextRunDate), task.SearchAlert.AlertId, task.SearchAlert.NotificationId, jobParameters.JobRunId, XmlUtility.SerializeObject(task.SearchAlert.DocumentQuery)); } catch (EVException ex) { HandleEVException(ex, MethodBase.GetCurrentMethod().Name, task); statusFlag = Constants.FAILURE; } catch (Exception ex) { // Handle exception in initialize LogMessage(Constants.FAILED_MESSAGE + ex.Message, MethodBase.GetCurrentMethod().Name, EventLogEntryType.Error, task); statusFlag = Constants.FAILURE; } } return(statusFlag); // function return status. }