Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }