Dataverse Tip #1
Read a solution package before you import it: three files and two things that lie to you
A Dataverse solution is a zip: three files tell you what you are about to import, and two things inside them mislead you if you read them the obvious way.
A Dataverse solution is a zip file, and you can read it without an environment, a login or a single
pac command. Two files inside it carry most of what you need to know before an import.
solution.xml is the identity: the unique name, the version, whether the package is managed, the
publisher, and a <RootComponents> list in which every component is a type number and nothing more.
customizations.xml is the payload - tables, columns, forms, views. [Content_Types].xml keeps
SolutionPackager happy and tells you nothing.
customizations.xml declares things the package does not carry
It declares Entities, Roles, Workflows and
WebResources whether or not the package carries any. Microsoft’s metadata sample has three root
components and not one of them is a table, yet its <Entities> element is there with nothing inside it
- zero
<Entity>elements in the file - which is enough for a quick look to conclude that the solution carries a table. What the package actually changes is<RootComponents>insolution.xml.
The web resource payload has no extension
Inside the zip a file is named after its logical name with the
dot removed and the resource’s uppercase GUID glued on: example_form-script.js becomes
WebResources/example_form-scriptjsAEFB6A9A-0EA4-F111-B8DC-7CED8DA8A791. There is no extension, so
editors, diff tools and packers each guess the type and each guess differently. The only honest source
is <WebResourceType>, where 3 means a script. The logical name is not a hint either: Microsoft’s own
metadata sample ships a resource called sample_/metadatabrowser, which carries no extension and is a
web page.
The published type table is not the whole set
Microsoft’s metadata sample declares type 80, the CoE starter kit ships nine of them, and the reference page has no row for 80 at all. Tooling that treats the documented list as exhaustive drops those components on the floor.
A managed solution cannot be edited once it is in the target environment, and an import that fails halfway leaves you diagnosing from the portal. Thirty seconds with the zip - how many components, of which types, and which web resources - is the difference between a five-minute import and an afternoon.