Tutorial: Buat laporan kapasiti harian

API Power Platform boleh digunakan untuk mengekstrak pelbagai butiran dan metadata daripada persekitaran Microsoft Power Platform anda dengan atau tanpa pangkalan data Microsoft Dataverse. API digunakan secara dalaman oleh pelbagai klien yang tersedia hari ini seperti PowerShell.

Dalam tutorial ini, anda akan mengetahui tentang cara untuk:

  • Cipta Power Automate atau aliran kerja Logic Apps (Azure) atau skrip PowerShell yang mengesahkan dengan API Power Platform.
  • Hubungi titik tamat Senarai Persekitaran untuk mendapatkan kembali butiran persekitaran Microsoft Power Platform anda.
  • Ulang melalui objek kapasiti untuk mendapatkan kembali penggunaan sebenar.
  • Simpan data penggunaan dalam jadual untuk dipaparkan.

Sebagai contoh senario ini, pelanggan sedang mencari untuk mengendalikan penggunaan kapasiti mereka supaya mereka dapat memahami dengan lebih baik peruntukan jumlah kapasiti penyewa mereka mengikut jabatan. Ini membantu pelanggan melaksanakan beberapa fungsi perakaunan kos dalaman dan caj balik berdasarkan jumlah kapasiti yang tersedia oleh setiap jabatan. Pelanggan ini menggunakan Perihalan persekitaran untuk memanggil jabatan yang memiliki setiap persekitaran.

Persediaan sambung dan pemboleh ubah

Gunakan butiran berikut untuk disambungkan ke program Power Platform pengaturcaraan. Anda boleh memilih antara skrip pengalaman Azure atau PowerShell.

Cipta aliran kerja dan sediakan pemboleh ubah

Sebagai permulaan, dalam tutorial ini kami menggunakan aliran kerja Logic Apps. Aliran Power Automate juga boleh diterima dan mana-mana enjin pengaturan terperinci lain yang lebih suka digunakan oleh syarikat anda untuk automasi. Semua panggilan untuk mendapatkan semula data menggunakan API RESTful supaya sebarang alat yang menyokong REST berfungsi dengan tutorial ini.

Lawati portal Azure, dan kemudian cipta aplikasi logik baharu dan berikan ia nama:

Cipta aplikasi logik.

Selepas peruntukan itu selesai, edit aliran kerja menggunakan Pereka dan sediakan pencetus Ulangan untuk berjalan setiap hari:

Sediakan pencetus Pengulangan.

Seterusnya, kita perlu memulakan lima pembolehubah:

  • SPN-Id – Ini ialah prinsipal perkhidmatan anda, ClientID. Ia digunakan kemudian untuk melaksanakan pengesahan dalam konteks prinsipal perkhidmatan. Jika anda sedang menggunakan konteks nama pengguna/kata laluan, anda boleh melangkau pemboleh ubah ini.
  • DBCapacity – Ini ialah pembolehubah Float untuk kapasiti pangkalan data yang digunakan dalam megabait.
  • Kapasiti Fail– Ini ialah pembolehubah Float untuk kapasiti fail yang digunakan dalam megabait.
  • LogCapacity – Ini ialah pembolehubah Float untuk kapasiti log yang digunakan dalam megabait.
  • SimplifiedEnvironmentArray-Init – Ini ialah pembolehubah tatasusunan yang kami isi dengan beberapa sifat persekitaran. Ini memudahkan output laporan jadual HTML akhir secara mendadak.

Buat lima pembolehubah.

Seterusnya, kami mengesahkan dan Microsoft Entra mendapatkan semula token untuk memanggil Power Platform API. Jika anda belum melengkapkan persediaan anda Microsoft Entra , lihat Pengesahan - warisan.

Dalam tutorial ini, kita sedang menggunakan Key Vault untuk menyimpan nilai rahsia prinsipal perkhidmatan kita. Dengan cara ini, pentadbir IT boleh membuat nilai ini tersedia secara selamat untuk aliran kerja anda. Ini kemudiannya diisi dalam panggilan POST untuk Microsoft Entra mendapatkan semula token.

Kami kemudian menghuraikan Microsoft Entra respons token ke dalam objek yang ditaip menggunakan skema JSON ini dalam tindakan 'Parse JSON':

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

Huraikan Microsoft Entra respons token ke dalam objek yang ditaip.

Ambil persekitaran

Dalam bahagian ini, kami mengambil senarai persekitaran yang anda tadbir. Ini boleh dilakukan melalui API dan PowerShell.

Panggil titik tamat Persekitaran Senarai

Sekarang ialah masa untuk memanggil API Power Platform. Gunakan titik akhir Persekitaran Senarai untuk mendapatkan semula semua persekitaran kami dan metadatanya, khususnya dengan parameter $expand untuk kapasiti. Ini juga menggunakan pengepala Kebenaran dengan Token Pembawa yang kami terima dalam bahagian sebelumnya daripada Microsoft Entra ID. Jika anda menggunakan konteks nama pengguna/kata laluan, anda juga boleh memasukkan Token Pembawa tersebut pada langkah ini juga.

Gunakan titik akhir Persekitaran Senarai untuk mendapatkan semula semua persekitaran dan metadatanya.

Kami kemudian menghuraikan Power Platform respons API ke dalam objek yang ditaip menggunakan skema JSON ini dengan tindakan '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"
}

Huraikan Power Platform respons API ke dalam objek yang ditaip.

Ulang melalui objek Kapasiti

Ini ialah bahagian yang paling kompleks dalam tutorial. Di sini kita menggunakan gelung di dalam gelung untuk mengulangi setiap persekitaran dalam respons Persekitaran Senarai, dan setiap persekitaran mempunyai pelbagai butiran kapasiti yang kita ulangi juga. Ini membolehkan kami menangkap maklumat yang diperlukan untuk setiap baris persekitaran dalam jadual laporan kapasiti kami.

Untuk setiap dan penghuraian

Mari kita ambil langkah demi langkah. Pertama, kami menggunakan kawalan Untuk Setiap menggunakan 'nilai' output Parse-List-Response:

Gunakan kawalan Untuk Setiap menggunakan nilai output Parse-List-Response.

Kemudian kami menghuraikan persekitaran tunggal ini ke dalam objek yang ditaip menggunakan skema JSON ini:

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

Seterusnya, kami menggunakan kawalan Untuk Setiap yang lain menggunakan 'kapasiti' output Parse-CurrentItem. Kemudian kami menghuraikan ini ke dalam objek yang ditaip menggunakan skema JSON ini:

Untuk Setiap kawalan menggunakan kapasiti output Parse-CurrentItem.

Sekarang kami boleh menggunakan kawalan Tukar pada sifat CapacityType daripada output Parse-Capacity. Ini sama ada nilai 'Pangkalan Data', 'Fail' atau 'Log'. Di bawah setiap kes tukar, rekodkan sifat ‘actualConsumption’ yang berkaitan ke dalam pemboleh ubah yang berkaitan. Dalam kes berikut, anda melihat kami menangkap kapasiti Pangkalan Data:

Gunakan kawalan Suis pada sifat CapacityType daripada output Parse-Capacity.

Sebagai langkah terakhir dalam gelung ‘Untuk setiap persekitaran’, kami kini boleh merekodkan butiran persekitaran untuk baris ini dalam laporan. Menggunakan Tambah untuk mengawal pemboleh ubah tatasusunan, gunakan skema JSON berikut:

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

Tangkap butiran persekitaran.

Bina jadual laporan

Tahniah, anda kini telah sampai ke bahagian yang mudah! Kini, kita mempunyai susunan kapasiti persekitaran yang diisi dan dipermudahkan sepenuhnya dan kita boleh memaparkannya dalam format penjadual.

Gunakan penyambung Jadual HTML

Hantar nilai kepada penyambung Cipta jadual HTML.

Menjalankan aplikasi logik, kita kini boleh melihat output laporan jadual HTML:

Output laporan jadual HTML.

Laporan ini boleh dihantarkan e-mel kepada pemegang amanah secara alternatif dalam contoh ini untuk tujuan Perakaunan Kos atau data boleh disimpan ke dalam pangkalan data untuk analisis lanjut dan trend sejarah.