Compartir por


Tutorial: Crear un informe diario de capacidade

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:

Crea unha aplicación lóxica.

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:

Configura un disparador de recurrencia.

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.

Crea cinco variables.

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"
}

Analiza o  Microsoft Entra token resposta nun obxecto escrito.

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.

Use o punto final de Lista de ambientes para recuperar todos os ambientes e os seus metadatos.

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"
}

Analiza a Power Platform API resposta nun obxecto escrito.

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:

Use 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:

Para cada control usando a capacidade da saída Parse-CurrentItem.

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:

Use o control Cambiar na propiedade CapacityType da saída Parse-Capacity.

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"
}

Captura os detalles do entorno.

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

Pase o valor ao conector Crear táboa HTML.

Ao executar a aplicación lóxica, agora podemos ver a saída do informe da táboa HTML:

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.