2
votes

Powershell Dynamics CRM, comment ajouter deux files d'attente à un utilisateur

J'ai créé un utilisateur et j'essaye de lui attribuer deux files d'attente n ° 1 et n ° 2. Le problème est que le code que j'ai utilisé ne remplace que la dernière file d'attente.

Import-Module C:\Powershell\Handy.Crm.Extensions.Powershell.Cmdlets
$cred = Get-Credential
$CRMConn = Connect-CrmOnPremDiscovery -Credential $cred -ServerUrl https://crmlab:5555/CRMLab
Set-CRMQueueForUser -Connection $CRMConn -UserId 5bf140ea-95ed-e811-80e9-005056bd633b -QueueId 023963ca-08a5-e611-80c6-00155d011760

J'ai essayé une autre méthode que j'ai trouvée en ligne mais elle renvoie des erreurs d'incompatibilité.

Move-CrmRecordToQueue -EntityLogicalName account -Id 5ff140ea-95ed-e811-80e9-005056bd633b -QueueName "TEST1" -WorkingUserId 5bf140ea-95ed-e811-80e9-005056bd633b

J'ai également essayé ceci mais je ne connais pas les paramètres à utiliser.

Import-Module C:\Powershell\CRMBuzz\CRMBuzzPowerTools_Module_2_0_0_15_Setup\WindowsPowerShell\Modules\CRMBuzzPowerTools\CRMBuzz.PowerTools.PSSnapin.dll -Force -WarningAction SilentlyContinue -DisableNameCheckin
$connString="Url=https://crmlab:5555/CRMLab;Username=test@crm.lab;password=******;"
$CRMConn = New-OrganizationConnection -ConnectionString $connString -Verbose
$queue_ref0=Get-EntityReferenceByName -OrganizationService $CRMConn -EntityName "queue" -FindFieldName "name" -ReferenceValue "TEST1"
$queue_ref1=Get-EntityReferenceByName -OrganizationService $CRMConn -EntityName "queue" -FindFieldName "name" -ReferenceValue "TEST2"
$userent=Search-EntityFull -OrganizationService $CRMConn  -EntityObject systemuser -FieldName domainname -SearchValue "TEST\P_TEST"
[Microsoft.Xrm.Sdk.EntityReference] $userent.Attributes["queueid"]=$queue_ref0
[Microsoft.Xrm.Sdk.EntityReference] $userent.Attributes["queueid"]=$queue_ref1
Update-Record -OrganizationService $CRMConn -EntityObject $userent –verbose

La réponse de James a clarifié certaines choses pour moi. Ci-dessus, j'essayais d'ajouter deux files d'attente à la file d'attente par défaut de l'utilisateur, ce qui est impossible. Je pense que je devrais les ajouter dans le champ qui se trouve sous la file d'attente par défaut comme dans cette image (je ne connais pas le nom de ce champ):

 entrez la description de l'image ici p >


0 commentaires

3 Réponses :


1
votes

Il semble que vous essayez de définir le champ de file d'attente par défaut.

entrez la description de l'image ici

Cela ne peut contenir qu'une seule valeur à la fois alors je ne Je ne pense pas que ce que vous essayez de faire fonctionnera.

Si cela vous est utile, vous pouvez lancer l'appel de mise à jour deux fois, cela enregistrera les deux valeurs dans CRM, mais la dernière écrasera la première.

[Microsoft.Xrm.Sdk.EntityReference] $userent.Attributes["queueid"]=$queue_ref0
Update-Record -OrganizationService $CRMConn -EntityObject $userent –verbose

[Microsoft.Xrm.Sdk.EntityReference] $userent.Attributes["queueid"]=$queue_ref1
Update-Record -OrganizationService $CRMConn -EntityObject $userent –verbose


1 commentaires

J'ai besoin de savoir comment je peux affecter plusieurs files d'attente à un utilisateur et pouvoir les voir dans le champ de file d'attente du membre



2
votes

Il semble que vous essayez d'ajouter l'utilisateur dans une file d'attente.

À peu près sûr que cette section est "Files d'attente dont je suis membre", qui est la queuemembership_association relation plusieurs à plusieurs entre l'utilisateur et la file d'attente.

