/// <summary> /// Invokes search process. /// </summary> /// <param name="schemaName">Schema name.</param> /// <returns>Instance <see cref="DuplicatesSearchResponse"/> results for search process execution.</returns> public virtual DuplicatesSearchResponse FindEntityDuplicatesAsync(string schemaName) { DuplicatesSearchResponse result = new DuplicatesSearchResponse() { Message = GetLczStringValue("CommonErrorMessage") }; if (!Locker.CanExecute(DeduplicationConsts.SearchOperationId, schemaName)) { result.Message = GetLczStringValue("InProgressMessage"); return(result); } string jobName = string.Format(JobNamePattern, schemaName); string processName = "DeduplicationActionProcess"; var parameters = new Dictionary <string, object>() { { "SchemaName", schemaName }, { "OperationId", DeduplicationConsts.SearchOperationId } }; AppScheduler.ScheduleImmediateProcessJob(jobName, QuartzJobGroup, processName, _userConnection.Workspace.Name, _userConnection.CurrentUser.Name, parameters); result.Success = true; result.Message = GetLczStringValue("SuccessMessage"); return(result); }
public DuplicatesSearchResponse FindEntityDuplicatesAsync(string schemaName) { var args = new ConstructorArgument[] { new ConstructorArgument("userConnection", UserConnection) }; DeduplicationSearch deduplicationSearch = ClassFactory.Get <DeduplicationSearch>(args); DuplicatesSearchResponse response = deduplicationSearch.FindEntityDuplicatesAsync(schemaName); return(response); }
/// <summary> /// Gets Search execution info from log /// </summary> /// <param name="schemaName">Schema name.</param> /// <returns>Instance <see cref="DuplicatesSearchResponse"/> results info search process execution.</returns> public virtual DuplicatesSearchResponse GetInfo(string schemaName) { DuplicatesSearchResponse result = new DuplicatesSearchResponse(); var esq = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "DeduplicateExecLocker"); esq.PrimaryQueryColumn.IsAlwaysSelect = true; esq.AddColumn(esq.RootSchema.GetPrimaryColumnName()); EntitySchemaQueryColumn completedOnColumn = esq.AddColumn("Conversation.ExecutedOn"); EntitySchemaQueryColumn isInProgressColumn = esq.AddColumn("IsInProgress"); esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "EntitySchemaName", new object[] { schemaName })); esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Operation", new object[] { DeduplicationConsts.SearchOperationId })); EntityCollection esqCollection = esq.GetEntityCollection(_userConnection); bool isExists = CheckExistsSearchDuplicatesJob(schemaName); if (esqCollection.Any()) { Entity entity = esqCollection[0]; bool isInProgress = entity.GetTypedColumnValue <bool>(isInProgressColumn.Name) || isExists; DateTime completedOnValue = entity.GetTypedColumnValue <DateTime>(completedOnColumn.Name); result.Success = true; result.Response = new Dictionary <string, string>() { { "LastExecutionDate", DateTimeDataValueType.Serialize(completedOnValue, TimeZoneInfo.Utc) }, { "IsInProgress", JsonConvert.SerializeObject(isInProgress) } }; } else { if (isExists) { result.Success = true; result.Response = new Dictionary <string, string>() { { "IsInProgress", JsonConvert.SerializeObject(true) } }; } } return(result); }