Referência do formato de controlo de versões YAML da solução

Este artigo é uma referência para o formato de controlo de versões baseado em YAML usado quando se segue:

  • Soluções de commit usando integração nativa Dataverse Git em Power Apps.
  • Extrair soluções usando pac solution clone ou pac solution sync.
  • Execute manualmente o SolutionPackager numa pasta que contenha ficheiros de manifestos YAML.

O formato YAML difere do layout clássico XML. Compreender a estrutura é importante quando se quer empacotar manualmente uma pasta YAML num .zip ficheiro que o Dataverse possa importar.

Importante

O suporte ao formato de controlo de versões YAML na CLI pac requer Microsoft. PowerApps.CLI versão 2.4.1 ou posterior. Descarregue a versão mais recente de NuGet ou atualize via pac install latest. SolutionPackager.exe, que vem com o pacote NuGet, suporta o formato YAML da mesma versão.

Visão geral da estrutura da pasta

A raiz de um repositório em formato YAML contém os seguintes diretórios de topo:

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

Os solutions/ diretórios e publishers/ são obrigatórios. Todas as pastas componentes na raiz são opcionais e dependem do que a solução contém.

Importante

Todos os ficheiros de manifestos YAML (solution.yml, publisher.yml, e assim sucessivamente) devem ser colocados nos respetivos subdiretórios (solutions/<name>/, publishers/<name>/). Colocá-los na raiz do repositório impede a deteção de formatos e faz com que a ferramenta SolutionPackager volte ao formato XML — produzindo um erro enganador sobre a falta Customizations.xmlde um arquivo . Mais informações: Resolução de problemas da ferramenta SolutionPackager

Deteção automática de formato

O SolutionPackager (e pac solution pack) detetam automaticamente o formato da seguinte forma:

Condition Formato detetado Comportamento
solutions/*/solution.yml Encontrado — Uma solução YAML Nome da solução inferido a partir do nome da subpasta
solutions/*/solution.yml — múltiplas soluções encontradas YAML /SolutionName argumento necessário para especificar qual solução embalar
Não há solutions/ subdiretório presente XML (legado) Expecta Other\Solution.xml e Other\Customizations.xml

Ficheiros de manifesto

solution.yml

Localizado em solutions/<SolutionUniqueName>/solution.yml. Contém metadados de solução de topo — o equivalente YAML a solution.xml no formato XML.

Os campos-chave incluem o nome único da solução, versão, nome amigo, descrição e uma referência ao editor.

solutioncomponents.yml

Localizado em solutions/<SolutionUniqueName>/solutioncomponents.yml. Lista caminhos relativos a todos os ficheiros de componentes incluídos nesta solução. O SolutionPackager lê este ficheiro durante o pack para localizar as fontes dos componentes.

Excerto de exemplo:

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

rootcomponents.yml

Localizado em solutions/<SolutionUniqueName>/rootcomponents.yml. Lista os componentes ao nível raiz (tipicamente tabelas e outros objetos de topo) que pertencem a esta solução.

Observação

Se um componente for declarado em rootcomponents.yml mas os seus ficheiros fonte estiverem ausentes da pasta (por exemplo, um ficheiro de aplicação .msapp canvas sob canvasapps/<name>/), o SolutionPackager emite um aviso e omite esse componente do pacote .zip. A operação do pack continua a ser concluída com sucesso com o código de saída 0.

O sucesso do pack não garante o sucesso das importações. Se solutioncomponents.yml omitir os caminhos de dependência necessários — como pastas de entidades-mãe ou definições de relação sob entityrelationships/ — a solução faz o pacote sem erro, mas falha na importação com uma mensagem como: "Os atributos estão em falta das definições de relação associadas." Certifique-se solutioncomponents.yml sempre de incluir todas as entidades e relações dependentes, não apenas as detidas pela solução.

missingdependencies.yml

Localizado em solutions/<SolutionUniqueName>/missingdependencies.yml. Regista quaisquer dependências da solução que não estivessem presentes quando a solução foi exportada pela última vez. Usado para fins informativos e para validar a completude na importação.

