Public/Queue.ps1
|
#AddEntityToQueue function Move-CrmRecordToQueue{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$true, Position=1, ParameterSetName="CrmRecord")] [PSObject]$CrmRecord, [parameter(Mandatory=$true, Position=1, ParameterSetName="NameWithId")] [string]$EntityLogicalName, [parameter(Mandatory=$true, Position=2, ParameterSetName="NameWithId")] [guid]$Id, [parameter(Mandatory=$true, Position=3)] [string]$QueueName, [parameter(Mandatory=$true, Position=4)] [guid]$WorkingUserId, [parameter(Mandatory=$false, Position=5)] [bool]$SetWorkingByUser ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) if($CrmRecord -ne $null) { $EntityLogicalName = $CrmRecord.logicalname $Id = $CrmRecord.($EntityLogicalName + "id") } try { $queueId = Get-CrmQueueIdByName -conn $conn -QueueName $QueueName if($null -eq $queueId) { throw "Queue '$QueueName' was not found." } $request = New-Object Microsoft.Crm.Sdk.Messages.AddToQueueRequest $request.Target = New-Object Microsoft.Xrm.Sdk.EntityReference($EntityLogicalName, $Id) $request.DestinationQueueId = $queueId if($SetWorkingByUser) { $queueItemProperties = New-Object Microsoft.Xrm.Sdk.Entity("queueitem") $queueItemProperties["workerid"] = New-Object Microsoft.Xrm.Sdk.EntityReference("systemuser", $WorkingUserId) $request.QueueItemProperties = $queueItemProperties } $response = [Microsoft.Crm.Sdk.Messages.AddToQueueResponse]$conn.Execute($request) return $response.QueueItemId } catch { throw } } function Set-CrmQueueMailbox { # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$true, Position=1)] [string]$QueueId, [parameter(Mandatory=$false)] [string]$EmailAddress, [parameter(Mandatory=$false, ParameterSetName="Custom")] [guid]$EmailServerProfile, [parameter(Mandatory=$false, ParameterSetName="Custom")] [int]$IncomingEmailDeliveryMethod, [parameter(Mandatory=$false, ParameterSetName="Custom")] [int]$OutgoingEmailDeliveryMethod, [parameter(Mandatory=$false, ParameterSetName="Default")] [switch]$ApplyDefaultEmailSettings, [parameter(Mandatory=$false, ParameterSetName="Status")] [string]$StateCode, [parameter(Mandatory=$false, ParameterSetName="Status")] [string]$StatusCode, [parameter(Mandatory=$false, ParameterSetName="Status")] [switch]$ScheduleTest, [parameter(Mandatory=$false, ParameterSetName="Status")] [switch]$MarkedAsPrimaryForExchangeSync, [parameter(Mandatory=$false, ParameterSetName="Status")] [switch]$ApproveEmail ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) $fetch = @" <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true"> <entity name="mailbox"> <attribute name="mailboxid" /> <filter type="and"> <condition attribute="regardingobjectid" operator="eq" value="{$QueueId}" /> </filter> </entity> </fetch> "@ $Id = (Get-CrmRecordsByFetch -conn $conn -Fetch $fetch).CrmRecords[0].MailboxId $updateFields = @{} if($ApplyDefaultEmailSettings) { $fetch = @" <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true"> <entity name="organization"> <attribute name="defaultemailserverprofileid" /> <attribute name="defaultemailsettings" /> </entity> </fetch> "@ $record = (Get-CrmRecordsByFetch -conn $conn -Fetch $fetch).CrmRecords[0] $updateFields.Add("emailserverprofile", $record.defaultemailserverprofileid_Property.Value) $xml = [xml]$record.defaultemailsettings $updateFields.Add("incomingemaildeliverymethod", (New-CrmOptionSetValue $xml.ChildNodes.IncomingEmailDeliveryMethod)) $updateFields.Add("outgoingemaildeliverymethod", (New-CrmOptionSetValue $xml.ChildNodes.OutgoingEmailDeliveryMethod)) } if($ScheduleTest) { $updateFields.Add("testemailconfigurationscheduled", $true) } if($MarkedAsPrimaryForExchangeSync) { $updateFields.Add("orgmarkedasprimaryforexchangesync", $true) } if($ApproveEmail) { Approve-CrmEmailAddress -conn $conn -QueueId $QueueId } foreach($parameter in $MyInvocation.BoundParameters.GetEnumerator()) { if($parameter.Key -in ("EmailServerProfile")) { $updateFields.Add($parameter.Key.ToLower(), (New-CrmEntityReference emailserverprofile $parameter.Value)) } elseif($parameter.Key -in ("IncomingEmailDeliveryMethod","OutgoingEmailDeliveryMethod")) { $updateFields.Add($parameter.Key.ToLower(), (New-CrmOptionSetValue $parameter.Value)) } elseif($parameter.Key -in ("StateCode","StatusCode")) { Set-CrmRecordState -conn $conn -EntityLogicalName mailbox -Id $Id -StateCode $StateCode -StatusCode $StatusCode } elseif($parameter.Key -in ("EmailAddress")) { $updateFields.Add($parameter.Key.ToLower(), $parameter.Value) } } Set-CrmRecord -conn $conn -EntityLogicalName mailbox -Id $Id -Fields $updateFields } function Approve-CrmEmailAddress{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$true, Position=1, ParameterSetName="UserId")] [string]$UserId, [parameter(Mandatory=$true, Position=1, ParameterSetName="QueueId")] [string]$QueueId ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) if($UserId -ne "") { Set-CrmRecord -conn $conn -EntityLogicalName systemuser -Id $UserId -Fields @{"emailrouteraccessapproval"=(New-CrmOptionSetValue 1)} } else { Set-CrmRecord -conn $conn -EntityLogicalName queue -Id $QueueId -Fields @{"emailrouteraccessapproval"=(New-CrmOptionSetValue 1)} } } function Revoke-CrmEmailAddress{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$true, Position=1, ParameterSetName="UserId")] [string]$UserId, [parameter(Mandatory=$true, Position=1, ParameterSetName="QueueId")] [string]$QueueId ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) if($UserId -ne "") { Set-CrmRecord -conn $conn -EntityLogicalName systemuser -Id $UserId -Fields @{"emailrouteraccessapproval"=(New-CrmOptionSetValue 3)} } else { Set-CrmRecord -conn $conn -EntityLogicalName queue -Id $QueueId -Fields @{"emailrouteraccessapproval"=(New-CrmOptionSetValue 3)} } } function Get-CrmQueueIdByName{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$true)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$true)] [string]$QueueName ) $query = New-Object Microsoft.Xrm.Sdk.Query.QueryExpression("queue") $query.ColumnSet = New-Object Microsoft.Xrm.Sdk.Query.ColumnSet("queueid") $query.TopCount = 1 $query.Criteria.AddCondition("name", [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Equal, $QueueName) $results = $conn.RetrieveMultiple($query) if($results.Entities.Count -eq 0) { return $null } return $results.Entities[0].Id } |