/// <summary> /// Invokes merge process /// </summary> /// <param name="schemaName">Schema name.</param> /// <param name="groupId">Identifier of the group of search results</param> /// <param name="deduplicateRecordIds">Unique identifiers.</param> /// <param name="resolvedConflicts">Config for resolving conflicts.</param> /// <returns>Instance <see cref="DuplicatesMergeResponse"/> results for merge process execution.</returns> public virtual DuplicatesMergeResponse MergeEntityDuplicatesAsync(string schemaName, int groupId, List <Guid> duplicateRecordIds, Dictionary <string, string> resolvedConflicts = null) { DuplicatesMergeResponse result = new DuplicatesMergeResponse(); if (!Locker.CanExecute(DeduplicationConsts.SearchOperationId, schemaName)) { return(result); } ValidateDuplicatesResponse response = MergeHandler.ValidateDuplicates(schemaName, duplicateRecordIds, resolvedConflicts); if (response.ConflictsExists) { result.Conflicts = response.Conflicts; return(result); } MergeHandler.ExcludeSearchResultGroup(schemaName, groupId); string jobName = string.Format(MergeDuplicatesJobNamePattern, schemaName, Guid.NewGuid()); var parameters = new Dictionary <string, object>() { { "SchemaName", schemaName }, { "OperationId", DeduplicationConsts.MergeOperationId }, { "DuplicateGroupId", groupId }, { "DuplicateRecordIds", duplicateRecordIds }, { "ResolvedConflicts", resolvedConflicts } }; AppScheduler.ScheduleImmediateProcessJob(jobName, "Dedublication", MergeDuplicatesProcessName, _userConnection.Workspace.Name, _userConnection.CurrentUser.Name, parameters); result.Success = true; return(result); }
/// <summary> /// Begin search process. /// </summary> public void BeginSearch() { Guid operationId = DeduplicationConsts.SearchOperationId; bool isFeatureEnable = _userConnection.GetIsFeatureEnabled("FindDuplicatesOnSave"); string tspFindDuplicateName = string.Format(FindDuplicateProcedurePattern, _schemaName); if (isFeatureEnable) { tspFindDuplicateName = string.Format(FindDuplicateProcedurePattern, String.Empty); } if (!Locker.CanExecute(operationId, _schemaName)) { return; } Guid conversationId = ConversationProvider.BeginConversation(tspFindDuplicateName); try { Locker.SetLockState(conversationId, _schemaName, operationId, true); var storedProcedure = new StoredProcedure(_userConnection, tspFindDuplicateName); if (isFeatureEnable) { storedProcedure.WithParameter("schemaName", _schemaName); storedProcedure.WithParameter("xmlRows", String.Empty); storedProcedure.WithParameter("sysAdminUnit", _userConnection.CurrentUser.Id); } storedProcedure.Execute(); ConversationProvider.EndConversation(conversationId); CreateSuccessReminding(); } catch (Exception e) { ConversationProvider.EndConversationWithError(conversationId, CommonSqlExceptionCode, e.Message); CreateReminding(_userConnection.GetLocalizableString("DeduplicationActionHelper", "FaildDuplicatesSearchMessage")); } finally { Locker.SetLockState(conversationId, _schemaName, operationId, false); } }
/// <summary> /// Begin merge process. /// </summary> /// <param name="groupId">Identifier of the group of search results.</param> /// <param name="duplicateRecordIds">Collection of duplicate entity id.</param> /// <param name="resolvedConflicts">Config for resolving conflicts.</param> public void BeginMerge(int groupId, List <Guid> duplicateRecordIds, Dictionary <string, string> resolvedConflicts) { string mergeProcedure = string.Format(MergeProcedurePattern, _schemaName); if (!Locker.CanExecute(DeduplicationConsts.SearchOperationId, _schemaName)) { return; } var handler = ClassFactory.Get <DeduplicationMergeHandler>( new ConstructorArgument("userConnection", _userConnection)); handler.MergeEntityDublicates(_schemaName, groupId, duplicateRecordIds, resolvedConflicts); }