Créer un OptionSet des 101 départements français en 30 secondes (PowerShell + Dataverse)
PowerShell + Dataverse
Tu veux un champ "Département" dans ton CRM.
101 valeurs.
À créer à la main dans l'interface Power Apps.
Clic.
Clic.
Clic.
...101 fois.
🚨 Stop.
Le vrai problème
Ce n'est pas un problème de données.
C'est un problème d'automatisation.
L'interface Power Apps n'est pas faite pour ça.
Elle est conçue pour créer 5-10 valeurs, pas 101.
Et non, Power Automate ne peut pas t'aider ici.
Les connecteurs Dataverse ne touchent pas aux métadonnées.
Un OptionSet = métadonnée, pas une donnée.
La solution : PowerShell + SDK Dataverse.
Script complet + README détaillé
Télécharger le script sur GitHub →Ce que fait le script
- Te connecte à ton environnement Dataverse
- Te liste les solutions non managées
- Te demande le nom de l'OptionSet
- Vérifie s'il existe déjà (et te redemande un nom si oui)
- Crée le Global OptionSet avec les 101 départements
- Utilise le préfixe de ta solution automatiquement
- Publie
Le tout en 30 secondes d'exécution.
Script complet + README détaillé
Télécharger le script sur GitHub →Prérequis
Installer le module PowerShell (une seule fois) :
Install-Module Microsoft.Xrm.Data.PowerShell -Scope CurrentUser -Force
C'est tout.
La logique du script
Je ne vais pas te noyer sous 300 lignes de code ici.
Le script complet est sur GitHub avec un README détaillé.
Voici la logique.
Étape 1 : Connexion à Dataverse
$conn = Connect-CrmOnline -ServerUrl $envUrl -ForceOAuth
Une fenêtre Microsoft s'ouvre.
Tu te connectes.
C'est fait.
Étape 2 : Lister les solutions non managées
<fetch>
<entity name="solution">
<filter>
<condition attribute="ismanaged" operator="eq" value="0" />
<condition attribute="isvisible" operator="eq" value="1" />
</filter>
<link-entity name="publisher" from="publisherid" to="publisherid" alias="pub">
<attribute name="customizationprefix" />
</link-entity>
</entity>
</fetch>
Le script récupère le préfixe de l'éditeur automatiquement.
Si tu choisis ta solution "MaSociété Customizations" avec le préfixe msc, ton OptionSet s'appellera msc_departement.
Pas de bidouille manuelle.
Étape 3 : Vérifier si l'OptionSet existe
$retrieveRequest = New-Object Microsoft.Xrm.Sdk.Messages.RetrieveOptionSetRequest
$retrieveRequest.Name = $optionSetName
$response = $conn.Execute($retrieveRequest)
Si ça passe → l'OptionSet existe déjà → on te redemande un nom.
Si ça plante → il n'existe pas → on continue.
Simple.
Étape 4 : Créer l'OptionSet
⚠️ Le SDK PowerShell a un bug avec le constructeur OptionSetMetadata.
On contourne :
- Créer l'OptionSet avec une seule valeur (01 - Ain)
- Ajouter les 100 autres une par une avec
InsertOptionValueRequest
C'est plus lent (~30 secondes) mais ça marche.
Pas de contournement foireux. Juste une implémentation qui tourne en prod.
Numérotation intelligente
Les valeurs de l'OptionSet sont alignées sur les numéros de département :
| Département | Value |
|---|---|
| 01 - Ain | 1 |
| 42 - Loire | 42 |
| 2A - Corse-du-Sud | 201 |
| 2B - Haute-Corse | 202 |
| 971 - Guadeloupe | 971 |
| 974 - La Réunion | 974 |
Pourquoi ?
Parce que ça te permet ensuite de déduire automatiquement le département depuis un code postal.
Bonus : Remplir le département depuis le code postal
Tu as un champ Code postal sur tes comptes.
Tu veux que le champ Département se remplisse automatiquement.
👉 Power Automate.
Déclencheur
When a row is added or modified sur Accounts
Filtre : address1_postalcode ne null
Logique
Préfixe = 2 premiers caractères du code postal
Si préfixe = "20" :
→ Si code postal < 20200 → 201 (Corse-du-Sud)
→ Sinon → 202 (Haute-Corse)
Si préfixe = "97" :
→ Prendre les 3 premiers caractères (971, 972, 973, 974, 976)
Sinon :
→ Prendre les 2 premiers caractères (01→1, 42→42, etc.)
Expression Power Automate
if(
equals(outputs('Extraire_préfixe'), '20'),
if(
less(int(substring(coalesce(triggerOutputs()?['body/address1_postalcode'], '00000'), 0, 3)), 202),
201,
202
),
if(
equals(outputs('Extraire_préfixe'), '97'),
int(substring(coalesce(triggerOutputs()?['body/address1_postalcode'], '00000'), 0, 3)),
int(outputs('Extraire_préfixe'))
)
)
À chaque modification du code postal → le département se met à jour.
Zéro intervention utilisateur.
En résumé
- Pas de clics manuels
- Pas de copier-coller depuis Excel
- Pas de bidouille XrmToolBox
- Un script PowerShell
- 30 secondes d'exécution
- 101 départements créés, proprement, dans ta solution
Script complet + README détaillé
Télécharger le script sur GitHub →Tu veux aller plus loin ?
Automatisation CRM, règles métier, formation technique —
je peux t'accompagner.