Vous devrez émettre une AssociateRequest .


2 commentaires

puis-je faire cela avec PowerShell?


@enzo oui vous pouvez. J'ai étendu la réponse de James et donné un exemple ci-dessous.



2
votes

Oui, vous pouvez le faire avec PowerShell .

Par exemple, queuemembership_association peut être créé à l'aide de l'applet de commande ci-dessous. (Veuillez le tester car je ne l'ai pas encore testé)

#CreateEntityAssociation
function Add-CrmRecordAssociation{

<#
 .SYNOPSIS
 Associates two records for N:N relationship.

 .DESCRIPTION
 The Add-CrmRecordAssociation cmdlet lets you associate two records for N:N relationship by specifying relatioship logical name. 

 There are two ways to specify records.
 
 1. Pass EntityLogicalName and record's Id for both records.
 2. Get a record object by using Get-CrmRecord/Get-CrmRecords cmdlets, and pass it for both records.

 You can specify relationship logical name for the association.

 .PARAMETER conn
 A connection to your CRM organizatoin. Use $conn = Get-CrmConnection <Parameters> to generate it.

 .PARAMETER CrmRecord1
 A first record object which is obtained via Get-CrmRecord/Get-CrmRecords. When you pass CrmRecord, then you don't use EntityLogicalName/Id.

 .PARAMETER CrmRecord2
 A second record object which is obtained via Get-CrmRecord/Get-CrmRecords. When you pass CrmRecord, then you don't use EntityLogicalName/Id.

 .PARAMETER EntityLogicalName1
 A logicalname for first Entity. i.e.)accout, contact, lead, etc..

 .PARAMETER Id1
 An Id (guid) of first record

 .PARAMETER EntityLogicalName2
 A logicalname for second Entity. i.e.)accout, contact, lead, etc..

 .PARAMETER Id2
 An Id (guid) of second record

 .PARAMETER RelationshipName
 A N:N relationship logical name.

 .EXAMPLE
 Add-CrmRecordAssociation -conn $conn -EntityLogicalName1 account -Id1 00005a70-6317-e511-80da-c4346bc43d94 -EntityLogicalName2 contact -Id2 66005a70-6317-e511-80da-c4346bc43d94 -RelationshipName new_accounts_contacts

 This example associates an account and a contact records through new_accounts_contacts custom N:N relationship.

 .EXAMPLE
 Add-CrmRecordAssociation account 00005a70-6317-e511-80da-c4346bc43d94 contact 66005a70-6317-e511-80da-c4346bc43d94 new_accounts_contacts
 
 This example associates an account and a contact records through new_accounts_contacts custom N:N relationship by ommiting parameters names.
 When ommiting parameter names, you do not provide $conn, cmdlets automatically finds it.

 .EXAMPLE
 PS C:\>$account = Get-CrmRecord account 00005a70-6317-e511-80da-c4346bc43d94 name

 PS C:\>$contact = Get-CrmRecord contact 66005a70-6317-e511-80da-c4346bc43d94 fullname

 PS C:\>Add-CrmRecordAssociation -conn $conn -CrmRecord1 $account -CrmRecord2 $contact -RelationshipName new_accounts_contacts

 This example retrieves and stores an account and a contact records to variables, then pass them to Add-CrmRecordAssociation cmdlets.

 .EXAMPLE
 PS C:\>$account = Get-CrmRecord account 00005a70-6317-e511-80da-c4346bc43d94 name

 PS C:\>$contact = Get-CrmRecord contact 66005a70-6317-e511-80da-c4346bc43d94 fullname

 PS C:\>Add-CrmRecordAssociation $account $contact new_accounts_contacts

 This example retrieves and stores an account and a contact records to variables, then pass them to Add-CrmRecordAssociation cmdlets.

