Exemplo n.º 1
0
        /// <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);
        }
        public DuplicatesMergeResponse MergeEntityDuplicatesAsync(string schemaName, int groupId, List <Guid> deduplicateRecordIds,
                                                                  string mergeConfig)
        {
            Dictionary <string, string> config = null;

            if (!string.IsNullOrEmpty(mergeConfig))
            {
                config = JsonConvert.DeserializeObject <Dictionary <string, string> >(mergeConfig);
            }
            var args = new ConstructorArgument[] {
                new ConstructorArgument("userConnection", UserConnection)
            };
            DeduplicationProcessing deduplicationProcessing = ClassFactory.Get <DeduplicationProcessing>(args);
            DuplicatesMergeResponse response =
                deduplicationProcessing.MergeEntityDuplicatesAsync(schemaName, groupId, deduplicateRecordIds, config);

            return(response);
        }