Podeli preko


Uputstvo: Pravljenje izveštaja o dnevnom kapacitetu

Power Platform API se može koristiti za izdvajanje različitih detalja i metapodataka iz vašeg Microsoft Power Platform okruženja, za ona koja koriste Microsoft Dataverse bazu podataka i za ona koja je ne koriste. API interno koriste razni klijenti koji su danas dostupni, kao što je PowerShell.

U ovom uputstvu, saznaćete kako da uradite sledeće:

  • Kreirajte Power Automate ili Logic Apps tok posla (Azure) ili PowerShell skriptu koja obavlja potvrdu identiteta u Power Platform API-ju.
  • Pozovite krajnju tačku okruženja sa liste da biste preuzeli Microsoft Power Platform detalje o okruženju.
  • Pređite kroz objekt kapaciteta da biste pronašli stvarnu potrošnju.
  • Sačuvajte podatke o potrošnji u tabeli za prikaz.

Kao primer ovog scenarija, klijent želi da se snađe u potrošnji svojih kapaciteta kako bi mogao bolje da razume raspodelu svog ukupnog stanarskog kapaciteta po odeljenjima. Ovo pomaže klijentu da izvrši neke interne funkcije računovodstva troškova i naplatu na osnovu toga koliko svako odeljenje troši od ukupnog raspoloživog kapaciteta. Ovaj klijent koristi Opis okruženja da pozove odeljenje koje poseduje svako okruženje.

Podešavanje povezivanja i promenljivih

Koristite sledeće detalje o povezivanju sa Power Platform programski. Možete birati između Azure iskustva ili PowerShell skripti.

Kreirajte tok posla i podesite promenljive

Za početak, u ovom vodiču koristimo Logic Apps tok posla. Power Automate tok je takođe prihvatljiv, kao i bilo koji drugi mehanizam za orkestraciju koji vaša kompanija radije koristi za automatizaciju. Svi pozivi za preuzimanje podataka koriste RESTful API-je, tako da svaki alat koji podržava REST radi sa ovim vodičem.

Posetite Azure portal, a zatim kreirajte novu logičku aplikaciju i dajte joj ime:

Kreirajte logičku aplikaciju.

Nakon što se završi obezbeđivanje, uredite tok posla pomoću Dizajnera i postavite okidač za ponavljanje koji će se svakodnevno izvoditi:

Podesite okidač za ponavljanje.

Zatim, moramo da inicijalizujemo pet varijabli:

  • SPN-Id – Ovo je vaš glavni servis ClientID. Kasnije se koristi za obavljanje autentifikacije u kontekstu glavnog servisa. Ako koristite kontekst korisničkog imena/lozinke, ovu promenljivu možete preskočiti.
  • DBCapacity – Ovo je Float promenljiva za potrošeni kapacitet baze podataka u megabajtima.
  • FileCapacity – Ovo je Float promenljiva za potrošeni kapacitet datoteke u megabajtima.
  • LogCapacity – Ovo je Float promenljiva za potrošeni kapacitet dnevnika u megabajtima.
  • SimplifiedEnvironmentArray-Init – Ovo je promenljiva niza koju popunjavamo sa nekoliko svojstava okruženja. Ovo drastično pojednostavljuje konačni izlaz izveštaja HTML tabele.

Kreirajte pet varijabli.

Zatim potvrđujemo autentičnost i Microsoft Entra preuzimamo token za pozivanje API-ja Power Platform . Ako niste završili Microsoft Entra podešavanje, pogledajte Autentikacija - nasleđe.

U ovom uputstvu koristimo bezbedno skladište za ključ za čuvanje tajne vrednosti principala usluge. Na taj način, IT administrator može ovu vrednost učiniti sigurno dostupnom za vaš tok posla. Ovo se zatim popunjava u POST pozivu da Microsoft Entra preuzme token.

Zatim analiziramo Microsoft Entra odgovor tokena u tipizovani objekat koristeći ovu JSON šemu u akciji "Parse JSON":

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

Analizirajte Microsoft Entra odgovor tokena u otkucani objekat.

Preuzimanje okruženja

U ovom odeljku preuzimamo listu okruženja koju administrirate. To se može uraditi putem API-ja i PowerShell skripte.

Pozovite krajnju tačku okruženja liste

Sada je vreme da pozovete Power Platform API. Koristite krajnja tačka Lista okruženja da biste preuzeli sva naša okruženja i njihove metapodatke, posebno sa parametrom $expand za kapacitet. Ovo takođe koristi zaglavlje autorizacije sa tokenom nosioca koji smo dobili u prethodnom odeljku od ID-a Microsoft Entra . Ako ste koristili kontekst korisničkog imena / lozinke, u ovom koraku takođe možete da unesete taj token nosioca.

Koristite krajnja tačka Lista okruženja da biste preuzeli sva okruženja i njihove metapodatke.

Zatim analiziramo Power Platform API odgovor u upisani objekat koristeći ovu JSON šemu sa akcijom "Parse 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"
}

Analizirajte Power Platform API odgovor u otkucani objekat.

Pređite kroz objekat kapaciteta

Ovo je najsloženiji deo ovog vodiča. Ovde koristimo petlju unutar petlje za ponavljanje svakog okruženja u odgovor na listu okruženja, a svako okruženje ima niz detalja o kapacitetu koje takođe ponavljamo. To nam omogućava da uhvatimo potrebne informacije za svaki red okruženja u našoj tabeli izveštaja o kapacitetu.

Klauzula For-each i raščlanjavanje

Idemo ovo korak po korak. Prvo, koristimo Za svaku kontrolu koristeći 'vrednost' izlaza Parse-List-Response:

Koristite Za svaku kontrolu koristeći vrednost izlaza Parse-List-Response.

Zatim analiziramo ovo pojedinačno okruženje u otkucani objekat koristeći ovu JSON šemu:

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

Zatim, koristimo još jednu Za svaku kontrolu koristeći 'kapacitet' izlaza Parse-CurrentItem. Zatim ovo analiziramo u otkucani objekat koristeći ovu JSON šemu:

Za svaku kontrolu koristeći kapacitet Parse-CurrentItem izlaza.

Sada možemo koristiti kontrolu Switch na svojstvu CapacityType iz izlaza Parse-Capacity. Ovo je ili vrednost 'Baza podataka', 'Datoteka', ili 'Dnevnik'. Ispod svakog slučaja prekidača zabeležite povezano svojstvo „actualConsumption“ u povezanu promenljivu. U sledećem slučaju, vidite da hvatamo kapacitet baze podataka:

Koristite kontrolu Svitch na svojstvu CapacityType iz izlaza Parse-Capacity.

Kao poslednji korak u petlji „Za svako okruženje“, sada možemo da uhvatimo detalje o okruženju za ovaj red u izveštaju. Koristeći kontrolu promenljive Priloži nizu, koristite sledeću JSON šemu:

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

Snimite detalje okruženja.

Izrada tabele izveštaja

Čestitamo, sada ste prešli na lakši deo! Sada kada imamo naš potpuno popunjen i pojednostavljen niz kapaciteta okruženja, možemo ga prikazati u tabelarnom formatu.

Korišćenje konektora HTML tabele

Pronesite vrednost na Kreirajte konektor HTML tabele.

Pokrećući logičku aplikaciju, sada možemo videti izlaz izveštaja HTML tabele:

Izlaz izveštaja HTML tabele.

Izveštaj se može opcionalno poslati zainteresovanim stranama u ovom primeru radi obračuna troškova ili se podaci mogu sačuvati u bazi podataka za dalju analizu i istorijske trendove.