Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este artículo es una referencia para el formato de control de código fuente basado en YAML que se usa al:
- Confirme soluciones mediante la integración nativa de Git de Dataverse en Power Apps.
- Extraiga soluciones mediante
pac solution cloneopac solution sync. - Ejecute manualmente SolutionPackager en una carpeta que contenga archivos de manifiesto DE YAML.
El formato YAML difiere del diseño XML clásico. Comprender la estructura es importante cuando desea empaquetar manualmente una carpeta YAML en un .zip archivo que Dataverse puede importar.
Importante
La compatibilidad con el formato de control de código fuente de YAML en la CLI de pac requiere Microsoft. PowerApps.CLI versión 2.4.1 o posterior. Descargue la versión más reciente de NuGet o actualice a través de pac install latest. SolutionPackager.exe, que se incluye con el paquete NuGet, admite el formato YAML de la misma versión.
Introducción a la estructura de carpetas
Una raíz del repositorio de formato YAML contiene los siguientes directorios 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]/
Los solutions/ directorios y publishers/ son necesarios. Todas las carpetas de componentes de la raíz son opcionales y dependen de lo que contiene la solución.
Importante
Todos los archivos de manifiesto yaML (solution.yml, publisher.yml, etc.) deben colocarse en sus subdirectorios respectivos (solutions/<name>/, publishers/<name>/). Colocarlos en la raíz del repositorio impide la detección de formatos y hace que la herramienta SolutionPackager vuelva al formato XML, lo que genera un error engañoso sobre una falta Customizations.xml. Más información: Solución de problemas de la herramienta SolutionPackager
Dar formato a la detección automática
SolutionPackager (y pac solution pack) detectan automáticamente el formato de la siguiente manera:
| Condición | Formato detectado | Comportamiento |
|---|---|---|
solutions/*/solution.yml encontrado: una solución |
YAML | Nombre de solución inferido del nombre de la subcarpeta |
solutions/*/solution.yml encontrado: varias soluciones |
YAML |
/SolutionName argumento necesario para especificar la solución que se va a empaquetar |
No solutions/ hay ningún subdirectorio presente |
XML (heredado) | Espera Other\Solution.xml y Other\Customizations.xml |
Archivos de manifiesto
solution.yml
Ubicado en solutions/<SolutionUniqueName>/solution.yml. Contiene metadatos de solución de nivel superior: el equivalente de YAML en solution.xml formato XML.
Entre los campos clave se incluyen el nombre único de la solución, la versión, el nombre descriptivo, la descripción y una referencia al publicador.
solutioncomponents.yml
Ubicado en solutions/<SolutionUniqueName>/solutioncomponents.yml. Enumera las rutas de acceso relativas a todos los archivos de componentes incluidos en esta solución. SolutionPackager lee este archivo durante el paquete para buscar orígenes de componentes.
Extracto de ejemplo:
- Path: entities/account
- Path: entities/contact
- Path: canvasapps/myapp_<guid>
- Path: publishers/MyPublisher
rootcomponents.yml
Ubicado en solutions/<SolutionUniqueName>/rootcomponents.yml. Enumera los componentes de nivel raíz (normalmente tablas y otros objetos de nivel superior) que pertenecen a esta solución.
Nota:
Si un componente se declara en rootcomponents.yml pero sus archivos de origen están ausentes de la carpeta (por ejemplo, un archivo de aplicación .msapp de lienzo en canvasapps/<name>/), SolutionPackager emite una advertencia y omite ese componente del empaquetado .zip. La operación del paquete se completa correctamente con el código de salida 0.
El paquete correcto no garantiza que la importación se realice correctamente. Si solutioncomponents.yml omite las rutas de acceso de dependencia necesarias (como las carpetas de entidades primarias o las definiciones de relaciones en entityrelationships/ ), los paquetes de soluciones sin errores, pero no se pueden importar con un mensaje como: "Faltan atributos definiciones de relaciones asociadas". Asegúrese solutioncomponents.yml siempre de que incluya todas las entidades y relaciones dependientes, no solo las de la solución.
missingdependencies.yml
Ubicado en solutions/<SolutionUniqueName>/missingdependencies.yml. Registra las dependencias de solución que no estaban presentes cuando la solución se exportó por última vez. Se usa con fines informativos y para validar la integridad de la importación.
publisher.yml
Ubicado en publishers/<PublisherUniqueName>/publisher.yml. Contiene la definición del publicador: nombre único, nombre para mostrar, prefijo de personalización y prefijo de valor de opción.
Estructura mínima necesaria:
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:
Compatibilidad con tipos de componentes
En la tabla siguiente se muestra cómo se controla cada tipo de componente en el formato YAML.
| Tipo de componente | En formato YAML | Notas |
|---|---|---|
| Entidades (tablas), atributos, formularios, vistas | ✓ Archivos YAML | Almacenado como archivos YAML individuales por subcomponente |
| Flujos de trabajo (clásico) | ✓ Archivos YAML | Bajo workflows/ |
| Flujos modernos (flujos de nube Power Automate) | ✓ — Solo formato YAML | En modernflows/; no se admite en formato XML |
| Aplicaciones de lienzo | ✓ — Solo formato YAML |
.msapp binario en canvasapps/<name>/; no se admite en formato XML |
| Definiciones de variables de entorno | ✓ Archivos XML | Archivos individuales .xml en environmentvariabledefinitions/ |
| Valores de variables de entorno | ✓ Archivo JSON | Almacenado como environment_variable_values.json |
| Conectores personalizados | ✓ | Bajo connectors/ |
| Ensamblados de complementos | ✓ | Nombres de tipo completos reasignados de forma predeterminada (/remapPluginTypeNames) |
| Recursos web | ✓ | Bajo webresources/ |
| Roles de seguridad | ✓ | Almacenado como XML internamente; filtrado por solución |
| Conjuntos de opciones (global) | ✓ | Almacenado como XML; filtrado por solución |
| Tableros de control | ✓ | Almacenado como XML; filtrado por solución |
| Mapas del sitio | ✓ | Almacenado como XML; filtrado por solución |
| Personalizaciones de la cinta de opciones | ✓ | Almacenado como XML; filtrado por solución |
| Relaciones de entidad | ✓ | Bajo entityrelationships/ |
Nota:
Los componentes almacenados como XML internamente se convierten automáticamente entre XML y YAML durante las operaciones de empaquetado y desempaquetado. Puede crearlos como archivos YAML; la herramienta controla la conversión.
Repositorios de varias soluciones
Una única raíz del repositorio puede contener varias soluciones. Todas las soluciones comparten las mismas carpetas de componentes; solutioncomponents.yml en cada solución controla qué rutas de acceso de componente pertenecen a esa solución.
Estructura de ejemplo con dos soluciones:
<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/
Empaquetado de una solución específica desde una carpeta de varias soluciones
Uso de SolutionPackager.exe:
SolutionPackager.exe /action:Pack /zipfile:SolutionA.zip /folder:C:\repos\myrepo /SolutionName:SolutionA
Uso pac solution pack de (solo carpetas de una sola solución, para varias soluciones, use SolutionPackager.exe directamente con /SolutionName):
pac solution pack --zipfile SolutionA.zip --folder C:\repos\myrepo
Nota:
Al usar la integración nativa de Git de Dataverse con el enlace de entorno, todas las soluciones del entorno comparten una raíz de repositorio único mediante el diseño de varias soluciones. Al usar el enlace de solución, cada solución se puede enlazar a una carpeta independiente.
Trabajar con carpetas de formato YAML
Empaquetar una carpeta YAML en un archivo .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
Obtención de una carpeta YAML completa de Dataverse
La manera recomendada de obtener una carpeta YAML completa y empaquetable es usar pac solution clone:
pac solution clone --name MySolutionUniqueName --outputDirectory C:\repos\myrepo
Esto extrae la solución en el formato YAML, incluidos todos los archivos de origen de componentes. Como alternativa, use la integración nativa de Git para confirmar desde Power Apps: los archivos confirmados están en formato YAML y totalmente empaquetables.
Comprobación de la carpeta antes de empaquetar
Compruebe que la solutions/<name>/ carpeta existe y que todas las rutas de acceso de resolución se resuelven en solutioncomponents.yml archivos reales. Las rutas de acceso que faltan producen advertencias durante el paquete y esos componentes se omiten.
Relación con la integración de Git de Dataverse
El formato de control de código fuente de YAML es el formato canónico que usa la integración de Git de Dataverse. Cuando los creadores confirman soluciones de Power Apps, los archivos escritos en Azure DevOps usan este formato. Los desarrolladores de code-first pueden trabajar con el mismo repositorio mediante las herramientas de la CLI que se describen aquí.
Para obtener información sobre cómo conectar entornos a Git, consulte Configuración de integración de Git de Dataverse.