Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
A API de Power Platform pódese usar para extraer os distintos detalles e metadatos dos seus ambientes de Microsoft Power Platform, con ou sen unha base de datos de Microsoft Dataverse. A API é usada internamente por varios clientes dispoñibles hoxe, como PowerShell.
Neste titorial aprenderá a:
- Cree un Power Automate ou un fluxo de traballo de Logic Apps (Azure) ou script de PowerShell que se autentica coa API de Power Platform.
- Chame o extremo de enumeración de ambientes para recuperar os detalles do contorno de Microsoft Power Platform.
- Repita a través do obxecto de capacidade para recuperar o consumo real.
- Garde os datos de consumo nunha táboa para a súa visualización.
Como exemplo deste escenario, un cliente está a buscar un control sobre o seu consumo de capacidade para poder entender mellor a asignación da súa capacidade total de arrendatario por departamento. Isto axuda ao cliente a realizar algunhas funcións de contabilidade de custos internos e devolucións de cargos en función da cantidade que consume cada departamento da capacidade total dispoñible. Este cliente está a usar a Descrición do ambiente para chamar ao departamento propietario de cada contorno.
Conexión e configuración variable
Use os seguintes detalles para conectarse ao Power Platform de forma programática. Podes escoller entre unha experiencia Azure ou scripts PowerShell.
Crear o fluxo de traballo e configurar as variables
Para comezar, neste tutorial usamos un fluxo de traballo Logic Apps. Un fluxo de Power Automate tamén é aceptable, e calquera outro motor de orquestación que a súa empresa prefira usar para a automatización. Todas as chamadas para recuperar os datos usan API RESTful, polo que calquera ferramenta que admita REST funcione con este tutorial.
Visite o portal de Azure e logo cree unha nova aplicación lóxica e déalle un nome:
Despois de rematar o aprovisionamento, edite o fluxo de traballo usando o Deseñador e configure un disparador de repetición para que se execute diariamente:
A continuación, necesitamos inicializar cinco variables:
- SPN-Id : este é o ID de cliente principal do teu servizo. Úsase máis tarde para realizar a autenticación nun contexto principal de servizo. Se está a usar o contexto de nome de usuario/contrasinal, pode omitir esta variable.
- DBCapacity – Esta é unha variable Float para a capacidade de base de datos consumida en megabytes.
- FileCapacity – Esta é unha variable Float para a capacidade de ficheiro consumida en megabytes.
- LogCapacity – Esta é unha variable Float para a capacidade de rexistro consumida en megabytes.
- SimplifiedEnvironmentArray-Init – Esta é unha variable de matriz que enchemos con algunhas propiedades do contorno. Isto simplifica drasticamente a saída do informe final da táboa HTML.
A continuación, autenticámonos con Microsoft Entra e recuperamos un token para chamar á Power Platform API. Se non completaches a túa Microsoft Entra configuración, consulta Autenticación: herdado.
Neste titorial, estamos a usar un almacén de claves para almacenar o valor secreto da entidade de servizo. Deste xeito, un administrador de TI pode facer que este valor estea dispoñible de xeito seguro para o seu fluxo de traballo. Despois enchégase na chamada POST a Microsoft Entra para recuperar o token.
Despois analizamos o Microsoft Entra token resposta nun obxecto escrito usando este esquema JSON na acción "Analizar JSON":
{
"properties": {
"access_token": {
"type": "string"
},
"expires_in": {
"type": "integer"
},
"ext_expires_in": {
"type": "integer"
},
"token_type": {
"type": "string"
}
},
"type": "object"
}
Obter ambientes
Nesta sección, buscamos a lista de ambientes que administras. Isto pódese facer a través da API e de PowerShell.
Chamar o extremo de enumeración de ambientes
Agora é o momento de chamar a API de Power Platform. Use o punto final de List Environments para recuperar todos os nosos ambientes e os seus metadatos, concretamente co parámetro $expand para a capacidade. Isto tamén usa a cabeceira de autorización co token de portador que recibimos na sección anterior de Microsoft Entra ID. Se usou o contexto de nome de usuario/contrasinal, tamén pode introducir ese token de portador neste paso.
Despois analizamos a Power Platform API resposta nun obxecto escrito usando este esquema JSON coa acción "Analizar JSON":
{
"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"
}
Iterar a través do obxecto de capacidade
Esta é a parte máis complexa do titorial. Aquí usamos un bucle dentro dun bucle para iterar cada ambiente no entorno de lista resposta, e cada ambiente ten unha serie de detalles de capacidade que tamén iteramos. Isto permítenos capturar a información necesaria para cada fila do contorno na nosa táboa de informe de capacidade.
Para cada un e análise
Imos facelo paso a paso. En primeiro lugar, usamos un control For Each usando o "valor" da saída Parse-List-Response:
Despois analizamos este único ambiente nun obxecto escrito usando este esquema 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"
}
A continuación, usamos outro control For Each usando a 'capacidade' da saída Parse-CurrentItem. Despois analizamos isto nun obxecto escrito usando este esquema JSON:
Agora podemos usar o control Switch na propiedade CapacityType desde a saída Parse-Capacity. Este é o valor de "Base de datos", "Ficheiro" ou "Rexistro". En cada caso de Switch, capture a propiedade "actualConsumption" relacionada na variable relacionada. No seguinte caso, ves que estamos capturando a capacidade da base de datos:
Como último paso do bucle "Para cada contorno", agora podemos capturar os detalles do contorno desta fila do informe. Usando o control da variable Anexar á matriz, use o seguinte esquema JSON:
{
"properties": {
"actualConsumption": {
"type": "number"
},
"capacityType": {
"type": "string"
},
"capacityUnit": {
"type": "string"
},
"ratedConsumption": {
"type": "number"
},
"updatedOn": {
"type": "string"
}
},
"type": "object"
}
Construír a táboa de informes
Parabéns, agora chegou á parte máis sinxela. Agora que temos a nosa matriz de capacidade do contorno totalmente poboada e simplificada, podemos mostrala en formato tabular.
Use o conector de táboa HTML
Ao executar a aplicación lóxica, agora podemos ver a saída do informe da táboa HTML:
O informe podería opcionalmente enviarse por correo electrónico ás partes interesadas neste exemplo para fins de contabilidade de custos, ou os datos poderían gardarse nunha base de datos para posteriores análises e tendencias históricas.