#>

    [CmdletBinding()]
    PARAM(
        [parameter(Mandatory=$false)]
        [Microsoft.Xrm.Tooling.Connector.CrmServiceClient]$conn,
        [parameter(Mandatory=$true, Position=1, ParameterSetName="CrmRecord")]
        [PSObject]$CrmRecord1,
        [parameter(Mandatory=$true, Position=2, ParameterSetName="CrmRecord")]
        [PSObject]$CrmRecord2,
        [parameter(Mandatory=$true, Position=1, ParameterSetName="NameWithId")]
        [string]$EntityLogicalName1,
        [parameter(Mandatory=$true, Position=2, ParameterSetName="NameWithId")]
        [guid]$Id1,
        [parameter(Mandatory=$true, Position=3, ParameterSetName="NameWithId")]
        [string]$EntityLogicalName2,
        [parameter(Mandatory=$true, Position=4, ParameterSetName="NameWithId")]
        [guid]$Id2,
        [parameter(Mandatory=$true, Position=5)]
        [string]$RelationshipName
    )

    $conn = VerifyCrmConnectionParam $conn; 

    if($CrmRecord1 -ne $null)
    {
        $EntityLogicalName1 = $CrmRecord1.logicalname
        $Id1 = $CrmRecord1.($EntityLogicalName1 + "id")
    }

    if($CrmRecord2 -ne $null)
    {
        $EntityLogicalName2 = $CrmRecord2.logicalname
        $Id2 = $CrmRecord2.($EntityLogicalName2 + "id")
    }

    try
    {
        $result = $conn.CreateEntityAssociation($EntityLogicalName1, $Id1, $EntityLogicalName2, $Id2, $RelationshipName, [Guid]::Empty)
        if(!$result)
        {
            return $conn.LastCrmException
        }
    }
    catch
    {
        return $conn.LastCrmException
    }
}

#CreateMultiEntityAssociation
function Add-CrmMultiRecordAssociation{

<#
 .SYNOPSIS
 Associates multiple records to single record for N:N relationship.

 .DESCRIPTION
 The Add-CrmMultiRecordAssociation cmdlet lets you associate multiple records to single record for N:N relationship by specifying relatioship logical name. 
 Use @('<object>','<object>') syntax to specify multiple ids or records.
 if the relationship is self-referencing, specify $True for -IsReflexiveRelationship Parameter.

 There are two ways to specify records.
 
 1. Pass EntityLogicalName and record's Id for both records.
 2. Get record object(s) by using Get-CrmRecord/Get-CrmRecords cmdlets, and pass them.

 You can specify relationship logical name for the association.

 .PARAMETER conn
 A connection to your CRM organizatoin. Use $conn = Get-CrmConnection <Parameters> to generate it.

 .PARAMETER CrmRecord1
 A first record object which is obtained via Get-CrmRecord/Get-CrmRecords. When you pass CrmRecord, then you don't use EntityLogicalName/Id.

 .PARAMETER CrmRecord2s
 An array of records object which are obtained via Get-CrmRecord/Get-CrmRecords. When you pass CrmRecord, then you don't use EntityLogicalName/Id.

 .PARAMETER EntityLogicalName1
 A logicalname for first Entity. i.e.)accout, contact, lead, etc..

 .PARAMETER Id1
 An Id (guid) of first record

 .PARAMETER EntityLogicalName2
 A logicalname for second Entity. i.e.)accout, contact, lead, etc..

 .PARAMETER Id2s
 An array of Ids (guid) of second records. Specify by using @('66005a70-6317-e511-80da-c4346bc43d94','62005a70-6317-e511-80da-c4346bc43d94') synctax.

 .PARAMETER RelationshipName
 A N:N relationship logical name.

 .PARAMETER IsReflexiveRelationship
 Specify $True if the N:N relationship is self-referencing.

 .EXAMPLE
 Add-CrmMultiRecordAssociation -conn $conn -EntityLogicalName1 account -Id1 00005a70-6317-e511-80da-c4346bc43d94 -EntityLogicalName2 contact -Id2s @('66005a70-6317-e511-80da-c4346bc43d94','62005a70-6317-e511-80da-c4346bc43d94') -RelationshipName new_accounts_contacts
 This example associates an account and two contact records through new_accounts_contacts custom N:N relationship.

 .EXAMPLE
 Add-CrmMultiRecordAssociation account 00005a70-6317-e511-80da-c4346bc43d94 contact @('66005a70-6317-e511-80da-c4346bc43d94','62005a70-6317-e511-80da-c4346bc43d94') new_accounts_contacts
 
 This example associates an account and two contact records through new_accounts_contacts custom N:N relationship by ommiting parameters names.
 When ommiting parameter names, you do not provide $conn, cmdlets automatically finds it.

 .EXAMPLE
 PS C:\>$account = Get-CrmRecord account 00005a70-6317-e511-80da-c4346bc43d94 name

 PS C:\>$fetch = @"
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true">
  <entity name="contact">
    <attribute name="fullname" />
    <filter type="and">
      <condition attribute="lastname" operator="like" value="%sample%" />
    </filter>
  </entity>
