Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'API di Power Platform può essere utilizzata per estrarre vari dettagli e metadati dagli ambienti Microsoft Power Platform con o senza un database Microsoft Dataverse. L'API viene utilizzata internamente da vari client correntemente disponibili come PowerShell.
In questa esercitazione apprenderai a:
- Creare un flusso di lavoro di Power Automate o di App per la logica (Azure) o uno script di PowerShell che esegue l'autenticazione con l'API di Power Platform.
- Chiamare l'endpoint Elenca ambienti per recuperare i dettagli dell'ambiente Microsoft Power Platform.
- Eseguire l'iterazione dell'oggetto capacità per recuperare il consumo effettivo.
- Salvare i dati di consumo in una tabella per la visualizzazione.
Come esempio di questo scenario, un cliente vuole gestire il proprio consumo di capacità in modo da poter comprendere meglio l'allocazione della capacità totale del tenant per reparto. Ciò aiuta il cliente a svolgere alcune funzioni di contabilità dei costi interni e ad addebitare costi in base a quanto ogni reparto consuma della capacità totale disponibile. Questo cliente utilizza la descrizione dell'ambiente per richiamare il reparto proprietario di ogni ambiente.
Connessione e configurazione delle variabili
Utilizzare i seguenti dettagli per connettersi al programma. Power Platform Puoi scegliere tra un'esperienza Azure o gli script PowerShell.
Creare il flusso di lavoro e impostare le variabili
Per iniziare, in questo tutorial utilizzeremo un flusso di lavoro App per la logica. Anche un flusso di Power Automate è accettabile e qualsiasi altro motore di orchestrazione che l'organizzazione preferisce utilizzare per l'automazione. Tutte le chiamate per recuperare i dati utilizzano API RESTful, pertanto qualsiasi strumento che supporti REST funziona con questo tutorial.
Visita il portale di Azure, quindi crea una nuova app per la logica e assegnale un nome:
Al termine del provisioning, modifica il flusso di lavoro utilizzando la finestra di progettazione e imposta un trigger di ricorrenza da eseguire quotidianamente:
Successivamente, dobbiamo inizializzare cinque variabili:
- SPN-Id – Questo è il ClientID del tuo principale servizio. Viene utilizzato in seguito per eseguire l'autenticazione in un contesto di servizio principale. Se utilizzi il contesto nome utente/password, puoi ignorare questa variabile.
- DBCapacity – Questa è una variabile Float per la capacità del database consumata in megabyte.
- FileCapacity – Questa è una variabile Float per la capacità del file consumata in megabyte.
- LogCapacity – Questa è una variabile Float per la capacità di registro consumata in megabyte.
- SimplifiedEnvironmentArray-Init – Questa è una variabile array che popoliamo con alcune proprietà ambiente. Ciò semplifica drasticamente l'output del report finale della tabella HTML.
Successivamente, eseguiamo l'autenticazione con Microsoft Entra e recuperiamo un token per chiamare l'API Power Platform . Se non hai completato la configurazione di Microsoft Entra, vedi Autenticazione - legacy.
In questa esercitazione utilizziamo un insieme di credenziali delle chiavi per archiviare il valore del segreto dell'entità servizio. In questo modo, un amministratore IT può rendere questo valore disponibile in modo sicuro per il tuo flusso di lavoro. Questo viene poi popolato nella chiamata POST per Microsoft Entra recuperare il token.
Esaminiamo quindi la risposta del token di Microsoft Entra in un oggetto tipizzato usando questo schema JSON nell'azione "Parse JSON":
{
"properties": {
"access_token": {
"type": "string"
},
"expires_in": {
"type": "integer"
},
"ext_expires_in": {
"type": "integer"
},
"token_type": {
"type": "string"
}
},
"type": "object"
}
Recuperare gli ambienti
In questa sezione recuperiamo l'elenco ambiente che amministri. Questa operazione può essere eseguita tramite l'API e PowerShell.
Chiamare l'endpoint Elenca ambienti
Ora è il momento di chiamare l'API di Power Platform. Utilizzare l'elenco degli ambienti endpoint per recuperare tutti i nostri ambienti e i relativi metadati, in particolare con il parametro $expand per la capacità. Questo utilizza anche l'intestazione dell'autorizzazione con il token di connessione ricevuto nella sezione precedente da Microsoft Entra ID. Se hai utilizzato il contesto nome utente/password, puoi inserire quel token di connessione anche in questo passaggio.
Quindi analizziamo l'API risposta in un oggetto tipizzato utilizzando questo schema JSON con l'azione 'Analizza JSON': Power Platform
{
"properties": {
"value": {
"items": {
"properties": {
"description": {
"type": "string"
},
"id": {
"type": "string"
},
"location": {
"type": "string"
},
"name": {
"type": "string"
},
"properties": {
"properties": {
"addons": {
"type": "array"
},
"azureRegion": {
"type": "string"
},
"capacity": {
"items": {
"properties": {
"actualConsumption": {
"type": "number"
},
"capacityType": {
"type": "string"
},
"capacityUnit": {
"type": "string"
},
"ratedConsumption": {
"type": "number"
},
"updatedOn": {
"type": "string"
}
},
"required": [
"capacityType",
"actualConsumption",
"ratedConsumption",
"capacityUnit",
"updatedOn"
],
"type": "object"
},
"type": "array"
},
"clientUris": {
"properties": {
"admin": {
"type": "string"
},
"maker": {
"type": "string"
}
},
"type": "object"
},
"cluster": {
"properties": {
"category": {
"type": "string"
},
"number": {
"type": "string"
}
},
"type": "object"
},
"connectedGroups": {
"type": "array"
},
"createdBy": {
"properties": {
"displayName": {
"type": "string"
},
"id": {
"type": "string"
},
"type": {
"type": "string"
}
},
"type": "object"
},
"createdTime": {
"type": "string"
},
"creationType": {
"type": "string"
},
"databaseType": {
"type": "string"
},
"displayName": {
"type": "string"
},
"environmentSku": {
"type": "string"
},
"isDefault": {
"type": "boolean"
},
"linkedEnvironmentMetadata": {
"properties": {
"backgroundOperationsState": {
"type": "string"
},
"baseLanguage": {
"type": "number"
},
"createdTime": {
"type": "string"
},
"domainName": {
"type": "string"
},
"friendlyName": {
"type": "string"
},
"instanceApiUrl": {
"type": "string"
},
"instanceState": {
"type": "string"
},
"instanceUrl": {
"type": "string"
},
"platformSku": {
"type": "string"
},
"resourceId": {
"type": "string"
},
"scaleGroup": {
"type": "string"
},
"uniqueName": {
"type": "string"
},
"version": {
"type": "string"
}
},
"type": "object"
},
"protectionStatus": {
"properties": {
"keyManagedBy": {
"type": "string"
}
},
"type": "object"
},
"provisioningState": {
"type": "string"
},
"retentionDetails": {
"properties": {
"backupsAvailableFromDateTime": {
"type": "string"
},
"retentionPeriod": {
"type": "string"
}
},
"type": "object"
},
"retentionPeriod": {
"type": "string"
},
"runtimeEndpoints": {
"properties": {
"microsoft.ApiManagement": {
"type": "string"
},
"microsoft.BusinessAppPlatform": {
"type": "string"
},
"microsoft.CommonDataModel": {
"type": "string"
},
"microsoft.Flow": {
"type": "string"
},
"microsoft.PowerApps": {
"type": "string"
},
"microsoft.PowerAppsAdvisor": {
"type": "string"
}
},
"type": "object"
},
"states": {
"properties": {
"management": {
"properties": {
"id": {
"type": "string"
}
},
"type": "object"
},
"runtime": {
"properties": {
"id": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"updateCadence": {
"properties": {
"id": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"id",
"type",
"location",
"name",
"properties"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
Eseguire l'iterazione dell'oggetto capacità
Questa è la parte più complessa dell'esercitazione. Qui utilizziamo un ciclo all'interno di un ciclo per iterare ogni ambiente nell'elenco ambiente risposta, e ogni ambiente ha un array di dettagli sulla capacità che iteriamo anch'essi. Ciò ci consente di acquisire le informazioni necessarie per ogni riga ambiente nella nostra tabella del report sulla capacità.
For-each e analisi
Procediamo per passaggi. Per prima cosa, utilizziamo un controllo For Each utilizzando il 'valore' dell'output Parse-List-Response:
Quindi analizziamo questo singolo ambiente in un oggetto tipizzato utilizzando questo schema JSON:
{
"properties": {
"description": {
"type": "string"
},
"id": {
"type": "string"
},
"location": {
"type": "string"
},
"name": {
"type": "string"
},
"properties": {
"properties": {
"addons": {
"type": "array"
},
"azureRegion": {
"type": "string"
},
"capacity": {
"items": {
"properties": {
"actualConsumption": {
"type": "number"
},
"capacityType": {
"type": "string"
},
"capacityUnit": {
"type": "string"
},
"ratedConsumption": {
"type": "number"
},
"updatedOn": {
"type": "string"
}
},
"required": [
"capacityType",
"actualConsumption",
"ratedConsumption",
"capacityUnit",
"updatedOn"
],
"type": "object"
},
"type": "array"
},
"clientUris": {
"properties": {
"admin": {
"type": "string"
},
"maker": {
"type": "string"
}
},
"type": "object"
},
"cluster": {
"properties": {
"number": {
"type": "string"
}
},
"type": "object"
},
"connectedGroups": {
"type": "array"
},
"createdBy": {
"properties": {
"displayName": {
"type": "string"
},
"id": {
"type": "string"
},
"type": {
"type": "string"
}
},
"type": "object"
},
"createdTime": {
"type": "string"
},
"creationType": {
"type": "string"
},
"databaseType": {
"type": "string"
},
"displayName": {
"type": "string"
},
"environmentSku": {
"type": "string"
},
"isDefault": {
"type": "boolean"
},
"linkedEnvironmentMetadata": {
"properties": {
"backgroundOperationsState": {
"type": "string"
},
"baseLanguage": {
"type": "integer"
},
"createdTime": {
"type": "string"
},
"domainName": {
"type": "string"
},
"friendlyName": {
"type": "string"
},
"instanceApiUrl": {
"type": "string"
},
"instanceState": {
"type": "string"
},
"instanceUrl": {
"type": "string"
},
"resourceId": {
"type": "string"
},
"scaleGroup": {
"type": "string"
},
"uniqueName": {
"type": "string"
},
"version": {
"type": "string"
}
},
"type": "object"
},
"protectionStatus": {
"properties": {
"keyManagedBy": {
"type": "string"
}
},
"type": "object"
},
"provisioningState": {
"type": "string"
},
"retentionDetails": {
"properties": {
"backupsAvailableFromDateTime": {
"type": "string"
},
"retentionPeriod": {
"type": "string"
}
},
"type": "object"
},
"retentionPeriod": {
"type": "string"
},
"runtimeEndpoints": {
"properties": {
"microsoft.ApiManagement": {
"type": "string"
},
"microsoft.BusinessAppPlatform": {
"type": "string"
},
"microsoft.CommonDataModel": {
"type": "string"
},
"microsoft.Flow": {
"type": "string"
},
"microsoft.PowerApps": {
"type": "string"
},
"microsoft.PowerAppsAdvisor": {
"type": "string"
}
},
"type": "object"
},
"states": {
"properties": {
"management": {
"properties": {
"id": {
"type": "string"
}
},
"type": "object"
},
"runtime": {
"properties": {
"id": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"updateCadence": {
"properties": {
"id": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"type": {
"type": "string"
}
},
"type": "object"
}
Successivamente utilizziamo un altro controllo For Each sfruttando la "capacità" dell'output Parse-CurrentItem. Quindi lo analizziamo in un oggetto tipizzato utilizzando questo schema JSON:
Ora possiamo usare il controllo Switch sulla proprietà CapacityType dall'output Parse-Capacity. Questo è il valore di 'Database', 'File' o 'Log'. In ogni caso di switch, acquisisci la proprietà "actualConsumption" correlata nella relativa variabile. Nel caso seguente, vediamo che stiamo catturando la capacità del database:
Come ultimo passaggio del ciclo "Per ogni ambiente", ora possiamo acquisire i dettagli dell'ambiente per questa riga nel report. Utilizzando il controllo Append to array variable, utilizza il seguente schema JSON:
{
"properties": {
"actualConsumption": {
"type": "number"
},
"capacityType": {
"type": "string"
},
"capacityUnit": {
"type": "string"
},
"ratedConsumption": {
"type": "number"
},
"updatedOn": {
"type": "string"
}
},
"type": "object"
}
Creare una tabella di report
Congratulazioni, ora sei arrivato alla parte facile. Ora che abbiamo la nostra matrice di capacità dell'ambiente completamente popolata e semplificata, possiamo visualizzarla in formato tabellare.
Uso del connettore Tabella HTML
Eseguendo l'app per la logica, ora possiamo vedere l'output del report della tabella HTML:
Il report può essere inviato tramite posta elettronica alle parti interessate in questo esempio per scopi di contabilità industriale oppure i dati possono essere salvati in un database per ulteriori analisi e tendenze storiche.