Créer un OptionSet des 101 départements français en 30 secondes (PowerShell + Dataverse)

PowerShell + Dataverse : 101 départements en 30 secondes

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 :

  1. Créer l'OptionSet avec une seule valeur (01 - Ain)
  2. 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 - Ain1
42 - Loire42
2A - Corse-du-Sud201
2B - Haute-Corse202
971 - Guadeloupe971
974 - La Réunion974

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.

Contacte-moi
Suivant
Suivant

Leads trop anciens : comment assainir votre pipeline commercial avec Power Automate