Referință format sursă YAML soluție

Acest articol este o referință pentru formatul de control sursă bazat pe YAML utilizat atunci când:

  • Comiteți soluții utilizând integrarea nativă Dataverse Git în Power Apps.
  • Extrageți soluții utilizând pac solution clone sau pac solution sync.
  • Rulați manual SolutionPackager într-un folder care conține fișiere manifest YAML.

Formatul YAML diferă de aspectul XML clasic. Înțelegerea structurii este importantă atunci când doriți să împachetați manual un folder YAML într-un .zip fișier pe care Dataverse îl poate importa.

Important

Suportul pentru formatul controlului sursă YAML din pac CLI necesită Microsoft. PowerApps.CLI versiunea 2.4.1 sau o versiune mai recentă. Descărcați cea mai recentă versiune de la NuGet sau actualizați prin pac install latest. SolutionPackager.exe, care se livrează cu pachetul NuGet, acceptă formatul YAML din aceeași versiune.

Prezentare generală a structurii folderului

O rădăcină de depozit în format YAML conține următoarele directoare de nivel superior:

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

Sunt necesare directoarele solutions/ și publishers/ . Toate folderele componente de la rădăcină sunt opționale și depind de ceea ce conține soluția.

Important

Toate fișierele manifest YAML (solution.yml, publisher.ymlși așa mai departe) trebuie plasate sub subdirectoriile respective (solutions/<name>/, publishers/<name>/). Plasarea lor la rădăcina depozitului împiedică detectarea formatului și determină ca instrumentul SolutionPackager să revină la formatul XML , producând o eroare înșelătoare despre lipsa Customizations.xml. Mai multe informații: Depanarea instrumentului SolutionPackager

Formatarea detectării automate

SolutionPackager (și pac solution pack) detectează automat formatul după cum urmează:

Condiție Format detectat Comportamentul
solutions/*/solution.yml găsite — o soluție YAML Numele soluției dedus din numele subfolderului
solutions/*/solution.yml găsit — soluții multiple YAML /SolutionName argument necesar pentru a specifica soluția de împachetat
Nu există solutions/ subdirector prezent XML (moștenit) Other\Solution.xml Se așteaptă șiOther\Customizations.xml

Fișiere manifest

solution.yml

Situat la solutions/<SolutionUniqueName>/solution.yml. Conține metadate de soluții de nivel superior - echivalentul YAML al solution.xml formatului XML.

Câmpurile cheie includ numele unic al soluției, versiunea, numele prietenos, descrierea și o referință la editor.

solutioncomponents.yml

Situat la solutions/<SolutionUniqueName>/solutioncomponents.yml. Listează căile relative la toate fișierele componente incluse în această soluție. SolutionPackager citește acest fișier în timpul pachetului pentru a găsi sursele componentei.

Exemplu de fragment:

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

rootcomponents.yml

Situat la solutions/<SolutionUniqueName>/rootcomponents.yml. Listează componentele de nivel rădăcină (de obicei tabele și alte obiecte de nivel superior) care aparțin acestei soluții.

Notă

Dacă o componentă este declarată în rootcomponents.yml , dar fișierele sale sursă sunt absente din folder (de exemplu, un fișier aplicație .msapp pânză sub canvasapps/<name>/), SolutionPackager emite un avertisment și omite acea componentă din pachetul împachetat .zip. Operațiunea pachetului se finalizează în continuare cu succes, cu codul de ieșire 0.

Succesul pachetului nu garantează succesul importului. Dacă solutioncomponents.yml omite căile de dependență necesare , cum ar fi folderele de entități părinte sau definițiile de relații de sub entityrelationships/ - pachetele de soluții fără eroare, dar nu reușește importul cu un mesaj, cum ar fi: "Atributele lipsesc definiții de relație asociate". Asigurați-vă întotdeauna că solutioncomponents.yml include toate entitățile și relațiile dependente, nu doar pe cele deținute de soluție.

missingdependencies.yml

Situat la solutions/<SolutionUniqueName>/missingdependencies.yml. Înregistrează dependențele de soluții care nu au fost prezente la ultima exportare a soluției. Utilizat în scopuri informative și pentru a valida finalizarea importului.

publisher.yml

Situat la publishers/<PublisherUniqueName>/publisher.yml. Conține definiția editorului - nume unic, nume afișat, prefix de particularizare și prefix valoare opțiune.

Structură minimă necesară:

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:

Suport pentru tipul componentei

Următorul tabel listează modul în care este gestionat fiecare tip de componentă în formatul YAML.

Tip de componentă În format YAML Note
Entități (tabele), atribute, formulare, vizualizări ✓ fișiere YAML Stocate ca fișiere YAML individuale per subcomponent
Fluxuri de lucru (clasic) ✓ fișiere YAML Sub workflows/
Fluxuri moderne (fluxuri în cloud Power Automate) ✓ - numai formatul YAML Sub modernflows/; neacceptat în format XML
Aplicațiile create pe planșă ✓ - numai formatul YAML .msapp binar sub canvasapps/<name>/; neacceptat în format XML
Definiții variabile de mediu ✓ fișiere XML Fișiere individuale .xml sub environmentvariabledefinitions/
Valori variabile de mediu ✓ Fișier JSON Stocat ca environment_variable_values.json
Conectorii particularizați Sub connectors/
Asamblări insert Numele tipurilor complet calificate sunt remapped în mod implicit (/remapPluginTypeNames)
Resurse web Sub webresources/
Roluri de securitate Stocat intern ca XML; filtrat per soluție
Seturi de opțiuni (global) Stocat ca XML; filtrat per soluție
Tablouri de bord Stocat ca XML; filtrat per soluție
Hărți de site Stocat ca XML; filtrat per soluție
Particularizări ale panglicii Stocat ca XML; filtrat per soluție
Relații entități Sub entityrelationships/

Notă

Componentele stocate intern ca XML se transformă automat între XML și YAML în timpul operațiunilor de împachetare și despachetare. Le puteți crea ca fișiere YAML; instrumentul gestionează conversia.

Depozite de soluții multiple

O singură rădăcină a depozitului poate conține mai multe soluții. Toate soluțiile partajează aceleași foldere de componente; solutioncomponents.yml în fiecare soluție controlează căile componente care aparțin acelei soluții.

Exemplu de structură cu două soluții:

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

Împachetarea unei anumite soluții dintr-un folder cu mai multe soluții

Utilizarea SolutionPackager.exe:

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

Utilizarea pac solution pack (numai foldere cu o singură soluție - pentru mai multe soluții, utilizați SolutionPackager.exe direct cu /SolutionName):

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

Notă

Atunci când utilizați integrarea nativă Dataverse Git cu legarea mediului, toate soluțiile din mediu partajează o singură rădăcină de depozit utilizând aspectul cu mai multe soluții. Atunci când utilizați legarea soluției, fiecare soluție poate fi legată la un folder separat.

Lucrul cu folderele de formate YAML

Împachetați un folder YAML într-un fișier .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

Obținerea unui folder YAML complet din Dataverse

Modalitatea recomandată de a obține un folder YAML complet și ambalat este să utilizați pac solution clone:

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

Aceasta extrage soluția în formatul YAML, inclusiv toate fișierele sursă ale componentelor. Ca alternativă, utilizați integrarea Git nativă pentru a comite de la Power Apps - fișierele asumate sunt în format YAML și complet ambalate.

Verificați folderul înainte de ambalare

Verificați dacă solutions/<name>/ folderul există și că toate căile din solutioncomponents.yml fișier sunt rezolvate. Orice căi lipsă au ca rezultat avertismente în timpul pachetului și aceste componente sunt omise.

Relația cu integrarea Dataverse Git

Formatul de control sursă YAML este formatul canonic utilizat de integrarea Dataverse Git. Atunci când makers comite soluții din Power Apps, fișierele scrise în Azure DevOps utilizați acest format. Dezvoltatorii cu prenume de cod pot lucra cu același depozit utilizând instrumentele CLI descrise aici.

Pentru informații despre conectarea mediilor la Git, consultați Configurarea integrării Dataverse Git.