Del via


Opplæring: Opprette en daglig kapasitetsrapport

Power Platform-API-en kan brukes til å trekke ut ulike detaljer og metadata fra Microsoft Power Platform-miljøene med eller uten en Microsoft Dataverse-database. API-en brukes internt av ulike klienter som er tilgjengelige i dag, for eksempel PowerShell.

I denne opplæringen lærer du hvordan du kan gjøre følgende:

  • Opprett en Power Automate- eller Logic Apps-arbeidsflyt (Azure) eller et PowerShell-skript som autentiserer med Power Platform-API-en.
  • Kall opp listemiljøenes endepunkt for å hente Microsoft Power Platform-miljødetaljene.
  • Gå gjennom kapasitetsobjektet for å hente det faktiske forbruket.
  • Lagre forbruksdataene i en tabell for visning.

Som et eksempel på dette scenarioet er en kunde ute etter å få oversikt over kapasitetsbruken, slik at de bedre kan forstå tildeling av total leierkapasitet etter avdeling. Dette hjelper kunden med å utføre noen interne kostnadsregnskapsfunksjoner og tilbakeføringer basert på hvor mye hver avdeling bruker av den totale tilgjengelige kapasiteten. Denne kunden bruker miljøbeskrivelsen for avdelingen som eier hvert miljø.

Konfigurasjon av forbindelse og variabel

Bruk følgende detaljer for å koble til Power Platform programmatisk. Du kan velge mellom en Azure eller PowerShell skript.

Opprette arbeidsflyten og konfigurere variablene

Til å begynne med bruker vi i denne opplæringen en Logic Apps arbeidsflyt. En Power Automate-flyt er også akseptabel, i tillegg til eventuelle andre iverksettingsmotorer selskapet foretrekker å bruke til automatisering. Alle kallene for å hente dataene bruker RESTful APIer, så alle verktøy som støtter REST fungerer med denne opplæringen.

Gå til Azure-portalen, og opprett deretter en ny logikkapp og gi den et navn:

Opprette en logisk app.

Når klargjøringen er fullført, redigerer du arbeidsflyten ved hjelp av utformingsverktøyet og konfigurerer en gjentakelsesutløser til å kjøre daglig:

Konfigurere en gjentakelsesutløser.

Deretter må vi initialisere fem variabler:

  • SPN-ID – Dette er klient-ID-en for tjenestekontohaveren. Den brukes senere til å utføre godkjenningen i en tjenestekontohaverkontekst. Hvis du bruker en kontekst med brukernavn/passord, kan du hoppe over denne variabelen.
  • DBCapacity – Dette er en Float-variabel for den forbrukte databasekapasiteten i megabyte.
  • FileCapacity – Dette er en Float-variabel for den forbrukte filkapasiteten i megabyte.
  • LogCapacity – Dette er en flytvariabel for den forbrukte loggkapasiteten i megabyte.
  • SimplifiedEnvironmentArray-Init – Dette er en matrisevariabel som vi fyller ut med noen få miljøegenskaper. Dette fører til en drastisk forenkling av de endelige utdataene i HTML-tabellrapporten.

Opprett fem variabler.

Deretter godkjenner vi med Microsoft Entra og henter et token for å kalle API-en Power Platform . Hvis du ikke har fullført konfigurasjonen av Microsoft Entra, kan du se Autentisering – eldre.

I denne opplæringen bruker vi et nøkkelhvelv til å lagre den hemmelige verdien for tjenestekontohaveren. På denne måten kan en IT-administrator gjøre denne verdien tilgjengelig for arbeidsflyten på en trygg måte. Dette fylles deretter ut i POST-kallet til for Microsoft Entra å hente tokenet.

Vi analyserer deretter Microsoft Entra-tokensvaret til et typet objekt ved hjelp av dette JSON-skjemaet i handlingen Analyser JSON:

