Partilhar via


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:

Condição 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 encontrados — múltiplas soluções 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 das soluções do Power Apps, os ficheiros escritos no Azure DevOps 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.