Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Vigtigt!
- Dette er en produktionsklar prøveversionsfunktion.
- Produktionsklare forhåndsversioner er underlagt supplerende vilkår for anvendelse.
Gælder for Dynamics 365 Project Operations integreret med ERP og Dynamics 365 Project Operations til produktion
Udgiftsagenten samler funktioner fra Microsoft Dynamics 365 Project Operations-, programmer til finans og drift, Microsoft Copilot Studio, Power Automate og Dataverse for at automatisere arbejdsprocesser til udgiftsbehandling ved hjælp af AI. Funktionen hjælper med at spare tid og reducere den manuelle indsats ved at gøre det muligt for dit system at behandle kvitteringer og generere udgiftslinjer og udgiftsrapporter for brugerne. Den bruger Microsoft Power Platform-connectorer til integration med Outlook, Microsoft Teams, brugerkalendere og miljøet med programmer til finans og drift via virtuelle Dataverse-objekter.
Udgiftsagenten indeholder flere flow, hvoraf tre fungerer som kerneorganiseringsfunktioner:
- Behandl mails – Dette flow scanner en konfigureret postkassemappe hver time og gemmer de vedhæftede filer som ikke-tilknyttede kvitteringer i Dynamics 365 Finance.
- Udtræk kvitterings-id'er – Dette flow henter ikke-vedhæftede kvitteringer og udløser agenten til at udtrække kvitteringsoplysninger og oprette en ikke-tilknyttet udgiftslinje.
- Behandl udgiftsrapport – Dette flow konverterer ikke-tilknyttede udgiftslinjer og genererer udgiftsrapporter baseret på de grupperapporter efter konfiguration, der er angivet i programmet for hver juridisk enhed.
Derudover kan agenten integreres med Microsoft Teams, hvilket gør det muligt at bruge adaptive kort til gennemsyn og indsendelse af udgiftsrapporter.
Agenten er afhængig af flere Microsoft Power Platform-connectorer. Der refereres automatisk til disse connectorer i de Power Automate-flow, der er angivet.
- Outlook (Office 365) – Denne connector åbner den delte postkasse for at udtrække kvitteringer.
- Dataverse (virtuelle objekter) – Denne connector integreres med programmer til finans og drift via virtuelle objekter.
- Microsoft Copilot Studio – Denne connector aktiverer AI-modeller for at udtrække kvitteringsoplysninger.
- Microsoft Teams – Denne connector sender adaptive kort til brugerinteraktioner (hvis Teams-integration er aktiveret).
- Microsoft 365-brugere – Denne connector henter oplysninger om brugerkalenderen (valgfrit, hvis fortolkning af kvitteringer er kontekstafhængig).
Forudsætninger
- Økonomi- og driftsmiljø: Du skal bruge mindst version 10.0.44 (10.0.2263.167 eller nyere) eller 10.0.45 (10.0.2345.102 og nyere) af økonomi- og driftsmiljøet for at installere agenten.
- Roller, der kræves for at konfigurere brugeren Udgiftsagent: Hvis du vil fuldføre trinnene i denne artikel, skal du være systemadministrator af organisationen og have følgende roller for at konfigurere udgiftsagentbrugeren til installation af Udgiftsagent.
| System | Rolle | Kommentarer |
|---|---|---|
| Power Platform Administration | Systemadministrator |
|
| Finans og drift | Systemadministrator |
|
| Microsoft 365 | Exchange-administrator og brugeradministrator |
|
| Teams Administration | Teams-administrator | Påkrævet, hvis du planlægger at aktivere Microsoft Teams-integration |
Trin til konfiguration af udgiftsagenten
Hvis du vil installere og konfigurere Udgiftsagent, skal du følge disse trin:
- Installer Copilot til programmer til finans og drift.
- Aktivér agentfunktionerne i dit miljø.
- Opret en udgiftsbruger til udførelse af agent.
- Konfigurer en delt postkasse.
- Konfigurer udgiftsagenten.
- Aktivér udgiftsagenten i Microsoft Teams (valgfrit – hvis du har brug for Microsoft Teams-integration)
I følgende afsnit beskrives hvert trin i detaljer.
Trin 1: Installer Copilot til programmer til finans og drift
Udgiftsagenten er tilgængelig som en del af pakken med Copilot til programmer til finans og drift. Når du har installeret denne pakke i dit miljø, får du automatisk alle nødvendige aktiver, herunder agenten, miljøvariabler og Power Automate-flow.
Hvis du vil installere den påkrævede app, skal du følge disse trin:
- Gå til Power Platform Administration i din browser.
- Vælg det miljønavn, hvor du vil installere appen, på listen over miljøer.
- På siden med oplysninger om miljøet (IKKE fra navigationen til venstre) skal du gå til sektionen Ressourcer og vælge Dynamics 365-apps.
- Søg efter Copilot til programmer til finans og drift på listen over Dynamics 365-apps. Hvis den allerede er installeret, og en opdatering er tilgængelig, skal du vælge knappen Opdater.
- Hvis appen ikke vises under Dynamics 365-apps, skal du vælge Installér app, vælge Copilot til programmer til finans og drift og derefter følge prompterne for at fuldføre installationen.
Notat
Få mere at vide om, hvordan du aktiverer Copilot i dit miljø, under Aktivere Copilot-funktioner i programmer til finans og drift.
Tips
Følg disse trin for at kontrollere, om pakken blev installeret:
- Gå til Power Apps Maker Portal > vælg dit miljø > vælg Løsninger > Se historik > søg efter og vælg msdyn_ExpenseAI > Detaljer.
- Kontrollér feltet Resultat.
- Hvis resultatet viser Udført, blev pakken installeret korrekt.
- Hvis resultatet ikke viser Udført, mislykkedes installationen.
- Hvis installationen mislykkes, skal du slette msdyn_FnOCopilotAnchor (få mere at vide i afinstallationsafsnittet) og installere Copilot til programmer til finans og drift igen.
Trin 2: Aktivér agentfunktionerne i dit miljø
Når du har installeret pakken Medpilot til økonomi- og driftsapps, skal du aktivere Udgiftsagent fra dit dataverse- og økonomi- og driftsmiljø.
Aktivér funktion i Dataverse
Slå funktionsflaget Copilot til i Power Platform Administration. Hvis du vil aktivere funktionsflaget Copilot, skal du følge disse trin:
- Gå til Power Platform Administration.
- Vælg Miljøer> vælg dit miljø >Indstillinger>Produkt> vælg Funktioner.
- Bekræft, at funktionsflaget Copilot er slået til.
Aktivér funktionen i dit finans- og driftsmiljø
Hvis du vil aktivere agenten i finance and operations-apps, skal du følge disse trin:
- Log på dit finans- og driftsmiljø.
- Gå til Funktionsstyring, og aktivér funktionen Administration af funktion og funktioner til Agentstyring.
- Hvis du vil konfigurere udgiftsagenten (opsætningen er pr. juridisk enhed), skal du gå til Konfiguration af>udgiftsstyring>Generelt>Parametre for Udgiftsstyring.
- Konfigurer parametrene som vist i følgende tabel under fanen Udgiftspostagent.
| Parametre | Værdi | Kommentarer |
|---|---|---|
| Aktivér Udgiftsagent for den aktuelle juridiske enhed | Ja | Skift til Ja for at aktivere agenten for den aktuelle juridiske enhed. |
| Hyppighed | Dagligt eller ugentligt | Konfigurer hyppigheden for automatisk oprettelse af udgiftsrapporter i din organisation. |
| Gruppér rapporter efter | Rejse eller projekt | Konfigurer for at gruppere udgifter baseret på et projekt eller en rejse. |
Trin 3: Opret en udgiftsagent-bruger til agentudførelse
Opret en dedikeret bruger af udgiftsagenten for at sikre, at agenten kører uafhængigt af en medarbejders identitet. Denne fremgangsmåde hjælper med sikkerhed, administration og langsigtet vedligeholdelse. Selvom du kan bruge en eksisterende brugerkonto, der har de nødvendige rettigheder, skal du bruge en systemejet identitet.
Opret udgiftsagentbrugeren i Microsoft Entra-id
- Log på Azure-portalen.
- Vælg Microsoft Entra-id i de tilgængelige Azure-tjenester.
- Opret en ny bruger under Microsoft Entra-id.
- Vælg Tilføj>Bruger>Create new user, og angiv følgende oplysninger.
- Brugerens hovednavn
- Vælg det rette domæne
- Vist navn
- Adgangskode
- Markér konto aktiveret
- Hvis du vil have vist detaljerne og fuldføre brugeroprettelsesprocessen, skal du vælge Gennemse + opret og vælge Opret.
- Vælg en bruger og siden med visningsoplysninger på siden Bruger (Administrer > Brugere).
- Vælg Rediger egenskaber, gå til fanen Indstillinger, og udfyld den relevante brugsplacering.
Notat
Afhængigt af din organisations politik skal du muligvis ændre din adgangskode og konfigurere multifaktorgodkendelse (MFA). Følg de trin, du normalt gør for at ændre adgangskode og konfigurere multifaktorgodkendelse.
Tildel de påkrævede licenser til brugeren af udgiftsagenten
Hvis du vil installere Udgiftsagent, skal du tildele følgende licenser til brugeren af udgiftsagenten:
- Dynamics 365 Teams-medlemslicens
- Microsoft 365 Business Basic eller en hvilken som helst licens, der dækker Microsoft Teams og Outlook (f.eks. Office 365 E5 med Teams)
- Power Apps Premium
Følg disse trin for at tildele licenser:
- Log på Microsoft 365 Administration med en bruger, der har adgang til at tildele licenser, som er en bruger med Licensadministrator eller højere.
- Vælg Fakturering>Licenser>Dynamics 365 Teams-medlemslicens.
- Vælg +Tildel licenser.
- Søg efter den bruger af udgiftsagenten, der blev oprettet i forrige trin.
- Vælg Tildel for at fuldføre licenstildelingen.
- Følg trin 2-5 for de andre licenser – også Microsoft 365 Business Basic og Power Apps Premium.
Notat
Få mere at vide om, hvordan du kontrollerer og tildeler licenser, under Brug siden Aktive brugere til at tildele eller fjerne tildeling af licenser.
Føj brugeren til Power Platform-miljøet
Hvis du vil føje brugeren til Power Platform-miljøet, skal du følge disse trin:
Log på Power Platform Administration, og vælg derefter det rette miljø.
Tips
Denne side indeholder oplysninger, der er relateret til miljø-id'et for Dataverse, URL-adressen til miljøet for Dataverse, URL-adressen til finans og drift. Gem disse værdier, der skal bruges i senere afsnit.
Gå til Adgang > Brugere > Se alle.
Vælg Tilføj bruger, angiv den nyoprettede agentbruger, og vælg Tilføj.
Tilføj følgende roller på siden Administrer sikkerhedsroller .
- Rolle som udgift til AI-agent
- Finans og drift Agent Configuration Manager
- Systemtilpasser
Vælg Gem for at bekræfte rolletildelingerne.
Disse roller giver adgang til Dataverse- og Power Automate-komponenter, som agenten skal bruge for at fungere.
Tips
Hvis brugeren allerede findes, og du kun skal tildele roller, skal du gå til Power Platform Administration og vælge det relevante miljø.
- Gå til Adgang > Brugere > Se alle.
- Vælg den oprettede agentbruger.
- Vælg Administrer roller, og tildel rollerne.
Tildel den påkrævede rolle i finans- og driftsmiljøet
Hvis du vil tildele rollen ExpenseAgentRole i økonomi- og driftsmiljøet, skal du følge disse trin:
- I finans- og driftsmiljøet skal du gå til Systemadministration>Brugere.
- Opret en brugerpost for agentbrugeren.
- Når du har oprettet brugeren, skal du gå til sektionen brugerens roller, vælge Tildel roller og søge efter ExpenseAgentRole.
- Vælg Gem.
Notat
ExpenseAgentRole er tilgængelig i programmer til finans og drift version fra 10.0.44 (10.0.2263.81) og 10.0.45 (10.0.2345.6) og med Copilot til programmer til finans og drift version 1.0.3121.1
Tildel adgang til den delte postkasseadgang
Agentbrugeren skal have Microsoft Graph-tilladelsen Mail.Read.Shared. Denne tilladelse gør det muligt for agenten at læse kvitteringer fra den konfigurerede delte postkasse under udførelse af flowet.
Følg disse trin for at tildele adgang til den delte postkasse:
- Gå til Microsoft Graph Explorer, og log på med den oprettede agentbruger.
- Vælg ikonet bruger i øverste højre hjørne > vælg Samtykke til tilladelser.
- Vælg rullemenuen for Mail> søg efter Mail.Read.Shared> vælg Samtykke, og vælg Acceptér.
Oversigt over påkrævede roller for den oprettede agentbruger
| Miljø | Roller | Kommentarer |
|---|---|---|
| Dataverse | De nævnte roller gør det muligt for agenten at interagere med Power Automate-flow, miljøvariabler og virtuelle objekter, der er knyttet til Dynamics 365 Finance | |
| Finans og drift | Denne rolle er påkrævet, for at agenten kan oprette og administrere udgiftsposter i miljøet for programmer til finans og drift. Bemærk! ExpenseAgentRole er tilgængelig i programmer til finans og drift version fra 10.0.44 (10.0.2263.81) og 10.0.45 (10.0.2345.6) og med Copilot til programmer til finans og drift version 1.0.3121.1 |
|
| Adgang til delt postkasse ved hjælp af Graph-tester | Mail.Read.Shared | Microsoft Graph-tilladelse, der gør det muligt for agenten at læse kvitteringer fra den konfigurerede delte postkasse under udførelse af flowet |
Trin 4: Konfigurer den delte postkasse
Udgiftsagenten bruger en delt postkasse til at modtage og behandle kvitteringsmails. En bruger med rollen Exchange-administrator skal oprette og konfigurere denne postkasse i Microsoft 365 Administration.
Følg disse trin for at oprette og konfigurere den delte postkasse:
Log på Microsoft 365 Administration ved hjælp af en Exchange-administratorkonto.
Vælg Teams & Grupper>Delte postkasser i ruden til venstre.
Tips
Du skal muligvis vælge Vis alle for at udvide hele listen.
Vælg Tilføj en delt postkasse.
Angiv et navn og en mailadresse til den delte postkasse.
Vælg Gem ændringer.
Under Næste trin skal du vælge Føj medlemmer til denne delte postkasse. (Der kan gå et par minutter, før medlemsadministration bliver tilgængelig).
Vælg Tilføj medlemmer
Vælg den oprettede agentbruger og andre, der skal overvåge postkassen, og vælg Tilføj.
Vælg Luk.
Notat
Du bruger mailadressen på den delte postkasse i næste trin. Når du har konfigureret den delte postkasse, skal du angive dens mailadresse og mappestien (som standard angivet til Indbakke) som miljøvariabler, når du konfigurerer Time og Expense Agent. Du kan få flere oplysninger under Trin 5: Konfigurer Udgiftsagent.
Trin 5: Konfigurer udgiftsagenten
Du har to muligheder for at konfigurere udgiftsagenten:
- Mulighed A: Brug et PowerShell-script (anbefales)
- Mulighed B: Konfigurer manuelt i Power Apps (ingen PowerShell)
Vigtigt!
Før du fortsætter med installationen af Expense Agent, skal du sikre dig, at agenten er klargjort korrekt i Microsoft Copilot Studio.
Følg følgende vejledning for at bekræfte, at agenten er klargjort succesfuldt.
- Log på Microsoft Copilot Studio, og vælg dit miljø.
- Gå til Agenter, og søg efter ExpenseAgent-Line (forhåndsversion).
- Kontrollér, at knappen Publicer er aktiveret.
- Hvis den er aktiveret, skal du fortsætte med installationen. Hvis den er deaktiveret, skal du vente, indtil agenten er klargjort.
- Gentag disse trin for at bekræfte, at Udgiftspostagent (forhåndsversion) er aktiveret.
Tips
Hvis klargøring af Copilot-økonomi- og driftsappen tager mere end 5-6 timer, skal du fjerne og geninstallere appen for at løse potentielle installationsforsinkelser. Du kan få flere oplysninger i afsnittet Fjern Udgiftsagent i slutningen af denne artikel.
Mulighed A: Brug et PowerShell-script (anbefales)
Manuel konfiguration af agenten omfatter oprettelse og sammenkædning af forbindelser, aktivering af Power Automate-flow og publicering af løsningen. Denne proces kan være tidskrævende, og der kan opstå fejl. Hvis du vil automatisere installationen, kan du bruge et PowerShell-script, når du har opdateret de påkrævede parametre.
PowerShell-scriptet automatiserer følgende opgaver:
- Opdaterer de påkrævede miljøvariabler.
- Sammenkæder Microsoft Power Platform-forbindelser med løsningsforbindelsesreferencer.
- Aktiverer alle Power Automate-flow, som Tids- og Udgiftsagent kræver.
- Udgiver copilotagenterne.
- Publicerer Dataverse-løsningen.
Før du kører scriptet, skal du oprette forbindelser, da du skal angive forbindelses-id'et for hver connector i install.ps1-filen. Hvis du vil oprette disse forbindelser, skal du følge disse trin ved hjælp af den oprettede agentbruger.
- Log på Power Apps Maker Portal ved hjælp af den nyoprettede agentbruger, og vælg dit miljø.
- Vælg Mere i ruden til venstre, og vælg derefter Forbindelser.
- Vælg Ny forbindelse , og søg ved hjælp af Forbindelsesnavn i følgende tabel (f.eks . Office 365 Outlook).
- Vælg den relevante connector på listen, og opret den.
- Når forbindelsen er oprettet, skal du notere den bruger, som forbindelsen blev oprettet med. Det skal ideelt set være det oprettede agentbruger-id. Dette bruger-id skal opdateres i den installationsfil, du opretter i næste trin.
- Gentag trin 3 og 4 for hver af de resterende nødvendige forbindelser, der er angivet i følgende tabel.
| Forbindelsesnavn | URL-adresseformater for forbindelser |
|---|---|
| Office 365 Outlook | https://make.powerapps.com/environments/environmentID/connections / shared_office365/connectionID/details |
| Office 365-brugere | https://make.powerapps.com/environments/environmentID/connections / shared_office365users/connectionID/details |
| Microsoft Teams | https://make.powerapps.com/environments/environmentID/connections / shared_teams/connectionID/details |
| Microsoft Dataverse | https://make.powerapps.com/environments/environmentID/connections / shared_commondataserviceforapps/connectionID/details |
| Microsoft Copilot Studio (forhåndsversion) | https://make.powerapps.com/environments/environmentID/connections / shared_microsoftcopilotstudio/connectionID/details |
Oplysninger, du skal bruge for at oprette installationsfilen
Hvis du vil oprette installationsfilen, install.ps1, skal følgende oplysninger være tilgængelige. Du kan bruge følgende tabel som reference.
| Parameter | Andre detaljer |
|---|---|
| Dataverse-miljø-id | Angiv det miljø-id, du får fra Power Platform Administration. Eksempelværdi: xxxx-xxxx-xxxx-xxxxxx |
| URL-adresse til Dataverse-miljø | Angiv URL-adressen til miljøet fra Power Platform Administration. Bemærk! Sørg for, at der står https:// i starten og ingen skråstreg '/' i slutningen. Eksempelværdi: https://org123.crm.contoso.com |
| URL-adresse til finans- og driftsforekomst | Angiv oplysningerne om finans- og driftsmiljøet i følgende format. Eksempelværdi: https://org123.contoso.com Bemærk!Sørg for, at der står https:// i starten og ingen skråstreg ‘/’ i slutningen. |
| OutlookFolderPath | Angiv den mappesti, der er oprettet i den delte postkasse. Hvis der ikke er oprettet en anden mappe, angives den som standard som Indbakke. Eksempelværdi: Indbakke Som bedste praksis skal du oprette en separat mappe til udgiftsstyring |
| Id for postkasseadresse | Angiv mailadressen på den delte postkasse, der er oprettet for nylig Eksempelværdi: expenseagent@contoso.com |
| Navn på Microsoft Dataverse-forbindelse Navn på Microsoft Copilot Studio-forbindelse Navn på Microsoft Office Outlook-forbindelses Navn på Microsoft Office 365-brugerforbindelse Navn på Microsoft Teams-forbindelse |
Input til alle forbindelsesnavnene er det samme og er brugermail-id'et for den oprettede agentbruger. Eksempelværdi: createdexpenseagentuser@contoso.com |
Opret installationsscriptfilen
Opret en installationsscriptfil ved at kopiere følgende kode. Indsæt de påkrævede miljøvariabler i scriptet, og kør derefter scriptet ved hjælp af PowerShell.
Notat
Placer installationsscriptfilen på det lokale skrivebord. Gem den ikke i One Drive.
Opret en PowerShell-scriptfil med følgende kode. Opdater de nævnte parametre, før du kører scriptet.
Tips
Når Obligatorisk = $true, beder PowerShell dig om at angive parametrene interaktivt, så du ikke behøver at opdatere dem direkte i scriptfilen.
Hvis du vil undgå manuel input og vil foruddefinere parametrene i installationsscriptet, skal du angive Obligatorisk = $false i afsnittet Param i følgende eksempelkode.
Kopiér følgende kode til installationsscriptfilen, og gem den som 'Install.ps1'. Opdater variablerne i de respektive parameterfelter i afsnittet param. Du skal opdatere 10 variabler.
Tips
Brug den forrige tabel som reference, og erstat alle eksempelværdierne med dine respektive detaljer.
#requires -Version 7
Param(
[Parameter(Mandatory=$true, HelpMessage="Dataverse environment id")]
[string]$DataverseEnvironmentId = "xxxx-xxxx-xxxx-xxx-xxxxxxxxxx",
[Parameter(Mandatory=$true, HelpMessage="Dataverse environment URL")]
[string]$DataverseUrl = "https://org123.crm.dynamics.com",
[Parameter(Mandatory=$true, HelpMessage="Finance and Operations instance URL")]
[string]$D365FinanceAndOperationsUrl = "https://org123.operations.dynamics.com",
[Parameter(Mandatory=$true, HelpMessage="OutlookFolderPath")]
[string]$OutlookFolderPath = "Inbox",
[Parameter(Mandatory=$true, HelpMessage="Mailbox Address Id")]
[string]$MailboxAddressId = "expenseagent@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Dataverse connection name")]
[string]$MicrosoftDataverseConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Copilot Studio connection name")]
[string]$MicrosoftCopilotStudioConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Office Outlook connection name")]
[string]$Office365OutlookConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Office 365 Users connection name")]
[string]$Office365UsersConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Teams connection name")]
[string]$MicrosoftTeamsConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$false, HelpMessage="Checks for bot Sync Errors and if there is provisioning required before Agent publish step")]
[boolean]$CheckBotSyncStatusAndProvisionBots = $false
)
$flows = @(
"expense entry retry check",
"expense configuration",
"get expense outlook folder",
"generate expense report",
"send expense report adaptive card",
"auto match expenses",
"process emails",
"extract unattached receipt ids for copilot invocation",
"extract unattached receipt output using dataverse plugin",
"generate expense line",
"generate expense line without project id and status id",
"identify project ids",
"user calendar events",
"process expense report using copilot",
"invoke expense agent for receipt processing"
)
$agents = @(
"msdyn_ExpenseEntryAgent",
"msdyn_ExpenseReportAgent"
)
# Check PS version
if ($PSVersionTable.PSVersion.Major -lt 7) {
Write-Error 'This script requires at least PowerShell version 7' -ErrorAction Stop
}
# Install the required modules if not already installed or if the version is not 1.0.40
if (-not (Get-Module -ListAvailable -Name Microsoft.PowerApps.PowerShell | Where-Object { $_.Version -ge [Version]"1.0.40" })) {
Write-Host "Microsoft.PowerApps.PowerShell version 1.0.40 not found. Installing..." -ForegroundColor Yellow
Install-Module -Name Microsoft.PowerApps.PowerShell -RequiredVersion 1.0.40 -Force -AllowClobber -Scope CurrentUser
} else {
Write-Host "Microsoft.PowerApps.PowerShell version 1.0.40 is already installed." -ForegroundColor Green
}
if (-not (Get-Module -ListAvailable -Name Microsoft.PowerApps.Administration.PowerShell | Where-Object { $_.Version -ge [Version]"2.0.147" })) {
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell -RequiredVersion 2.0.147 -Force -AllowClobber -Scope CurrentUser
}
# Install the required modules if not already installed
if (-not (Get-Module -ListAvailable -Name Az.Accounts | Where-Object { $_.Version -ge [Version]"5.0.1"})) {
Install-Module -Name Az.Accounts -RequiredVersion 5.0.1 -Force -AllowClobber -Scope CurrentUser
}
# Import required modulesds
Import-Module Az.Accounts
Import-Module Microsoft.PowerApps.PowerShell
Import-Module Microsoft.PowerApps.Administration.PowerShell
# global variable declaration
$filter = '$filter'
function Get-AccessToken {
# Retrieve the access token for the Dataverse environment
$accessToken = (Get-AzAccessToken -ResourceUrl "$DataverseUrl" -AsSecureString).Token
Write-Host "Access token for $userId retrieved successfully." -ForegroundColor Green
return $accessToken
}
function Get-AccessTokenPlainText {
param(
[Parameter(Mandatory=$true, HelpMessage="Access token for authentication")]
[securestring]$accessToken
)
# Retrieve the access token for the PVA environment
$token = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($accessToken))
return $token
}
function update-EnvironmentVaribleValue {
param (
[string]$accessToken,
[string]$env_key,
[string]$env_value # Access token for authentication
)
try
{
# Get the environment variable definition
$envVarDefinition = Invoke-RestMethod -Method Get -Uri "$DataverseUrl/api/data/v9.2/environmentvariabledefinitions?$filter=schemaname eq '$env_key'" -Headers @{
Authorization = "Bearer $accessToken"
}
if ($envVarDefinition.value -ne $null) {
$envVarDefId = $envVarDefinition.value[0].environmentvariabledefinitionid
# Get the environment variable value record
$filterValue = [System.Web.HttpUtility]::UrlEncode("_environmentvariabledefinitionid_value eq $envVarDefId")
$envVarValue = Invoke-RestMethod -Method Get -Uri "$DataverseUrl/api/data/v9.2/environmentvariablevalues?$filter=$filterValue" -Headers @{
Authorization = "Bearer $accessToken"
}
if ($envVarValue.value -ne $null) {
$envVarValueId = $envVarValue.value[0].environmentvariablevalueid
# Update the environment variable value
Invoke-RestMethod -Method Patch -Uri "$DataverseUrl/api/data/v9.2/environmentvariablevalues($envVarValueId)" -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
} -Body (@{ value = $env_value } | ConvertTo-Json -Depth 1)
Write-Host "Environment variable updated with name $env_key and value $env_value" -ForegroundColor Green
} else {
Write-Host "Environment variable value not found for $env_key. Skipping..." -ForegroundColor Red
}
}
else {
Write-Host "Environment variable definition not found for $env_key. Skipping..." -ForegroundColor Yellow
}
}
catch {
Write-Host "Failed to update environment variable $env_key. Error: $($_)" -ForegroundColor Red
throw $_ # Re-throw the error to stop the script if this step is critical
}
}
function update_EnvironmentVariablesForExpense {
param (
[string]$accessToken # Access token for authentication
)
write-host "Updating environment variables..." -ForegroundColor Yellow
try
{
update-EnvironmentVaribleValue -accessToken $accessToken -env_key "msdyn_ExpenseFnoInstanceUrl" -env_value $D365FinanceAndOperationsUrl
update-EnvironmentVaribleValue -accessToken $accessToken -env_key "msdyn_ExpenseAgentOutlookFolderPath" -env_value $OutlookFolderPath
update-EnvironmentVaribleValue -accessToken $accessToken -env_key "msdyn_ExpenseAgentMailboxAddressId" -env_value $MailboxAddressId
}
Catch {
Write-Host "Failed to update environment variables. Error: $($_)" -ForegroundColor Red -ErrorAction Stop
}
}
# Function to publish the solution
function Publish-Solution {
param (
[string]$accessToken
)
Write-Host "Publishing All" -ForegroundColor Yellow
# Construct the API endpoint for publishing the solution
$uri = "$DataverseUrl/api/data/v9.2/PublishAllXml"
# Make the API call
try {
Invoke-RestMethod -Method Post `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
Write-Host "Publish All - Success!" -ForegroundColor Green
} catch {
Write-Host "Failed to publish. Error: $($_.Exception)" -ForegroundColor Red
}
}
function Get-FlowGuidByName {
param (
[string]$accessToken, # Access token for authentication
[string]$flowName # Name of the flow to search for
)
#Write-Host "Retrieving GUID for flow: $flowName" -ForegroundColor Yellow
# Construct the API endpoint with a filter for the flow name
$encodedFlowName = [System.Web.HttpUtility]::UrlEncode($flowName)
$uri = "$DataverseUrl/api/data/v9.2/workflows?$filter=name eq '$encodedFlowName'"
try {
# Make the API call
$response = Invoke-RestMethod -Method Get `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
# Check if the flow was found
if ($response.value.Count -gt 0) {
$flow = $response.value[0]
Write-Host "Flow found: $($flow.name) with GUID: $($flow.workflowid)" -ForegroundColor Green
return $flow.workflowid
} else {
Write-Host "No flow found with the name: $flowName" -ForegroundColor Red
return $null
}
} catch {
Write-Host "Failed to retrieve flow GUID. Error: $($_.Exception.Message)" -ForegroundColor Red
return $null
}
}
# Function to activate a Power Automate flow
function Activate-Flow {
param (
[string]$DataverseUrl, # Dataverse environment URL
[string]$accessToken, # Access token for authentication
[string]$flowId # GUID of the flow to activate
)
# Construct the request body
$body = @{
"statecode" = 1 # Activated
"statuscode" = 2 # Activated
} | ConvertTo-Json -Depth 1 -Compress
# Construct the API endpoint
$uri = "$DataverseUrl/api/data/v9.2/workflows($flowId)"
# Make the API call
try {
Invoke-RestMethod -Method Patch `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
} `
-Body $body
Write-Host "Flow activated successfully." -ForegroundColor Green
} catch {
Write-Host "Failed to activate flow. Error: $($_.Exception.Message)" -ForegroundColor Red
}
}
function Get-ConnectionRefIdFromLogicalName {
param (
[string]$accessToken,
[string]$connectionRefLogicalName
)
$uri = "$DataverseUrl/api/data/v9.2/connectionreferences?$filter=connectionreferencelogicalname eq '$connectionRefLogicalName'"
$response = Invoke-RestMethod -Method Get `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
if ($response -ne $null) {
write-host "Connection reference id found: $($response.value[0].connectionreferenceid) " -ForegroundColor Green
return $response.value[0].connectionreferenceid
}
else {
Write-Host "No connection reference found for logical name: $connectionRefLogicalName" -ForegroundColor Red
return $null
}
}
function Get-ConnectionId {
param (
[string]$userProvidedName,
[string]$providerName
)
try {
$matchedConnectionId = $null
# Added -ErrorAction Stop to ensure the catch block is triggered on failure
$connections = Get-PowerAppConnection -EnvironmentName $DataverseEnvironmentId -ConnectorNameFilter $providerName -ErrorAction Stop
foreach ($con in $connections) {
if (($con.ConnectionName -eq $userProvidedName) -or ($con.DisplayName -eq $userProvidedName)) {
$matchedConnectionId = $con.ConnectionName
break
}
}
if ($null -eq $matchedConnectionId) {
# Use 'throw' to create a terminating error that the calling function can catch
throw "Unable to find connection '$userProvidedName' for provider '$providerName'."
}
return $matchedConnectionId
}
catch {
# Catch any errors from Get-PowerAppConnection or the 'throw' statement above
Write-Error "Failed to get connection ID for '$userProvidedName'. Error: $_"
throw # Re-throw the error to stop the script if this step is critical
}
}
function Get-ConnectionReferenceId {
param(
[string]$connectionReferenceLogicalName,
[securestring]$accessToken
)
try {
$uri = "$DataverseUrl/api/data/v9.2/connectionreferences?$filter=connectionreferencelogicalname eq '$connectionReferenceLogicalName'"
# Added -ErrorAction Stop for clarity, though Invoke-RestMethod often terminates on HTTP errors
$response = Invoke-RestMethod -Method Get -Uri $uri -Authentication Bearer -Token $accessToken -ContentType 'application/json' -ErrorAction Stop
if ($null -eq $response -or $response.value.Count -eq 0) {
throw "Connection reference not found for logical name '$connectionReferenceLogicalName'."
}
$connectionReferenceDisplayName = $response.value[0].connectionreferencedisplayname
$connectionReferenceId = $response.value[0].connectionreferenceid
Write-Host "updating connection $connectionReferenceDisplayName for logical name $connectionReferenceLogicalName)"
return $connectionReferenceId
}
catch {
Write-Error "Failed to get connection reference ID for '$connectionReferenceLogicalName'. Error: $_"
throw # Re-throw to notify the calling function
}
}
function Set-ConnectionReferenceConnection {
param (
[string]$connectionReferenceLogicalName,
[string]$userProvidedConnectionName,
[string]$providerName,
[securestring]$accessToken
)
try {
# These functions will now throw terminating errors if they fail
$connectionReferenceId = Get-ConnectionReferenceId -connectionReferenceLogicalName $connectionReferenceLogicalName -accessToken $accessToken
$connectionId = Get-ConnectionId -userProvidedName $userProvidedConnectionName -providerName $providerName
$body = @{
"connectionid" = "$connectionId"
} | ConvertTo-Json -Depth 1
$uri = "$DataverseUrl/api/data/v9.2/connectionreferences($connectionReferenceId)"
# Write-Host "Updating connection reference URI: $uri with connection id $connectionId"
Invoke-RestMethod -Method Patch -Uri $uri -Authentication Bearer -Token $accessToken -ContentType 'application/json' -Body $body -ErrorAction Stop
Write-Host "Connection reference updated successfully." -ForegroundColor Green
}
catch {
# This block will catch errors from any of the functions called within the try block
Write-Error "Failed to set connection reference for '$connectionReferenceLogicalName'. Error: $_"
throw
}
}
function Activate-Flows {
param (
[string]$accessToken,
[array]$expenseAIFlows
)
foreach ($flowName in $expenseAIFlows) {
Write-Host "Activating flow: $flowName" -ForegroundColor Yellow
# Call the Get-FlowGuidByName function to get the flow GUID
$flowGuid = Get-FlowGuidByName -dataverseUrl $DataverseUrl -accessToken $accessToken -flowName $flowName
if ($flowGuid -ne $null) {
# Write-Host "Flow Name: $flowName, Flow GUID: $flowGuid" -ForegroundColor Green
Activate-Flow -dataverseUrl $DataverseUrl -accessToken $accessToken -flowId $flowGuid
# Write-Host "Flow Name: $flowName, Flow GUID: $flowGuid Activated" -ForegroundColor Green
} else {
Write-Host "Flow Name: $flowName not found." -ForegroundColor Red
}
}
}
# Function to retrieve the Agent ID by name
function Get-AgentIdBySchemaName {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$agentSchemaName
)
Write-Host "Retrieving agent ID for agent schema: $agentSchemaName" -ForegroundColor Yellow
# Construct the API endpoint to retrieve the bot
$uri = "$DataverseUrl/api/data/v9.2/bots?$filter=schemaname eq '$agentSchemaName'"
try {
# Make the API call
$response = Invoke-RestMethod -Method Get -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
if ($response.value.Count -gt 0) {
$agentId = $response.value[0].botid
return $agentId
} else {
Write-Host "No agent found with the name: $agentSchemaName" -ForegroundColor Red
return $null
}
} catch {
Write-Host "Failed to retrieve agent ID. Error: $($_)" -ForegroundColor Red
return $null
}
}
function Check-BotSyncErrors {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$botId
)
Write-Host "Retrieving Sync Status for bot ID: $botId" -ForegroundColor Yellow
# Construct the API endpoint to retrieve the bot
$uri = "$DataverseUrl/api/data/v9.2/bots($botId)"
try {
# Make the API call
$response = Invoke-RestMethod -Method Get -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
if ($null -ne $response.synchronizationstatus) {
# Parse the JSON string in synchronizationstatus
$syncStatusObj = $response.synchronizationstatus | ConvertFrom-Json
$state = $syncStatusObj.currentSynchronizationState.state
$provisioningStatus = $syncStatusObj.currentSynchronizationState.provisioningStatus
Write-Host "Synchronization State: $state" -ForegroundColor Green
Write-Host "Provisioning Status: $provisioningStatus" -ForegroundColor Green
if ( $state -contains "Error" -or $provisioningStatus -contains "Error") {
Write-Host "Bot has synchronization errors." -ForegroundColor Red
return 0
} else {
if ( $state -eq "Synchronized" -or $state -eq 'Synchronizing' -and ($provisioningStatus -eq "Provisioned" -or $provisioningStatus -eq "ProvisionedWithoutRegistration")) {
Write-Host "Bot synchronization is done." -ForegroundColor Yellow
return 1
} else {
Write-Host "Bot synchronization is in progress." -ForegroundColor Green
return 2
}
}
} else {
Write-Host "No synchronization status found for bot ID: $botId" -ForegroundColor Red
return $null
}
} catch {
Write-Host "Failed to retrieve agent ID. Error: $($_)" -ForegroundColor Red
return $null
}
}
# Function to provision a PVA bot
function Provision-Agent {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$agentId
)
# Construct the API endpoint for publishing the bot
$uri = "$DataverseUrl/api/data/v9.2/bots($agentId)/Microsoft.Dynamics.CRM.PvaProvision"
try {
# Make the API call
Invoke-RestMethod -Method Post -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
Write-Host "Agent Provisioning successfully!" -ForegroundColor Green
# Add 30 second delay to allow the publish process to complete
Start-Sleep -Seconds 30
return $true
} catch {
Write-Host "Failed to Provision Agent. Error: $($_.Exception.Message)" -ForegroundColor Red
}
return $false
}
# Function to publish a PVA bot
function Publish-Agent {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$agentId
)
Write-Host "Publishing agent with ID: $agentId" -ForegroundColor Yellow
# Construct the API endpoint for publishing the bot
$uri = "$DataverseUrl/api/data/v9.2/bots($agentId)/Microsoft.Dynamics.CRM.PvaPublish"
try {
# Make the API call
Invoke-RestMethod -Method Post -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
Write-Host "Agent published successfully!" -ForegroundColor Green
# Add 30 second delay to allow the publish process to complete
Start-Sleep -Seconds 30
} catch {
Write-Host "Failed to publish Agent. Error: $($_.Exception.Message)" -ForegroundColor Red
}
}
function Publish-Agents {
param (
[string]$accessToken,
[array]$agentSchemas
)
if (-not $agentSchemas -or $agentSchemas.Count -eq 0) {
Write-Host "No agent schemas provided. Skipping agent publishing." -ForegroundColor Yellow
return
}
foreach ($agentSchema in $agentSchemas) {
#Write-Host "Publishing agent schema: $agentSchema" -ForegroundColor Yellow
try {
# Construct the API endpoint for publishing the agent schema
$agentId = Get-AgentIdBySchemaName -dataverseUrl $DataverseUrl -accessToken $accessToken -agentSchemaName $agentSchema
if ($agentId -ne $null) {
# check for sync errors
if ($CheckBotSyncStatusAndProvisionBots) {
$syncStatus = Check-BotSyncErrors -dataverseUrl $DataverseUrl -accessToken $accessToken -botId $agentId
if (0 -eq $syncStatus) {
Write-Host "Agent has sync errors. Skipping the publish process. Please check the bot: $agentId details" -ForegroundColor Red
continue
} elseif (2 -eq $syncStatus) {
Write-Host "Agent synchronization is still in progress. reprovisioning the agent." -ForegroundColor Yellow
if (Provision-Agent -dataverseUrl $DataverseUrl -accessToken $accessToken -agentId $agentId -eq $false) {
Write-Host "Agent reprovisioning failed. Skipping the publish process. Please check the bot: $agentId details" -ForegroundColor Red
continue
}
} else {
Write-Host "Agent synchronization is done. Proceeding to publish." -ForegroundColor Green
}
}
# Step 4: Publish the bot
Publish-Agent -dataverseUrl $DataverseUrl -accessToken $accessToken -agentId $agentId
} else {
Write-Host "Agent not found. Cannot proceed with publishing.Skipping the step" -ForegroundColor Yellow
}
}
catch {
Write-Host "An error occurred while publishing agent schema: $agentSchema. Error: $_" -ForegroundColor Red
}
}
}
# Main script execution
try {
$expenseAIFlows = $flows
$agentSchemas = $agents
# Step 1: Interactive login to Azure
Connect-AzAccount -UseDeviceAuthentication
$accessToken = Get-AccessToken
$accessTokenPlainText = Get-AccessTokenPlainText -accessToken $accessToken
# Step 2: Setup ennviornment variables
update_EnvironmentVariablesForExpense -accessToken $accessTokenPlainText
Write-Host "Environment variables updated successfully!" -ForegroundColor Green
# Step 3: Check active connections
Set-ConnectionReferenceConnection -userProvidedConnectionName $MicrosoftDataverseConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps" -connectionReferenceLogicalName "msdyn_sharedcommondataserviceforapps_2c2d4" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $MicrosoftCopilotStudioConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_microsoftcopilotstudio" -connectionReferenceLogicalName "msdyn_sharedmicrosoftcopilotstudio_26d9d" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $Office365OutlookConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_office365" -connectionReferenceLogicalName "msdyn_sharedoffice365_9b471" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $MicrosoftTeamsConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_teams" -connectionReferenceLogicalName "msdyn_sharedteams_8ea9c" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $Office365UsersConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_office365users" -connectionReferenceLogicalName "msdyn_sharedoffice365users_909b9" -accessToken $accessToken
# Step 4: Activate flows
Activate-Flows -accessToken $accessTokenPlainText -expenseAIFlows $expenseAIFlows
# step 5: publish the agents
Publish-Agents -accessToken $accessTokenPlainText -agentSchemas $agentSchemas
# Step 6: Publish the solution
Publish-Solution -accessToken $accessTokenPlainText
Write-Host "Agent setup completed successfully!" -ForegroundColor Green
} catch {
Write-Host "An error occurred: $_" -ForegroundColor Red
}
Følg disse trin for at udløse PowerShell-filen:
- Åbn PowerShell (minimumversion kræves – PowerShell 7).
- Gå til den placering, hvor du gemte filen. (Brug kommandoen cd-<filplacering>).
- Udløs installationsscriptet. (Brug kommandoen '.\Install.ps1').
- Følg vejledningen for at logge på Azure.
- Når du har logget på, skal du muligvis godkende igen. Brug bruger-id'et for den oprettede agent.
Vent på, at scriptet kører helt, og se efter, om konfigurationen af agenten blev fuldført!
Notat
Følgende handlinger udføres i det foregående script:
- Angiver miljøvariabler.
- Kontrollerer og linker forbindelsesreferencer.
- Aktiverer Power Automate-flow.
- Udgiver de nødvendige Copilot-agenter.
- Publicerer Dataverse-løsningen.
Når scriptet er kørt, er udgiftsagenten fuldt ud konfigureret og klar til brug.
Mulighed B: Konfigurer manuelt i Power Apps (ingen PowerShell)
Hvis du ikke vil bruge PowerShell-scriptet, kan du konfigurere Udgiftsagent manuelt via Power Apps. Denne proces omfatter opdatering af miljøvariabler, aktivering af Power Automate-flow og publicering af løsningen.
Opdater miljøvariabler
Følg disse trin for at opdatere miljøvariabler:
Log på Power Apps, og vælg miljøet.
Vælg Løsninger, og åbn derefter Standardløsning (eller den løsning, hvor agenten er installeret).
Gå til Miljøvariabler, og angiv følgende værdier.
Variabelt navn Beskrivelse Sti til Outlook-mappe for omkostningsagent Angiv den mappesti, der skal overvåges i den delte postkasse (som standard Indbakke). Adresse-id til Udgiftsagent med delt postkasse Angiv mailadressen for den delte postkasse. Hvis du vil bruge postkassen for den bruger, der er logget på, skal du angive NA. URL-adresse til forekomst for finans og drift Angiv URL-adressen til miljøet for programmer til finans og drift (f.eks. https://org123.contoso.com).
Aktivér Power Automate-flow
Udgiftsagenten er afhængig af følgende Power Automate-flow:
- Kontrol af nyt forsøg på udgiftspost
- Udgiftskonfiguration
- Hent Outlook-udgiftsmappe
- Generér udgiftsrapport
- Send udgiftsrapport som adaptivt kort
- Tilpas automatisk udgifter
- Behandling af e-mails
- Udtræk ikke-vedhæftede kvitterings-id'er til aktivering af copilot
- Udtræk ikke-tilknyttet kvitteringsoutput ved hjælp af Dataverse-plug-in
- Generér udgiftslinje
- Generér udgiftslinje uden projekt-id og status-id
- Identificer projekt-id'er
- Brugerens kalenderbegivenheder
- Behandl udgiftsrapport ved hjælp af copilot
- Aktivér udgiftsagent til modtagelsesbehandling
Følg disse trin for at aktivere flowene:
Log på Power Automate, og vælg miljøet.
Vælg Mine flows.
Følg disse trin for hvert af de 15 flow på den forrige liste:
- Find flowet.
- Vælg Rediger.
- Skift til visningen Gammel designer ved at deaktivere indstillingen Ny designer.
- Godkend alle påkrævede forbindelser (indtil der vises grønne markeringer).
- Vælg Fortsæt, og vælg derefter Gem.
- Vælg Slå til for at aktivere flowet.
Publicer løsningen
Når du er færdig med at konfigurere alle miljøvariabler og flow, skal du følge disse trin for at publicere løsningen.
- I Power Apps skal du gå til Løsninger.
- Vælg dit miljø og din løsning.
- Vælg Publicer alle tilpasninger.
Når du har fuldført disse trin, er Udgiftsagent fuldt konfigureret og klar til brug.
Trin 6: Aktivér udgiftsagenten i Microsoft Teams (valgfrit)
Hvis du vil aktivere Teams-baseret kommunikation for Udgiftsagent, skal du føje Teams-kanalen til agenten i Power Apps. Agenten kan derefter sende adaptive kort via Teams.
Aktivér Teams-kanalen
Følg disse trin for at aktivere Teams-kanalen:
- Log på Copilot Studio, og vælg det korrekte miljø.
- Under fanen Agenter skal du vælge Udgiftspostagent.
- I agentvisningen under fanen Kanaler skal du vælge Teams og Microsoft 365 Copilot.
- Vælg Tilføj kanal for at aktivere Teams-integration, og følg trinnene i afsnittet Konfigurere tilgængelighed af Teams-appen for at konfigurere, hvem du vil dele appen med.
Få mere at vide i Åbne konfigurationspanelet for Teams + Microsoft 365-kanalen.
Konfigurer tilgængelighed af Teams-app
Hvis du vil konfigurere tilgængeligheden af Teams-appen, skal du følge disse trin:
Når Teams-appen er oprettet, skal du vælge Tilgængelighedsindstillinger.
Vælg, hvem du vil dele appen med:
- Specifikke brugere i organisationen
- Hele organisationen
Send appen til godkendelse.
Publicer appen i Teams Administration
Hvis du vil publicere appen i Teams Administration, skal du følge disse trin:
- Log på Teams Administration.
- Gå til Teams-appen > Administrer apps. Søg efter "udgift", og vælg appen Udgiftsindtastningsagent, hvor appstatus er blokeret.
- Vælg Udgiv for at fjerne blokeringen af appen. Når publiceringshandlingen er fuldført, skal du sikre dig, at appstatus ændres til ikke-blokeret.
Få mere at vide i Opret forbindelse og konfigurer en agent til Teams og Microsoft 365.
Når disse trin er fuldført, er din Udgiftsagent nu fuldt konfigureret og klar til brug.
Notat
Du kan også give feedback om agentoprettede udgiftslinjer og rapporter ved hjælp af ikonerne for tommelfinger op/ned og pop op-vinduet feedback i Dynamics 365 Finance-miljøet.
Fjern udgiftsagent
Hvis du vil fjerne Udgiftsagent, skal du følge disse trin:
- Log på Microsoft Power Apps-udviklerportalen.
- Vælg Løsninger, søg efter msdyn_ExpenseAI, vælg de tre prikker, og vælg Slet.
- Søg efter msdyn_FnOCopilotAnchor , og slet løsningen.