[Project Arches] Microsoft Fabric Export Setup - #11314
Bert Verbeek (Bertverbeek4PS) wants to merge 93 commits into
Conversation
- Introduced permissionset for Fabric Platform Admin to manage access. - Created pages for managing Fabric Platform Companies, Export Details, Export Summary, and Setup. - Implemented codeunit for Fabric Platform Management, handling export lifecycle and table management. - Added functionality to manage Fabric Config Packages and their associated tables. - Developed test codeunits to validate the behavior of the Fabric Platform functionalities. - Established a test framework for ensuring the integrity of the Fabric export process.
- Introduced new codeunits for managing credentials and HTTP requests. - Enhanced permissionset for Fabric Platform Admin to include new codeunits. - Updated Fabric Platform Setup page to support workspace and lakehouse selection. - Added functionality for service principal management in the Fabric workspace.
…panies, Fabric Platform Export Details, Fabric Platform Export Summary, and Fabric Platform Tables pages
…Export Summary, Setup, and Tables
…ort/export capabilities, and improved user permissions
…d access controls
…al Management and Setup
…o support PTE configuration
…ric Platform components
…port Details page
…terval fields in Fabric Platform Setup
…ric Platform Setup
…edures and updating workspace name handling in Fabric Platform Setup
… and Summary pages
Good Sense Reviewer - Round 6Recommendation: Accept with SuggestionsWhat this PR doesThis round creates the setup record when the setup API page opens, uses safer error details for setup and Fabric API failures, keeps the HTTP test seam internal, and adds a guard so automatic package reapply does not abort when the table limit would be exceeded. The changes fit the feature design and the prior package-claim fixes remain in place. The new capacity skip path is sensible, but it should have a direct regression test because it controls install/upgrade behavior. Status of previous suggestions
New observations (commits since round 5)S5 (🟠 Moderate): Cover package reapply capacity skip Risk assessment and necessityRisk: The feature still spans setup, API pages, permissions, configuration packages, and Fabric service calls. The latest edits reduce customer-facing error detail and install/upgrade risk, but the package reapply capacity path can affect which tables are exported after an upgrade. Necessity: The changes are needed to make the Fabric export setup robust, keep internal seams out of the public surface, and avoid blocking install or upgrade when the export table cap is reached.
|
…ty would be exceeded
Good Sense Reviewer - Round 7Recommendation: Accept with SuggestionsWhat this PR doesThis round adds a direct regression test for the package reapply capacity-skip path. The test creates an active package, fills the selected table list to capacity, re-registers the package with one extra table, and verifies that the package stays active and ready to reapply while the new table is not pushed to the platform. That matches the feature behavior and addresses the previous coverage gap, but the new test should start from the same clean state as the rest of this test codeunit. Status of previous suggestions
New observations (commits since round 6)S6 (🟠 Moderate): Initialize capacity skip test Risk assessment and necessityRisk: The latest commit changes only test code, so runtime risk is unchanged. The feature still spans setup, API pages, permissions, configuration packages, and Fabric service calls; the package reapply path controls which tables are exported after install or upgrade. Necessity: The new test is necessary because the feature intentionally skips automatic reapply at capacity instead of aborting install or upgrade. Keeping the test isolated is also important so it proves that behavior reliably.
|
…active package to ensure proper scenario setup
… requests and improve reset functionality
…and add checks for setup run status during enable requests
Good Sense Reviewer - Round 8Recommendation: Accept with SuggestionsWhat this PR doesThis round fixes the remaining capacity-skip test isolation issue and adds lifecycle safeguards for Fabric setup. It records recent enable requests, blocks another enable while the setup run is still active, shows a safer reset confirmation, skips start when an export run is already running, and adds tests for these flows. The previous test isolation finding is addressed because the capacity-skip test now starts from a clean state. The new lifecycle behavior mostly fits the feature, but the enable cooldown still has a timing gap before the async setup summary row is visible, and one test assertion does not fully prove the second enable path. Status of previous suggestions
New observations (commits since round 7)S7 (🟠 Moderate): Cooldown misses pre-summary enable window S8 (🟡 Minor): Reset enable seam before assertion Risk assessment and necessityRisk: Runtime risk is moderate because the latest code controls repeated Fabric setup and synchronization requests. The reset confirmation reduces accidental destructive action risk, but the cooldown gap can still allow duplicate enable requests during async setup startup. Necessity: The round-8 changes are useful and targeted. They finish the previous test cleanup and make Fabric setup operations safer, but the cooldown and its test should be tightened so the new guard proves the intended behavior.
|
…nd cooldown logic; update test to reset state before re-enabling
Good Sense Reviewer - Round 9Recommendation: Accept with SuggestionsWhat this PR doesThis round tightens the Fabric enable cooldown. It records the enable request before the test seam and only allows another request inside the cooldown when a setup run that started after that request has already reached a non-running state. The duplicate-click gap from the prior round is addressed because a missing setup summary row no longer counts as a finished setup run. The new test reset also proves that the second enable call reaches the seam. One retry edge case remains because the timestamp is stored before the local client ID and secret validation can fail. Status of previous suggestions
New observations (commits since round 8)S9 (🟠 Moderate): Avoid cooldown after failed enable Risk assessment and necessityRisk: The feature controls Fabric setup lifecycle requests, package selection, API pages, permissions, and persistent setup state. The latest cooldown change reduces duplicate enable requests, but current W1 validation still reports an AA0137 analyzer error in the package-capacity test, and the new timestamp order can delay a normal setup retry. Necessity: The feature is a coherent Fabric export setup increment. The latest change is necessary to prevent a second enable request while the asynchronous setup run has not yet produced a summary row, but failed local validation should not count as a real enable request.
|
…from RegisterPackageSkipsReapplyWhenCapacityWouldBeExceeded procedure
…ed constants for improved readability and maintainability
…kageLineExists procedure by using a labeled constant for expected table output
Onat Buyukakkus (onbuyuka)
left a comment
There was a problem hiding this comment.
Three functional issues to address before merge.
Good Sense Reviewer - Round 10Recommendation: Accept with SuggestionsWhat this PR doesThis round only cleans up tests. It removes the unused The previous analyzer issue is addressed. The remaining retry concern is unchanged because Status of previous suggestions
New observations (commits since round 9)None - the latest commits only address the prior test cleanup and label analyzer/readability items. Risk assessment and necessityRisk: The feature controls Fabric setup lifecycle requests, package selection, API pages, permissions, and persistent setup state. The latest test-only cleanup lowers analyzer risk, but the open cooldown ordering issue can still delay a normal retry after failed setup validation. Necessity: The feature is a coherent Fabric export setup increment. The latest cleanup is necessary to keep the test app clean, and moving the enable timestamp after local validation is still needed so failed validation does not look like a real enable request.
|
…sions in FabricExpAdmin.PermissionSet, and refine delete permissions in FabricConfigPackageSubform; enhance test codeunits with permissions setup
Onat Buyukakkus (onbuyuka)
left a comment
There was a problem hiding this comment.
Follow-up on the previously resolved threads: these remaining parts are still outstanding.
| @@ -0,0 +1,53 @@ | |||
| { | |||
| "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", | |||
There was a problem hiding this comment.
The production app ID was replaced, but the test app still uses the example GUID a1b2c3d4-e5f6-7890-abcd-ef1234567890. Please generate a real GUID here as well and update internalsVisibleTo in the production manifest.
| PageType = List; | ||
| SourceTable = "Tenant Fabric Tables"; | ||
| ApplicationArea = All; | ||
| InsertAllowed = false; |
There was a problem hiding this comment.
Disabling deletion on the package subform fixes only half of the claim issue. This page still has DeleteAllowed = true by default, so a direct delete removes the platform row without calling ReleaseTable() and leaves its Manual claim orphaned. Please disable direct deletion here and provide a mediated remove action if removal is required.
| tabledata "Tenant Fabric Export Summary" = R, | ||
| tabledata "Tenant Fabric Setup" = RIMD, | ||
| tabledata "Tenant Fabric Table Fields" = RIMD, | ||
| tabledata "Tenant Fabric Tables" = R, |
There was a problem hiding this comment.
The company permission was updated, but this table remains read-only while Fabric Platform Tables exposes Fabric Schema Type as editable. A user assigned only this role will still get a Modify permission error. Either make that field read-only and route changes through a privileged codeunit, or grant the required direct Modify permission while keeping deletion mediated.
| tabledata "Tenant Fabric Enum Mapping" = R, | ||
| tabledata "Tenant Fabric Export Details" = R, | ||
| tabledata "Tenant Fabric Export Summary" = R, | ||
| tabledata "Tenant Fabric Setup" = R, |
There was a problem hiding this comment.
Fabric Platform Setup embeds Fabric Companies FactBox and Fabric Tables FactBox, but this role still grants neither FactBox page execute permissions nor read access to Tenant Fabric Companies. A user assigned only this role may fail when opening the setup page. Please add those permissions or remove the setup page from this role.
What & why
Export to Microsoft Fabric
Linked work
Fixes AB#649960
How I validated this
What I tested and the outcome (required — be specific: scenarios, commands, screenshots for UI changes)
Risk & compatibility