In D365 project PowerShell scripts are used for a number of tasks. A few examples are:
- To automate import and export of solution
- For automating manual deployment tasks or steps
- Creating reference data
- Querying, testing and analysing data while in development, and also post-deployment
- Creating integration tests to ensure the system is in expected state
Recently I used PowerShell script to ensure duplicate detection rules are always published after release.
About Script
This script uses “Microsoft.Xrm.Data.Powershell” module. Duplicate detection rule name is passed as an argument, and this script will publish it if it was not.
function Publish-CrmDuplicateDetectionRules{
[CmdletBinding()]
PARAM(
[parameter(Mandatory=$true)]
[Microsoft.Xrm.Tooling.Connector.CrmServiceClient]$conn,
[parameter(Mandatory=$true, Position=1)]
[string]$DuplicateDetectionRule,
[parameter(Mandatory=$false, Position=2)]
[bool]$PublishAll
)$fetch = @”
<fetch>
<entity name=”duplicaterule” >
<all-attributes/>
<filter>
<condition attribute=”statuscode” operator=”eq” value=”0″ />
<condition attribute=”name” operator=”eq” value=”$DuplicateDetectionRule”/>
</filter>
</entity>
</fetch>
“@
$matchingDDRules = Get-CrmRecordsByFetch -conn $conn -Fetch $fetchWrite-Host $matchingDDRules.Count “rules found”
if($matchingDDRules.Count -lt 1)
{
throw “Duplicate rule $DuplicateDetectionRule did not exist”
}$PublishAll
if($PublishAll -eq $false)
{ Write-Host “Publishing one rule”
$ddRule_toPublish = New-Object Microsoft.Crm.Sdk.Messages.PublishDuplicateRuleRequest
$ddRule_toPublish.DuplicateRuleId= $matchingDDRules.CrmRecords[0].duplicateruleid
$conn.ExecuteCrmOrganizationRequest($ddRule_toPublish,$trace)
}
else
{ Write-Host “Publishing rules”
foreach($rule in $matchingDDRules.CrmRecords)
{
write-host “rule is ” $rule.duplicateruleid
$ddRule_toPublish = New-Object Microsoft.Crm.Sdk.Messages.PublishDuplicateRuleRequest
$ddRule_toPublish.DuplicateRuleId= $rule.duplicateruleid
$conn.ExecuteCrmOrganizationRequest($ddRule_toPublish,$trace)
Write-Host “Rule Published”
}}
}
Enjoy your 365 day 🙂
About Me 🙂
I m an IT consultant working in Melbourne Australia. I solve business problems using Microsoft technologies (Dynamics 365, Office 365, Azure, Flow, Power Apps, Power BI). I m involved in community activities and I blog at http://www.crmtechie.com/
I love to get connected with people working in IT, providing solutions or who just like Microsoft technologies. To get in touch please follow my blog, and connect through Linkedin, Twitter or Facebook
Blog: http://www.crmtechie.com/
Twitter: @YawerIqbal
Linkedin: YawerIqbal
Facebook: Yawer.Iqbal
I get this error after I load the function and run the required cmdlet:
Method invocation failed because [System.String] does not contain a method named ‘ExecuteCrmOrganizationRequest’.
At line:44 char:9
+ $org.ExecuteCrmOrganizationRequest($ddRule_toPublish,$trace)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Would you know what the problem is or what I am missing please?
Thanks