{
    "properties": {
        "access_token": {
            "type": "string"
        },
        "expires_in": {
            "type": "integer"
        },
        "ext_expires_in": {
            "type": "integer"
        },
        "token_type": {
            "type": "string"
        }
    },
    "type": "object"
}

Analyser Microsoft Entra token-svaret i et skrevet objekt.

Hente miljøer

I denne delen henter vi miljølisten du administrerer. Dette kan gjøres både via API og PowerShell.

Kalle opp endepunktet for visning av miljøer

Nå er det på tide å kalle opp Power Platform-API-en. Bruk endepunkt Listemiljøer til å hente alle miljøene våre og metadataene deres, spesielt med $expand-parameteren for kapasitet. Dette bruker også autorisasjonshodet med bærerpolletten vi mottok i forrige del fra Microsoft Entra ID. Hvis du brukte konteksten for brukernavn/passord, kan du også angi dette bæretokenet på dette trinnet også.

Bruk listemiljøendepunkt til å hente alle miljøer og deres metadata.

Deretter analyserer vi API-svaret Power Platform i et skrevet objekt ved hjelp av dette JSON-skjemaet med handlingen «Analyser 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"
}

Analyser Power Platform API-svaret i et skrevet objekt.

Gå gjennom Kapasitet-objektet

Dette er den mest komplekse delen av opplæringen. Her bruker vi en løkke i en løkke til å iterere hvert miljø i Listemiljø-svaret, og hvert miljø har en rekke kapasitetsdetaljer som vi også itererer. Dette gjør det mulig for oss å registrere nødvendig informasjon for hver miljørad i kapasitetsrapporttabellen.

For each og analyse

La oss gå trinnvis gjennom dette. Først bruker vi en For Each-kontroll ved å bruke 'verdien' til Parse-List-Response-utdataene:

Bruk et For Each-kontrollelement som bruker verdien i Parse-List-Response-utdataene.

Deretter analyserer vi dette ene miljøet til et typet objekt ved hjelp av dette JSON-skjemaet:

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

Deretter bruker vi en annen For Each-kontroll ved å bruke 'kapasiteten' til Parse-CurrentItem-utgangen. Deretter analyserer vi dette til et skrevet objekt ved hjelp av dette JSON-skjemaet:

For Each-kontrollelement som bruker

Nå kan vi bruke Switch-kontrollen på CapacityType-egenskapen fra Parse-Capacity-utdataene. Dette er enten verdien av 'Database', 'Fil' eller 'Logg'. Under hver enkelt Switch-sak henter du den relaterte egenskapen 'actualConsumption' til den relaterte variabelen. I følgende tilfelle ser du at vi registrerer databasekapasitet:

Bruk Switch-kontrollen på CapacityType-egenskapen fra Parse-Capacity-utdataene.

Som det siste trinnet i sløyfen "For hvert miljø" kan vi nå fange opp miljødetaljene for denne raden i rapporten. Bruk følgende JSON-skjema ved hjelp av kontrollelementet Tilføy i matrisevariabel:

{
    "properties": {
        "actualConsumption": {
            "type": "number"
        },
        "capacityType": {
            "type": "string"
        },
        "capacityUnit": {
            "type": "string"
        },
        "ratedConsumption": {
            "type": "number"
        },
        "updatedOn": {
            "type": "string"
        }
    },
    "type": "object"
}

Hent miljødetaljene.

Opprette rapporttabell

Gratulerer, du har nå kommet til den enkle delen! Nå som vi har en fullstendig utfylt og forenklet miljøkapasitetsmatrise, kan vi vise den i tabellformat.

Bruke HTML-tabellkoblingen

Send verdi til koblingen Opprett HTML-tabell.

Når logikkappen kjøres, kan vi nå se utdataene fra HTML-tabellrapporten:

Utdata for HTML-tabellrapporten.

Rapporten kan eventuelt sendes via e-post til interessenter, i dette eksemplet med henblikk på kostnadsregnskap, eller dataene kan lagres i en database for videre analyse og historisk trend.