Skip to content

Instantly share code, notes, and snippets.

@reshmee011
Last active April 5, 2016 14:57
Show Gist options
  • Save reshmee011/737dfc6bfd15568098c2f71588bc7a2a to your computer and use it in GitHub Desktop.
Save reshmee011/737dfc6bfd15568098c2f71588bc7a2a to your computer and use it in GitHub Desktop.
Publish Detection Rule in CRM Dynamics 2015 On Premise using PowerShell
#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