コード例 #1
0
        private Guid GetDuplicateRuleId(string duplicateRuleName)
        {
            using (var context = new CIContext(OrganizationService))
            {
                base.WriteVerbose(string.Format("Querying a duplicate rule with the name: {0}", duplicateRuleName));

                var query = from rule in context.DuplicateRuleSet
                            where rule.Name == duplicateRuleName
                            select new DuplicateRule
                {
                    Id   = rule.Id,
                    Name = rule.Name
                };

                DuplicateRule duplicateRule = query.FirstOrDefault();

                if (duplicateRule == null)
                {
                    var error = string.Format("Duplicate rule with the name '{0}' could not be found", duplicateRuleName);
                    throw new ArgumentOutOfRangeException(nameof(duplicateRuleName), error);
                }

                base.WriteVerbose(string.Format("Found a duplicate rule with the Id: {0}", duplicateRule.Id));

                return(duplicateRule.Id);
            }
        }
コード例 #2
0
        public IActionResult CreateDuplicateRule(EditDuplicateRuleModel model)
        {
            if (ModelState.IsValid)
            {
                var entity = new DuplicateRule();
                model.CopyTo(entity);
                entity.DuplicateRuleId = Guid.NewGuid();
                entity.CreatedBy       = CurrentUser.SystemUserId;
                var conditions = new List <DuplicateRuleCondition>();
                int i          = 0;
                foreach (var item in model.AttributeId)
                {
                    var cd = new DuplicateRuleCondition
                    {
                        DuplicateRuleConditionId = Guid.NewGuid(),
                        DuplicateRuleId          = entity.DuplicateRuleId,
                        EntityId         = model.EntityId,
                        IgnoreNullValues = model.IgnoreNullValues[i],
                        IsCaseSensitive  = model.IsCaseSensitive[i],
                        AttributeId      = item
                    };
                    conditions.Add(cd);
                    i++;
                }
                entity.Conditions = conditions;

                _duplicateRuleCreater.Create(entity);
                return(CreateSuccess(new { id = entity.DuplicateRuleId }));
            }
            var msg = GetModelErrors(ModelState);

            return(CreateFailure(msg));
        }
コード例 #3
0
        /// <summary>
        /// Creates any entity records that this sample requires.
        /// </summary>
        public static void CreateRequiredRecords(CrmServiceClient service)
        {
            // Create an account record named Fourth Coffee.
            var account = new Account
            {
                Name          = "Fourth Coffee",
                AccountNumber = "ACC005"
            };

            accountId = service.Create(account);
            Console.Write("Account {0} {1} created, ", account.Name, account.AccountNumber);

            // Create a duplicate detection rule
            var accountDuplicateRule = new DuplicateRule
            {
                Name               = "DuplicateRule: Accounts with the same Account Number",
                BaseEntityName     = "account",
                MatchingEntityName = "account"
            };

            ruleId = service.Create(accountDuplicateRule);

            // Create a duplicate detection rule condition
            DuplicateRuleCondition accountDupCondition = new DuplicateRuleCondition
            {
                BaseAttributeName     = "accountnumber",
                MatchingAttributeName = "accountnumber",
                OperatorCode          = new OptionSetValue(0), // Exact Match.
                RegardingObjectId     = new EntityReference(DuplicateRule.EntityLogicalName, ruleId)
            };
            Guid conditionId = service.Create(accountDupCondition);

            Console.Write("'{0}' created, ", accountDuplicateRule.Name);

            // Execute the publish request.
            var response =
                (PublishDuplicateRuleResponse)service.Execute(new PublishDuplicateRuleRequest()
            {
                DuplicateRuleId = ruleId
            });

            // When the publishDuplicateRule request returns, the state of the rule will still be "Publishing" (StatusCode = 1).
            // we need to wait for the publishing operation to complete, so we keep polling the state of the
            // rule until it becomes "Published" (StatusCode = 2).
            int i             = 0;
            var retrievedRule =
                (DuplicateRule)service.Retrieve(DuplicateRule.EntityLogicalName, ruleId, new ColumnSet(new String[] { "statuscode" }));

            while (retrievedRule.StatusCode.Value == 1 && i < 20)
            {
                i++;
                System.Threading.Thread.Sleep(1000);
                retrievedRule =
                    (DuplicateRule)service.Retrieve(DuplicateRule.EntityLogicalName, ruleId, new ColumnSet(new String[] { "statuscode" }));
            }

            Console.Write("published.\n");
        }