publisher.yml

Localizado em publishers/<PublisherUniqueName>/publisher.yml. Contém a definição do editor — nome único, nome de visualização, prefixo de personalização e prefixo de valor de opção.

Estrutura mínima necessária:

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:

Suporte a tipos de componentes

A tabela seguinte lista como cada tipo de componente é tratado no formato YAML.

Tipo de componente Em formato YAML Notes
Entidades (tabelas), atributos, formulários, vistas ✓ Ficheiros YAML Armazenados como ficheiros YAML individuais por subcomponente
Fluxos de trabalho (clássico) ✓ Ficheiros YAML Sob workflows/
Fluxos modernos (fluxos cloud do Power Automate) ✓ — Apenas formato YAML Sob modernflows/; não suportado em formato XML
Aplicações Canvas ✓ — Apenas formato YAML .msapp binário sob canvasapps/<name>/; não suportado em formato XML
Definições de variáveis de ambiente ✓ Ficheiros XML Ficheiros individuais .xml sob environmentvariabledefinitions/
Valores das variáveis de ambiente ✓ Ficheiro JSON Armazenado como environment_variable_values.json
Conectores personalizados Sob connectors/
Conjuntos plug-in Nomes de tipo totalmente qualificados remapeados por defeito (/remapPluginTypeNames)
Recursos da Web Sob webresources/
Funções de segurança Armazenado internamente como XML; filtrado por solução
Conjuntos de opções (globais) Armazenado como XML; filtrado por solução
Dashboards Armazenado como XML; filtrado por solução
Mapas do site Armazenado como XML; filtrado por solução
Personalizações de fitas Armazenado como XML; filtrado por solução
Relações entre entidades Sob entityrelationships/

Observação

Os componentes armazenados internamente como XML são automaticamente convertidos entre XML e YAML durante as operações de empacotamento e desempacotamento. Podes criá-los como ficheiros YAML; A ferramenta trata da conversão.

Repositórios multi-solução

A raiz de um único repositório pode conter múltiplas soluções. Todas as soluções partilham as mesmas pastas de componentes; solutioncomponents.yml em cada solução controla quais os caminhos dos componentes que pertencem a essa solução.

Exemplo de estrutura com duas soluções:

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

Empacotamento de uma solução específica a partir de uma pasta multi-solução

Usando SolutionPackager.exe:

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

Usando pac solution pack (apenas pastas de solução única — para multisolução, use SolutionPackager.exe diretamente com /SolutionName):

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

Observação

Ao usar integração nativa Dataverse Git com ligação ao ambiente, todas as soluções do ambiente partilham uma única raiz de repositório usando o layout multi-solução. Ao usar ligação de solução, cada solução pode ser associada a uma pasta separada.

A trabalhar com pastas em formato YAML

Empacota uma pasta YAML num ficheiro .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

Obtenha uma pasta YAML completa do Dataverse

A forma recomendada de obter uma pasta YAML completa e empacotável é usar pac solution clone:

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

Isto extrai a solução para o formato YAML, incluindo todos os ficheiros fonte dos componentes. Alternativamente, use integração nativa com Git para fazer commit a partir do Power Apps — os ficheiros comprometidos estão em formato YAML e são totalmente empacotáveis.

Verifique a pasta antes de empacotar

Verifica se a solutions/<name>/ pasta existe e se todos os caminhos resolvem solutioncomponents.yml para ficheiros reais. Quaisquer caminhos em falta resultam em avisos durante a embalagem e esses componentes são omitidos.

Relação com a integração Git do Dataverse

O formato de controlo de versões YAML é o formato canónico utilizado pela integração Dataverse Git. Quando os criadores fazem commit de soluções do Power Apps, os ficheiros escritos para o fornecedor Git utilizam este formato. Os programadores de código em primeiro lugar podem trabalhar com o mesmo repositório usando as ferramentas de CLI descritas aqui.

Para informações sobre como ligar ambientes ao Git, consulte a configuração da integração Git do Dataverse.