Naslaginformatie over de YAML-broncodebeheerindeling van oplossing

Dit artikel is een verwijzing naar de op YAML gebaseerde indeling voor broncodebeheer die wordt gebruikt wanneer u:

  • Oplossingen doorvoeren met systeemeigen Dataverse Git-integratie in Power Apps.
  • Oplossingen extraheren met of pac solution clonepac solution sync.
  • Voer SolutionPackager handmatig uit op een map die YAML-manifestbestanden bevat.

De YAML-indeling verschilt van de klassieke XML-indeling. Inzicht in de structuur is belangrijk wanneer u een YAML-map handmatig wilt inpakken in een .zip bestand dat Dataverse kan importeren.

Belangrijk

Ondersteuning voor YAML-broncodebeheerindeling in de pac CLI vereist Microsoft. PowerApps.CLI versie 2.4.1 of hoger. Download de nieuwste versie van NuGet of update via pac install latest. SolutionPackager.exe, die wordt geleverd met het NuGet-pakket, ondersteunt de YAML-indeling van dezelfde versie.

Overzicht van mapstructuur

De hoofdmap van een YAML-indeling bevat de volgende mappen op het hoogste niveau:

<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]/

De solutions/ en publishers/ directory's zijn vereist. Alle onderdeelmappen in de hoofdmap zijn optioneel en zijn afhankelijk van wat de oplossing bevat.

Belangrijk

Alle YAML-manifestbestanden (solution.yml, publisher.ymlenzovoort) moeten worden geplaatst onder hun respectieve submappen (solutions/<name>/, publishers/<name>/). Als u ze in de hoofdmap van de opslagplaats plaatst, voorkomt u opmaakdetectie en zorgt u ervoor dat het hulpprogramma SolutionPackager terugvalt op de XML-indeling, waardoor een misleidende fout over een ontbrekende Customizations.xmlfout wordt gegenereerd. Meer informatie: Probleemoplossing voor SolutionPackager-hulpprogramma

Automatische detectie opmaken

SolutionPackager (en pac solution pack) detecteert de indeling als volgt:

Conditie Gedetecteerde indeling Gedrag
solutions/*/solution.yml gevonden — één oplossing YAML Oplossingsnaam afgeleid van de naam van de submap
solutions/*/solution.yml gevonden — meerdere oplossingen YAML /SolutionName argument vereist om op te geven welke oplossing moet worden verpakt
Geen solutions/ submap aanwezig XML (verouderd) Other\Solution.xml Verwacht enOther\Customizations.xml

Manifestbestanden

solution.yml

Gelegen op solutions/<SolutionUniqueName>/solution.yml. Bevat metagegevens van oplossingen op het hoogste niveau: het YAML-equivalent van solution.xml in de XML-indeling.

Sleutelvelden bevatten de unieke naam, versie, beschrijvende naam, beschrijving van de oplossing en een verwijzing naar de uitgever.

solutioncomponents.yml

Gelegen op solutions/<SolutionUniqueName>/solutioncomponents.yml. Toont relatieve paden naar alle onderdeelbestanden die in deze oplossing zijn opgenomen. SolutionPackager leest dit bestand tijdens het pakket om onderdeelbronnen te vinden.

Voorbeeldfragment:

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

rootcomponents.yml

Gelegen op solutions/<SolutionUniqueName>/rootcomponents.yml. Geeft een lijst weer van de hoofdonderdelen (meestal tabellen en andere objecten op het hoogste niveau) die bij deze oplossing horen.

Opmerking

Als een onderdeel is gedeclareerd in rootcomponents.yml maar de bronbestanden ontbreken uit de map (bijvoorbeeld een canvas-app-bestand .msapp onder canvasapps/<name>/), verzendt SolutionPackager een waarschuwing en laat dat onderdeel weg uit het verpakte .ziponderdeel. De packbewerking wordt nog steeds voltooid met afsluitcode 0.

Het succes van het pakket garandeert geen succes bij importeren. Als solutioncomponents.yml vereiste afhankelijkheidspaden, zoals bovenliggende entiteitsmappen of relatiedefinities, weglaat, worden de oplossingspakketten entityrelationships/ zonder fouten verpakt, maar mislukt bij het importeren met een bericht als: 'Kenmerken ontbreken gekoppelde relatiedefinities'. Zorg er altijd voor dat solutioncomponents.yml alle afhankelijke entiteiten en relaties zijn opgenomen, niet alleen de oplossingen die eigendom zijn van de oplossing.

missingdependencies.yml

Gelegen op solutions/<SolutionUniqueName>/missingdependencies.yml. Registreert eventuele oplossingsafhankelijkheden die niet aanwezig waren toen de oplossing voor het laatst werd geëxporteerd. Wordt gebruikt voor informatieve doeleinden en om de volledigheid bij het importeren te valideren.

publisher.yml

Gelegen op publishers/<PublisherUniqueName>/publisher.yml. Bevat de definitie van de uitgever: unieke naam, weergavenaam, aanpassingsvoorvoegsel en waardevoorvoegsel voor opties.

Minimale vereiste structuur:

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:

Ondersteuning voor onderdeeltype

De volgende tabel geeft aan hoe elk onderdeeltype wordt verwerkt in de YAML-indeling.

Onderdeeltype In YAML-indeling Notes
Entiteiten (tabellen), kenmerken, formulieren, weergaven ✓ YAML-bestanden Opgeslagen als afzonderlijke YAML-bestanden per subcomponent
Werkstromen (klassiek) ✓ YAML-bestanden Onder workflows/
Moderne stromen (Power Automate cloudstromen) ✓ — ALLEEN YAML-indeling Onder modernflows/; niet ondersteund in XML-indeling
Canvas-apps ✓ — ALLEEN YAML-indeling .msapp binair onder canvasapps/<name>/; niet ondersteund in XML-indeling
Definities van omgevingsvariabelen ✓ XML-bestanden Afzonderlijke .xml bestanden onder environmentvariabledefinitions/
Waarden voor omgevingsvariabelen ✓ JSON-bestand Opgeslagen als environment_variable_values.json
Aangepaste connectoren Onder connectors/
Invoegtoepassingsassembly's Volledig gekwalificeerde typenamen die standaard opnieuw zijn toegewezen (/remapPluginTypeNames)
Webresources Onder webresources/
Beveiligingsrollen Intern opgeslagen als XML; gefilterd per oplossing
Optiesets (globaal) Opgeslagen als XML; gefilterd per oplossing
Dashboards Opgeslagen als XML; gefilterd per oplossing
Siteoverzichten Opgeslagen als XML; gefilterd per oplossing
Aanpassingen op het lint Opgeslagen als XML; gefilterd per oplossing
Entiteitsrelaties Onder entityrelationships/

Opmerking

Onderdelen die intern als XML zijn opgeslagen, worden automatisch geconverteerd tussen XML en YAML tijdens het inpakken en uitpakken. U kunt ze ontwerpen als YAML-bestanden; het hulpprogramma verwerkt de conversie.

Opslagplaatsen met meerdere oplossingen

Een hoofdmap van één opslagplaats kan meerdere oplossingen bevatten. Alle oplossingen delen dezelfde onderdeelmappen; solutioncomponents.yml in elke oplossing bepaalt u welke onderdeelpaden tot die oplossing behoren.

Voorbeeldstructuur met twee oplossingen:

<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/

Een specifieke oplossing verpakken vanuit een map met meerdere oplossingen

Met behulp van SolutionPackager.exe:

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

Gebruik pac solution pack (alleen mappen met één oplossing: voor meerdere oplossingen, gebruik SolutionPackager.exe rechtstreeks met /SolutionName):

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

Opmerking

Wanneer u systeemeigen Dataverse Git-integratie met omgevingsbinding gebruikt, delen alle oplossingen in de omgeving één hoofdmap van de opslagplaats met behulp van de indeling voor meerdere oplossingen. Wanneer u oplossingsbinding gebruikt, kan elke oplossing worden gebonden aan een afzonderlijke map.

Werken met YAML-indelingsmappen

Een YAML-map inpakken in een .zip-bestand

# 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

Een volledige YAML-map verkrijgen uit Dataverse

De aanbevolen manier om een volledige, inpakbare YAML-map op te halen, is door het volgende te gebruiken pac solution clone:

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

Hiermee wordt de oplossing geëxtraheerd in de YAML-indeling, inclusief alle bronbestanden van onderdelen. U kunt ook systeemeigen Git-integratie gebruiken om door te voeren vanuit Power Apps. De vastgelegde bestanden hebben de YAML-indeling en kunnen volledig worden verpakt.

De map controleren voordat u ze inpakt

Controleer of de solutions/<name>/ map bestaat en of alle paden die worden omgezet in solutioncomponents.yml werkelijke bestanden. Ontbrekende paden resulteren in waarschuwingen tijdens het inpakken en deze onderdelen worden weggelaten.

Relatie met Dataverse Git-integratie

De YAML-broncodebeheerindeling is de canonieke indeling die wordt gebruikt door Dataverse Git-integratie. Wanneer makers oplossingen uit Power Apps doorvoeren, gebruiken de bestanden die naar Azure DevOps geschreven, deze indeling. Code-first-ontwikkelaars kunnen met dezelfde opslagplaats werken met behulp van de CLI-hulpprogramma's die hier worden beschreven.

Zie de installatie van Dataverse Git-integratie voor informatie over het verbinden van omgevingen met Git.