Hi all — building my first Forge cloud app for JSM. It pulls Microsoft Intune device data via the Graph API (deviceManagement/managedDevices) and syncs it into JSM Assets.
I’d been developing against my own Intune trial tenant, but the trial has now lapsed, and I’m trying to figure out the sanest long-term setup for testing a Graph-dependent app like this.
A few things I’m weighing up:
- For the inner dev loop, I’m leaning toward mocking the Graph responses with captured/synthetic
managedDevices payloads so I’m not tenant-dependent, and keeping a real tenant only for end-to-end validation. Is that what most people do, or is there a better pattern?
- For a persistent sandbox, is the M365 Developer Program the way people keep a renewable Intune tenant alive, or do you just cycle fresh trial tenants?
- Any gotchas testing Graph-heavy apps against a sandbox vs. real-world tenants — throttling, data shape differences, permissions/consent quirks — that only showed up once you had real customers?
Curious how others building integration-type Forge apps have set this up. Thanks!
Hey @TadhgMcGrady,
I can’t speak to the MS Intune side or access to MS Graph. I do think synthetic payloads is a good idea but the approach can be hard to keep working well when you don’t control the underlying service. I do hope the M365 Developer Program is the right approach.
Here’s a reference implementation that might answer some of the questions about “real world”: GitHub - ibuchanan/forge-assets-import: Build a first-class import integration for Atlassian Assets that appears natively inside the Assets UI, complete with configuration, field mapping, progress tracking, and lifecycle controls. · GitHub
Specifically, it has a queueing strategy to help traverse large data sets (even if the example endpoint is not particularly large). The invocation limits of Forge are such that you’ll be forced to think of that pretty early. Data shape differences are a bit tricky because that passes through the Assets mapping model which is poorly documented. The example should also help you understand the permissions (via asUser vs asApp) that feels a bit quirky compared to other Forge-available surfaces.
Let us all know what you learn!