コード例 #4
0
ファイル: DuplicateRuleUpdater.cs プロジェクト: xixiky/xms
        public bool Update(DuplicateRule entity)
        {
            var result = false;

            using (UnitOfWork.Build(_duplicateRuleRepository.DbContext))
            {
                result = _duplicateRuleRepository.Update(entity);
                //依赖于字段
                _dependencyService.Update(entity);
                //localization
                _localizedLabelService.Update(entity.Name.IfEmpty(""), "LocalizedName", entity.DuplicateRuleId, _appContext.BaseLanguage);
                _localizedLabelService.Update(entity.Description.IfEmpty(""), "Description", entity.DuplicateRuleId, _appContext.BaseLanguage);
                //set to cache
                _cacheService.SetEntity(entity);
            }
            return(result);
        }
コード例 #5
0
ファイル: DuplicateRuleCreater.cs プロジェクト: xixiky/xms
        public bool Create(DuplicateRule entity)
        {
            entity.SolutionId = SolutionDefaults.DefaultSolutionId;//组件属于默认解决方案
            var result = false;

            using (UnitOfWork.Build(_duplicateRuleRepository.DbContext))
            {
                result = _duplicateRuleRepository.Create(entity);
                //检测条件
                if (entity.Conditions.NotEmpty())
                {
                    foreach (var item in entity.Conditions)
                    {
                        item.EntityId = entity.EntityId;
                    }
                    result = _duplicateRuleConditionService.CreateMany(entity.Conditions);
                }
                //依赖于字段
                _dependencyService.Create(entity);
                //本地化标签
                _localizedLabelService.Create(entity.SolutionId, entity.Name.IfEmpty(""), DuplicateRuleDefaults.ModuleName, "LocalizedName", entity.DuplicateRuleId, this._appContext.BaseLanguage);
                _localizedLabelService.Create(entity.SolutionId, entity.Description.IfEmpty(""), DuplicateRuleDefaults.ModuleName, "Description", entity.DuplicateRuleId, this._appContext.BaseLanguage);
                //plugin
                _entityPluginCreater.Create(new EntityPlugin()
                {
                    AssemblyName = DuplicateRuleDefaults.AssemblyName
                    ,
                    ClassName = DuplicateRuleDefaults.PluginClassName
                    ,
                    EntityId = entity.EntityId
                    ,
                    EventName = Enum.GetName(typeof(OperationTypeEnum), OperationTypeEnum.Create)
                    ,
                    IsVisibled = false
                    ,
                    TypeCode = 0
                    ,
                    StateCode = RecordState.Enabled
                });
                //add to cache
                _cacheService.SetEntity(entity);
            }
            return(result);
        }