</fetch>
"@

 PS C:\>$contacts = Get-CrmRecordsByFetch $fetch

 PS C:\>Add-CrmMultiRecordAssociation $account $contacts.CrmRecords new_accounts_contacts

 This example retrieves contacts by using FetchXML and stores to a variable, then retrieves and store an account record to another variable.
 Then passes those variables Add-CrmMultiRecordAssociation.
#>

    [CmdletBinding()]
    PARAM(
        [parameter(Mandatory=$false)]
        [Microsoft.Xrm.Tooling.Connector.CrmServiceClient]$conn,
        [parameter(Mandatory=$true, Position=1, ParameterSetName="CrmRecord")]
        [PSObject]$CrmRecord1,
        [parameter(Mandatory=$true, Position=2, ParameterSetName="CrmRecord")]
        [PSObject[]]$CrmRecord2s,
        [parameter(Mandatory=$true, Position=1, ParameterSetName="NameWithId")]
        [string]$EntityLogicalName1,
        [parameter(Mandatory=$true, Position=2, ParameterSetName="NameWithId")]
        [guid]$Id1,
        [parameter(Mandatory=$true, Position=3, ParameterSetName="NameWithId")]
        [string]$EntityLogicalName2,
        [parameter(Mandatory=$true, Position=4, ParameterSetName="NameWithId")]
        [guid[]]$Id2s,
        [parameter(Mandatory=$true, Position=5)]
        [string]$RelationshipName,
        [parameter(Mandatory=$false, Position=6)]
        [bool]$IsReflexiveRelationship
    )

    $conn = VerifyCrmConnectionParam $conn;   

    if($CrmRecord1 -ne $null)
    {
        $EntityLogicalName1 = $CrmRecord1.logicalname
        $Id1 = $CrmRecord1.($EntityLogicalName1 + "id")
    }

    if($CrmRecord2s -ne $null)
    {
        if($CrmRecord2s.Count -ne 0)
        {
            $EntityLogicalName2 = $CrmRecord2s[0].logicalname
            $Ids = New-Object 'System.Collections.Generic.List[System.Guid]'
            foreach($CrmRecord2 in $CrmRecord2s)
            {
                $Ids.Add($CrmRecord2.($EntityLogicalName2 + "id"))
            }
            $Id2s = $Ids.ToArray()
        }
         else
        {
            Write-Warning 'CrmRecords2 does not include any records.'
            break;
        }
    }   

    try
    {
        $result = $conn.CreateMultiEntityAssociation($EntityLogicalName1, $Id1, $EntityLogicalName2, $Id2s, $RelationshipName, [Guid]::Empty, $IsReflexiveRelationship)
        if(!$result)
        {
            return $conn.LastCrmException
        }
    }
    catch
    {
        return $conn.LastCrmException
    }
}

Deux fonctions sont disponibles pour associer un enregistrement d'entité unique et l'associer en bloc à savoir, Add-CrmRecordAssociation code> et Add-CrmMultiRecordAssociation . Coller les applets de commande associées avec des exemples:

PS C:\>$systemuser = Get-CrmRecord systemuser 00005a70-6317-e511-80da-c4346bc43d94 name

 PS C:\>$queue = Get-CrmRecord queue 66005a70-6317-e511-80da-c4346bc43d94 fullname

 PS C:\>Add-CrmRecordAssociation $systemuser $queue queuemembership_association


0 commentaires