10.1The lab: the tenant, the plan and the environments
what the guide's verified claims were run against
A verified claim in this guide names an artifact id, and the artifact is a command that was run and the output it printed. This section records where those commands ran and on what, so you can judge how far they carry.
The lab is one Microsoft Entra ID tenant on the Power Apps Developer Plan, with three Dataverse environments, reached from one machine through one authenticated CLI profile.
One build of the Power Platform CLI produced the guide's captures: 2.10.1+g52c3983 on .NET 10.0.10. The same version string is recorded in the environment table of each staging file from chapter 2 to chapter 9.verifiedartifact: ch10-pac-version · artifacts-ch10.md
Microsoft PowerPlatform CLI Version: 2.10.1+g52c3983 (.NET 10.0.10) Online documentation: https://aka.ms/PowerPlatformCLI Feedback, Suggestions, Issues: https://github.com/microsoft/powerplatform-build-tools/discussions
The machine holds one pac authentication profile — kind UNIVERSAL, type User, cloud Public — signed in as skydude@itrancyngergmail.onmicrosoft.com, with the development environment as its active organization.verifiedartifact: ch10-auth-list · artifacts-ch10.md
Index Active Kind Name User Cloud Type Environment Environment Url [1] * UNIVERSAL skydude@itrancyngergmail.onmicrosoft.com Public User skydude's Environment https://org85700aeb.crm.dynamics.com/
--environmentThe environments carry the roles of a deployment chain: development, test, and a stand-in for production.
The tenant holds three environments. skydude's Environment at https://org85700aeb.crm.dynamics.com/ is the one the guide calls dev; skylib-test is at https://org5014704c.crm.dynamics.com/; and skylib-prod, at https://orge76abca4.crm.dynamics.com/, stands in for production. pac env list reports the environment id of each beside its URL.verifiedartifact: ch10-env-list · artifacts-ch10.md
Connected as skydude@itrancyngergmail.onmicrosoft.com
Active Display Name Environment ID Environment URL Unique Name
* skydude's Environment 3caaae88-df92-e1ea-9467-7ce90a51b602 https://org85700aeb.crm.dynamics.com/ unqc5fa366c5190f111b8cf6045bd056
skylib-prod 908e4dd8-b8c1-e164-a999-5c8dab720e1b https://orge76abca4.crm.dynamics.com/ unq604d63685890f111b8cf6045bd0a1
skylib-test f6ee4b3f-fc72-e328-86b8-7f90829cf31e https://org5014704c.crm.dynamics.com/ unq644d63685890f111b8cf6045bd0a1
--environment argumentsThe Type column of pac admin list reads Developer for all three environments, so dev, test and prod are role names this lab gave them and not a distinction the platform records.verifiedartifact: ch10-admin-list · artifacts-ch10.md
Connected as skydude@itrancyngergmail.onmicrosoft.com
Listing all environments from your tenant...
Listing environment groups from your tenant...
Active Environment Group Environment ID Environment Url Type Organization ID
* skydude's Environment - 3caaae88-df92-e1ea-9467-7ce90a51b602 https://org85700aeb.crm.dynamics.com/ Developer c5fa366c-5190-f111-b8cf-6045bd056918
skylib-prod - 908e4dd8-b8c1-e164-a999-5c8dab720e1b https://orge76abca4.crm.dynamics.com/ Developer 604d6368-5890-f111-b8cf-6045bd0a1f2d
skylib-test - f6ee4b3f-fc72-e328-86b8-7f90829cf31e https://org5014704c.crm.dynamics.com/ Developer 644d6368-5890-f111-b8cf-6045bd0a1f1f
10.1.1The developer plan, and the claims it decided
The Power Apps Developer Plan is what makes the lab free. What it withholds decided, in several places in this guide, which claims could be run and which had to be pinned to documentation instead.
A developer environment's capacity limits are 750 flow runs a month and 2 GB of database, and add-ons cannot raise them.citedsource: Power Apps Developer Plan docs — capacity limits for the developer environment · artifacts-ch10.md
The plan's feature table answers No to “Create and use dataflows” for the developer environment, which is why chapter 8 reaches its subject through the Web API and the documentation.citedsource: Power Apps Developer Plan docs — dataflows in a developer environment · artifacts-ch10.md
A developer environment can become a managed environment, and managed environment use rights are not included in the plan: end users need premium licences to run their assets in a managed developer environment.citedsource: Power Apps Developer Plan docs — managed environment use rights · artifacts-ch10.md
The plan creates one developer environment at sign-up, and up to three environments may be created from the Power Platform admin center.citedsource: Power Apps Developer Plan docs — how many environments the plan gives · artifacts-ch10.md
A developer environment with no user activity for 30 days is disabled; 15 days after that it is deleted, and a deleted environment can be recovered for seven days. Warning emails are sent at 23 days and again at 27.citedsource: Power Platform admin docs — automatic cleanup › timeline for unused developer environments · artifacts-ch10.md
Most create, read, update and delete operations a user, maker or admin initiates count as activity, and automated behaviour such as a scheduled flow run counts with them. Visits to the home page, the solution explorer and the designers do not.citedsource: Power Platform admin docs — automatic cleanup › what counts as activity · artifacts-ch10.md
pac admin create has printed a parsing error naming linkedEnvironmentMetadata after the environment it was asked for had in fact been provisioned.experientialbasis: observed while provisioning the lab's two additional environments
Caution
The inactivity clock above is this lab's expiry date. When it runs out the platform disables the environments, and the commands reproduced in this appendix stop running there.
Guidance
Confirm what pac admin create did with pac env list before you read its stderr as the outcome.
10.2The residue each chapter left in the lab
the residue, read in one pass after the last chapter landed
Each chapter that carries artifacts authored objects in the lab and left them there. So a later chapter's capture shows an earlier chapter's residue beside its own — chapter 4's solution list shows ch23lab, which belongs to chapter 3 — and this section tells you what belongs to whom.
Reading pac solution list in the three environments on 2026-08-05 shows six solution names the guide's chapters created, in eight rows: ch23lab in dev and in test, ch45Lab and ch45WrOnly in test, ch45SiteMap in the production stand-in, ch67Lab in dev, and ch89alm in test and in the production stand-in. ch23lab is unmanaged in dev and managed in test; ch89alm is unmanaged in test and managed in the production stand-in.verifiedartifact: ch10-solution-residues · artifacts-ch10.md
— the development environment —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment Listing all Solutions from the current Dataverse organization... Unique Name Friendly Name Version Managed msdyn_AIBuilderSampleData AI Sample Data 1.0.0.6 True ch23lab ch23lab 1.0 False ch67Lab ch67Lab 1.0.0.9 False Cra969a Common Data Services Default Solution 1.0.0.0 False Default Default Solution 1.0 False— the test environment —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Listing all Solutions from the current Dataverse organization... Unique Name Friendly Name Version Managed ch23lab ch23lab 1.0.1.0 True ch45Lab ch45Lab 1.0 False ch45WrOnly ch45WrOnly 1.0 False ch89alm ch89alm 1.2.0.0 False Cra969a Common Data Services Default Solution 1.0.0.0 False Default Default Solution 1.0 False— the production stand-in —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod Listing all Solutions from the current Dataverse organization... Unique Name Friendly Name Version Managed ch45SiteMap ch45SiteMap 1.0 False ch89alm ch89alm 1.2.0.0 True Cra969a Common Data Services Default Solution 1.0.0.0 False Default Default Solution 1.0 False
Default, Cra969a and msdyn_AIBuilderSampleData are the platform's ownChapter 7's two cloud flows, ch67DailyNote and ch67AccountWatch, are in the development environment with a statecode of Draft, beside three modern flows the environment shipped with. A Draft flow consumes no runs.verifiedartifact: ch10-modern-flows-dev · artifacts-ch10.md
— the FetchXML selects name, statecode and category from workflow, filtered to category 5 —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment name statecode category workflowid Integrated Search API trigger flow Draft Modern Flow 4ffa33c2-c12e-ed11-9db1-0022482aea7b ch67AccountWatch Draft Modern Flow c6702a02-6702-6702-9c67-c67c67c67c67 Search Dynamics 365 knowledge article flow Draft Modern Flow 87023c69-962c-ec11-b6e6-000d3a574957 SLAInstanceMonitoringWarningAndExpiryFlow Draft Modern Flow ee2079d2-a93f-48b5-887a-c54ad830cbe5 ch67DailyNote Draft Modern Flow c6701a01-6701-6701-9c67-c67c67c67c67
The application user created for the ch89-ci service principal is Enabled in the test environment and holds one security role there, System Administrator.verifiedartifact: ch10-ci-application-user · artifacts-ch10.md
— the FetchXML selects fullname, applicationid and isdisabled from systemuser, joined through systemuserroles to role —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test fullname applicationid isdisabled systemuserid r.name # ch89-ci bde22820-badb-4c02-948b-765540cb1d08 Enabled bcc43b5c-8e90-f111-8076-70a8a59af8d5 System Administrator
A deployment identity holding System Administrator is the first thing a security review of a tenant picks up: the role carries the privileges an import needs and every other privilege in the environment along with them.experientialbasis: the least-privilege posture usual in tenants where deployments run under a service principal
Guidance
Give your deployment service principal the privileges its imports need and stop there. The role on ch89-ci is a convenience of this lab, which holds one identity and no production data. Scope it down in a tenant that holds either.
10.3Warrant, and where each kind of record lives
verified, cited and experiential, and the record each leaves
The guide marks a factual claim with the kind of warrant behind it: verified, cited or experiential. The markup and the rule are the guide's house style; this section tells you where each kind's record lives, so you can audit one.
A verified claim names an artifact id. The id resolves twice: to a ### <id> entry in the staging file for that chapter, which holds the command, the environment, the date, the output as printed and a note on what the run does and does not warrant; and to a listing in §10.4 onwards, which is the same capture in the form a reader meets it. The chapter's own test module asserts both resolutions, and this chapter's asserts that the two sets are the same set.
The eight staging files hold 86 artifact entries and 142 logged citations between them.
A cited claim names a source. The source was fetched during the session that wrote the sentence and logged under the Citations heading of the same staging file, with its URL, the date it was read and the sentence or figure it gives. A source that could not be fetched produced an experiential claim with its basis stated, or the sentence was cut.
An experiential claim names its basis in one clause. It leaves no capture and no citation log, and the badge is what tells you which kind of statement you are reading.
This page carries the artifacts and not the citations. A logged source is one entry in one file, and a copy of it here would be a second place for it to go stale.
Caution
The suite here binds a capture to the record it came from, and a claim to the evidence it names. Whether the run was worth making, and whether the sentence beside it reads the output correctly, are for you to judge with the two side by side.
10.4Artifacts from chapter 2 — the Dataverse data model
the lab table, its generated columns and relationships, and the security model read back
Chapter 2 staged eleven artifacts: the solution and table the lab starts from, the columns and relationships the platform generated around that table, and the ownership and security records read back through FetchXML.
— Output of the init —Dataverse solution project with name 'ch23lab' created successfully in: '.../scratchpad/lab/ch23lab' Dataverse solution files were successfully created for this project in the sub-directory Other, using solution name ch23lab, publisher name ch23lab, and customization prefix ch23. Please verify the publisher information and solution name found in the Solution.xml file.— Output of the pack —Packing Solution... Packing .../scratchpad/lab/ch23lab/src to .../scratchpad/lab/ch23lab/ch23lab_widget.zip Processing Component: Entities - ch23_Widget Processing Component: Roles Processing Component: Workflows Processing Component: FieldSecurityProfiles Processing Component: Templates Processing Component: EntityMaps Processing Component: EntityRelationships Processing Component: OrganizationSettings Processing Component: optionsets Processing Component: CustomControls Processing Component: SolutionPluginAssemblies Processing Component: EntityDataProviders Processing Sharded Component Files Unmanaged Pack complete. Packed Solution.— Output of the import —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.— Two failures on the way there —Error: PrimaryName attribute not found for Entity: ch23_Widget Error: Import failed: Requested value 'PrimaryKeyLookup' was not found.
— the FetchXML —<fetch mapping="logical"> <entity name="ch23_widget"> <attribute name="ch23_name" /> <attribute name="ownerid" /> <attribute name="owningbusinessunit" /> <attribute name="statecode" /> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment No results returned.
— the FetchXML —<fetch top="10" mapping="logical"> <entity name="team"> <attribute name="name" /> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment Microsoft PowerPlatform CLI Version: 2.10.1+g52c3983 (.NET 10.0.10) Online documentation: https://aka.ms/PowerPlatformCLI Feedback, Suggestions, Issues: https://github.com/microsoft/powerplatform-build-tools/discussions Error: The top attribute can't be specified with paging attribute page
— Output —Begin reading metadata from MetadataProviderService Begin Reading Metadata from Server Read 1 Entities - 00:00:01.146 Read 0 Global OptionSets - 00:00:00.000 Read 0 SDK Messages - 00:00:00.000 Completed Reading Metadata from Server - 00:00:01.405 Completed reading metadata from MetadataProviderService - 00:00:01.406 Begin Writing Code Files Processing 1 Entities Wrote 1 Entities - 00:00:00.0695884 Processing 0 Messages Wrote 0 Message(s). Skipped 0 Message(s) - 00:00:00.0000105 Processing 0 Global OptionSets Wrote 0 Global OptionSets - 00:00:00.0000039 Code written to .../model/Entities/account.cs. Code written to .../model/EntityOptionSetEnum.cs. ProxyTypesAssemblyAttribute not written, Please add [assembly: Microsoft.Xrm.Sdk.Client.ProxyTypesAssemblyAttribute()] to a file in your class if you require Linq or direct casting support. Completed Writing Code Files - 00:00:00.083 Generation Complete - 00:00:01.489
— Excerpts —[Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute("accountcategorycode")] public virtual account_accountcategorycode? AccountCategoryCode { get { return ((account_accountcategorycode?)(EntityOptionSetEnum.GetEnum(this, "accountcategorycode"))); } set { this.SetAttributeValue("accountcategorycode", value.HasValue ? new Microsoft.Xrm.Sdk.OptionSetValue((int)value) : null); } } return this.GetAttributeValue<Microsoft.Xrm.Sdk.EntityReference>("primarycontactid"); return this.GetAttributeValue<Microsoft.Xrm.Sdk.Money>("revenue"); return this.GetAttributeValue<System.Nullable<System.DateTime>>("createdon");
— Every <attribute PhysicalName> and <Type> pair in the file —ch23_Name nvarchar ch23_WidgetId primarykey CreatedBy lookup CreatedOn datetime CreatedOnBehalfBy lookup ImportSequenceNumber int ModifiedBy lookup ModifiedOn datetime ModifiedOnBehalfBy lookup OverriddenCreatedOn datetime OwnerId owner OwningBusinessUnit lookup OwningTeam lookup OwningUser lookup statecode state statuscode status TimeZoneRuleVersionNumber int UTCConversionTimeZoneCode int— The ownership columns, excerpted from the same file —<attribute PhysicalName="OwnerId"> <Type>owner</Type> <Name>ownerid</Name> <RequiredLevel>systemrequired</RequiredLevel> <IsCustomField>0</IsCustomField> <LookupTypes> <LookupType id="00000000-0000-0000-0000-000000000000">8</LookupType> <LookupType id="00000000-0000-0000-0000-000000000000">9</LookupType> </attribute> <attribute PhysicalName="OwningBusinessUnit"> <Type>lookup</Type> <Name>owningbusinessunit</Name> <RequiredLevel>none</RequiredLevel> <IsCustomField>0</IsCustomField> <LookupTypes /> </attribute>
— Output of the export —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment Starting Solution Export... Solution export succeeded.— Output of the unpack —Unpacking Solution... Extracting .../out/ch23lab.zip to .../unpacked Skipping localization Processing Component: Entities - Account - ch23_Widget Processing Component: EntityRelationships Unmanaged Extract complete. Unpacked Solution.
<EntityRelationship Name="owner_ch23_widget"> <EntityRelationshipType>OneToMany</EntityRelationshipType> <ReferencingEntityName>ch23_Widget</ReferencingEntityName> <ReferencedEntityName>Owner</ReferencedEntityName> <CascadeAssign>NoCascade</CascadeAssign> <CascadeDelete>NoCascade</CascadeDelete> <CascadeArchive>NoCascade</CascadeArchive> <CascadeReparent>NoCascade</CascadeReparent> <CascadeShare>NoCascade</CascadeShare> <CascadeUnshare>NoCascade</CascadeUnshare> <ReferencingAttributeName>OwnerId</ReferencingAttributeName> </EntityRelationship> <EntityRelationship Name="business_unit_ch23_widget"> <ReferencedEntityName>BusinessUnit</ReferencedEntityName> <CascadeAssign>NoCascade</CascadeAssign> <CascadeDelete>Restrict</CascadeDelete> <CascadeArchive>Restrict</CascadeArchive> <CascadeReparent>NoCascade</CascadeReparent> <CascadeShare>NoCascade</CascadeShare> <CascadeUnshare>NoCascade</CascadeUnshare> <ReferencingAttributeName>OwningBusinessUnit</ReferencingAttributeName> </EntityRelationship> <EntityRelationship Name="user_ch23_widget"> <ReferencedEntityName>SystemUser</ReferencedEntityName> <CascadeAssign>NoCascade</CascadeAssign> <CascadeDelete>NoCascade</CascadeDelete> <CascadeArchive>NoCascade</CascadeArchive> <CascadeReparent>NoCascade</CascadeReparent> <CascadeShare>NoCascade</CascadeShare> <CascadeUnshare>NoCascade</CascadeUnshare> <ReferencingAttributeName>OwningUser</ReferencingAttributeName> </EntityRelationship> <EntityRelationship Name="team_ch23_widget"> <ReferencedEntityName>Team</ReferencedEntityName> <CascadeAssign>NoCascade</CascadeAssign> <CascadeDelete>NoCascade</CascadeDelete> <CascadeArchive>NoCascade</CascadeArchive> <CascadeReparent>NoCascade</CascadeReparent> <CascadeShare>NoCascade</CascadeShare> <CascadeUnshare>NoCascade</CascadeUnshare> <ReferencingAttributeName>OwningTeam</ReferencingAttributeName> </EntityRelationship>
— the FetchXML —<fetch mapping="logical"> <entity name="team"> <attribute name="name" /> <attribute name="teamtype" /> <attribute name="isdefault" /> <order attribute="name" /> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment name teamtype isdefault teamid 12704e77bd5b4f3082ed3c99b3e23387_2 Access No 9543483d-1c8c-f111-ab0f-70a8a5b2d5ff 12704e77bd5b4f3082ed3c99b3e23387_1 Access No 7c43483d-1c8c-f111-ab0f-70a8a5b2d5ff org85700aeb Owner Yes da8edf98-dd8b-f111-ab0f-70a8a5b2d5ff 12704e77bd5b4f3082ed3c99b3e23387_0 Access No 2743483d-1c8c-f111-ab0f-70a8a5b2d5ff
— the FetchXML —<fetch mapping="logical"> <entity name="businessunit"> <attribute name="name" /> <attribute name="parentbusinessunitid" /> <attribute name="isdisabled" /> <order attribute="name" /> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment name isdisabled businessunitid org85700aeb No d98edf98-dd8b-f111-ab0f-70a8a5b2d5ff
— the FetchXML —<fetch mapping="logical"> <entity name="role"> <attribute name="name" /> <filter type="and"> <condition attribute="name" operator="eq" value="Basic User" /> </filter> <link-entity name="roleprivileges" from="roleid" to="roleid" alias="rp"> <attribute name="privilegedepthmask" /> <link-entity name="privilege" from="privilegeid" to="privilegeid" alias="p"> <attribute name="name" /> <filter type="and"> <condition attribute="name" operator="in"> <value>prvReadAccount</value> <value>prvWriteAccount</value> <value>prvDeleteAccount</value> <value>prvCreateAccount</value> </condition> </filter> </link-entity> </link-entity> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment name roleid rp.privilegedepthmask p.name Basic User 2d93df98-dd8b-f111-ab0f-70a8a5b2d5ff 1 prvReadAccount Basic User 2d93df98-dd8b-f111-ab0f-70a8a5b2d5ff 1 prvWriteAccount Basic User 2d93df98-dd8b-f111-ab0f-70a8a5b2d5ff 1 prvDeleteAccount Basic User 2d93df98-dd8b-f111-ab0f-70a8a5b2d5ff 1 prvCreateAccount
10.5Artifacts from chapter 3 — solutions and environments
a solution exported both ways, moved downstream, and upgraded
Chapter 3 staged fourteen artifacts. They follow a solution from pac solution init through an unmanaged and a managed export of the same version, an import into the test environment, a staged upgrade, and the deployment settings file that came out of it.
— Output —Dataverse solution project with name 'ch23lab' created successfully in: '.../scratchpad/lab/ch23lab' Dataverse solution files were successfully created for this project in the sub-directory Other, using solution name ch23lab, publisher name ch23lab, and customization prefix ch23. Please verify the publisher information and solution name found in the Solution.xml file.— The files it wrote —ch23lab.cdsproj .gitignore src/Other/Customizations.xml src/Other/Relationships.xml src/Other/Solution.xml
— Excerpt —<UniqueName>ch23lab</UniqueName> <Version>1.0</Version> <!-- Solution Package Type: Unmanaged(0)/Managed(1)/Both(2)--> <Managed>2</Managed> <Publisher> <UniqueName>ch23lab</UniqueName> <CustomizationPrefix>ch23</CustomizationPrefix> <CustomizationOptionValuePrefix>93714</CustomizationOptionValuePrefix> </Publisher> <RootComponents />
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment Listing all Solutions from the current Dataverse organization... Unique Name Friendly Name Version Managed msdyn_AIBuilderSampleData AI Sample Data 1.0.0.6 True ch23lab ch23lab 1.0 False Cra969a Common Data Services Default Solution 1.0.0.0 False Default Default Solution 1.0 False
— Output of the unmanaged export —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment Starting Solution Export... Solution export succeeded.— Output of the managed export —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment Starting Solution Export... Solution export succeeded.— The members of each zip —[Content_Types].xml customizations.xml solution.xml— The difference between the two, read out of solution.xml —<ImportExportXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" OrganizationVersion="9.2.26065.171" OrganizationSchemaType="Standard" CRMServerServiceabilityVersion="9.2.26065.00171">
— Output —Unpacking Solution... Extracting .../out/ch23lab.zip to .../unpacked Skipping localization Processing Component: Entities - Account - ch23_Widget Processing Component: EntityRelationships Unmanaged Extract complete. Unpacked Solution.— The tree it produced —unpacked/Entities/Account/Entity.xml unpacked/Entities/Account/RibbonDiff.xml unpacked/Entities/ch23_Widget/Entity.xml unpacked/Entities/ch23_Widget/RibbonDiff.xml unpacked/Entities/ch23_Widget/SavedQueries/{12af8eb5-7202-41b9-b677-516e0d051125}.xml unpacked/Entities/ch23_Widget/SavedQueries/{31f4dc5c-2bfd-4159-a826-a9865b9a198d}.xml unpacked/Entities/ch23_Widget/SavedQueries/{3a25c0e7-752f-4e88-aaac-292ea9703f54}.xml unpacked/Entities/ch23_Widget/SavedQueries/{6a104f62-eb63-42b9-a739-2b2971de6e37}.xml unpacked/Entities/ch23_Widget/SavedQueries/{8e1f6ecb-7090-f111-8076-000d3a5a6356}.xml unpacked/Entities/ch23_Widget/SavedQueries/{d1238f93-6083-48d6-aed0-b899cbaaf99e}.xml unpacked/Entities/ch23_Widget/SavedQueries/{d30078ed-9b72-4f0c-b107-0a5b3a7952cf}.xml unpacked/Other/Customizations.xml unpacked/Other/Relationships/Account.xml unpacked/Other/Relationships/BusinessUnit.xml unpacked/Other/Relationships/Owner.xml unpacked/Other/Relationships/SystemUser.xml unpacked/Other/Relationships/Team.xml unpacked/Other/Relationships/powerpagecomponent.xml unpacked/Other/Relationships.xml unpacked/Other/Solution.xml
ch03-export-managed · claimed in §3.3<?xml version="1.0" encoding="utf-8"?>
<Entity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Name LocalizedName="Account" OriginalName="">Account</Name>
<EntityInfo>
<entity Name="Account" unmodified="1">
<attributes />
</entity>
</EntityInfo>
<RibbonDiffXml />
</Entity>
<RootComponents>
<RootComponent type="1" schemaName="account" behavior="0" />
<RootComponent type="1" schemaName="ch23_widget" behavior="0" />
</RootComponents>
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment Attempting to add the solution component(s) to the ch23lab solution in the skydude's Environment environment. The account component has been added to the ch23lab solution.
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test No results returned.
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Listing all Solutions from the current Dataverse organization... Unique Name Friendly Name Version Managed ch23lab ch23lab 1.0 True ch45Lab ch45Lab 1.0 False Cra969a Common Data Services Default Solution 1.0.0.0 False Default Default Solution 1.0 False
— Output of the write —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment— Output of the read —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment Listing all Solutions from the current Dataverse organization... Unique Name: ch23lab Solution Display Name: ch23lab Solution Version: 1.0.1.0
— Output of the import —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.— Output of the list afterwards —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Listing all Solutions from the current Dataverse organization... Unique Name Friendly Name Version Managed ch23lab ch23lab 1.0.1.0 True ch45Lab ch45Lab 1.0 False Cra969a Common Data Services Default Solution 1.0.0.0 False Default Default Solution 1.0 False
— Output —Extracting Dataverse connection references and/or environment variables from: .../out/ch23lab_managed.zip Deployment settings file created: .../out/ch23lab.settings.json— The file it wrote —{ "EnvironmentVariables": [], "ConnectionReferences": [], "CopilotAgents": [] }
ch03-export-managed · claimed in §3.6pac org select --environment https://org85700aeb.crm.dynamics.com/ pac env list … (a sequence of commands each passing --environment https://org5014704c.crm.dynamics.com/) … pac env list— First pac env list —Active Display Name Environment ID Environment URL Unique Name * skydude's Environment 3caaae88-df92-e1ea-9467-7ce90a51b602 https://org85700aeb.crm.dynamics.com/ unqc5fa366c5190f111b8cf6045bd056 skylib-prod 908e4dd8-b8c1-e164-a999-5c8dab720e1b https://orge76abca4.crm.dynamics.com/ unq604d63685890f111b8cf6045bd0a1 skylib-test f6ee4b3f-fc72-e328-86b8-7f90829cf31e https://org5014704c.crm.dynamics.com/ unq644d63685890f111b8cf6045bd0a1— Second pac env list —Active Display Name Environment ID Environment URL Unique Name skydude's Environment 3caaae88-df92-e1ea-9467-7ce90a51b602 https://org85700aeb.crm.dynamics.com/ unqc5fa366c5190f111b8cf6045bd056 skylib-prod 908e4dd8-b8c1-e164-a999-5c8dab720e1b https://orge76abca4.crm.dynamics.com/ unq604d63685890f111b8cf6045bd0a1 * skylib-test f6ee4b3f-fc72-e328-86b8-7f90829cf31e https://org5014704c.crm.dynamics.com/ unq644d63685890f111b8cf6045bd0a1
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Listing all environments from your tenant... Listing environment groups from your tenant... Active Environment Group Environment ID Environment Url Type Organization ID skydude's Environment - 3caaae88-df92-e1ea-9467-7ce90a51b602 https://org85700aeb.crm.dynamics.com/ Developer c5fa366c-5190-f111-b8cf-6045bd056918 skylib-prod - 908e4dd8-b8c1-e164-a999-5c8dab720e1b https://orge76abca4.crm.dynamics.com/ Developer 604d6368-5890-f111-b8cf-6045bd0a1f2d * skylib-test - f6ee4b3f-fc72-e328-86b8-7f90829cf31e https://org5014704c.crm.dynamics.com/ Developer 644d6368-5890-f111-b8cf-6045bd0a1f1f
10.6Artifacts from chapter 4 — model-driven app design
an app module read as metadata: site map, forms, views and the ribbon
Chapter 4 staged twelve artifacts. An app was created with pac model create, exported, unpacked, and then read file by file: the site map, the app module, the form and view inventories, and the ribbon difference the platform writes for an unmodified table.
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Retrieving model-driven apps... Found 4 model-driven app(s): ch45 Service Desk App ID: 47ef4c17-7090-f111-8076-70a8a59af8d5 Unique Name: ch45_service_desk_f93b06c5 Power Pages Management (Saved - Not Published) App ID: 0f266a52-298c-f111-ab0f-70a8a5b2d5ff Unique Name: mspp_PowerPageManagement Power Platform Environment Settings (Saved - Not Published) App ID: a282facf-1e8c-f111-ab0f-70a8a5b2d5ff Unique Name: PowerPlatformEnvironmentSettings Solution Health Hub (Saved - Not Published) App ID: 8c84e866-258c-f111-ab0f-70a8a5b2d5ff Unique Name: msdyn_SolutionHealthHub
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Creating model-driven app... Model-driven app created successfully. App ID: 47ef4c17-7090-f111-8076-70a8a59af8d5 Publishing model-driven app... Model-driven app published successfully.
— Output —<?xml version="1.0" encoding="utf-8"?> <AppModuleSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SiteMapUniqueName>ch45_service_desk_f93b06c5</SiteMapUniqueName> <EnableCollapsibleGroups>False</EnableCollapsibleGroups> <ShowHome>True</ShowHome> <ShowPinned>True</ShowPinned> <ShowRecents>True</ShowRecents> <SiteMap IntroducedVersion="7.0.0.0"> <Area Id="area_ch45_service_desk_f93b06c5" ShowGroups="true" ResourceId="SitemapDesigner.NewArea" IntroducedVersion="7.0.0.0"> <Titles> <Title Title="Main" LCID="1033" /> </Titles> <Group Id="group_ch45_service_desk_f93b06c5" IsProfile="false" ResourceId="SitemapDesigner.NewGroup" IntroducedVersion="7.0.0.0"> <Titles> <Title Title="Pages" LCID="1033" /> </Titles> </Group> </Area> </SiteMap> <LocalizedNames> <LocalizedName description="ch45 Service Desk" languagecode="1033" /> </LocalizedNames> </AppModuleSiteMap>
— Output —diff -r src3/Other/Customizations.xml reject/no-node/Other/Customizations.xml 13d12 < <WebResources />— Output —— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod Listing all Solutions from the current Dataverse organization... Unique Name Friendly Name Version Managed Cra969a Common Data Services Default Solution 1.0.0.0 False Default Default Solution 1.0 False— Output —Error: Site Map import: FAILURE: SiteMap needs to have a non-empty Area with a non-empty Group, even when ignoring all Areas, Groups, and SubAreas with an IsVisible child, regardless of their visibility settings.— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.
— Output —<?xml version="1.0" encoding="utf-8"?> <AppModule> <UniqueName>ch45_service_desk_f93b06c5</UniqueName> <IntroducedVersion>1.0</IntroducedVersion> <WebResourceId>953b9fac-1e5e-e611-80d6-00155ded156f</WebResourceId> <OptimizedFor></OptimizedFor> <statecode>0</statecode> <statuscode>1</statuscode> <FormFactor>1</FormFactor> <ClientType>4</ClientType> <NavigationType>0</NavigationType> <AppModuleComponents> <AppModuleComponent type="62" schemaName="ch45_service_desk_f93b06c5" /> </AppModuleComponents> <AppModuleRoleMaps> <Role id="{627090ff-40a3-4053-8790-584edc5be201}" /> <Role id="{119f245c-3cc8-4b62-b31c-d1a046ced15d}" /> </AppModuleRoleMaps> <LocalizedNames> <LocalizedName description="ch45 Service Desk" languagecode="1033" /> </LocalizedNames> <Descriptions> <Description description="Lab app for chapter 4" languagecode="1033" /> </Descriptions> <appsettings> <appsetting settingdefinitionid.uniquename="AppChannel"> <iscustomizable>1</iscustomizable> <value>1</value> </appsetting> </appsettings> </AppModule>
— the FetchXML —<fetch> <entity name="systemform"> <attribute name="name" /> <attribute name="type" /> <attribute name="formid" /> <filter> <condition attribute="objecttypecode" operator="eq" value="1" /> <condition attribute="type" operator="in"> <value>2</value><value>6</value><value>7</value><value>11</value> </condition> </filter> <order attribute="type" /> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test name type formid objecttypecode Account for Interactive experience Main a72c7955-442b-4ea4-9499-b10cd18b4256 Account Account Quick Create Quick Create c9e7ec2d-efca-4e4c-b3e3-f63c4bba5e4b Account Account Card form Card cccff382-2b92-467e-bf1b-3db179512af8 Account Information Main b053a39a-041a-4356-acef-ddf00182762b Account Account Reference Panel Quick View Form 098ae145-1567-41ec-8398-86dbaac70c9b Account Account Main 8448b78f-8f42-454e-8e2a-f8196b0419af Account Social Profiles Quick View Form 2205c86d-ed88-4a2f-a447-3b86a8781f2e Account account card Quick View Form b028db32-3619-48a5-ac51-cf3f947b0ef3 Account Account Hierarchy Tile Form Quick View Form 69cff312-cfb6-4289-9631-249ab85d2c62 Account
— the FetchXML —<fetch> <entity name="savedquery"> <attribute name="name" /> <attribute name="querytype" /> <attribute name="isdefault" /> <filter> <condition attribute="returnedtypecode" operator="eq" value="1" /> <condition attribute="querytype" operator="in"> <value>0</value><value>4</value><value>2</value><value>64</value> </condition> </filter> <order attribute="querytype" /> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test name querytype isdefault savedqueryid Account Lookup View 64 Yes a9af0ab8-861d-4cfa-92a5-c6281fed7fab Accounts: No Orders in Last 6 Months 0 No c147f1f7-1d78-4d10-85bf-7e03b79f74fa Account BulkOperation View 2 No 59e57080-0cc2-e211-9b83-00155d89b902 Quick Find Active Accounts 4 Yes 2d1187c4-23fe-4bb5-9647-43bb1c6ddbd1 My Connections 0 No d234426e-1f37-4944-9255-50e19b541c4c Active Accounts 0 No 00000000-0000-0000-00aa-000010001002 Account List Member View 2 No 38a21ffb-4e32-4038-beb9-03172a0dd034 Account Associated View 2 Yes 00000000-0000-0000-00aa-000010001200 Accounts: No Campaign Activities in Last 3 Months 0 No cfbcd7af-aee5-4e45-8ecc-c040d4020581 My Active Accounts 0 Yes 00000000-0000-0000-00aa-000010001001 Inactive Accounts 0 No 00000000-0000-0000-00aa-000010001031 Accounts: Influenced Deals That We Won 0 No 15c63745-0a6e-4322-8416-a62c84d90279 All Accounts 0 No 65ffaf9a-e8c5-432d-860b-32f841b00d87 Accounts: Responded to Campaigns in Last 6 Months 0 No 49fb9771-09e1-4e70-b193-198752493577
— Output —unpacked3/AppModules/ch45_service_desk_f93b06c5/AppModule.xml unpacked3/AppModuleSiteMaps/ch45_service_desk_f93b06c5/AppModuleSiteMap.xml unpacked3/Entities/Account/Entity.xml unpacked3/Entities/Account/FormXml/main/{8448b78f-8f42-454e-8e2a-f8196b0419af}.xml unpacked3/Entities/Account/RibbonDiff.xml unpacked3/Other/Customizations.xml unpacked3/Other/Relationships/Account.xml unpacked3/Other/Relationships/powerpagecomponent.xml unpacked3/Other/Relationships.xml unpacked3/Other/Solution.xml unpacked3/WebResources/ch45_formHandlers.js unpacked3/WebResources/ch45_formHandlers.js.data.xml
— Output —<RootComponents> <RootComponent type="1" schemaName="account" behavior="0" /> <RootComponent type="61" schemaName="ch45_formHandlers.js" behavior="0" /> <RootComponent type="62" schemaName="ch45_service_desk_f93b06c5" behavior="0" /> <RootComponent type="80" schemaName="ch45_service_desk_f93b06c5" behavior="0" /> </RootComponents>
— Output —<?xml version="1.0" encoding="utf-8"?> <Entity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Name LocalizedName="Account" OriginalName="">Account</Name> <EntityInfo> <entity Name="Account" unmodified="1"> <attributes /> </entity> </EntityInfo> <FormXml /> <RibbonDiffXml /> </Entity>
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Name Created by Modified on
— Output —<?xml version="1.0" encoding="utf-8"?> <RibbonDiffXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <CustomActions /> <Templates> <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates> </Templates> <CommandDefinitions /> <RuleDefinitions> <TabDisplayRules /> <DisplayRules /> <EnableRules /> </RuleDefinitions> <LocLabels /> </RibbonDiffXml>
10.7Artifacts from chapter 5 — client scripting
a web resource authored on disk, packed, imported and read back
Chapter 5 staged eight artifacts. A JavaScript web resource was authored in a solution source folder, refused by the packer twice for two different reasons, packed, imported, and then read back out of the environment with its handler registration.
— Files authored in the solution source folder —"use strict"; var ch45 = window.ch45 || {}; ch45.account = (function () { function onLoad(executionContext) { var formContext = executionContext.getFormContext(); var name = formContext.getAttribute("name"); if (name === null) { return; } formContext.getControl("name").setDisabled(name.getValue() !== null); } return { onLoad: onLoad }; }());— Files authored in the solution source folder —<?xml version="1.0" encoding="utf-8"?> <WebResource> <WebResourceId>{c4501ab1-4501-4501-9c45-c45c45c45c45}</WebResourceId> <WebResourceType>3</WebResourceType> <IsEnabledForMobileClient>0</IsEnabledForMobileClient> <IsAvailableForMobileOffline>0</IsAvailableForMobileOffline> <IsCustomizable>1</IsCustomizable> <CanBeDeleted>1</CanBeDeleted> <IntroducedVersion>1.0</IntroducedVersion> <IsHidden>0</IsHidden> <Name>ch45_formHandlers.js</Name> <DisplayName>ch45_formHandlers.js</DisplayName> <FileName>/WebResources/ch45_formHandlers.js</FileName> <LanguageCode>1033</LanguageCode> </WebResource>
— Output —Error: Cannot find child element WebResourceId of element WebResource.— Output —ls: cannot access 'reject/no-id.zip': No such file or directory— Output —Processing Component: Entities - Account Processing Component: Roles Processing Component: Workflows Processing Component: FieldSecurityProfiles Processing Component: Templates Processing Component: EntityMaps Processing Component: EntityRelationships Processing Component: OrganizationSettings Processing Component: optionsets Processing Component: CustomControls Processing Component: AppModuleSiteMaps Processing Component: AppModules Processing Component: EntityDataProviders Processing Sharded Component Files Following root components are not defined in customizations: Type='WebResource', Id (or schema name)='WebResource-ch45_formHandlers.js'. Unmanaged Pack complete. Packed Solution.— Output —Archive: reject/no-node.zip Length Date Time Name --------- ---------- ----- ---- 66616 2026-08-05 00:21 customizations.xml 6495 2026-08-05 00:21 solution.xml 619 2026-08-05 00:21 WebResources/ch45_formHandlers.js.data.xml 388 2026-08-05 00:21 WebResources/ch45_formHandlers.js 256 2026-08-05 00:21 [Content_Types].xml --------- ------- 74374 5 files— Output —0— Output —<RootComponents> <RootComponent type="61" schemaName="ch45_formHandlers.js" behavior="0" /> </RootComponents>— Output —Processing Component: Entities Processing Component: Roles Processing Component: Workflows Processing Component: FieldSecurityProfiles Processing Component: Templates Processing Component: EntityMaps Processing Component: EntityRelationships Processing Component: OrganizationSettings Processing Component: optionsets Processing Component: CustomControls Processing Component: AppModuleSiteMaps Processing Component: AppModules Processing Component: EntityDataProviders Processing Sharded Component Files Following root components are not defined in customizations: Type='WebResource', Id (or schema name)='WebResource-ch45_formHandlers.js'. Unmanaged Pack complete. Packed Solution.— One zip, two targets —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod No results returned.— One zip, two targets —Error: Cannot add a Root Component ch45_formHandlers.js of type 61 because it is not in the target system.— One zip, two targets —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test name webresourcetype ismanaged webresourceid ch45_formHandlers.js Script (JScript) Unmanaged c4501ab1-4501-4501-9c45-c45c45c45c45— One zip, two targets —Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.
— Output —Packing Solution... Packing /tmp/.../lab/src3 to /tmp/.../lab/cap-pack.zip Processing Component: Entities - Account Processing Component: Roles Processing Component: Workflows Processing Component: FieldSecurityProfiles Processing Component: Templates Processing Component: EntityMaps Processing Component: EntityRelationships Processing Component: OrganizationSettings Processing Component: optionsets Processing Component: CustomControls Processing Component: WebResources - ch45_formHandlers.js Processing Component: AppModuleSiteMaps Processing Component: AppModules Processing Component: EntityDataProviders Processing Sharded Component Files Unmanaged Pack complete. Packed Solution.
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.
— the FetchXML —<fetch> <entity name="webresource"> <attribute name="name" /> <attribute name="webresourcetype" /> <attribute name="ismanaged" /> <attribute name="webresourceid" /> <filter> <condition attribute="name" operator="like" value="ch45%" /> </filter> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test name webresourcetype ismanaged webresourceid ch45_formHandlers.js Script (JScript) Unmanaged c4501ab1-4501-4501-9c45-c45c45c45c45
<events>
<event name="onload" application="true" active="true">
<InternalHandlers>
<Handler functionName="AppCommon.Account.Instance.ra_onload"
libraryName="AppCommon/Account/Account_main_system_library.js"
handlerUniqueId="7927DD68-5AC5-4E9A-B39A-44F62467656A"
enabled="true" />
</InternalHandlers>
</event>
<event name="onload" application="false" active="false">
<Handlers>
<Handler functionName="ch45.account.onLoad"
libraryName="ch45_formHandlers.js"
handlerUniqueId="{bb450002-4501-4501-9c45-c45c45c45c45}"
enabled="true" parameters="" passExecutionContext="true" />
</Handlers>
</event>
</events>
<formLibraries>
<Library name="ch45_formHandlers.js"
libraryUniqueId="{aa450001-4501-4501-9c45-c45c45c45c45}" />
</formLibraries>
— Observation —<cell id="{87DE203E-B03C-44CC-8B06-438202B82553}"> <labels><label description="Parent Account" languagecode="1033" /></labels> <events> <event name="setadditionalparams" application="true" active="true"> <InternalHandlers> <Handler functionName="AppCommon.Account.Instance.parentaccountid_setadditionalparams" libraryName="AppCommon/Account/Account_main_system_library.js" handlerUniqueId="c5cc10db-58ac-4611-a529-c1ff599707b1" enabled="true" passExecutionContext="true" /> </InternalHandlers> </event> </events> </cell>
<formLibraries solutionaction="Added">
<Library name="ch45_formHandlers.js" libraryUniqueId="{aa450001-4501-4501-9c45-c45c45c45c45}" />
</formLibraries>
</form>
</tabs>
<events />
<header id="{d5a03552-1183-4347-a237-1f894ba449eb}" columns="111" celllabelposition="Top" labelwidth="115">
<rows>
<row>
<cell id="{d3e19d4e-b2ae-409f-9b4e-5976527c6c83}" ordinalvalue="10000">
<labels>
<label description="Annual Revenue" languagecode="1033" solutionaction="Modified" />
</labels>
</cell>
10.8Artifacts from chapter 6 — the synchronous question
the event pipeline's registered steps, and a rolled-back import
Chapter 6 staged eight artifacts, most of them aggregate queries over the tables the platform keeps its registrations in: the stage values in use, the steps registered against a message, the classic workflows and their modes, and one import that failed and rolled back.
— the FetchXML —<fetch aggregate="true"> <entity name="sdkmessageprocessingstep"> <attribute name="stage" alias="stage" groupby="true" /> <attribute name="mode" alias="mode" groupby="true" /> <attribute name="sdkmessageprocessingstepid" alias="steps" aggregate="count" /> <filter> <condition attribute="stage" operator="in"> <value>10</value><value>20</value><value>40</value> </condition> </filter> <order alias="stage" /> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment steps stage mode 291 Pre-operation Synchronous 64 Post-operation Asynchronous 270 Post-operation Synchronous 206 Pre-validation Synchronous— Output —<fetch aggregate="true"> <entity name="sdkmessageprocessingstep"> <attribute name="mode" alias="mode" groupby="true" /> <attribute name="sdkmessageprocessingstepid" alias="steps" aggregate="count" /> <filter><condition attribute="mode" operator="eq" value="0" /></filter> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment steps mode 26,228 Synchronous
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment steps stage mode 6 Final Post-operation (For internal use only) Synchronous 460 Internal Pre-operation After External Plugins (For internal use only) Synchronous 64 Post-operation Asynchronous 8 Internal Post-operation Before External Plugins (For internal use only) Asynchronous 24,746 Main Operation (For internal use only) Synchronous 15 Post-operation (Deprecated) Synchronous 59 Internal Post-operation Before External Plugins (For internal use only) Synchronous 80 Internal Pre-operation Before External Plugins (For internal use only) Synchronous 291 Pre-operation Synchronous 67 Internal Post-operation After External Plugins (For internal use only) Synchronous 12 Post-operation (Deprecated) Asynchronous 270 Post-operation Synchronous 28 Initial Pre-operation (For internal use only) Synchronous 25 Internal Post-operation After External Plugins (For internal use only) Asynchronous 206 Pre-validation Synchronous
<link-entity name="sdkmessage" from="sdkmessageid" to="sdkmessageid" alias="m">
<filter><condition attribute="name" operator="eq" value="Create" /></filter>
</link-entity>
— Output —
Connected as skydude@itrancyngergmail.onmicrosoft.com
Connected to... skydude's Environment
steps stage mode
61 Pre-validation Synchronous
57 Post-operation Synchronous
86 Pre-operation Synchronous
16 Post-operation Asynchronous
— Output —name stage mode rank Microsoft.Dataverse.AIPlatformExtensions.Plugins.ValidateAIPluginObjectJson: Create of Pre-validation Synchronous 1 sideloadedaiplugin Microsoft.PowerApps.Actions.Plugins.ValidateClassicRulesDefinitionPlugin: Create of Pre-validation Synchronous 1 appactionrule Microsoft.Xrm.DataProvider.Odata.V4.Plugins.ODataEntityDataSourceValidationPlugin: Pre-validation Synchronous 1 Create of odatadatasource Microsoft.PPMI.CertificateCredential.Plugins.RestrictCertificatePlugin: Create of Pre-validation Synchronous 1 certificatecredential Microsoft.PowerPlatform.Packager.Plugins.ValidateStateTransitions: Create of Pre-validation Synchronous 1 mspcat_packagestore Microsoft.CDS.InsightsAppPlatform.SbPlugins.UpsertKnowledgeValidationPlugin: Create Pre-validation Synchronous 1 knowledge validation Microsoft.Dynamics.PowerVA.Plugins.Bot.PreValidateBotCreate: Create of bot Pre-validation Synchronous 1 Microsoft.Dynamics.AI.Plugins.PreValidateOptIn: ValidateOptIn for Create of Pre-validation Synchronous 1 msdyn_aitemplate
— the FetchXML —<fetch aggregate="true"> <entity name="workflow"> <attribute name="category" alias="category" groupby="true" /> <attribute name="mode" alias="mode" groupby="true" /> <attribute name="type" alias="type" groupby="true" /> <attribute name="workflowid" alias="rows" aggregate="count" /> <order alias="category" /> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment type rows category mode Definition 3 Workflow Background Definition 5 Modern Flow Background Activation 1 Action Real-time Definition 4 Business Process Flow Background Definition 102 Action Background Activation 2 Workflow Background Definition 18 Business Rule Real-time Activation 102 Action Background Template 1 Action Background Definition 1 Action Real-time Activation 5 Business Rule Real-time Definition 2 Workflow Real-time Activation 2 Workflow Real-time
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment statecode name triggeroncreate syncworkflowlogonfailure mode primaryentity scope Draft ADX Sign Up Email No No Background Invitation Organization Activated Send Invitation No No Background Invitation Organization Activated Invite Redemption Yes Yes Real-time Invite Redemption Organization Activated Reset Security Stamp No No Background Contact Organization Activated UpdateInvitationCode Yes Yes Real-time Invitation Organization
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment statecode name category mode Draft ch67AccountWatch Modern Flow Background Draft Search Dynamics 365 knowledge article flow Modern Flow Background Draft SLAInstanceMonitoringWarningAndExpiryFlow Modern Flow Background Draft Integrated Search API trigger flow Modern Flow Background Draft ch67DailyNote Modern Flow Background
— Output —name clientdata modifiedon ch67DailyNote {"properties":{"connectionReferences":{},"definition": 8/5/2026 5:42 AM ...,"actions":{"Compose":{"runAfter":{},"type":"Compose","inputs":"ch67 lab"}}}}, "schemaVersion":"1.0.0.0"}— Output —Unique Name Friendly Name Version Managed ch67Lab ch67Lab 1.0.0.9 False— Output —Error: An unexpected error occurred.— Output —name clientdata modifiedon ch67DailyNote {"properties":{"connectionReferences":{},"definition": 8/5/2026 5:42 AM ...,"actions":{"Compose":{"runAfter":{},"type":"Compose","inputs":"ch67 lab"}}}}, "schemaVersion":"1.0.0.0"} Unique Name Friendly Name Version Managed ch67Lab ch67Lab 1.0.0.9 False— Observation —Message>An unexpected error occurred. Message>System.InvalidOperationException: The specified node cannot be inserted as the valid child of this node, because the specified node is the wrong type.— Observation —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment solutionname progress startedon completedon importjobid ch67Lab 100.00 8/5/2026 5:31 AM 8/5/2026 5:32 AM b68406ec-e29e-4b65-a025-9e4149d36796 ch67Lab 100.00 8/5/2026 5:33 AM 8/5/2026 5:33 AM 216b86b6-eb0b-427a-8481-69aa3a05fc79 ch67Lab 100.00 8/5/2026 5:42 AM 8/5/2026 5:42 AM e988af4e-9630-4dc7-b94c-a5b5b3605d7f ch67Lab 100.00 8/5/2026 5:40 AM 8/5/2026 5:40 AM 7e1e6ba3-cffe-429e-95dd-44fe01ef2a1c ch67Lab 100.00 8/5/2026 5:41 AM 8/5/2026 5:41 AM a51918fc-0f73-4a16-95d6-ea4ff802d093
10.9Artifacts from chapter 7 — Power Automate patterns
a cloud flow as a file, and the state it lands in
Chapter 7 staged seven artifacts. A cloud flow was authored as JSON in a solution source folder, packed, imported repeatedly, and read back each time to record the state and the trigger definition the import produced.
— Files authored in the solution source folder —{ "properties": { "connectionReferences": {}, "definition": { "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", "contentVersion": "1.0.0.0", "parameters": { "$connections": { "defaultValue": {}, "type": "Object" }, "$authentication": { "defaultValue": {}, "type": "SecureObject" } }, "triggers": { "Recurrence": { "recurrence": { "frequency": "Day", "interval": 1 }, "type": "Recurrence" } }, "actions": { "Compose": { "runAfter": {}, "type": "Compose", "inputs": "ch67 lab" } } } }, "schemaVersion": "1.0.0.0" }— Files authored in the solution source folder —<?xml version="1.0" encoding="utf-8"?> <Workflow WorkflowId="{c6701a01-6701-6701-9c67-c67c67c67c67}" Name="ch67DailyNote"> <JsonFileName>/Workflows/ch67DailyNote-C6701A01-6701-6701-9C67-C67C67C67C67.json</JsonFileName> <Type>1</Type> <Subprocess>0</Subprocess> <Category>5</Category> <Mode>0</Mode> <Scope>4</Scope> <OnDemand>0</OnDemand> <TriggerOnCreate>0</TriggerOnCreate> <TriggerOnDelete>0</TriggerOnDelete> <AsyncAutoDelete>0</AsyncAutoDelete> <SyncWorkflowLogOnFailure>0</SyncWorkflowLogOnFailure> <StateCode>0</StateCode> <StatusCode>1</StatusCode> <RunAs>1</RunAs> <IsTransacted>1</IsTransacted> <IntroducedVersion>1.0</IntroducedVersion> <IsCustomizable>1</IsCustomizable> <BusinessProcessType>0</BusinessProcessType> <IsCustomProcessingStepAllowedForOtherPublishers>1</IsCustomProcessingStepAllowedForOtherPublishers> <PrimaryEntity>none</PrimaryEntity> <LocalizedNames> <LocalizedName description="ch67DailyNote" languagecode="1033" /> </LocalizedNames> </Workflow>— Files authored in the solution source folder —<RootComponents> <RootComponent type="29" id="{c6701a01-6701-6701-9c67-c67c67c67c67}" behavior="0" /> <RootComponent type="29" id="{c6702a02-6702-6702-9c67-c67c67c67c67}" behavior="0" /> </RootComponents>— Output —Processing Component: Roles Component: Workflows is a supported component type but has unexpected children in Customizations.xml; this component's specific processing will be skipped. Make it a childless element if action=Pack should process any of the component's files or metadata xml. Processing Component: FieldSecurityProfiles ... Following root components are not defined in customizations: Type='Workflow', Id (or schema name)='{c6701a01-6701-6701-9c67-c67c67c67c67}'. Unmanaged Pack complete.— Output —Processing Component: Entities Processing Component: Roles Processing Component: Workflows - ch67DailyNote Processing Component: FieldSecurityProfiles ... Processing Sharded Component Files Unmanaged Pack complete. Packed Solution.— Observation —Following root components are not defined in customizations: Type='10371', Id (or schema name)='GenericComponent-ch67_sharedcommondataserviceforapps_ch67'. Type='EnvironmentVariableDefinition', Id (or schema name)='EnvironmentVariableDefinition-ch67_NotifyAddress'.
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment No results returned.— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.— Output —statecode statuscode createdby ownerid mode name workflowid category Draft Draft # skydude # skydude Background ch67DailyNote c6701a01-6701-6701-9c67-c67c67c67c67 Modern Flow
— Output —Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.— Output —statecode statuscode createdby ownerid mode name workflowid category Draft Draft # skydude # skydude Background ch67DailyNote c6701a01-6701-6701-9c67-c67c67c67c67 Modern Flow— Output —statecode statuscode createdby ownerid mode name workflowid category Draft Draft # skydude # skydude Background ch67AccountWatch c6702a02-6702-6702-9c67-c67c67c67c67 Modern Flow Draft Draft # skydude # skydude Background ch67DailyNote c6701a01-6701-6701-9c67-c67c67c67c67 Modern Flow— Output —Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.— Output —statecode statuscode createdby ownerid mode name workflowid category Draft Draft # skydude # skydude Background ch67AccountWatch c6702a02-6702-6702-9c67-c67c67c67c67 Modern Flow Draft Draft # skydude # skydude Background ch67DailyNote c6701a01-6701-6701-9c67-c67c67c67c67 Modern Flow
— Files authored in the solution source folder —"triggers": { "When_an_account_row_is_modified": { "type": "OpenApiConnectionWebhook", "inputs": { "host": { "connectionName": "shared_commondataserviceforapps", "operationId": "SubscribeWebhookTrigger", "apiId": "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps" }, "parameters": { "subscriptionRequest/message": 3, "subscriptionRequest/entityname": "account", "subscriptionRequest/scope": 4, "subscriptionRequest/filteringattributes": "name,telephone1" }, "authentication": "@parameters('$authentication')" }, "conditions": [ { "expression": "@not(equals(triggerOutputs()?['body/statecode'], 1))" } ] } }, "actions": { "Compose_the_account_name": { "runAfter": {}, "type": "Compose", "inputs": "@triggerOutputs()?['body/name']" } }— Output —name clientdata ch67AccountWatch {"properties":{"connectionReferences":{},"definition":{"$schema":"https://schema.management.azure. com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#","contentVersion":"1.0.0 .0","parameters":{"$connections":{"defaultValue":{},"type":"Object"},"$authentication":{"defaultVa lue":{},"type":"SecureObject"}},"triggers":{"When_an_account_row_is_modified":{"type":"OpenApiConn ectionWebhook","inputs":{"host":{"connectionName":"shared_commondataserviceforapps","operationId": "SubscribeWebhookTrigger","apiId":"/providers/Microsoft.PowerApps/apis/shared_commondataservicefor apps"},"parameters":{"subscriptionRequest/message":3,"subscriptionRequest/entityname":"account","s ubscriptionRequest/scope":4,"subscriptionRequest/filteringattributes":"name,telephone1"},"authenti cation":"@parameters('$authentication')"},"conditions":[{"expression":"@not(equals(triggerOutputs( )?['body/statecode'], 1))"}]}},"actions":{"Compose_the_account_name":{"runAfter":{},"type":"Compos e","inputs":"@triggerOutputs()?['body/name']"}}}},"schemaVersion":"1.0.0.0"}— Output —"subscriptionRequest/message":3 "subscriptionRequest/entityname":"account" "subscriptionRequest/scope":4 "subscriptionRequest/filteringattributes":"name,telephone1" "conditions":[{"expression":"@not(equals(triggerOutputs()?['body/statecode'], 1))"}]
— Output —Listing all environments from your tenant... Listing environment groups from your tenant... Active Environment Group Environment ID Environment Url Type Organization ID * skydude's Environment - 3caaae88-df92-e1ea-9467-7ce90a51b602 https://org85700aeb.crm.dynamics.com/ Developer c5fa366c-5190-f111-b8cf-6045bd056918
— the FetchXML —<fetch aggregate="true"> <entity name="workflow"> <attribute name="statecode" alias="statecode" groupby="true" /> <attribute name="statuscode" alias="statuscode" groupby="true" /> <attribute name="workflowid" alias="rows" aggregate="count" /> <filter> <condition attribute="statecode" operator="eq" value="1" /> <condition attribute="statuscode" operator="eq" value="2" /> </filter> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment rows statecode statuscode 242 Activated Activated
— the FetchXML —<fetch aggregate="true"> <entity name="flowrun"> <attribute name="flowrunid" alias="runs" aggregate="count" /> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skydude's Environment runs 0
10.10Artifacts from chapter 8 — dataflows and data movement
what the lab could not run, and the Web API it ran instead
Chapter 8 staged nine artifacts. The plan withholds dataflows, so the chapter's runs go through the Web API: an alternate key and its index, upsert by that key, batch requests with and without a change set, and a timing comparison between twenty single requests and one batch.
— Output —Usage: pac [admin] [application] [auth] [canvas] [catalog] [code] [connection] [connector] [copilot] [env] [help] [managed-identity] [model] [modelbuilder] [package] [pages] [pcf] [pipeline] [plugin] [power-fx] [solution] [telemetry] [test] [tool] (neither command printed a line)
— Output —msdyn_dataflows -> HTTP 200, 0 rows msdyn_dataflowrefreshhistories -> HTTP 200, 0 rows
— Output —<OrgSettings> <IsCommandingModifiedOnEnabled>true</IsCommandingModifiedOnEnabled> <IsLinkToFabricEnabled>true</IsLinkToFabricEnabled> <IsFabricVirtualTableEnabled>true</IsFabricVirtualTableEnabled> <CanCreateApplicationStubUser>false</CanCreateApplicationStubUser> <EnableActivitiesTimeLinePerfImprovement>1</EnableActivitiesTimeLinePerfImprovement> <EnableActivitiesFeatures>1</EnableActivitiesFeatures> <IsRetentionEnabled>true</IsRetentionEnabled> <IsArchivalEnabled>true</IsArchivalEnabled> <AllowRoleAssignmentOnDisabledUsers>false</AllowRoleAssignmentOnDisabledUsers> </OrgSettings>
POST /api/data/v9.2/EntityDefinitions(LogicalName='ch89_release')/Keys
MSCRM.SolutionUniqueName: ch89alm
{"@odata.type": "Microsoft.Dynamics.CRM.EntityKeyMetadata",
"SchemaName": "ch89_ReleaseCode",
"DisplayName": {"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [{"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Release code", "LanguageCode": 1033}]},
"KeyAttributes": ["ch89_code"]}
GET /api/data/v9.2/EntityDefinitions(LogicalName='ch89_release')/Keys?$select=SchemaName,LogicalName,KeyAttributes,EntityKeyIndexStatus
— Output of the create —
HTTP 204
OData-EntityId: https://org5014704c.crm.dynamics.com/api/data/v9.2/EntityDefinitions(LogicalName='ch89_release')/Keys(b452c211-9090-f111-8076-70a8a59af8d5)
— The read, immediately after the create —
"LogicalName": "ch89_releasecode",
"SchemaName": "ch89_ReleaseCode",
"KeyAttributes": [
"ch89_code"
],
"EntityKeyIndexStatus": "Pending"
— The same read, later in the session —
"EntityKeyIndexStatus": "Active"
— Output —==== upsert 1 — PATCH by alternate key, record does not exist HTTP 201 Preference-Applied: return=representation x-ms-ratelimit-burst-remaining-xrm-requests: 7998 x-ms-ratelimit-time-remaining-xrm-requests: 1,199.86 { "@odata.context": "https://org5014704c.crm.dynamics.com/api/data/v9.2/$metadata#ch89_releases(ch89_releaseid)/$entity", "@odata.etag": "W/\"2123651\"", "ch89_releaseid": "052c1e2d-9190-f111-8076-70a8a59af8d5" } ==== upsert 2 — the same URL again, record now exists HTTP 200 Preference-Applied: return=representation x-ms-ratelimit-burst-remaining-xrm-requests: 7997 x-ms-ratelimit-time-remaining-xrm-requests: 1,199.86 { "@odata.context": "https://org5014704c.crm.dynamics.com/api/data/v9.2/$metadata#ch89_releases(ch89_releaseid)/$entity", "@odata.etag": "W/\"2124255\"", "ch89_releaseid": "052c1e2d-9190-f111-8076-70a8a59af8d5" } ==== upsert 3 — If-Match: * refuses to create HTTP 404 x-ms-ratelimit-burst-remaining-xrm-requests: 7996 x-ms-ratelimit-time-remaining-xrm-requests: 1,199.86 { "error": { "code": "0x80060891", "message": "A record with the specified key values does not exist in ch89_release entity" } } ==== upsert 4 — If-None-Match: * refuses to update HTTP 412 x-ms-ratelimit-burst-remaining-xrm-requests: 7995 x-ms-ratelimit-time-remaining-xrm-requests: 1,199.86 { "error": { "code": "0x80040237", "message": "A record with matching key values already exists." } }
POST /api/data/v9.2/$batch Content-Type: multipart/mixed; boundary="batch_ch89"— Output —HTTP 200 --batchresponse_9ed5058b-f992-424c-8d7b-3eacbfa917c5 Content-Type: multipart/mixed; boundary=changesetresponse_9264b309-bee9-405f-a5c7-bcaf14a0e7d2 --changesetresponse_9264b309-bee9-405f-a5c7-bcaf14a0e7d2 Content-Type: application/http Content-Transfer-Encoding: binary Content-ID: 1 HTTP/1.1 204 No Content OData-Version: 4.0 Location: https://org5014704c.crm.dynamics.com/api/data/v9.2/ch89_releases(ch89_code='REL-0003') OData-EntityId: https://org5014704c.crm.dynamics.com/api/data/v9.2/ch89_releases(ch89_code='REL-0003') X-Content-Type-Options: nosniff --changesetresponse_9264b309-bee9-405f-a5c7-bcaf14a0e7d2 Content-Type: application/http Content-Transfer-Encoding: binary Content-ID: 2 HTTP/1.1 204 No Content OData-Version: 4.0 Location: https://org5014704c.crm.dynamics.com/api/data/v9.2/ch89_releases(ch89_code='REL-0004') OData-EntityId: https://org5014704c.crm.dynamics.com/api/data/v9.2/ch89_releases(ch89_code='REL-0004') X-Content-Type-Options: nosniff --changesetresponse_9264b309-bee9-405f-a5c7-bcaf14a0e7d2 Content-Type: application/http Content-Transfer-Encoding: binary Content-ID: 3 HTTP/1.1 204 No Content OData-Version: 4.0 Location: https://org5014704c.crm.dynamics.com/api/data/v9.2/ch89_releases(ch89_code='REL-0005') OData-EntityId: https://org5014704c.crm.dynamics.com/api/data/v9.2/ch89_releases(ch89_code='REL-0005') X-Content-Type-Options: nosniff --changesetresponse_9264b309-bee9-405f-a5c7-bcaf14a0e7d2-- --batchresponse_9ed5058b-f992-424c-8d7b-3eacbfa917c5--
POST /api/data/v9.2/$batch Content-Type: multipart/mixed; boundary="batch_ch89"— Output —HTTP 400 --batchresponse_d9374753-b113-4f07-a479-552b368e08de Content-Type: multipart/mixed; boundary=changesetresponse_86a9d9c8-fea3-4753-8e92-429d5d6fc8fb --changesetresponse_86a9d9c8-fea3-4753-8e92-429d5d6fc8fb Content-Type: application/http Content-Transfer-Encoding: binary Content-ID: 3 HTTP/1.1 400 Bad Request REQ_ID: c6652958-c214-476c-a8b7-9c3582919265 X-Content-Type-Options: nosniff Content-Type: application/json; odata.metadata=minimal OData-Version: 4.0 {"error":{"code":"0x80044331","message":"A validation error occurred. The length of the 'ch89_name' attribute of the 'ch89_release' entity exceeded the maximum allowed length of '100'."}} --changesetresponse_86a9d9c8-fea3-4753-8e92-429d5d6fc8fb-- --batchresponse_d9374753-b113-4f07-a479-552b368e08de--
— Output —HTTP 200 x-ms-ratelimit-burst-remaining-xrm-requests: 7992 x-ms-ratelimit-time-remaining-xrm-requests: 1,198.52 { "@odata.context": "https://org5014704c.crm.dynamics.com/api/data/v9.2/$metadata#ch89_releases(ch89_code,ch89_name,ch89_releaseid)", "value": [ { "@odata.etag": "W/\"2124255\"", "ch89_releaseid": "052c1e2d-9190-f111-8076-70a8a59af8d5", "ch89_name": "Release 0001, renamed", "ch89_code": "REL-0001" }, { "@odata.etag": "W/\"2124721\"", "ch89_releaseid": "192e1e2d-9190-f111-8076-70a8a59af8d5", "ch89_name": "Release 0003", "ch89_code": "REL-0003" }, { "@odata.etag": "W/\"2124722\"", "ch89_releaseid": "1a2e1e2d-9190-f111-8076-70a8a59af8d5", "ch89_name": "Release 0004", "ch89_code": "REL-0004" }, { "@odata.etag": "W/\"2124723\"", "ch89_releaseid": "1b2e1e2d-9190-f111-8076-70a8a59af8d5", "ch89_name": "Release 0005", "ch89_code": "REL-0005" } ] }
— Output —before: burst-remaining=7994 time-remaining=1,199.55 20 rows, one request each: 8.32 s (416 ms per row) 20 rows, one $batch: 1.04 s (52 ms per row), HTTP 200, 20 success parts after: burst-remaining=7973 time-remaining=1,199.19
10.11Artifacts from chapter 9 — ALM and pipelines
a solution through source control, the environment chain and a service principal
Chapter 9 staged seventeen artifacts, the largest set in the guide. They carry a solution through export, unpack, edit, pack, import into test, import into the production stand-in with a settings file, a component removal, two version bumps and an upgrade, and end with the pipeline list and the service principal the lab created.
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Listing all Solutions from the current Dataverse organization... Unique Name Friendly Name Version Managed ch23lab ch23lab 1.0.1.0 True ch45Lab ch45Lab 1.0 False ch45WrOnly ch45WrOnly 1.0 False ch89alm ch89alm 1.0.0.0 False Cra969a Common Data Services Default Solution 1.0.0.0 False Default Default Solution 1.0 False— The same environment, read from the solutions table instead —GET /api/data/v9.2/solutions?$select=uniquename&$count=true -> HTTP 200, @odata.count 448
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Starting Solution Export... Solution export succeeded. Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Starting Solution Export... Solution export succeeded.— Members of each zip, with their sizes in bytes —customizations.xml solution.xml environmentvariabledefinitions/ch89_ApiBaseUrl/environmentvariabledefinition.xml [Content_Types].xml
— Output —Unpacking Solution... Extracting .../lab89/work/out/ch89alm.zip to .../lab89/work/unpacked Skipping localization Processing Component: Entities - ch89_Note - ch89_Release Processing Component: EntityRelationships Unmanaged Extract complete. Unpacked Solution.— The tree it produced —unpacked/Entities/ch89_Note/Entity.xml unpacked/Entities/ch89_Note/FormXml/card/{ad2f67fe-d5c3-4058-9a61-4c5b205d3cba}.xml unpacked/Entities/ch89_Note/FormXml/main/{a1bab1de-5688-4014-8c8f-9945fe1bd4f4}.xml unpacked/Entities/ch89_Note/FormXml/quick/{3844e20d-cbc6-4cf1-9821-ed8a8c9c35e3}.xml unpacked/Entities/ch89_Note/RibbonDiff.xml unpacked/Entities/ch89_Note/SavedQueries/{22392318-a3fc-4584-bf24-8cfb0c70ee88}.xml unpacked/Entities/ch89_Note/SavedQueries/{76451dc7-52fd-4c8b-93a8-e684aaf3e9e5}.xml unpacked/Entities/ch89_Note/SavedQueries/{79a9c90b-9090-f111-8076-70a8a59af8d5}.xml unpacked/Entities/ch89_Note/SavedQueries/{7ce9425d-89af-4502-af48-2a83b876f2af}.xml unpacked/Entities/ch89_Note/SavedQueries/{8930f908-24c0-40d8-a3e9-df7807fe7f34}.xml unpacked/Entities/ch89_Note/SavedQueries/{e3fe2390-ec17-42f7-b776-44581486490e}.xml unpacked/Entities/ch89_Note/SavedQueries/{fb701fa8-30da-4cb8-bc18-2fc40fd6e5d2}.xml unpacked/Entities/ch89_Release/Entity.xml unpacked/Entities/ch89_Release/FormXml/card/{bb51b111-435e-46b3-95cd-ab9896624d4f}.xml unpacked/Entities/ch89_Release/FormXml/main/{90245498-74de-4aa3-ba24-12929c85fdd9}.xml unpacked/Entities/ch89_Release/FormXml/quick/{920f9076-4e59-4de7-b6e0-a871f5f6a36b}.xml unpacked/Entities/ch89_Release/RibbonDiff.xml unpacked/Entities/ch89_Release/SavedQueries/{62b6ab03-9324-462d-85b8-e9be5f42689c}.xml unpacked/Entities/ch89_Release/SavedQueries/{6a49e91f-0423-46a0-9252-7b8a52534f55}.xml unpacked/Entities/ch89_Release/SavedQueries/{6ff6abdd-c940-453f-ac91-446d53350f27}.xml unpacked/Entities/ch89_Release/SavedQueries/{89031cb0-96e3-4218-8949-d37dc823b998}.xml unpacked/Entities/ch89_Release/SavedQueries/{9cca0dca-87e4-41a3-acb5-9cc6adc5b324}.xml unpacked/Entities/ch89_Release/SavedQueries/{c1e6349d-8f90-f111-8076-70a8a59af8d5}.xml unpacked/Entities/ch89_Release/SavedQueries/{d5514df4-949b-495a-859f-7bd49e9937de}.xml unpacked/environmentvariabledefinitions/ch89_ApiBaseUrl/environmentvariabledefinition.xml unpacked/Other/Customizations.xml unpacked/Other/Relationships/BusinessUnit.xml unpacked/Other/Relationships/Owner.xml unpacked/Other/Relationships/SystemUser.xml unpacked/Other/Relationships/Team.xml unpacked/Other/Relationships.xml unpacked/Other/Solution.xml— unpacked/Other/Solution.xml, first two lines —<?xml version="1.0" encoding="utf-8"?> <ImportExportXml version="9.2.26065.171" SolutionPackageVersion="9.2" languagecode="1033" generatedBy="CrmLive" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" OrganizationVersion="9.2.26065.171" OrganizationSchemaType="Standard" CRMServerServiceabilityVersion="9.2.26065.00171">— The alternate key, inside unpacked/Entities/ch89_Release/Entity.xml —<EntityKeys> <EntityKey> <Name>ch89_ReleaseCode</Name> <LogicalName>ch89_releasecode</LogicalName> <IntroducedVersion>1.0.0.0</IntroducedVersion> <IsCustomizable>0</IsCustomizable> <EntityKeyAttributes> <AttributeName>ch89_code</AttributeName> </EntityKeyAttributes> <displaynames> <displayname description="Release code" languagecode="1033" /> </displaynames> </EntityKey> </EntityKeys>— File sizes in the tree —42587 unpacked/Entities/ch89_Release/Entity.xml 40264 unpacked/Entities/ch89_Note/Entity.xml 531 unpacked/Other/Customizations.xml
— The whole file —<environmentvariabledefinition schemaname="ch89_ApiBaseUrl"> <defaultvalue>https://api.dev.example/</defaultvalue> <displayname default="API base URL"> <label description="API base URL" languagecode="1033" /> </displayname> <introducedversion>1.0.0.0</introducedversion> <iscustomizable>1</iscustomizable> <isrequired>0</isrequired> <secretstore>0</secretstore> <type>100000000</type> </environmentvariabledefinition>
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Starting Solution Export... Unmanaged solution export succeeded. Starting Solution Export... Managed solution export succeeded. Unpacking Solution... Extracting /tmp/ch89alm.zip and /tmp/ch89alm_managed.zip to .../lab89/work/cloned/ch89alm/src Skipping localization Processing Component: Entities - ch89_Note - ch89_Release Processing Component: EntityRelationships Unmanaged Extract complete. Skipping localization Processing Component: Entities - ch89_Note - ch89_Release Managed Extract complete. Unpacked Solution. Solution clone extract succeeded. Dataverse solution project with name 'ch89alm' created successfully in: '.../lab89/work/cloned'— What the clone wrote that the unpack did not —cloned/ch89alm/ch89alm.cdsproj cloned/ch89alm/.gitignore cloned/ch89alm/src/Entities/ch89_Note/FormXml/card/{ad2f67fe-d5c3-4058-9a61-4c5b205d3cba}_managed.xml cloned/ch89alm/src/Entities/ch89_Note/FormXml/main/{a1bab1de-5688-4014-8c8f-9945fe1bd4f4}_managed.xml cloned/ch89alm/src/Entities/ch89_Note/FormXml/quick/{3844e20d-cbc6-4cf1-9821-ed8a8c9c35e3}_managed.xml cloned/ch89alm/src/Entities/ch89_Release/FormXml/card/{bb51b111-435e-46b3-95cd-ab9896624d4f}_managed.xml cloned/ch89alm/src/Entities/ch89_Release/FormXml/main/{90245498-74de-4aa3-ba24-12929c85fdd9}_managed.xml cloned/ch89alm/src/Entities/ch89_Release/FormXml/quick/{920f9076-4e59-4de7-b6e0-a871f5f6a36b}_managed.xml
— Output —@@ -6,7 +6,7 @@ <LocalizedName description="ch89alm" languagecode="1033" /> </LocalizedNames> <Descriptions /> - <Version>1.0.0.0</Version> + <Version>1.0.1.0</Version> <Managed>0</Managed> <Publisher> <UniqueName>ch89alm</UniqueName> @@ -1,5 +1,5 @@ <environmentvariabledefinition schemaname="ch89_ApiBaseUrl"> - <defaultvalue>https://api.dev.example/</defaultvalue> + <defaultvalue>https://api.test.example/</defaultvalue> <displayname default="API base URL"> <label description="API base URL" languagecode="1033" /> </displayname>
— Output —Packing Solution... Packing .../lab89/work/unpacked to .../lab89/work/out/ch89alm_1_0_1_0_managed.zip Microsoft PowerPlatform CLI Version: 2.10.1+g52c3983 (.NET 10.0.10) Online documentation: https://aka.ms/PowerPlatformCLI Feedback, Suggestions, Issues: https://github.com/microsoft/powerplatform-build-tools/discussions Error: Solution package type did not match requested type. Command line argument: Managed Package type: Unmanaged Packing Solution... Packing .../lab89/work/unpacked to .../lab89/work/out/ch89alm_1_0_1_0.zip Processing Component: Entities - ch89_Release - ch89_Note Processing Component: Roles Processing Component: Workflows Processing Component: FieldSecurityProfiles Processing Component: Templates Processing Component: EntityMaps Processing Component: EntityRelationships Processing Component: OrganizationSettings Processing Component: optionsets Processing Component: CustomControls Processing Component: EntityDataProviders Processing Sharded Component Files Unmanaged Pack complete. Packed Solution.— The members of the packed zip, with their sizes in bytes —customizations.xml 145609 solution.xml 4082 environmentvariabledefinitions/ch89_ApiBaseUrl/environmentvariabledefinition.xml 448 [Content_Types].xml 191— The environment variable definition inside the packed zip —<environmentvariabledefinition schemaname="ch89_ApiBaseUrl"> <defaultvalue>https://api.test.example/</defaultvalue>
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Starting Solution Export... Solution export succeeded. Extracting Dataverse connection references and/or environment variables from: .../lab89/work/out/ch89alm_managed_1_0_1_0.zip Deployment settings file created: .../lab89/work/out/ch89alm.settings.json— The file it wrote —{ "EnvironmentVariables": [ { "SchemaName": "ch89_ApiBaseUrl", "Value": "", "DefaultValue": "https://api.test.example/", "Name": { "Default": "API base URL", "ByLcid": { "1033": "API base URL" } }, "TypeId": 100000000, "IsRequired": false } ], "ConnectionReferences": [], "CopilotAgents": [] }— The same file after the target's value was filled in —"SchemaName": "ch89_ApiBaseUrl", "Value": "https://api.prod.example/", "DefaultValue": "https://api.test.example/",
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations.
— fetch-envvar.xml —<fetch> <entity name="environmentvariabledefinition"> <attribute name="schemaname" /> <attribute name="defaultvalue" /> <filter><condition attribute="schemaname" operator="eq" value="ch89_ApiBaseUrl" /></filter> <link-entity name="environmentvariablevalue" from="environmentvariabledefinitionid" to="environmentvariabledefinitionid" link-type="outer" alias="v"> <attribute name="value" /> </link-entity> </entity> </fetch>— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod schemaname defaultvalue environmentvariabledefinitionid v.value ch89_ApiBaseUrl https://api.test.example/ 0fea51c7-982d-4769-a072-0b7b2a70422e https://api.prod.example/ Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test schemaname defaultvalue environmentvariabledefinitionid ch89_ApiBaseUrl https://api.test.example/ 0fea51c7-982d-4769-a072-0b7b2a70422e
POST /api/data/v9.2/RemoveSolutionComponent
{"SolutionComponent": {"@odata.type": "Microsoft.Dynamics.CRM.solutioncomponent",
"solutioncomponentid": "689f70fd-8f90-f111-8076-70a8a59af8d5"},
"ComponentType": 1,
"SolutionUniqueName": "ch89alm"}
— Output —
HTTP 200
{"@odata.context":"https://org5014704c.crm.dynamics.com/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RemoveSolutionComponentResponse","id":"bca9c90b-9090-f111-8076-70a8a59af8d5"}
— The solution's root components, before the removal —
componenttype objectid solutioncomponentid
1 0c3dbd02-8f90-f111-8076-70a8a59af8d5 beada7ce-8f90-f111-8076-70a8a59af8d5
1 689f70fd-8f90-f111-8076-70a8a59af8d5 bca9c90b-9090-f111-8076-70a8a59af8d5
380 b552c211-9090-f111-8076-70a8a59af8d5 b752c211-9090-f111-8076-70a8a59af8d5
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-test Starting Solution Export... Solution export succeeded.— Exported sizes, by the version each export carried —1.0.1.0 13164 out/ch89alm_managed_1_0_1_0.zip 1.1.0.0 8126 out/ch89alm_managed_1_1_0_0.zip 1.2.0.0 8125 out/ch89alm_managed_1_2_0_0.zip
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations. Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod No results returned.— The solution list in the target afterwards —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod Listing all Solutions from the current Dataverse organization... Unique Name Friendly Name Version Managed ch45SiteMap ch45SiteMap 1.0 False ch89alm ch89alm 1.1.0.0 True Cra969a Common Data Services Default Solution 1.0.0.0 False Default Default Solution 1.0 False— The control, in the same environment on the same day —Error: The entity with a name = 'ch89_absent' with namemapping = 'Logical' was not found in the MetadataCache.LazyDynamicMetadataCache with version 2022093 and timestamp 2022093
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod Solution Importing... Solution Imported successfully. Publishing All Customizations... Published All Customizations. Error: The entity with a name = 'ch89_note' with namemapping = 'Logical' was not found in the MetadataCache.LazyDynamicMetadataCache with version 2025300 and timestamp 2025300 Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod No results returned.— The solution list in the target afterwards —Connected as skydude@itrancyngergmail.onmicrosoft.com Connected to... skylib-prod Listing all Solutions from the current Dataverse organization... Unique Name Friendly Name Version Managed ch45SiteMap ch45SiteMap 1.0 False ch89alm ch89alm 1.2.0.0 True Cra969a Common Data Services Default Solution 1.0.0.0 False Default Default Solution 1.0 False
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Microsoft PowerPlatform CLI Version: 2.10.1+g52c3983 (.NET 10.0.10) Online documentation: https://aka.ms/PowerPlatformCLI Feedback, Suggestions, Issues: https://github.com/microsoft/powerplatform-build-tools/discussions Error: Resource not found for the segment 'deploymentpipelines'.
— Output —Connected as skydude@itrancyngergmail.onmicrosoft.com Creating Entra ID Application 'ch89-ci'... Done Creating Entra ID Service Principal... Done Connected to... skylib-test Registering Application 'bde22820-badb-4c02-948b-765540cb1d08' with Dataverse... Done Creating Dataverse system user and assigning role... Done Application Name ch89-ci Tenant Id 03cc7adf-0a88-42ef-bdaf-6ff598d14b45 Application Id bde22820-badb-4c02-948b-765540cb1d08 Service Principal Id 52256121-4241-46c2-9ce5-926fbaa6b019 Client Secret <redacted> Client Secret Expiration 8/5/2027 5:27:30 AM +00:00 System User Id bcc43b5c-8e90-f111-8076-70a8a59af8d5— The list afterwards —Connected as skydude@itrancyngergmail.onmicrosoft.com App Id Secret Expiry Name bde22820-badb-4c02-948b-765540cb1d08 2027-08-05 05:27:30Z ch89-ci— Before the create, the same command printed a header and no rows —Connected as skydude@itrancyngergmail.onmicrosoft.com App Id Secret Expiry Name