コード例 #6
0
        /// <summary>
        /// Creates any entity records that this sample requires.
        /// </summary>
        public static void CreateRequiredRecords(CrmServiceClient service)
        {
            String accountName = "Contoso, Ltd";
            String websiteUrl  = "http://www.contoso.com/";

            Console.WriteLine("  Creating duplicate records (Account name={0}, Website URL={1})", accountName,
                              websiteUrl);
            // Create some duplicate records
            for (int i = 0; i < 2; i++)
            {
                var account = new Account()
                {
                    Name       = accountName,
                    WebSiteURL = websiteUrl
                };
                account.Id           = service.Create(account);
                duplicateAccounts[i] = account;
            }

            accountName = "Contoso Pharmaceuticals";
            Console.WriteLine("  Creating a non-duplicate record (Account name={0}, Website URL={1})",
                              accountName, websiteUrl);

            // Create a record that is NOT a duplicate
            var distinctAccount = new Account()
            {
                Name       = accountName,
                WebSiteURL = websiteUrl
            };

            distinctAccount.Id = service.Create(distinctAccount);
            account            = distinctAccount;


            Console.WriteLine("  Creating a duplicate detection rule");
            // Create a duplicate detection rule
            rule = new DuplicateRule()
            {
                Name               = "Accounts with the same Account name and website url",
                BaseEntityName     = Account.EntityLogicalName,
                MatchingEntityName = Account.EntityLogicalName
            };
            rule.Id = service.Create(rule);

            // Create a duplicate detection rule condition
            var nameCondition = new DuplicateRuleCondition()
            {
                BaseAttributeName     = "name",
                MatchingAttributeName = "name",
                OperatorCode          = new OptionSetValue(0), // value 0 = 'exact match'
                // set the regarding id to point to the rule created earlier,
                // associating this condition with that rule
                RegardingObjectId = rule.ToEntityReference()
            };

            service.Create(nameCondition);

            var websiteCondition = new DuplicateRuleCondition()
            {
                BaseAttributeName     = "websiteurl",
                MatchingAttributeName = "websiteurl",
                OperatorCode          = new OptionSetValue(0),
                RegardingObjectId     = rule.ToEntityReference()
            };

            service.Create(websiteCondition);

            Console.WriteLine("  Publishing duplicate detection rule");
            // Publish the rule
            var publishRequest = new PublishDuplicateRuleRequest()
            {
                DuplicateRuleId = rule.Id
            };
            var publishResponse = (PublishDuplicateRuleResponse)service.Execute(publishRequest);

            // The PublishDuplicateRule request returns before the publish is completed,
            // so we keep retrieving the async job state until it is "Completed"
            Console.WriteLine("  Checking to see if duplicate detection rule has finished publishing");
            WaitForAsyncJobToFinish(service, publishResponse.JobId, 120);
        }
コード例 #7
0
 public bool Update(DuplicateRule entity)
 {
     //依赖于字段
     return(_dependencyService.Update(DuplicateRuleDefaults.ModuleName, entity.DuplicateRuleId, AttributeDefaults.ModuleName, entity.Conditions.Select(x => x.AttributeId).ToArray()));
 }
コード例 #8
0
ファイル: DuplicateRuleCache.cs プロジェクト: xixiky/xms
 public static string BuildKey(DuplicateRule entity)
 {
     return(entity.EntityId + "/" + entity.DuplicateRuleId.ToString() + "/");
 }
