Nota
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba mendaftar masuk atau menukar direktori.
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba menukar direktori.
Gunakan ConnectToGit API dan DisconnectFromGit untuk menyepadukan persekitaran Microsoft Dataverse anda secara terprogram dengan kawalan sumber Git. Dengan menggunakan API ini, anda boleh menyambungkan penyelesaian individu atau keseluruhan persekitaran ke repositori Git yang disokong dan mengurus sambungan tersebut melalui kod.
Prasyarat
Sebelum menggunakan API ini, pastikan anda mempunyai:
- Akses kepada persekitaran Microsoft Dataverse
- Kebenaran pentadbir sistem
- Baca dan tulis akses kepada repositori Git
ConnectToGit API
Mencipta sambungan antara penyelesaian atau persekitaran Dataverse dan repositori Git. Dengan menggunakan sambungan ini, anda boleh mengurus kawalan sumber untuk komponen Dataverse anda.
Parameter
ConnectToGit API menerima parameter berikut:
| Parameter_ | Jenis | Diperlukan | Perihalan |
|---|---|---|---|
GitFolder |
String | Ya | Nama folder yang anda mahu ikat penyelesaian atau persekitaran anda. |
Branch |
String | Ya | Nama cawangan yang anda mahu sambungkan. |
ConnectionType |
Integer | Tidak | Menentukan perkara yang hendak disambungkan. Lihat parameter ConnectionType. |
GitProvider |
Integer | Tidak | Pembekal Git. Lihat parameter GitProvider. |
Organization |
String | Tidak | Nama organisasi yang anda mahu sambungkan. |
Project |
String | Tidak | Nama projek yang anda mahu sambungkan. |
Repository |
String | Tidak | Nama repositori yang anda mahu sambungkan. |
RootFolder |
String | Tidak | Nama folder akar di mana semua penyelesaian anda berada dalam skop penyelesaian. |
SolutionUniqueName |
String | Tidak | Nama unik penyelesaian yang anda ingin sambungkan ke git. |
UpstreamBranch |
String | Tidak | Nama cawangan huluan yang anda mahu sambungkan. Lalai kepada cawangan lalai repositori. |
GitHubConnectionId |
String | Tidak | ID Sambungan untuk sambungan Power Platform GitHub. Diperlukan bila GitProvider kecuali 1 anda menyediakan GitHubPAT. Tidak boleh digunakan apabila sokongan rangkaian maya (VNET) diaktifkan untuk persekitaran Dataverse. |
GitHubPAT |
String | Tidak | Token akses peribadi GitHub dengan akses ke repositori sasaran. Diperlukan bila GitProvider kecuali 1 anda menyediakan GitHubConnectionId. Diperlukan apabila sokongan rangkaian maya (VNET) diaktifkan untuk persekitaran Dataverse. |
GitHubAppConfigId |
String | Tidak | Rujukan kepada rekod konfigurasi Aplikasi GitHub. Diperlukan bila GitProvider .1 Gunakan format githubappconfigs(<recordId>). |
Parameter ConnectionType
Parameter mengawal ConnectionType sama ada untuk menyambung ke keseluruhan persekitaran Dataverse atau penyelesaian tertentu.
| Nilai | Label | Perihalan |
|---|---|---|
| 0 | Penyelesaian | Menyambungkan penyelesaian Dataverse tertentu ke Git. |
| 1 | Persekitaran | Menyambungkan keseluruhan persekitaran Dataverse ke Git. |
Parameter GitProvider
Gunakan GitProvider parameter untuk menentukan jenis pembekal Git yang anda gunakan, sama ada Azure DevOps atau GitHub.
| Nilai | Label | Perihalan |
|---|---|---|
| 0 | Azure DevOps | Gunakan untuk repositori yang dihoskan pada Azure DevOps |
| 1 | GitHub | Gunakan untuk repositori yang dihoskan pada GitHub |
API Putuskan Sambungan DariGit
Mengalih keluar sambungan Git daripada penyelesaian atau persekitaran Dataverse dan menyahdayakan penyepaduan kawalan sumber.
Parameter_
DisconnectFromGit API hanya mempunyai satu parameter.
| Parameter_ | Jenis | Diperlukan | Perihalan |
|---|---|---|---|
SolutionUniqueName |
String | Tidak | Nama unik penyelesaian yang anda mahu putuskan sambungan daripada Git. Jangan putuskan sambungan semua penyelesaian atau persekitaran. |
Maklumat tambahan
Berikut ialah beberapa pilihan nilai parameter untuk ditentukan semasa memanggil DisconnectFromGit.
-
Putuskan sambungan penyelesaian tunggal: Sediakan
SolutionUniqueNameuntuk memutuskan sambungan penyelesaian tertentu. - Putuskan sambungan semua penyelesaian: Sediakan tiada parameter untuk memutuskan sambungan semua sambungan peringkat penyelesaian.
- Putuskan sambungan persekitaran: Sediakan tiada parameter untuk memutuskan sambungan peringkat persekitaran.
Contoh
Contoh berikut menerangkan senario untuk menggunakan ConnectToGit API dan DisconnectFromGit :
- Sambungkan keseluruhan persekitaran Dataverse anda ke repositori Azure DevOps
- Sambung ke repositori GitHub
- Sambung ke repositori GitHub menggunakan PowerShell
- Putuskan sambungan keseluruhan persekitaran Dataverse anda daripada kawalan sumber Git
- Sambungkan penyelesaian pertama ke repositori Git
- Sambungkan penyelesaian tambahan ke repositori Git yang sama selepas anda menyambungkan penyelesaian awal
- Putuskan sambungan penyelesaian tertentu daripada kawalan sumber Git sambil memastikan penyelesaian lain disambungkan
Sambungkan keseluruhan persekitaran Dataverse anda ke repositori Azure DevOps
Sambungan ini membolehkan kawalan sumber untuk semua konfigurasi dan komponen peringkat persekitaran.
Jangan gunakan parameter ini dengan sambungan ini:
RootFolderSolutionUniqueNameUpstreamBranch
Contoh ini menunjukkan cara menggunakan tindakan ConnectToGit untuk menyambungkan keseluruhan persekitaran Dataverse anda ke repositori Azure DevOps.
Permintaan
POST [Organization URI]/api/data/v9.2/ConnectToGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"GitFolder": "yourGitfolderName",
"Branch": "yourBranchName",
"ConnectionType": 1,
"GitProvider": 0,
"Organization": "yourOrganizationName",
"Project": "yourProjectName",
"Repository": "yourRepositoryName"
}
Respons
HTTP/1.1 204 No Content
OData-Version: 4.0
Sambung ke repositori GitHub
Sebelum anda menggunakan API untuk menyambung ke GitHub, lengkapkan langkah persediaan untuk mencipta Aplikasi GitHub, pasangnya pada repositori sasaran, import kunci peribadinya ke Azure Key Vault, dan cipta sambungan Power Platform GitHub. Untuk maklumat lanjut, lihat Sambung ke GitHub.
Cipta rekod konfigurasi Aplikasi GitHub menggunakan Web API
Gunakan Dataverse OData Web API untuk mencipta githubappconfig rekod. Hantar permintaan POST dengan ID klien Aplikasi GitHub, URI Key Vault, dan nama kunci.
Anda boleh menggunakan mana-mana klien HTTP, seperti Insomnia, Visual Studio Code REST Client, atau curl, untuk membuat panggilan ini. Anda perlukan token pembawa untuk pengesahan. Untuk maklumat lanjut, lihat Gunakan API Web Microsoft Dataverse.
POST {{DataverseOrgUrl}}/api/data/v9.2/githubappconfigs
Authorization: Bearer {{token}}
Content-Type: application/json
{
"githubappid": "Iv23liBWoH9sf7xDrRe6",
"keyvaulturi": "{{KeyVaultUri}}",
"keyname": "demoGitHubKey"
}
Penting
Perhatikan ID rekod yang dikembalikan dalam pengepala respons. Anda memerlukan nilai ini untuk mengenal pasti identiti yang diurus, mengkonfigurasi RBAC, dan memanggil ConnectToGit. ID rekod menggunakan format seperti 13d565bb-4c22-f111-a546-7ced8d6e3e85.
Selepas mencipta rekod konfigurasi Aplikasi GitHub, tetapkan peranan Pengguna Kripto Key Vault kepada identiti terurus Dataverse seperti yang diterangkan dalam Konfigurasi kawalan akses berasaskan peranan Key Vault (RBAC).
Panggil API ConnectToGit
Selepas anda mencipta githubappconfig rekod dan mengkonfigurasi Key Vault RBAC, gunakan Dataverse Web API untuk mewujudkan sambungan kawalan sumber dengan memanggil tindakan tersebutConnectToGit.
POST {{DataverseOrgUrl}}/api/data/v9.2/ConnectToGit
Authorization: Bearer {{token}}
Content-Type: application/json
{
"GitProvider": 1,
"ConnectionType": 1,
"Organization": "YourGitHubOrg",
"Repository": "YourRepo",
"Project": "placeholder",
"Branch": "yourBranch",
"UpstreamBranch": "main",
"GitFolder": "YourFolder",
"GitHubConnectionId": "<connectionId>",
"GitHubAppConfigId": "githubappconfigs(<recordId>)"
}
Penting
Cawangan mesti sudah wujud dalam repositori. Cipta dahulu di GitHub jika perlu. Nilai mesti GitHubAppConfigId menggunakan format githubappconfigs(<recordId>).
Jika anda menerima respons yang berjaya, persekitaran akan disambungkan ke GitHub.
Sambung ke repositori GitHub menggunakan PowerShell
Contoh PowerShell berikut mencipta rekod konfigurasi GitHub App, menunggu identiti terurus Dataverse muncul dalam Microsoft Entra ID, menetapkan peranan Key Vault Crypto User kepada identiti yang diurus, dan memanggil tindakan tersebutConnectToGit. Jika anda sudah mempunyai rekod konfigurasi Aplikasi GitHub, pastikan GitHubAppConfigId untuk melangkau langkah penugasan peranan konfigurasi dan Key Vault.
Pasang dan import Az.Accountsmodul , Az.KeyVault, dan Az.Resources PowerShell sebelum anda menjalankan contoh tersebut. Log masuk menggunakan Connect-AzAccount akaun yang mempunyai akses ke persekitaran Dataverse dan kebenaran untuk menetapkan peranan Key Vault.
Jika sokongan rangkaian maya (VNET) diaktifkan untuk persekitaran Dataverse, sediakan GitHubPAT. Sambungan GitHub tidak boleh digunakan dengan sokongan rangkaian maya.
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$DataverseOrgUrl,
[Parameter(Mandatory)]
[string]$GitHubOrg,
[Parameter(Mandatory)]
[string]$GitHubRepo,
[Parameter(Mandatory)]
[string]$Branch,
[Parameter(Mandatory)]
[string]$GitFolder,
[string]$GitHubAppClientId,
[string]$KeyVaultName,
[string]$KeyVaultKeyName,
[string]$GitHubAppConfigId,
[string]$GitHubConnectionId,
[string]$GitHubPAT,
[ValidateSet(0, 1)]
[int]$ConnectionType = 1,
[string]$UpstreamBranch,
[string]$RootFolder,
[string]$SolutionUniqueName
)
Set-StrictMode -Version 3.0
$ErrorActionPreference = "Stop"
if (($GitHubConnectionId -and $GitHubPAT) -or (-not $GitHubConnectionId -and -not $GitHubPAT)) {
throw "Specify either -GitHubConnectionId or -GitHubPAT, but not both."
}
if (-not $GitHubAppConfigId) {
foreach ($name in @('GitHubAppClientId', 'KeyVaultName', 'KeyVaultKeyName')) {
if ([string]::IsNullOrWhiteSpace((Get-Variable -Name $name -ValueOnly))) {
throw "Specify -$name when -GitHubAppConfigId is not provided."
}
}
}
$dataverseResource = $DataverseOrgUrl.TrimEnd('/')
$tokenResult = Get-AzAccessToken -ResourceUrl $dataverseResource -AsSecureString
$dataverseToken = [System.Net.NetworkCredential]::new('', $tokenResult.Token).Password
function Invoke-DataverseApi {
param(
[Parameter(Mandatory)]
[string]$Method,
[Parameter(Mandatory)]
[string]$Endpoint,
[object]$Body,
[switch]$ReturnHeaders
)
$headers = @{
Authorization = "Bearer $dataverseToken"
"OData-MaxVersion" = "4.0"
"OData-Version" = "4.0"
}
$request = @{
Method = $Method
Uri = "$dataverseResource/api/data/v9.2/$Endpoint"
Headers = $headers
ContentType = "application/json; charset=utf-8"
}
if ($Body) {
$request.Body = $Body | ConvertTo-Json -Depth 10
}
if ($ReturnHeaders) {
return (Invoke-WebRequest @request).Headers
}
Invoke-RestMethod @request
}
$appConfigRecordId = $GitHubAppConfigId
if (-not $appConfigRecordId) {
$keyVault = Get-AzKeyVault -VaultName $KeyVaultName
$keyVaultUri = 'https://' + $KeyVaultName + '.vault.azure.net/'
$appConfigBody = @{
githubappid = $GitHubAppClientId
keyvaulturi = $keyVaultUri
keyname = $KeyVaultKeyName
}
$responseHeaders = Invoke-DataverseApi `
-Method POST `
-Endpoint "githubappconfigs" `
-Body $appConfigBody `
-ReturnHeaders
$entityIdHeader = [string]$responseHeaders["OData-EntityId"]
if ($entityIdHeader -notmatch '\(([0-9a-f-]+)\)') {
throw "Could not read the GitHub App configuration record ID from the Dataverse response."
}
$appConfigRecordId = $Matches[1]
$managedIdentityName = "PPMI-githubappconfigmanagedidentity-$appConfigRecordId"
$servicePrincipal = $null
for ($attempt = 1; $attempt -le 60; $attempt++) {
$servicePrincipal = Get-AzADServicePrincipal -DisplayName $managedIdentityName -ErrorAction SilentlyContinue
if ($servicePrincipal) {
break
}
Start-Sleep -Seconds 1
}
if (-not $servicePrincipal) {
throw "The Dataverse managed identity was not found in Microsoft Entra ID. Check Dataverse System Jobs for GitHub App configuration errors."
}
$keyVaultScope = $keyVault.ResourceId
if (-not $keyVaultScope) {
$subscriptionId = (Get-AzContext).Subscription.Id
$keyVaultScope = "/subscriptions/$subscriptionId/resourceGroups/$($keyVault.ResourceGroupName)/providers/Microsoft.KeyVault/vaults/$KeyVaultName"
}
$keyVaultCryptoUserRoleId = "12338af0-0e69-4776-bea7-57ae8d297424"
$existingAssignment = Get-AzRoleAssignment `
-ObjectId $servicePrincipal.Id `
-RoleDefinitionId $keyVaultCryptoUserRoleId `
-Scope $keyVaultScope `
-ErrorAction SilentlyContinue
if (-not $existingAssignment) {
New-AzRoleAssignment `
-ObjectId $servicePrincipal.Id `
-RoleDefinitionId $keyVaultCryptoUserRoleId `
-Scope $keyVaultScope | Out-Null
}
}
$connectBody = @{
GitProvider = 1
ConnectionType = $ConnectionType
Organization = $GitHubOrg
Repository = $GitHubRepo
Project = "placeholder"
Branch = $Branch
GitFolder = $GitFolder
GitHubAppConfigId = "githubappconfigs($appConfigRecordId)"
}
if ($GitHubConnectionId) { $connectBody.GitHubConnectionId = $GitHubConnectionId }
if ($GitHubPAT) { $connectBody.GitHubPAT = $GitHubPAT }
if ($UpstreamBranch) { $connectBody.UpstreamBranch = $UpstreamBranch }
if ($RootFolder) { $connectBody.RootFolder = $RootFolder }
if ($SolutionUniqueName) { $connectBody.SolutionUniqueName = $SolutionUniqueName }
Invoke-DataverseApi -Method POST -Endpoint "ConnectToGit" -Body $connectBody
Write-Host "Connected Dataverse Git integration to GitHub."
Putuskan sambungan keseluruhan persekitaran Dataverse anda daripada kawalan sumber Git
Tindakan ini mengalih keluar sambungan Git peringkat persekitaran. Jangan gunakan SolutionUniqueName parameter untuk operasi ini. Dataverse secara automatik mengenal pasti dan mengalih keluar sambungan Git peringkat persekitaran.
Contoh ini menunjukkan cara menggunakan tindakan DisconnectFromGit untuk memutuskan sambungan keseluruhan persekitaran Dataverse anda daripada kawalan sumber Git.
Permintaan
POST [Organization URI]/api/data/v9.2/DisconnectFromGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Respons
HTTP/1.1 204 No Content
OData-Version: 4.0
Sambungkan penyelesaian pertama ke repositori Git
Sambungan ini mewujudkan pautan repositori dan struktur folder untuk kawalan sumber peringkat penyelesaian kepada penyelesaian pertama dalam persekitaran.
Anda perlu memasukkan nilai untuk parameter ini untuk menentukan penyelesaian:
RootFolderSolutionUniqueName
Contoh ini menunjukkan cara menggunakan tindakan ConnectToGit untuk menyambungkan penyelesaian pertama ke repositori Git.
Permintaan
POST [Organization URI]/api/data/v9.2/ConnectToGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"GitFolder": "yourGitfolderName",
"Branch": "yourBranchName",
"ConnectionType": 1,
"GitProvider": 0,
"Organization": "yourOrganizationName",
"Project": "yourProjectName",
"Repository": "yourRepositoryName",
"RootFolder": "yourRootFolderName",
"SolutionUniqueName": "yourSolutionUniqueName"
}
Respons
HTTP/1.1 204 No Content
OData-Version: 4.0
Sambungkan penyelesaian tambahan ke repositori Git yang sama selepas anda menyambungkan penyelesaian awal
Selepas anda menyambungkan penyelesaian pertama, anda hanya memerlukan parameter khusus penyelesaian. Anda mewarisi butiran sambungan repositori daripada sambungan awal.
Tetapkan parameter ini sahaja:
SolutionUniqueNameBranchGitFolder
Penting
Anda mesti menyambungkan penyelesaian pertama terlebih dahulu sebelum ini berfungsi. Lihat Sambungkan penyelesaian pertama ke repositori Git.
Contoh ini menunjukkan cara menggunakan tindakan ConnectToGit untuk menyambungkan penyelesaian berikutnya ke repositori Git.
Permintaan
POST [Organization URI]/api/data/v9.2/ConnectToGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"GitFolder": "yourGitfolderName",
"Branch": "yourBranchName",
"SolutionUniqueName": "yourSolutionUniqueName"
}
Respons
HTTP/1.1 204 No Content
OData-Version: 4.0
Putuskan sambungan penyelesaian tertentu daripada kawalan sumber Git sambil memastikan penyelesaian lain disambungkan
Gunakan pendekatan ini untuk mengalih keluar kawalan sumber bagi satu penyelesaian tanpa menjejaskan yang lain.
Contoh ini menunjukkan cara menggunakan tindakan DisconnectFromGit untuk mengalih keluar kawalan sumber untuk satu penyelesaian tanpa menjejaskan yang lain.
Permintaan
POST [Organization URI]/api/data/v9.2/DisconnectFromGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"SolutionUniqueName": "yourSolutionUniqueName"
}
Respons
HTTP/1.1 204 No Content
OData-Version: 4.0
Pengendalian ralat
API mahupun ConnectToGitDisconnectFromGit tidak mengembalikan nilai apabila ia berjaya diselesaikan. Apabila API gagal, ia mengembalikan ralat.
Senario ralat biasa termasuk:
- Kelayakan tidak sah: Pastikan anda mempunyai pengesahan yang sah kepada pembekal Git.
- Repositori tidak dijumpai: Sahkan nama organisasi, projek dan repositori.
- Kebenaran ditolak: Pastikan akaun Dataverse anda mempunyai keizinan pengurusan kawalan sumber.
-
Penyelesaian tidak dijumpai: Sahkan kewujudan
SolutionUniqueNamedalam persekitaran anda. - Cawangan tidak wujud: Sahkan cawangan yang ditentukan wujud dalam repositori.
Sokongan dan sumber tambahan
Untuk maklumat lanjut tentang penyepaduan kawalan sumber dengan Dataverse, lihat: