Lösningsreferens för YAML-källkontrollformat

Den här artikeln är en referens för det YAML-baserade källkontrollformatet som används när du:

  • Genomför lösningar med inbyggd Dataverse Git-integrering i Power Apps.
  • Extrahera lösningar med eller pac solution clonepac solution sync.
  • Kör SolutionPackager manuellt mot en mapp som innehåller YAML-manifestfiler.

YAML-formatet skiljer sig från den klassiska XML-layouten. Det är viktigt att förstå strukturen när du vill packa en YAML-mapp manuellt tillbaka till en .zip fil som Dataverse kan importera.

Important

Stöd för YAML-källkontrollformat i pac CLI kräver Microsoft. PowerApps.CLI version 2.4.1 eller senare. Ladda ned den senaste versionen från NuGet eller uppdatera via pac install latest. SolutionPackager.exe, som levereras med NuGet-paketet, stöder YAML-formatet från samma version.

Översikt över mappstruktur

En YAML-format lagringsplatsrot innehåller följande kataloger på den översta nivån:

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

Katalogerna solutions/ och publishers/ krävs. Alla komponentmappar i roten är valfria och beror på vad lösningen innehåller.

Important

Alla YAML-manifestfiler (solution.yml, publisher.ymloch så vidare) måste placeras under respektive underkatalog (solutions/<name>/, publishers/<name>/). Att placera dem på lagringsplatsens rot förhindrar formatidentifiering och gör att SolutionPackager-verktyget återgår till XML-formatet , vilket ger ett missvisande fel om en saknad Customizations.xml. Mer information: Felsökning av SolutionPackager-verktyget

Formatera automatisk identifiering

SolutionPackager (och pac solution pack) identifierar formatet automatiskt enligt följande:

Villkor Identifierat format Beteende
solutions/*/solution.yml found – en lösning YAML Lösningsnamnet som härleds från undermappens namn
solutions/*/solution.yml hittades – flera lösningar YAML /SolutionName argument som krävs för att ange vilken lösning som ska packas
Ingen underkatalog solutions/ finns XML (äldre) Förväntar sig Other\Solution.xml och Other\Customizations.xml

Manifestfiler

solution.yml

Finns på solutions/<SolutionUniqueName>/solution.yml. Innehåller lösningsmetadata på den översta nivån – YAML-motsvarigheten solution.xml till i XML-format.

Nyckelfälten innehåller lösningens unika namn, version, eget namn, beskrivning och en referens till utgivaren.

solutioncomponents.yml

Finns på solutions/<SolutionUniqueName>/solutioncomponents.yml. Visar relativa sökvägar till alla komponentfiler som ingår i den här lösningen. SolutionPackager läser den här filen under paketet för att hitta komponentkällor.

Exempelutdrag:

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

rootcomponents.yml

Finns på solutions/<SolutionUniqueName>/rootcomponents.yml. Visar de rotnivåkomponenter (vanligtvis tabeller och andra objekt på den översta nivån) som tillhör den här lösningen.

Anmärkning

Om en komponent deklareras i rootcomponents.yml men dess källfiler saknas i mappen (till exempel en appfil .msapp för arbetsytor under canvasapps/<name>/) genererar SolutionPackager en varning och utelämnar komponenten från den packade .zip. Paketåtgärden slutförs fortfarande med slutkod 0.

Paketframgång garanterar inte att importen lyckas. Om solutioncomponents.yml utelämnar nödvändiga beroendesökvägar, till exempel överordnade entitetsmappar eller relationsdefinitioner under entityrelationships/ , paketen utan fel men misslyckas vid import med ett meddelande som: "Attribut saknar associerade relationsdefinitioner." Se alltid till att solutioncomponents.yml innehåller alla beroende entiteter och relationer, inte bara de lösningsägda.

missingdependencies.yml

Finns på solutions/<SolutionUniqueName>/missingdependencies.yml. Registrerar eventuella lösningsberoenden som inte fanns när lösningen senast exporterades. Används i informationssyfte och för att verifiera fullständighet vid import.

publisher.yml

Finns på publishers/<PublisherUniqueName>/publisher.yml. Innehåller utgivarens definition – unikt namn, visningsnamn, anpassningsprefix och alternativvärdeprefix.

Minimal struktur som krävs:

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:

Stöd för komponenttyp

I följande tabell visas hur varje komponenttyp hanteras i YAML-format.

Komponenttyp I YAML-format Notes
Entiteter (tabeller), attribut, formulär, vyer √ YAML-filer Lagras som enskilda YAML-filer per underkomponent
Arbetsflöden (klassisk) √ YAML-filer Under workflows/
Moderna flöden (Power Automate molnflöden) √ – ENDAST YAML-format Under modernflows/; stöds inte i XML-format
Canvas-appar √ – ENDAST YAML-format .msapp binär under canvasapps/<name>/; stöds inte i XML-format
Miljövariabeldefinitioner √ XML-filer Enskilda .xml filer under environmentvariabledefinitions/
Miljövariabelvärden √ JSON-fil Lagras som environment_variable_values.json
Anpassade kopplingar Under connectors/
Plugin-sammansättningar Fullständigt kvalificerade typnamn ommappade som standard (/remapPluginTypeNames)
Webbresurser Under webresources/
Säkerhetsroller Lagras som XML internt; filtrerat per lösning
Alternativuppsättningar (globala) Lagrad som XML; filtrerat per lösning
Dashboards Lagrad som XML; filtrerat per lösning
Webbplatskartor Lagrad som XML; filtrerat per lösning
Anpassningar av menyfliksområdet Lagrad som XML; filtrerat per lösning
Entitetsrelationer Under entityrelationships/

Anmärkning

Komponenter som lagras som XML internt konverteras automatiskt mellan XML och YAML under pack- och uppackningsåtgärder. Du kan skapa dem som YAML-filer; verktyget hanterar konverteringen.

Lagringsplatser för flera lösningar

En enskild lagringsplatsrot kan innehålla flera lösningar. Alla lösningar delar samma komponentmappar. solutioncomponents.yml i varje lösning styr vilka komponentsökvägar som tillhör den lösningen.

Exempelstruktur med två lösningar:

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

Packa en specifik lösning från en mapp med flera lösningar

Använda SolutionPackager.exe:

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

Använd pac solution pack (endast mappar med en lösning – för flera lösningar använder du SolutionPackager.exe direkt med /SolutionName):

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

Anmärkning

När du använder inbyggd Dataverse Git-integrering med miljöbindning delar alla lösningar i miljön en enda lagringsplatsrot med hjälp av layouten för flera lösningar. När du använder lösningsbindning kan varje lösning bindas till en separat mapp.

Arbeta med YAML-formatmappar

Packa en YAML-mapp i en .zip fil

# 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

Hämta en fullständig YAML-mapp från Dataverse

Det rekommenderade sättet att få en fullständig, packbar YAML-mapp är att använda pac solution clone:

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

Detta extraherar lösningen i YAML-format, inklusive alla komponentkällfiler. Du kan också använda inbyggd Git-integrering för att checka in från Power Apps – de incheckade filerna är i YAML-format och helt packbara.

Kontrollera mappen innan du packar

Kontrollera att solutions/<name>/ mappen finns och att alla sökvägar i solutioncomponents.yml matchar faktiska filer. Eventuella sökvägar som saknas resulterar i varningar under paketet och dessa komponenter utelämnas.

Relation till Dataverse Git-integrering

YAML-källkontrollformatet är det kanoniska format som används av Dataverse Git-integrering. När skaparna genomför lösningar från Power Apps använder filerna som skrivits till Azure DevOps det här formatet. Kodutvecklare kan arbeta med samma lagringsplats med hjälp av CLI-verktygen som beskrivs här.

Information om hur du ansluter miljöer till Git finns i Konfiguration av Git-integrering i Dataverse.