Microsoft Dataverse: možnosti práce s metadaty a datovým modelem pro Hermes/AI agenta
Cíl: shrnout praktické způsoby, jak může Hermes/agent číst, analyzovat a případně měnit metadata, datový model a data v Microsoft Dataverse.
Krátký závěr:
- Nejlepší primární rozhraní pro agenta je Dataverse Web API: je oficiální, HTTP/OData, funguje z Pythonu/Node/shellu a umí metadata i data.
- Pro .NET nástroje je velmi silná alternativa Organization Service SDK (
Microsoft.PowerPlatform.Dataverse.Client). - Pro ALM a offline analýzu je nejlepší kombinace
pac solution export+pac solution unpack/ SolutionPackager. - TDS/SQL endpoint je výborný pro read-only SQL dotazy nad daty, ale není určený pro metadata write ani schema management.
- UI/Maker portal/XrmToolBox jsou užitečné pro člověka, ale ne jako hlavní headless automation cesta.
- Pro produkčního agenta: service principal / application user, least privilege, metadata cache, dry-run, diff, potvrzení destruktivních změn.
1. Dataverse Web API
Oficiální zdroje:
- Web API overview: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/overview
- Query metadata: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/query-metadata-web-api
- Create/update table definitions: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/create-update-entity-definitions-using-web-api
- Query data: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/query/overview
- OAuth auth: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/authenticate-oauth
- API limits: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/api-limits
Typický endpoint:
https://{environment}.crm.dynamics.com/api/data/v9.2/
Metadata read
Důležité endpointy:
GET /api/data/v9.2/EntityDefinitions
GET /api/data/v9.2/EntityDefinitions(LogicalName='account')
GET /api/data/v9.2/EntityDefinitions(LogicalName='account')/Attributes
GET /api/data/v9.2/EntityDefinitions(LogicalName='account')/ManyToOneRelationships
GET /api/data/v9.2/EntityDefinitions(LogicalName='account')/OneToManyRelationships
GET /api/data/v9.2/EntityDefinitions(LogicalName='account')/ManyToManyRelationships
GET /api/data/v9.2/RelationshipDefinitions
GET /api/data/v9.2/GlobalOptionSetDefinitions
GET /api/data/v9.2/$metadata
Co lze zjistit:
- tabulky/entity: logical name, schema name, display name, ownership, custom/system flag,
- sloupce/attributes: typ, required level, délky, přesnost, lookup targety, choice/option hodnoty,
- vztahy: 1:N, N:1, N:N,
- globální a lokální choices/options,
- základní OData model přes
$metadata, - změny metadat přes
RetrieveMetadataChanges.
Doporučení:
- používat
$select,$filter,$expand, stránkování, - pro atributy používat type casts, např.
StringAttributeMetadata,PicklistAttributeMetadata,LookupAttributeMetadata, - nepoužívat display name jako stabilní identifikátor; používat logical/schema name,
- cachovat metadata a invalidovat po importu solution / publishi.
Metadata write
Web API umí vytvářet/upravovat/mazat podporované custom komponenty:
- custom tables,
- columns,
- relationships,
- choices / option set values,
- lookup columns,
- metadata změny, které pak často vyžadují publish.
Omezení:
- system a managed komponenty mohou být read-only nebo omezené managed properties,
- solution layering může způsobit chyby při update/delete,
- některé změny vyžadují publish customizations,
- produkční změny schématu by měly vyžadovat explicitní schválení.
Data read/write
Příklady:
GET /api/data/v9.2/accounts?$select=name,accountid&$top=10
GET /api/data/v9.2/accounts({id})
POST /api/data/v9.2/accounts
PATCH /api/data/v9.2/accounts({id})
DELETE /api/data/v9.2/accounts({id})
Dataverse podporuje OData query, FetchXML, actions/functions a $batch.
Pro agenta je bezpečný pattern:
- nejdřív načíst metadata,
- ověřit tabulku, sloupce, required fields, typy, choice hodnoty a lookup targety,
- teprve potom plánovat data write.
2. Organization Service SDK pro .NET
Oficiální zdroje:
- Organization Service overview: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/org-service/overview
- Metadata via Organization Service: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/org-service/metadata
- ServiceClient / connection strings: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/xrm-tooling/use-connection-strings-xrm-tooling-connect
Hlavní knihovna:
Microsoft.PowerPlatform.Dataverse.Client
Klíčové typy:
ServiceClientIOrganizationServiceEntityMetadataAttributeMetadataRelationshipMetadataBaseOptionSetMetadata
Metadata requesty:
RetrieveEntityRequestRetrieveAttributeRequestRetrieveRelationshipRequestRetrieveAllEntitiesRequestRetrieveMetadataChangesRequestCreateEntityRequestUpdateEntityRequestDeleteEntityRequestCreateAttributeRequestUpdateAttributeRequestDeleteAttributeRequestCreateOneToManyRequestCreateManyToManyRequestPublishXmlRequestPublishAllXmlRequest
Kdy dává smysl:
- agent/nástroj je psaný v .NET,
- existuje legacy Dynamics/Dataverse SDK kód,
- je výhodné silné typování,
- komplexní metadata operace jsou přehlednější přes SDK message třídy než přes HTTP.
Pro obecného Hermes agenta je Web API praktičtější, protože je jazykově neutrální.
3. Power Platform CLI (pac)
Oficiální zdroje:
- CLI overview: https://learn.microsoft.com/en-us/power-platform/developer/cli/introduction
pac auth: https://learn.microsoft.com/en-us/power-platform/developer/cli/reference/authpac org: https://learn.microsoft.com/en-us/power-platform/developer/cli/reference/orgpac solution: https://learn.microsoft.com/en-us/power-platform/developer/cli/reference/solutionpac modelbuilder: https://learn.microsoft.com/en-us/power-platform/developer/cli/reference/modelbuilderpac data: https://learn.microsoft.com/en-us/power-platform/developer/cli/reference/data
Auth a prostředí
pac auth create --url https://ORG.crm.dynamics.com
pac auth list
pac auth select --index <n>
pac org list
pac org select --environment <environment-id-or-url>
Pro CI/CD je vhodnější service principal / application user, pokud to konkrétní scénář a CLI konfigurace podporují.
Solution export/import/unpack/pack
pac solution export --name <solutionUniqueName> --path ./solution.zip --managed false
pac solution unpack --zipfile ./solution.zip --folder ./solution-src --packagetype Unmanaged
pac solution pack --folder ./solution-src --zipfile ./solution.zip --packagetype Unmanaged
pac solution import --path ./solution.zip
Co lze číst:
- tabulky a sloupce přidané do solution,
- relationships,
- choices,
- forms, views, charts, dashboards,
- business rules, procesy, flows, apps, plugin assemblies atd. podle obsahu solution.
Limity:
- export obsahuje jen komponenty v dané solution, ne nutně celé prostředí,
- XML je verbose a ALM-orientované, ne čistý ER model,
- přímé ruční editování unpacked XML je rizikové,
- managed solution nemá sloužit jako editovatelný source.
pac modelbuilder
pac modelbuilder build --outdirectory ./Models --namespace Contoso.Dataverse --serviceContextName DataverseContext
Vhodné pro generování .NET early-bound tříd. Jako primární schema export pro AI je to méně vhodné než Web API metadata, ale výstup může být dobrý doplňkový signál.
pac data
pac data export --schemaFile schema.xml --dataFile data.zip
pac data import --dataFile data.zip
Vhodné pro konfigurační/reference data, ne pro plný metadata model.
4. SolutionPackager / ALM export
Oficiální zdroj:
- SolutionPackager: https://learn.microsoft.com/en-us/power-platform/alm/solution-packager-tool
- ALM concepts: https://learn.microsoft.com/en-us/power-platform/alm/solution-concepts-alm
Moderní cesta je často přes pac solution unpack/pack, historicky přes SolutionPackager.exe.
Silné stránky:
- offline inspekce solution,
- Git diff a code review změn,
- generování dokumentace,
- porovnání prostředí / verzí,
- CI validace.
Slabé stránky:
- solution není kompletní inventory prostředí, pokud v ní nejsou všechny komponenty,
- formát je určený pro ALM, ne jako stabilní semantic API,
- přímé AI editování XML bez validace může rozbít import.
Doporučení pro agenta:
- používat solution export jako doplněk k Web API,
- parsovat do vlastního kompaktního JSON/graph modelu,
- pro write raději generovat návrh změn + diff + importovat řízeně.
5. Maker portal, classic solution explorer, admin UI
Oficiální zdroje:
- Tables v maker portálu: https://learn.microsoft.com/en-us/power-apps/maker/data-platform/create-edit-entities-portal
- Columns: https://learn.microsoft.com/en-us/power-apps/maker/data-platform/create-edit-field-portal
- Relationships: https://learn.microsoft.com/en-us/power-apps/maker/data-platform/create-edit-entity-relationships
- Solutions overview: https://learn.microsoft.com/en-us/power-apps/maker/data-platform/solutions-overview
- Classic solution explorer: https://learn.microsoft.com/en-us/power-apps/maker/data-platform/create-edit-entities-solution-explorer
- Browse metadata: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/browse-your-metadata
Možnosti:
- interaktivně číst a měnit tabulky, sloupce, relationships, choices,
- spravovat forms/views/business rules,
- pracovat se solution komponentami,
- validovat výsledky změn provedených API/CLI.
Pro agenta:
- vhodné pro human-in-the-loop validaci,
- nevhodné pro headless automation,
- browser automation UI by byla křehká a pomalá,
- použít jen pokud API/CLI nestačí nebo pro screenshot/ruční kontrolu.
6. Power Platform connectors / Power Automate
Oficiální zdroje:
- Dataverse connector: https://learn.microsoft.com/en-us/connectors/commondataserviceforapps/
- Power Apps for Admins connector: https://learn.microsoft.com/en-us/connectors/powerappsforadmins/
- Power Apps for Makers connector: https://learn.microsoft.com/en-us/connectors/powerappsforappmakers/
- Power Platform for Admins connector: https://learn.microsoft.com/en-us/connectors/powerplatformforadmins/
Dataverse connector umí hlavně:
- CRUD nad řádky,
- list rows s OData filtrem / select / expand,
- triggers on create/update/delete,
- bound/unbound actions,
- relate/unrelate rows.
Admin/maker connectors umí spíš:
- inventory prostředí, apps, flows, connectors,
- admin operace,
- permission management.
Limity:
- nejsou nejlepší primární cesta pro plnou metadata introspekci,
- delegated user connections jsou horší pro headless agenta,
- throttling a Power Platform request limits,
- licenční omezení/premium konektory.
Pro Hermes:
- dobré pro orchestraci business procesů a spouštění flow,
- slabší pro schema discovery,
- pro metadata použít přímo Web API.
7. TDS / SQL endpoint
Oficiální zdroj:
- SQL query for Dataverse: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/dataverse-sql-query
Typicky:
server: org.crm.dynamics.com,5558
auth: Microsoft Entra ID
Možnosti:
- read-only SQL dotazy nad Dataverse tabulkami,
- SELECT, joins, filters, aggregations podle podporované subset SQL funkcionality,
- užitečné pro ad hoc analýzu, reporting, Power BI, Azure Data Studio, SSMS.
Limity:
- read-only: žádný INSERT/UPDATE/DELETE/DDL,
- nejedná se o plné metadata API,
- endpoint musí být povolený,
- síť musí pustit port,
- platí Dataverse privileges,
- ne všechny SQL Server vlastnosti jsou podporované.
Pro agenta:
- dobré pro bezpečné čtení dat a SQL analýzu,
- středně užitečné pro orientační schema discovery,
- nevhodné pro schema write.
8. XrmToolBox a komunitní nástroje
Zdroj:
- XrmToolBox: https://www.xrmtoolbox.com/
Užitečné pluginy:
- Metadata Browser,
- FetchXML Builder,
- SQL 4 CDS,
- Attribute Manager.
Poznámka: není to oficiální Microsoft API ani headless automation surface. Je to výborný desktop nástroj pro developera/admina, ale pro Hermes agenta spíš zdroj inspirace nebo manuální troubleshooting.
9. Autentizace a oprávnění
Oficiální auth zdroj:
- OAuth: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/authenticate-oauth
Běžné modely:
- Delegated user auth
- interaktivní uživatel,
- vhodné pro vývoj a ruční nástroje,
-
méně vhodné pro unattended agenta.
-
Client credentials / service principal
- Entra ID app registration,
- Dataverse application user,
- security roles v Dataverse,
-
nejlepší pro server/agent automation.
-
Managed identity
- vhodné v podporovaných Azure scénářích,
- také potřebuje Dataverse application user / role.
Důležité:
- Entra token nestačí; principal musí mít Dataverse přístup a role.
- Metadata write obvykle vyžaduje customizer/admin oprávnění.
- Data access se řídí rolemi, business units, teams, sharing a field security.
- Pro produkci používat least privilege role, oddělené prostředí a audit.
10. Limity, throttling, výkon
Oficiální zdroj:
- Service protection API limits: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/api-limits
Typické caveaty:
- limity jsou per user/application principal v rolling okně,
- 429/throttling: respektovat
Retry-After, - velké metadata payloady: používat
$select, cílené dotazy a cache, - row paging: standardní tabulky běžně až 5 000 řádků na stránku; elastic tables méně,
$batchpomáhá, ale limity stále platí,- publish all customizations může být drahý/disruptivní,
- solution import může selhat kvůli dependencies, managed vrstvení, publisher mismatch, connection references.
11. Doporučená architektura pro Hermes agenta
Read-only metadata discovery
- Přihlásit se jako service principal / application user.
- Načíst metadata přes Web API:
EntityDefinitions,Attributes,- relationships,
- keys,
GlobalOptionSetDefinitions.- Normalizovat do interního JSON modelu:
- table logical/schema/display name,
- primary key/name,
- ownership,
- columns: type, required, max length, precision, lookup targets, choices,
- relationships,
- custom/system flags,
- solution/managed indikace, pokud dostupná.
- Uložit cache s verzí/timestampem.
- Při změnách použít
RetrieveMetadataChangesnebo refresh po solution import/publish.
ALM/offline analýza
pac auth create/selectpac solution exportpac solution unpack- Parsovat XML do dokumentace / diffu / graphu.
- Kombinovat s Web API pro úplný environment inventory.
Data access
- Nejprve metadata validation.
- Potom dotazovat data přes Web API nebo TDS.
- Minimalizovat PII a počet řádků.
- Používat explicitní filtr/scope.
Write/schéma změny
Povinné guardrails:
- dry-run,
- diff plán,
- export/backup před změnou,
- dependency check,
- human approval pro produkci a destruktivní operace,
- audit log: kdo/co/kdy/proč,
- oddělení dev/test/prod,
- nepoužívat display labels jako identifikátory.
Destruktivní operace vyžadující explicitní potvrzení:
- delete rows,
- delete columns/tables,
- delete relationships,
- publish all customizations,
- import solution do produkce,
- změny managed komponent.
12. Praktické pořadí voleb
| Scénář | Nejlepší cesta | Poznámka |
|---|---|---|
| Kompletní schema inventory prostředí | Web API metadata | Nejlepší pro agenta |
| .NET aplikace / early-bound typy | Organization Service SDK / pac modelbuilder |
Dobré pro developer tooling |
| ALM/source control solution | pac solution export + unpack |
Výborné pro diff/review |
| Offline dokumentace solution | SolutionPackager / unpacked solution | Jen komponenty v solution |
| SQL analýza dat | TDS endpoint | Read-only |
| CRUD řádků v automatizaci | Web API | Validovat proti metadatům |
| Flow/business orchestrace | Dataverse connector / Power Automate | Ne jako metadata API |
| Ruční kontrola | Maker portal / classic UI / XrmToolBox | Ne headless primární cesta |
13. Doporučení pro implementaci v Hermes
Minimální robustní modul pro Dataverse by měl mít:
- config: environment URL, tenant ID, client ID, auth mode,
- token provider pro Entra ID,
- Web API klient s retry/backoff,
- metadata extractor,
- metadata normalizer do kompaktního JSON,
- validator plánovaných data writes,
- ALM helper pro
pac solution export/unpack, - safe-mode: read-only default,
- explicitní confirm pro write/destructive/publish/import,
- audit log requestů a změn.
Výchozí strategie:
- Read-only metadata přes Web API.
- Volitelně solution export pro ALM kontext.
- Data sampling jen na explicitní žádost.
- Write operace jen přes plán + diff + potvrzení.
Ověřené zdroje
Vybrané Microsoft Learn URL byly během přípravy ověřeny HTTP odpovědí 200:
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/overview
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/query-metadata-web-api
- https://learn.microsoft.com/en-us/power-platform/developer/cli/reference/solution
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/dataverse-sql-query
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/api-limits