コード例 #9
0
        /// <summary>
        /// Creates any entity records that this sample requires.
        /// </summary>
        public void CreateRequiredRecords()
        {
            #region Creating Accounts

            String accountName = "Contoso, Ltd";
            String websiteUrl = "http://www.contoso.com/";

            Console.WriteLine("  Creating duplicate records (Account name={0}, Website URL={1})", accountName, 
                websiteUrl);
            // Create some duplicate records
            for (int i = 0; i < 2; i++)
            {
                Account account = new Account()
                {
                    Name = accountName,
                    WebSiteURL = websiteUrl
                };
                account.Id = _serviceProxy.Create(account);
                _duplicateAccounts[i] = account;
            }

            accountName = "Contoso Pharmaceuticals";
            Console.WriteLine("  Creating a non-duplicate record (Account name={0}, Website URL={1})", 
                accountName, websiteUrl);
            // Create a record that is NOT a duplicate
            Account distinctAccount = new Account()
            {
                Name = accountName,
                WebSiteURL = websiteUrl
            };
            distinctAccount.Id = _serviceProxy.Create(distinctAccount);
            _account = distinctAccount;

            #endregion

            #region Create and Publish duplicate detection rule

            Console.WriteLine("  Creating a duplicate detection rule");
            // Create a duplicate detection rule
            _rule = new DuplicateRule()
            {
                Name = "Accounts with the same Account name and website url",
                BaseEntityName = Account.EntityLogicalName,
                MatchingEntityName = Account.EntityLogicalName
            };
            _rule.Id = _serviceProxy.Create(_rule);

            // Create a duplicate detection rule condition
            DuplicateRuleCondition nameCondition = new DuplicateRuleCondition()
            {
                BaseAttributeName = "name",
                MatchingAttributeName = "name",
                OperatorCode = new OptionSetValue(0), // value 0 = 'exact match'
                // set the regarding id to point to the rule created earlier,
                // associating this condition with that rule
                RegardingObjectId = _rule.ToEntityReference()
            };
            _serviceProxy.Create(nameCondition);

            DuplicateRuleCondition websiteCondition = new DuplicateRuleCondition()
            {
                BaseAttributeName = "websiteurl",
                MatchingAttributeName = "websiteurl",
                OperatorCode = new OptionSetValue(0),
                RegardingObjectId = _rule.ToEntityReference()
            };
            _serviceProxy.Create(websiteCondition);

            Console.WriteLine("  Publishing duplicate detection rule");
            // Publish the rule
            PublishDuplicateRuleRequest publishRequest = new PublishDuplicateRuleRequest()
            {
                DuplicateRuleId = _rule.Id
            };
            PublishDuplicateRuleResponse publishResponse = (PublishDuplicateRuleResponse)_serviceProxy.Execute(publishRequest);

            // The PublishDuplicateRule request returns before the publish is completed,
            // so we keep retrieving the async job state until it is "Completed"
            Console.WriteLine("  Checking to see if duplicate detection rule has finished publishing");
            WaitForAsyncJobToFinish(publishResponse.JobId, 60);

            #endregion
        }
コード例 #10
0
        /// <summary>
        /// Creates any entity records that this sample requires.
        /// </summary>
        public void CreateRequiredRecords()
        {
            // Create an account record named Fourth Coffee.
            Account account = new Account 
            { 
                Name = "Fourth Coffee",
                AccountNumber = "ACC005"
            };            
            _accountId = _service.Create(account);
            Console.Write("Account {0} {1} created, ", account.Name, account.AccountNumber);

            // Create a duplicate detection rule
            DuplicateRule accountDuplicateRule = new DuplicateRule
            {
                Name = "DuplicateRule: Accounts with the same Account Number",
                BaseEntityName = "account",
                MatchingEntityName = "account"                               
            };
            _ruleId = _service.Create(accountDuplicateRule);            

            // Create a duplicate detection rule condition
            DuplicateRuleCondition accountDupCondition = new DuplicateRuleCondition
            {
                BaseAttributeName = "accountnumber",
                MatchingAttributeName = "accountnumber",
                OperatorCode = new OptionSetValue(0), // Exact Match.
                RegardingObjectId = new EntityReference(DuplicateRule.EntityLogicalName, _ruleId)
            };
            Guid conditionId = _service.Create(accountDupCondition);

            Console.Write("'{0}' created, ", accountDuplicateRule.Name);

            // Execute the publish request.
            PublishDuplicateRuleResponse response = 
                (PublishDuplicateRuleResponse)_service.Execute(new PublishDuplicateRuleRequest() { DuplicateRuleId = _ruleId });

            // When the publishDuplicateRule request returns, the state of the rule will still be "Publishing" (StatusCode = 1).
            // we need to wait for the publishing operation to complete, so we keep polling the state of the
            // rule until it becomes "Published" (StatusCode = 2).
            int i = 0;
            DuplicateRule retrievedRule = 
                (DuplicateRule)_service.Retrieve(DuplicateRule.EntityLogicalName, _ruleId, new ColumnSet(new String[] { "statuscode" }));
            while (retrievedRule.StatusCode.Value == 1 && i < 20)
            {
                i++;
                System.Threading.Thread.Sleep(1000);
                retrievedRule = 
                    (DuplicateRule)_service.Retrieve(DuplicateRule.EntityLogicalName, _ruleId, new ColumnSet(new String[] { "statuscode" }));
            }

            Console.Write("published.\n");
        }