ProjectOnline
Discovers Microsoft Project Online projects via Microsoft Graph API.
What it does
Uses app-only authentication (client_credentials flow) to call: - Graph site resolution (PWA / Project Web App / projectserver paths) - projectData / Projects lists on resolved PWA sites - Graph /beta/projects (when available) - SharePoint ProjectData OData REST (_api/ProjectData/Projects) with SPO token Enumerates Project Online projects with migration-useful columns: ProjectId, ProjectName, Description, Owner/OwnerId/OwnerEmail, dates, SiteId/SiteUrl/SiteName, WorkspaceUrl, ParentProjectId, TenantId, etc. Honest EMPTY: when the tenant has no Project Online PWA / projects, writes header-only CSV and Success=true (does not invent rows). Fail loud on AUTH (missing credentials / token / 401/403). Pure functions (TDD-enabled): - ConvertFrom-ProjectOnlineItem: Converts OData/Graph project item to discovery record - Get-ProjectOnlineCsvHeader: Canonical header list for header-only exports - Resolve-ProjectPersonField: Person/lookup extraction for list/Graph owner fields
How the app exposes it
The module runs through the ACQI discovery orchestrator and writes its rows into a dedicated results view. From there, conflicts, dependencies, and readiness scores feed the deal-wide consolidation layer.
/discovered/project-online Outputs
Each module emits a normalised CSV keyed by entity ID with readiness and risk scores, evidence-source counts, and last-seen timestamps. The exact column set varies by module — the app's results view shows the live schema.