Condividi tramite


Informazioni di riferimento sul formato del controllo del codice sorgente YAML della soluzione

Questo articolo è un riferimento per il formato di controllo del codice sorgente basato su YAML usato quando:

  • Eseguire il commit di soluzioni usando l'integrazione git nativa Dataverse in Power Apps.
  • Estrarre soluzioni usando pac solution clone o pac solution sync.
  • Eseguire manualmente SolutionPackager su una cartella che contiene file manifesto YAML.

Il formato YAML è diverso dal layout XML classico. Comprendere la struttura è importante quando si vuole comprimere manualmente una cartella YAML in un .zip file che Dataverse può importare.

Importante

Il supporto del formato del controllo del codice sorgente YAML nell'interfaccia della riga di comando di pac richiede Microsoft. PowerApps.CLI versione 2.4.1 o successiva. Scaricare la versione più recente da NuGet o aggiornare tramite pac install latest. SolutionPackager.exe, fornito con il pacchetto NuGet, supporta il formato YAML dalla stessa versione.

Panoramica della struttura delle cartelle

Una radice del repository in formato YAML contiene le directory di primo livello seguenti:

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

Le solutions/ directory e publishers/ sono obbligatorie. Tutte le cartelle dei componenti nella radice sono facoltative e dipendono da ciò che contiene la soluzione.

Importante

Tutti i file manifesto YAML (solution.yml, publisher.ymle così via) devono essere inseriti nelle rispettive sottodirectory (solutions/<name>/, publishers/<name>/). L'inserimento nella radice del repository impedisce il rilevamento del formato e fa sì che lo strumento SolutionPackager venga eseguito il fallback al formato XML, generando un errore fuorviante relativo a un elemento mancante Customizations.xml. Altre informazioni: Risoluzione dei problemi dello strumento SolutionPackager

Formattare il rilevamento automatico

SolutionPackager (e pac solution pack) rileva automaticamente il formato come segue:

Condition Formato rilevato Comportamento
solutions/*/solution.yml trovato — una soluzione YAML Nome della soluzione dedotto dal nome della sottocartella
solutions/*/solution.yml found — più soluzioni YAML /SolutionName argomento necessario per specificare la soluzione da comprimere
Nessuna solutions/ sottodirectory presente XML (legacy) Other\Solution.xml Previsto eOther\Customizations.xml

File manifest

solution.yml

Situato in solutions/<SolutionUniqueName>/solution.yml. Contiene i metadati della soluzione di primo livello, ovvero l'equivalente YAML di solution.xml nel formato XML.

I campi chiave includono il nome univoco, la versione, il nome descrittivo, la descrizione e un riferimento al server di pubblicazione della soluzione.

solutioncomponents.yml

Situato in solutions/<SolutionUniqueName>/solutioncomponents.yml. Elenca i percorsi relativi a tutti i file di componente inclusi in questa soluzione. SolutionPackager legge questo file durante il pacchetto per individuare le origini dei componenti.

Estratto di esempio:

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

rootcomponents.yml

Situato in solutions/<SolutionUniqueName>/rootcomponents.yml. Elenca i componenti a livello radice (in genere tabelle e altri oggetti di primo livello) che appartengono a questa soluzione.

Annotazioni

