Last active
April 5, 2016 14:57
-
-
Save reshmee011/737dfc6bfd15568098c2f71588bc7a2a to your computer and use it in GitHub Desktop.
Publish Detection Rule in CRM Dynamics 2015 On Premise using PowerShell
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Example .\PublishDuplicateDetection.ps1 -crmOrganizationURL "CRM URL" -login "username" -pwd "password" | |
param | |
( | |
[string]$crmOrganizationURL,#example "http://organization.domain.com" | |
[string]$login, #example "user@domain.com" | |
[string]$pwd #example "Pass@word1" | |
) | |
#add Microsoft.Xrm libraries | |
function Add-Crm-Sdk-2015($rootPath) | |
{ | |
Write-Host "Loading assemblies Microsoft.Xrm...." | |
Add-Type -Path "$rootPath\Assemblies\Microsoft.Xrm.Sdk.dll"; | |
Add-Type -Path "$rootPath\Assemblies\Microsoft.Xrm.Sdk.Deployment.dll"; | |
Add-Type -Path "$rootPath\Assemblies\Microsoft.Xrm.Client.dll"; | |
Add-Type -Path "$rootPath\Assemblies\Microsoft.Crm.Sdk.Proxy.dll"; | |
} | |
#get the crm connection | |
function Get-Crm-Connection-2015 | |
{ | |
PARAM($url, $login, $pwd) | |
# Configure CRM connection | |
$crmConnection = [Microsoft.Xrm.Client.CrmConnection]::Parse("Url=$url; Username=$login; Password=$pwd"); | |
return $crmConnection; | |
} | |
function Get-CRM-DuplicateRules | |
{ | |
PARAM($entityName) | |
Write-Host "Get-CRM-UserSettings Function....."; | |
$query = New-Object -TypeName Microsoft.Xrm.Sdk.Query.QueryExpression -ArgumentList "duplicaterule"; | |
$query.Criteria.AddCondition("matchingentityname", [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Equal, $entityName); | |
$query.ColumnSet.AddColumn("duplicateruleid"); | |
$query.ColumnSet.AddColumn("name"); | |
$results = $service.RetrieveMultiple($query); | |
Write-Host "duplicate rule"; | |
$records = $results.Entities; | |
Write-Host "Entity Records Count is" + $records.Count; | |
if($records.Count -gt 0) | |
{ | |
#Write-Host $records[0].Attributes["name"]; | |
return $records | |
} | |
Write-Host -ForegroundColor Red "duplicate rule records not found" | |
return $null; | |
} | |
function Publish-CRM-DuplicateRules($duplicateRuleRecords,$message, $duplicateRuleId) | |
{ | |
foreach($duplicateRuleRecord in $duplicateRuleRecords) | |
{ | |
try | |
{ | |
$ruleid = [System.Guid]$duplicateRuleRecord.Attributes["duplicateruleid"]; | |
$ruleName = "'"+$duplicateRuleRecord.Attributes["name"] + "'"; | |
if($duplicateRuleId -eq $Null -or $duplicateRuleId -eq $ruleId) | |
{ | |
Write-Host "DuplicateRule id is $ruleid" | |
$duplicateRuleRequest = New-Object -TypeName Microsoft.Crm.Sdk.Messages.PublishDuplicateRuleRequest; | |
$duplicateRuleRequest.DuplicateRuleId = [System.Guid]$ruleid; | |
#Publish each rule and get the job id since it is async | |
Write-Host $message $ruleName; | |
$response = [Microsoft.Crm.Sdk.Messages.PublishDuplicateRuleResponse]$service.Execute($duplicateRuleRequest); | |
} | |
} | |
catch | |
{ | |
# silent exception if record does not have attribute duplicateruleid ignore record | |
} | |
} | |
} | |
Write-Host "Executing PublishDuplicateDetection.ps1" | |
#Load SDK assemblies | |
Write-Host "Loading Assemblies." | |
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition | |
Write-Host scriptPath | |
Add-Crm-Sdk-2015 -rootPath $scriptPath | |
Write-Host "Getting CRM connection" | |
$crmConnection = Get-Crm-Connection-2015 -url $crmOrganizationURL -login $login -pwd $pwd; | |
#Instantiate Organization Service | |
$service = New-Object -TypeName Microsoft.Xrm.Client.Services.OrganizationService -ArgumentList $crmConnection; | |
$completed = $true | |
try | |
{ | |
$duplicateRuleRecords = Get-CRM-DuplicateRules -entityName "account" | |
##publish only rule "Account (Employer,Firm type) same name and type" for entity account with Id "623d1f1b-0ff8-e511-8118-00155d580900" | |
if($duplicateRuleRecords.Count -gt 0) | |
{ | |
Publish-CRM-DuplicateRules $duplicateRuleRecords $message "623d1f1b-0ff8-e511-8118-00155d580900"; | |
} | |
else | |
{ | |
$completed = $false | |
} | |
$duplicateRuleRecords = Get-CRM-DuplicateRules -entityName "contact" | |
if($duplicateRuleRecords.Count -gt 0) | |
{ | |
Publish-CRM-DuplicateRules $duplicateRuleRecords $message $Null; | |
} | |
else | |
{ | |
$completed = $false | |
} | |
} | |
catch | |
{ | |
Write-Host $_.Exception.Message | |
$completed = $false | |
Echo $exception|format-list -force | |
} | |
if($completed -eq $true) | |
{ | |
Write-Host "The Duplicate detection rule published successfully" | |
} | |
else | |
{ | |
Write-Host "Error in publishing Duplicate detection rule" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment