Informations de référence sur le format de contrôle de code source YAML de la solution

Cet article est une référence pour le format de contrôle de code source basé sur YAML utilisé lorsque vous procédez comme suit :

  • Valider des solutions à l’aide de l’intégration git native Dataverse Git dans Power Apps.
  • Extraire des solutions à l’aide pac solution clone ou pac solution sync.
  • Exécutez manuellement SolutionPackager sur un dossier qui contient des fichiers manifeste YAML.

Le format YAML diffère de la disposition XML classique. Comprendre la structure est importante lorsque vous souhaitez empaqueter manuellement un dossier YAML dans un .zip fichier que Dataverse peut importer.

Important

La prise en charge du format de contrôle de code source YAML dans l’interface CLI pac nécessite Microsoft. PowerApps.CLI version 2.4.1 ou ultérieure. Téléchargez la dernière version à partir de NuGet ou mettez à jour via pac install latest. SolutionPackager.exe, fourni avec le package NuGet, prend en charge le format YAML à partir de la même version.

Vue d’ensemble de la structure des dossiers

Une racine de référentiel au format YAML contient les répertoires de niveau supérieur suivants :

<repositoryRoot>/
├── solutions/
│   └── <SolutionUniqueName>/       (one subfolder per solution)
│       ├── solution.yml
│       ├── solutioncomponents.yml
│       ├── rootcomponents.yml
│       └── missingdependencies.yml
├── publishers/
│   └── <PublisherUniqueName>/      (one subfolder per publisher)
│       └── publisher.yml
├── entities/                        (entity components, if any)
│   └── <entity_schema_name>/
│       ├── attributes/
│       ├── formxml/
│       ├── savedqueries/
│       └── ...
├── workflows/                       (classic workflow definitions, if any)
├── modernflows/                     (Power Automate cloud flows, if any)
├── canvasapps/                      (canvas app .msapp files, if any)
│   └── <canvas_app_schema_name>/
│       └── <name>.msapp
├── environmentvariabledefinitions/  (environment variable definitions, if any)
├── connectors/                      (custom connectors, if any)
└── [other component folders]/

Les solutions/ répertoires et publishers/ les répertoires sont requis. Tous les dossiers de composants à la racine sont facultatifs et dépendent de ce que contient la solution.

Important

Tous les fichiers manifeste YAML (solution.yml, publisher.ymletc.) doivent être placés sous leurs sous-répertoires respectifs (solutions/<name>/, publishers/<name>/). Le fait de les placer à la racine du référentiel empêche la détection de format et provoque le retour de l’outil SolutionPackager au format XML, ce qui génère une erreur trompeuse au sujet d’une erreur manquante Customizations.xml. Plus d’informations : Résolution des problèmes de l’outil SolutionPackager

Mise en forme de la détection automatique

SolutionPackager (et pac solution pack) détectez automatiquement le format comme suit :

État Format détecté Behavior
solutions/*/solution.yml trouvé — une solution YAML Nom de la solution déduit du nom du sous-dossier
solutions/*/solution.yml trouvé : plusieurs solutions YAML /SolutionName argument requis pour spécifier la solution à packer
Aucun solutions/ sous-répertoire présent XML (hérité) Attend et Other\Solution.xmlOther\Customizations.xml

Fichiers manifestes

solution.yml

Situé à solutions/<SolutionUniqueName>/solution.yml. Contient des métadonnées de solution de niveau supérieur : l’équivalent YAML du solution.xml format XML.

Les champs clés incluent le nom unique, la version, le nom convivial, la description et une référence au serveur de publication.

solutioncomponents.yml

Situé à solutions/<SolutionUniqueName>/solutioncomponents.yml. Répertorie les chemins d’accès relatifs à tous les fichiers de composant inclus dans cette solution. SolutionPackager lit ce fichier pendant le pack pour localiser les sources de composants.

Exemple d’extrait :

- Path: entities/account
- Path: entities/contact
- Path: canvasapps/myapp_<guid>
- Path: publishers/MyPublisher

rootcomponents.yml

Situé à solutions/<SolutionUniqueName>/rootcomponents.yml. Répertorie les composants de niveau racine (généralement des tables et d’autres objets de niveau supérieur) qui appartiennent à cette solution.

Note

Si un composant est déclaré dans rootcomponents.yml mais que ses fichiers sources sont absents du dossier (par exemple, un fichier d’application .msapp canevas sous canvasapps/<name>/), SolutionPackager émet un avertissement et omet ce composant à partir du packed .zip. L’opération pack se termine toujours avec le code de sortie 0.

La réussite du pack ne garantit pas la réussite de l’importation. Si solutioncomponents.yml vous omettez les chemins de dépendance requis ( tels que les dossiers d’entités parentes ou les définitions de relation sous ) entityrelationships/ les packs de solutions sans erreur, mais échouent lors de l’importation avec un message comme : « Les attributs ne sont pas des définitions de relation associées manquantes ». Veillez toujours à solutioncomponents.yml inclure toutes les entités et relations dépendantes, pas seulement celles appartenant à la solution.

missingdependencies.yml

Situé à solutions/<SolutionUniqueName>/missingdependencies.yml. Enregistre les dépendances de solution qui n’étaient pas présentes lors de la dernière exportation de la solution. Utilisé à des fins d’information et pour valider l’exhaustivité lors de l’importation.

publisher.yml

Situé à publishers/<PublisherUniqueName>/publisher.yml. Contient la définition de l’éditeur : nom unique, nom complet, préfixe de personnalisation et préfixe de valeur d’option.

Structure minimale requise :

Publisher:
  UniqueName: mypublisher
  LocalizedNames:
    LocalizedName:
      '@description': My Publisher
      '@languagecode': '1033'
  Descriptions:
  EMailAddress:
    '@xsi:nil': 'true'
    '@xmlns:xsi': http://www.w3.org/2001/XMLSchema-instance
  SupportingWebsiteUrl:
    '@xsi:nil': 'true'
    '@xmlns:xsi': http://www.w3.org/2001/XMLSchema-instance
  CustomizationPrefix: myp
  CustomizationOptionValuePrefix: '12345'
  Addresses:

Prise en charge du type de composant

Le tableau suivant répertorie la façon dont chaque type de composant est géré au format YAML.

Type de composant Au format YAML Notes
Entités (tables), attributs, formulaires, vues ✓ Fichiers YAML Stocké en tant que fichiers YAML individuels par sous-composant
Flux de travail (classique) ✓ Fichiers YAML Sous workflows/
Flux modernes (flux cloud Power Automate) ✓ — Format YAML uniquement Sous modernflows/; non pris en charge au format XML
Applications canevas ✓ — Format YAML uniquement .msapp binaire sous canvasapps/<name>/; non pris en charge au format XML
Définitions de variables d’environnement ✓ Fichiers XML Fichiers individuels .xml sous environmentvariabledefinitions/
Valeurs des variables d’environnement ✓ Fichier JSON Stocké en tant que environment_variable_values.json
Connecteurs personnalisés Sous connectors/
Assemblys du plug-in Noms de types complets remappés par défaut (/remapPluginTypeNames)
Ressources web Sous webresources/
Rôles de sécurité Stocké en tant que XML en interne ; filtré par solution
Ensembles d’options (globaux) Stocké en tant que XML ; filtré par solution
Dashboards Stocké en tant que XML ; filtré par solution
Plans de site Stocké en tant que XML ; filtré par solution
Personnalisations du ruban Stocké en tant que XML ; filtré par solution
Entités-relations Sous entityrelationships/

Note

Les composants stockés en tant que XML en interne sont automatiquement convertis entre XML et YAML pendant les opérations de pack et de décompression. Vous pouvez les créer en tant que fichiers YAML ; l’outil gère la conversion.

Référentiels multi-solutions

Une racine de référentiel unique peut contenir plusieurs solutions. Toutes les solutions partagent les mêmes dossiers de composants ; solutioncomponents.yml dans chaque solution contrôle quels chemins de composant appartiennent à cette solution.

Exemple de structure avec deux solutions :

<repositoryRoot>/
├── solutions/
│   ├── SolutionA/
│   │   ├── solution.yml
│   │   ├── solutioncomponents.yml    ← references entities/account, entities/contact
│   │   ├── rootcomponents.yml
│   │   └── missingdependencies.yml
│   └── SolutionB/
│       ├── solution.yml
│       ├── solutioncomponents.yml    ← references entities/lead, workflows/myflow
│       ├── rootcomponents.yml
│       └── missingdependencies.yml
├── publishers/
│   └── SharedPublisher/
│       └── publisher.yml
├── entities/
│   ├── account/
│   ├── contact/
│   └── lead/
└── workflows/
    └── myflow/

Empaquetage d’une solution spécifique à partir d’un dossier multi-solution

Utilisation de SolutionPackager.exe:

SolutionPackager.exe /action:Pack /zipfile:SolutionA.zip /folder:C:\repos\myrepo /SolutionName:SolutionA

Utilisation pac solution pack (dossiers à solution unique uniquement - pour plusieurs solutions, utilisez SolutionPackager.exe directement avec /SolutionName) :

pac solution pack --zipfile SolutionA.zip --folder C:\repos\myrepo

Note

Lors de l’utilisation de l’intégration De Dataverse Git native à la liaison d’environnement, toutes les solutions de l’environnement partagent une racine de référentiel unique à l’aide de la disposition multi-solution. Lorsque vous utilisez la liaison de solution, chaque solution peut être liée à un dossier distinct.

Utilisation des dossiers de format YAML

Empaquetez un dossier YAML dans un fichier .zip

# Using pac CLI (single solution in folder)
pac solution pack --zipfile C:\output\MySolution.zip --folder C:\repos\myrepo

# Using SolutionPackager.exe directly (also works for multi-solution with /SolutionName)
SolutionPackager.exe /action:Pack /zipfile:C:\output\MySolution.zip /folder:C:\repos\myrepo

Obtenir un dossier YAML complet à partir de Dataverse

La méthode recommandée pour obtenir un dossier YAML complet et packable consiste à utiliser pac solution clone:

pac solution clone --name MySolutionUniqueName --outputDirectory C:\repos\myrepo

Cela extrait la solution au format YAML, y compris tous les fichiers sources du composant. Vous pouvez également utiliser l’intégration Git native pour valider à partir de Power Apps : les fichiers validés sont au format YAML et entièrement packables.

Vérifier le dossier avant l’empaquetage

Vérifiez que le solutions/<name>/ dossier existe et que tous les chemins d’accès résolus solutioncomponents.yml en fichiers réels sont résolus. Les chemins manquants entraînent des avertissements pendant le pack et ces composants sont omis.

Relation avec l’intégration de Dataverse Git

Le format de contrôle de code source YAML est le format canonique utilisé par l’intégration de Dataverse Git. Lorsque les créateurs valident des solutions à partir de Power Apps, les fichiers écrits dans Azure DevOps utilisent ce format. Les développeurs code-first peuvent utiliser le même référentiel à l’aide des outils CLI décrits ici.

Pour plus d’informations sur la connexion d’environnements à Git, consultez la configuration de l’intégration De Dataverse Git.