Se un componente viene dichiarato in rootcomponents.yml ma i relativi file di origine sono assenti dalla cartella (ad esempio, un file dell'app .msapp canvas in canvasapps/<name>/), SolutionPackager genera un avviso e omette tale componente dall'oggetto compresso .zip. L'operazione pack viene comunque completata correttamente con il codice di uscita 0.

L'esito positivo del pacchetto non garantisce l'esito positivo dell'importazione. Se solutioncomponents.yml omette i percorsi di dipendenza necessari, ad esempio cartelle di entità padre o definizioni entityrelationships/ di relazione in , i pacchetti di soluzioni senza errori, ma non riescono all'importazione con un messaggio simile al seguente: "Gli attributi mancano definizioni di relazione associate". Assicurarsi solutioncomponents.yml sempre di includere tutte le entità dipendenti e le relazioni, non solo quelle di proprietà della soluzione.

missingdependencies.yml

Situato in solutions/<SolutionUniqueName>/missingdependencies.yml. Registra tutte le dipendenze della soluzione che non erano presenti quando la soluzione è stata esportata per l'ultima volta. Utilizzato a scopo informativo e per convalidare la completezza durante l'importazione.

publisher.yml

Situato in publishers/<PublisherUniqueName>/publisher.yml. Contiene la definizione dell'editore, ovvero il nome univoco, il nome visualizzato, il prefisso di personalizzazione e il prefisso del valore dell'opzione.

Struttura minima richiesta:

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:

Supporto del tipo di componente

La tabella seguente elenca il modo in cui ogni tipo di componente viene gestito nel formato YAML.

Tipo di componente In formato YAML Note
Entità (tabelle), attributi, moduli, viste ✓ File YAML Archiviato come singoli file YAML per ogni sottocomponente
Flussi di lavoro (versione classica) ✓ File YAML Sotto workflows/
Flussi moderni (flussi cloud Power Automate) ✓ — solo formato YAML In modernflows/; non supportato in formato XML
App di canvas ✓ — solo formato YAML .msapp binary in canvasapps/<name>/; non supportato in formato XML
Definizioni delle variabili di ambiente ✓ File XML Singoli .xml file in environmentvariabledefinitions/
Valori delle variabili di ambiente ✓ File JSON Archiviato come environment_variable_values.json
Connettori personalizzati Sotto connectors/
Assembly plug-in Nomi di tipi completi mappati per impostazione predefinita (/remapPluginTypeNames)
Risorse Web Sotto webresources/
Ruoli di sicurezza Archiviato come XML internamente; filtrato per soluzione
Set di opzioni (globale) Archiviato come XML; filtrato per soluzione
Pannelli di controllo Archiviato come XML; filtrato per soluzione
Mappe del sito Archiviato come XML; filtrato per soluzione
Personalizzazioni della barra multifunzione Archiviato come XML; filtrato per soluzione
Relazioni tra entità Sotto entityrelationships/

Annotazioni

I componenti archiviati internamente come XML vengono convertiti automaticamente tra XML e YAML durante le operazioni di decompressione e pack. È possibile crearli come file YAML; lo strumento gestisce la conversione.

Repository multi-soluzione

Una singola radice del repository può contenere più soluzioni. Tutte le soluzioni condividono le stesse cartelle dei componenti; solutioncomponents.yml in ogni soluzione controlla i percorsi dei componenti che appartengono a tale soluzione.

Struttura di esempio con due soluzioni:

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

Compressione di una soluzione specifica da una cartella multi-soluzione

Uso di SolutionPackager.exe:

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

Uso pac solution pack di (solo cartelle a soluzione singola, per più soluzioni, usare SolutionPackager.exe direttamente con /SolutionName):

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

Annotazioni

Quando si usa l'integrazione nativa di Dataverse Git con l'associazione di ambiente, tutte le soluzioni nell'ambiente condividono una singola radice del repository usando il layout multi-soluzione. Quando si usa l'associazione di soluzioni, ogni soluzione può essere associata a una cartella separata.

Uso delle cartelle di formato YAML

Comprimere una cartella YAML in un file .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

Ottenere una cartella YAML completa da Dataverse

Il modo consigliato per ottenere una cartella YAML completa e comprimibile consiste nell'usare pac solution clone:

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

Questa operazione estrae la soluzione nel formato YAML, inclusi tutti i file di origine dei componenti. In alternativa, usare l'integrazione Git nativa per eseguire il commit da Power Apps: i file di cui è stato eseguito il commit sono in formato YAML e completamente comprimibili.

Verificare la cartella prima della compressione

Verificare che la solutions/<name>/ cartella esista e che tutti i percorsi in solutioncomponents.yml risolvono i file effettivi. Eventuali percorsi mancanti generano avvisi durante il pacchetto e tali componenti vengono omessi.

Relazione con l'integrazione git di Dataverse

Il formato del controllo del codice sorgente YAML è il formato canonico usato dall'integrazione git di Dataverse. Quando gli autori eseguono il commit di soluzioni da Power Apps, i file scritti in Azure DevOps usano questo formato. Gli sviluppatori code-first possono usare lo stesso repository usando gli strumenti dell'interfaccia della riga di comando descritti qui.

Per informazioni sulla connessione degli ambienti a Git, vedere Configurazione dell'integrazione git di Dataverse.