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); } }
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)); }
/// <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"); }
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); }
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); }
/// <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); }
public bool Update(DuplicateRule entity) { //依赖于字段 return(_dependencyService.Update(DuplicateRuleDefaults.ModuleName, entity.DuplicateRuleId, AttributeDefaults.ModuleName, entity.Conditions.Select(x => x.AttributeId).ToArray())); }
public static string BuildKey(DuplicateRule entity) { return(entity.EntityId + "/" + entity.DuplicateRuleId.ToString() + "/"); }
/// <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 }
/// <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"); }