Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Enze Winneris

Bien coder c'est comme jouer,
suffit de savoir faire les bonnes macros !



Abonnements

Dynamics CRM : Récupérer les couples valeur/texte des Picklist

Voici une astuce concernant les Picklist et la récupération dynamique des valeurs et textes qu'elles peuvent avoir. Lorsqu'on veut renseigner la Picklist d'une entité en code, il faut obligatoirement fixer la valeur de la Picklist, le texte ne suffit pas.

Ceci ne fonctionnera pas :

Public Sub updateAccountCategoryCode(ByVal accountid As String, ByVal CategoryCode As String)
    Dim a As account = CType(CRMHelper.Retrieve(GetType(account), accountid), account)
    Dim acc As Picklist
    acc = New Picklist
    acc.name = CategoryCode
    a.accountcategorycode = acc
    CRMHelper.Update(a)
End Sub 

Pour que cela fonctionne, il faudrait définir la valeur associée à ce texte de cette manière :

Public Sub updateAccountCategoryCode(ByVal accountid As String, ByVal CategoryCode As String)
    Dim a As account = CType(CRMHelper.Retrieve(GetType(account), accountid), account)
    Dim acc As Picklist
    acc = New Picklist
    acc.name = CategoryCode
    Select Case CategoryCode
        Case "Prospect"
            acc.Value = 1
        Case "Client"
            acc.Value = 2
    End Select
    a.accountcategorycode = acc
    CRMHelper.Update(a)
End Sub 

Seulement on est obligé d'aller chercher dans l'interface de CRM les valeurs associées aux textes possibles pour la Picklist, autant dire que cela peut vite devenir chronophage si l'on travaille avec beaucoup de Picklist.

Heureusement, de la même manière que l'on a le WebService principal de l'application (~/MSCRMServices/2006/CRMService.asmx) pour la lecture, mise à jour et suppression d'entités, il existe un 2ème WebService (~/MSCRMServices/2006/MetaDataService.asmx) qui nous permet d'obtenir les méta-données de l'application, dont les PicklistAttributeMetadata (A noter qu'en V4, ce WebService permet aussi de créer, modifier et supprimer les méta-données des entités).

Une fois le WebService ajouté comme référence Web dans Visual Studio, on peut maintenant récupérer les informations de la Picklist qui nous intéresse :

Private Shared Function retrievePicklistAttributeMetadata(ByVal entityName As String, ByVal column As String) As PicklistAttributeMetadata
    Dim MetaDataService As New MetadataService
    MetaDataService.Credentials = System.Net.CredentialCache.DefaultCredentials
    Dim attMetaData As AttributeMetadata = MetaDataService.RetrieveAttributeMetadata(entityName, column)
    Dim plAttMetaData As PicklistAttributeMetadata = CType(attMetaData, PicklistAttributeMetadata)
    Return plAttMetaData
End Function 

Et à partir de là, rien de plus facile que de retrouver le couple de valeur/texte qui nous intéresse dans la propriété Options :

Public Shared Function getPicklistFromText(ByVal entityName As String, ByVal column As String, ByVal text As String) As Picklist
    Dim pam As PicklistAttributeMetadata = retrievePicklistAttributeMetadata(entityName, column)
    For Each o As [Option] In pam.Options
        If (o.Description = text) Then
            Dim pl As New Picklist
            pl.Value = o.OptionValue
            pl.name = o.Description
            Return pl
        End If
    Next
End Function 

Ce qui au final réduit considérablement la complexité de la mise à jour de la société de mon exemple initial et supprime la maintenance nécessaire en cas de mise à jour de la Picklist.

Public Sub updateAccountCategoryCode(ByVal accountid As String, ByVal CategoryCode As String)
    Dim a As account = CType(CRMHelper.Retrieve(GetType(account), accountid), account)
    a.accountcategorycode = getPicklistFromText("account", "accountcategorycode", CategoryCode)
    CRMHelper.Update(a)
End Sub 

Ça peut toujours servir ;)

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié mercredi 5 mars 2008 15:04 par Enze

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01


Propulsé par Community Server (Personal Edition), par Telligent Systems