Notă
Accesul la această pagină necesită autorizare. Puteți încerca să vă conectați sau să modificați directoarele.
Accesul la această pagină necesită autorizare. Puteți încerca să modificați directoarele.
Importantă
- Aceasta este o caracteristică în regim de previzualizare, gata de producție.
- Previzualizările pregătite pentru producție sunt supuse termenilor de utilizare suplimentari.
Se aplică la Dynamics 365 Project Operations integrat cu ERP și Dynamics 365 Project Operations pentru producție
Expense Agent reunește capabilități din Microsoft Dynamics 365 Project Operations, aplicații financiare și operațiuni, Microsoft Copilot Studio, Power Automate și Dataverse pentru a automatiza fluxurile de lucru de procesare a cheltuielilor utilizând AI. Această funcție ajută la economisirea timpului și la reducerea efortului manual, permițând sistemului tău să proceseze chitanțe și să genereze linii de cheltuieli și rapoarte de cheltuieli pentru utilizatori. Utilizează conectori Microsoft Power Platform pentru integrarea cu Outlook, Microsoft Teams, calendarele utilizatorilor și mediul aplicațiilor financiare și operaționale prin entități virtuale Dataverse.
Agentul de cheltuieli include mai multe fluxuri, dintre care trei servesc ca orchestratori de bază:
- Procesare e-mailuri – Acest flux scanează un folder de cutie poștală configurat la fiecare oră și stochează atașările ca chitanțe neatașate în Dynamics 365 Finance.
- Extrageți ID-urile de chitanțe – Acest flux preia chitanțele neatașate și declanșează agentul să extragă detaliile chitanței și să creeze o linie de cheltuieli neatașată.
- Raport de cheltuieli de proces – Acest flux convertește liniile de cheltuieli neatașate și generează rapoarte de cheltuieli, bazate pe rapoartele grupului pe configurație , pe care le setați în aplicație pentru fiecare entitate juridică.
În plus, agentul se integrează cu Microsoft Teams, permițând utilizarea cardurilor adaptive pentru revizuirea și trimiterea rapoartelor de cheltuieli.
Agentul se bazează pe mai mulți conectori Microsoft Power Platform. Acești conectori sunt menționați automat în fluxurile Power Automate furnizate.
- Outlook (Office 365) – Acest conector accesează cutia poștală partajată pentru a extrage chitanțele.
- Dataverse (Entități virtuale) – Acest conector se integrează cu aplicațiile financiare și operaționale prin entități virtuale.
- Microsoft Copilot Studio – Acest conector invocă modele AI pentru a extrage informațiile de primire.
- Microsoft Teams – Acest conector trimite carduri adaptive pentru interacțiunile utilizatorului (dacă integrarea Teams este activată).
- Utilizatori Microsoft 365 – Acest conector preia detaliile calendarului utilizatorului (opțional, dacă analizarea chitanțelor este conștientă de context).
Cerințe preliminare
- Mediul financiar și operațional: Ai nevoie de cel puțin versiunea 10.0.44 (10.0.2263.167 și ulterioare) sau 10.0.45 (10.0.2345.102 și ulterioare) a mediului financiar și operațional pentru a instala agentul.
- Roluri necesare pentru a configura utilizatorul Excost Agent: Pentru a finaliza pașii din acest articol, trebuie să fii administratorul de sistem al organizației și să ai următoarele roluri pentru a configura utilizatorul agentului de cheltuieli pentru instalarea agentului de cheltuieli.
| Sistemul | Role | Comentarii |
|---|---|---|
| Centrul de administrare Power Platform | Administrator de sistem |
|
| Finanțe și operațiuni | Administrator de sistem |
|
| Microsoft 365 | Administrator Exchange și administrator utilizator |
|
| Centrul de administrare Teams | Administratorul echipelor | Necesar dacă intenționați să activați integrarea Microsoft Teams |
Pași pentru configurarea agentului de cheltuieli
Pentru a instala și configura Excost Agent, urmează acești pași:
- Instalați Copilot pentru aplicații financiare și operaționale.
- Activați caracteristicile agentului în mediul dvs.
- Creați un utilizator de cheltuieli pentru execuția agentului.
- Configurați o cutie poștală partajată.
- Configurați Expense Agent.
- Activați Expense Agent în Microsoft Teams (opțional - dacă aveți nevoie de integrare Microsoft Teams)
Secțiunile următoare descriu fiecare pas în detaliu.
Pasul 1: Instalați Copilot pentru aplicații financiare și operaționale
Expense Agent este disponibil ca parte a pachetului de aplicații Copilot pentru finanțe și operațiuni. După ce instalezi acest pachet în mediul tău, primești automat toate resursele necesare, inclusiv agentul, variabilele de mediu și fluxurile Power Automate.
Pentru a instala aplicația necesară, urmează acești pași:
- Accesați centrul de administrare Power Platform din browser.
- Din lista de medii, selectați numele mediului în care doriți să instalați aplicația.
- Pe pagina de detalii a mediului (NU din navigarea din stânga), mergi la secțiunea Resurse și selectează aplicații Dynamics 365.
- Căutați Copilot pentru aplicații de finanțe și operațiuni în lista de aplicații Dynamics 365. Dacă este deja instalat și este disponibilă o actualizare, selectați butonul Actualizare .
- Dacă aplicația nu este listată sub Aplicații Dynamics 365, selectați Instalare aplicație, selectați Copilot pentru aplicații financiare și operațiuni și urmați instrucțiunile pentru a finaliza instalarea.
Notă
Aflați mai multe despre cum să activați Copilot în mediul dvs., în Activarea capacităților Copilot în aplicațiile financiare și de operațiuni.
Sfat
Pentru a verifica dacă pachetul a fost instalat cu succes, urmează acești pași:
- Accesați portalul > de creare Power Apps, selectați mediul > , selectați Soluții > Vedeți istoricul > , căutați și selectați msdyn_ExpenseAI > Detalii.
- Verifică câmpul Rezultat .
- Dacă rezultatul arată Succes, pachetul a fost instalat corect.
- Dacă rezultatul nu afișează Succes, instalarea a eșuat.
- Dacă instalarea eșuează, ștergeți msdyn_FnOCopilotAnchor (vezi secțiunea de dezinstalare) și instalează din nou Copilot pentru aplicațiile de finanțe și operațiuni.
Pasul 2: Activați caracteristicile agentului în mediul dvs.
După ce instalezi pachetul Copilot pentru aplicații de finanțe și operațiuni, activează Agentul de Cheltuieli din interiorul Dataverse și din mediul tău financiar și operațional.
Activați funcția în Dataverse
Activează flag-ul de funcție Copilot în centrul de administrare Power Platform. Pentru a activa flag-ul caracteristicii Copilot, urmează acești pași:
- Accesați centrul de administrare Power Platform.
- Selectați Medii,> selectați mediul dvs.>, Setări,>Produs>, selectați Caracteristici.
- Confirmați că indicatorul caracteristicii Copilot este activat.
Activați funcția în mediul financiar și operațional
Pentru a activa agentul în aplicațiile de finanțe și operațiuni, urmează acești pași:
- Conectați-vă la mediul financiar și operațional.
- Accesați Gestionarea caracteristicilor și activați funcția Pornire imersivă și Gestionarea agenților .
- Pentru a configura Expense Agent (configurarea este pentru fiecare entitate juridică), accesați Setări de gestionare> a cheltuielilorParametrii>generali>de gestionare a cheltuielilor.
- Pe fila Agent de intrare a cheltuielilor , configurați parametrii așa cum se arată în tabelul următor.
| Parametri | Valoare | Comentarii |
|---|---|---|
| Activați Expense Agent pentru entitatea juridică curentă | Da | Comutați la Da pentru a activa agentul pentru entitatea juridică curentă. |
| Frecvență | Zilnic sau săptămânal | Configurați frecvența pentru crearea automată a rapoartelor de cheltuieli în organizația dvs. |
| Rapoarte de grup de | Călătorie sau proiect | Configurați pentru a grupa cheltuielile în funcție de un proiect sau o călătorie. |
Pasul 3: Creează un utilizator de agent de cheltuieli pentru execuția agentului
Creați un utilizator dedicat agentului de cheltuieli pentru a vă asigura că agentul funcționează independent de identitatea oricărui angajat. Această abordare ajută la securitate, gestionabilitate și întreținere pe termen lung. Deși poți folosi un cont de utilizator existent care are privilegiile necesare, folosește o identitate deținută de sistem.
Creează utilizatorul Expense Agent în Microsoft Entra ID
- Conectați-vă la portalul Azure.
- Din serviciile Azure disponibile, selectați Microsoft Entra ID.
- Sub Microsoft Entra ID, creați un utilizator nou.
- Selectați Adăugare>utilizator>Creați un utilizator nou și introduceți următoarele detalii.
- Nume principal utilizator
- Alegeți domeniul potrivit
- Nume afișat
- Parolă
- Marcați contul activat
- Pentru a vizualiza detaliile și a finaliza procesul de creare a utilizatorului, selectați Revizuire + creare și selectați Creare.
- Din pagina Utilizator (Gestionare > utilizatori), selectați un utilizator și vizualizați pagina cu detalii.
- Selectați Editare proprietăți, navigați la fila Setări și completați locația de utilizare corespunzătoare.
Notă
În funcție de politica organizației dvs., poate fi necesar să vă schimbați parola și să configurați autentificarea multifactor (MFA). Urmați pașii ca în mod normal pentru schimbarea parolei și configurarea MFA.
Atribuirea licențelor necesare utilizatorului Expense Agent
Pentru a instala cu succes Expoint Agent, atribuiți următoarele licențe utilizatorului agentului de cheltuieli:
- Licență Dynamics 365 Teams Members
- Microsoft 365 Business Basic sau orice licență care acoperă Microsoft Teams și Outlook (de exemplu, Office 365 E5 cu echipe)
- Power Apps Premium
Pentru a atribui licențe, urmează acești pași:
- Conectați-vă la Centrul de administrare Microsoft 365 cu un utilizator care are acces pentru a atribui licențe care este un utilizator cu Administrator de licențe sau o versiune ulterioară.
- Selectați Licențe de facturare>licență>Dynamics 365 Teams Members.
- Selectați +Atribuire licențe.
- Căutați utilizatorul agentului de cheltuieli creat la pasul anterior.
- Selectați Atribuire pentru a finaliza atribuirea licenței.
- Urmați pașii de la 2 la 5 pentru celelalte licențe – Microsoft 365 Business Basic și Power Apps Premium, de asemenea.
Notă
Aflați mai multe despre cum să verificați și să atribuiți licențe în Utilizați pagina Utilizatori activi pentru a atribui sau anula atribuirea licențelor.
Adăugarea utilizatorului la mediul Power Platform
Pentru a adăuga utilizatorul în mediul Power Platform, urmează acești pași:
Conectați-vă la centrul de administrare Power Platform și selectați mediul corespunzător.
Sfat
Această pagină oferă informații legate de ID-ul de mediu pentru Dataverse, URL-ul de mediu pentru Dataverse, URL-ul de finanțe și operațiuni. Stocați aceste valori pentru a le utiliza în secțiunile ulterioare.
Accesați Accesați > utilizatorii > Vedeți tot.
Selectați Adăugare utilizator, introduceți utilizatorul agent nou creat și selectați Adăugare.
Pe pagina Gestionează rolurile de securitate, adaugă următoarele roluri.
- Rolul agentului AI de cheltuieli
- Manager de configurare a agentului de finanțe și operațiuni
- Persoană care particularizează sistemul
Pentru a confirma atribuirea rolurilor, selectați Salvare.
Aceste roluri oferă acces la componentele Dataverse și Power Automate de care agentul are nevoie pentru a funcționa.
Sfat
Dacă utilizatorul există deja și trebuie doar să atribui roluri, mergi la centrul de administrare Power Platform și selectează mediul potrivit.
- Accesați Accesați > utilizatorii > Vedeți tot.
- Selectați utilizatorul agent creat.
- Selectați Gestionare roluri și atribuiți rolurile.
Atribuiți rolul necesar în mediul financiar și operațional
Pentru a atribui rolul ExpenseAgentRole în mediul financiar și operațional, urmează următorii pași:
- În mediul financiar și operațiuni, accesați Utilizatori de administrare> sistem.
- Creați o înregistrare de utilizator pentru utilizatorul agent.
- După ce creezi utilizatorul, mergi la secțiunea rolurilor utilizatorului, selectează Atribuie roluri și caută ExpenseAgentRole.
- Selectați Salvați.
Notă
ExpenseAgentRole este disponibil în versiunea aplicațiilor de finanțe și operațiuni de la 10.0.44 (10.0.2263.81) și 10.0.45 (10.0.2345.6) și cu Copilot pentru aplicații financiare și operațiuni versiunea 1.0.3121.1
Atribuirea accesului la accesul la cutia poștală partajată
Utilizatorul agent trebuie să aibă permisiunea Microsoft Graph Mail.Read.Shared. Această permisiune permite agentului să citească confirmările din cutia poștală partajată configurată în timpul execuției fluxului.
Pentru a atribui accesul la cutia poștală partajată, urmează acești pași:
- Mergi la Microsoft Graph Explorer și autentifică-te folosind utilizatorul agent creat.
- Selectați pictograma utilizatorului din colțul din dreapta > sus, selectați Consimțământul pentru permisiuni.
- Selectați meniul vertical pentru Mail> , căutați Mail.Read.Shared> , selectați Consimțământ și selectați Acceptare.
Rezumatul rolurilor necesare pentru utilizatorul agent creat
| Mediu | Roluri | Comentarii |
|---|---|---|
| Dataverse | Rolurile menționate permit agentului să interacționeze cu fluxurile Power Automate, variabilele de mediu și entitățile virtuale care sunt conectate la Dynamics 365 Finance | |
| Finanțe și operațiuni | Acest rol este necesar pentru ca agentul să creeze și să gestioneze înregistrările de cheltuieli în mediul aplicațiilor financiare și operaționale. Notă: ExpenseAgentRole este disponibil în versiunea aplicațiilor financiare și operaționale de la 10.0.44 (10.0.2263.81) și 10.0.45 (10.0.2345.6) și cu Copilot pentru aplicații financiare și operațiuni versiunea 1.0.3121.1 |
|
| Accesul la cutia poștală partajată utilizând Exploratorul grafic | Mail.Read.Shared | Permisiunea Microsoft Graph care permite agentului să citească confirmările din cutia poștală partajată configurată în timpul execuției fluxului |
Pasul 4: Configurați cutia poștală partajată
Agentul de cheltuieli utilizează o cutie poștală partajată pentru a primi și procesa e-mailurile de primire. Un utilizator cu rolul de Administrator Exchange trebuie să creeze și să configureze această cutie poștală în Microsoft 365 Admin Center.
Pentru a crea și configura cutia poștală partajată, urmează acești pași:
Conectați-vă la Centrul de administrare Microsoft 365 utilizând un cont de administrator Exchange.
În panoul din stânga, selectați Echipe și grupuri>cutii poștale partajate.
Sfat
S-ar putea să fie nevoie să selectezi Arată totul pentru a extinde lista completă.
Selectați Adăugați o cutie poștală partajată.
Introduceți un nume și o adresă de e-mail pentru cutia poștală partajată.
Selectați Salvați modificările.
Sub Pașii următori, selectați Adăugare membri la această cutie poștală partajată. (Managementul membrilor poate dura câteva minute pentru a deveni disponibil.)
Selectați Adăugați membri
Selectați utilizatorul agent creat și orice alte persoane care ar trebui să monitorizeze cutia poștală și selectați Adăugare.
Selectați Închidere.
Notă
Folosești adresa de email a cutiei poștale partajate în pasul următor. După ce configurezi căsuța poștală partajată, trebuie să furnizezi adresa de email și calea folderului (implicit setată pe Inbox) ca variabile de mediu atunci când configurezi Agentul de Timp și Cheltuieli. Pentru mai multe informații, vezi Pasul 5: Configurarea Agentului de Cheltuieli.
Pasul 5: Configurarea agentului de cheltuieli
Aveți două opțiuni pentru configurarea agentului de cheltuieli:
- Opțiunea A: Folosește un script PowerShell (recomandat)
- Opțiunea B: Efectuați configurarea manuală în Power Apps (fără PowerShell)
Importantă
Înainte de a continua instalarea Excost Agent, asigurați-vă că agentul este aprovizionat cu succes în Microsoft Copilot Studio.
Pentru a verifica că agentul este aprovizionat cu succes, urmează acești pași:
- Conectați-vă la Microsoft Copilot Studio și selectați mediul dvs.
- Accesați Agenți și căutați ExpenseAgent-Line (Previzualizare).
- Verifică dacă butonul Publish este activat.
- Dacă este activat, continuați cu instalarea. Dacă este dezactivat, așteptați până când agentul este furnizat.
- Repetați acești pași pentru a verifica dacă Expense Entry Agent (Previzualizare) este activat.
Sfat
Dacă aprovizionarea aplicației Copilot finance and operations durează mai mult de 5-6 ore, dezinstalează și reinstalează aplicația pentru a rezolva eventualele întârzieri în configurare. Pentru mai multe informații, consultați secțiunea Uninstall Expoint Agent la finalul acestui articol.
Opțiunea A: Utilizați un script PowerShell (recomandat)
Configurarea manuală a agentului implică crearea și conectarea conexiunilor, activarea fluxurilor Power Automate și publicarea soluției. Acest proces poate consuma mult timp și este susceptibil la erori. Pentru a automatiza configurarea, folosește un script PowerShell după actualizarea parametrilor necesari.
Scriptul PowerShell automatizează următoarele activități:
- Actualizează variabilele de mediu necesare.
- Leagă conexiunile Microsoft Power Platform cu referințele conexiunii soluției.
- Activează toate fluxurile Power Automate de care Agentul de Timp și Cheltuieli are nevoie.
- Publică agenții Copilot.
- Publică soluția Dataverse.
Înainte de a rula scriptul, trebuie să creați conexiuni , deoarece trebuie să furnizați ID-ul conexiunii pentru fiecare conector din fișierul install.ps1. Pentru a crea aceste conexiuni, urmează acești pași folosind utilizatorul agent creat.
- Conectează-te la portalul Power Apps Maker folosind noul utilizator agent creat și selectează mediul tău.
- În panoul din stânga, selectați Mai multe și selectați Conexiuni.
- Selectează Conexiune nouă și caută folosind Numele Conexiunii din tabelul următor (de exemplu, Office 365 Outlook).
- Selectați conectorul corespunzător din listă și creați-l.
- Odată ce conexiunea este creată, notați utilizatorul cu care a fost creată conexiunea. În mod ideal, ar trebui să fie ID-ul de utilizator al agentului creat. Actualizează acest ID de utilizator în fișierul de instalare pe care îl creezi în pasul următor.
- Repetați pașii 3 și 4 pentru fiecare dintre conexiunile necesare rămase enumerate în tabelul următor.
| Nume conexiune | Formate URL de conexiune |
|---|---|
| Perspectiva Office 365 | https://make.powerapps.com/environments/environmentID/connections / shared_office365/connectionID/detalii |
| Utilizatorii Office 365 | https://make.powerapps.com/environments/environmentID/connections / shared_office365users/connectionID/detalii |
| Echipe Microsoft | https://make.powerapps.com/environments/environmentID/connections / shared_teams/connectionID/detalii |
| Microsoft Dataverse | https://make.powerapps.com/environments/environmentID/connections / shared_commondataserviceforapps/connectionID/detalii |
| Microsoft Copilot Studio (previzualizare) | https://make.powerapps.com/environments/environmentID/connections / shared_microsoftcopilotstudio/connectionID/detalii |
Informații de care aveți nevoie pentru a crea fișierul de instalare
Pentru a crea fișierul de instalare -install.ps1, aveți la dispoziție următoarele informații. (Puteți consulta următorul tabel pentru referință.)
| Parametru | Alte detalii |
|---|---|
| ID-ul mediului Dataverse | Introduceți ID-ul de mediu pe care îl obțineți de la centrul de administrare Power Platform. Valoarea eșantionului: xxxx-xxxx-xxxx-xxx-xxxxxxxxxx |
| URL-ul mediului Dataverse | Introduceți adresa URL a mediului din centrul de administrare Power Platform. Notă: Asigurați-vă că aveți https:// la început și fără bară oblică "/" la sfârșit. Valoarea eșantionului: https://org123.crm.contoso.com |
| Adresa URL a instanței de finanțe și operațiuni | Introduceți detaliile mediului financiar și operațional în următorul format. Valoarea eșantionului: https://org123.contoso.com Notă: Asigurați-vă că aveți https:// la început și fără bară oblică "/" la sfârșit. |
| OutlookFolderPath | Introduceți calea folderului creată în cutia poștală partajată. Dacă nu este creat niciun alt folder, acesta este setat ca Inbox în mod implicit. Valoare eșantion: Inbox Ca o bună practică, creează un folder separat pentru gestionarea cheltuielilor |
| ID adresă cutie poștală | Introduceți adresa de e-mail a noului cutii poștale partajate create Valoarea eșantionului: expenseagent@contoso.com |
| Numele conexiunii Microsoft Dataverse Numele conexiunii Microsoft Copilot Studio Numele conexiunii Microsoft Office Outlook Numele conexiunii utilizatorilor Microsoft Office 365 Numele conexiunii Microsoft Teams |
Introducerea tuturor numelor de conexiune este aceeași și reprezintă ID-ul de email al utilizatorului agent creat. Valoarea eșantionului: createdexpenseagentuser@contoso.com |
Creați fișierul script de instalare
Creează un fișier de script de instalare copiind următorul cod. Introdu variabilele de mediu necesare în script, apoi rulează scriptul folosind PowerShell.
Notă
Pune fișierul scriptului de instalare pe desktopul local. Nu-l stoca în One Drive.
Creează un fișier script PowerShell cu următorul cod. Actualizează parametrii menționați înainte de a rula scriptul.
Sfat
Când Mandatory = $true, PowerShell îți cere să introduci parametrii interactiv, astfel încât să nu fie nevoie să-i actualizezi direct în fișierul script.
Dacă doriți să evitați introducerea manuală și să predefiniți parametrii în cadrul scriptului de instalare, setați Mandatory = $false în secțiunea Param a următorului cod exemplu.
Copiază codul următor în fișierul tău de script de instalare și salvează-l ca 'Install.ps1'. Actualizează variabilele din câmpurile parametrilor corespunzători din secțiunea param. Trebuie să actualizezi 10 variabile.
Sfat
Utilizați tabelul anterior ca referință și înlocuiți toate valorile eșantionului cu detaliile respective.
#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
}
Pentru a declanșa fișierul PowerShell, urmează acești pași:
- Open PowerShell (versiune minimă necesară - PowerShell 7).
- Mergi la locația unde ai salvat fișierul. (Utilizați comanda cd <file location>).
- Declanșați scriptul de instalare. (Utilizați comanda '.\Install.ps1').
- Urmează instrucțiunile pentru a te conecta pe Azure.
- După ce te autentifizi, s-ar putea să fie nevoie să autorizezi încă o dată. (Utilizați ID-ul de utilizator al agentului creat.).
Așteaptă ca scriptul să ruleze complet și caută mesajul Configurarea agentului finalizată cu succes!
Notă
Scriptul precedent efectuează următoarele acțiuni:
- Setează variabilele de mediu.
- Verifică și leagă referințele de conexiune.
- Activează fluxurile Power Automate.
- Publică agenții Copilot necesari.
- Publică soluția Dataverse.
După ce scriptul rulează cu succes, Expense Agent este complet configurat și gata de utilizare.
Opțiunea B: Configurare manuală în Power Apps (fără PowerShell)
Dacă nu vrei să folosești scriptul PowerShell, poți configura manual Expense Agent prin Power Apps. Acest proces implică actualizarea variabilelor de mediu, activarea fluxurilor Power Automate și publicarea soluției.
Actualizarea variabilelor de mediu
Pentru a actualiza variabilele de mediu, urmează acești pași:
conectați-vă la Power Apps și selectați mediul dvs.
Selectați Soluții, apoi deschideți Soluție implicită (sau soluția în care este instalat agentul).
Accesați Variabile de mediu și setați următoarele valori.
Nume variabilă Descriere Calea folderului Outlook Expense Agent Specificați calea folderului de monitorizat în cutia poștală partajată (în mod implicit, Inbox). ID adresă cutie poștală partajată agent de cheltuieli Specificați adresa de e-mail a cutiei poștale partajate. Pentru a utiliza cutia poștală a utilizatorului conectat, introduceți NA. Adresa URL a instanței Finance and Operations Specificați adresa URL a mediului aplicațiilor financiare și operaționale (de exemplu, https://org123.contoso.com).
Activați Power Automate fluxurile
Agentul de cheltuieli se bazează pe următoarele fluxuri Power Automate:
- Verificarea reîncercării de intrare a cheltuielilor
- Configurarea cheltuielilor
- Obțineți folderul Outlook de cheltuieli
- Generați raportul de cheltuieli
- Trimiterea cardului adaptiv pentru raportul de cheltuieli
- Cheltuielile pentru potrivirea auto
- Procesați e-mailurile
- Extragerea ID-urilor de primire neatașate pentru invocarea copilot
- Extrageți ieșirea chitanțelor neatașate folosind pluginul Dataverse
- Generați linie de cheltuieli
- Generați linie de cheltuieli fără ID de proiect și ID de stare
- Identificarea ID-urilor de proiect
- Evenimente din calendarul utilizatorilor
- Procesați raportul de cheltuieli folosind copilot
- Invocați agentul de cheltuieli pentru procesarea chitanțelor
Pentru a permite fluxurile, urmează acești pași:
Conectați-vă la Power Automate și selectați mediul dvs.
Selectați Fluxurile mele.
Pentru fiecare dintre cele 15 fluxuri din lista anterioară, urmează acești pași:
- Găsiți fluxul.
- Selectați Editare.
- Comutați la vizualizarea Proiectant vechi dezactivând opțiunea Proiectant nou .
- Autentificați toate conexiunile necesare (până când apar bife verzi).
- Selectați Continuare, apoi selectați Salvare.
- Selectați Activare pentru a activa fluxul.
Publicarea soluției
După ce terminați de configurat toate variabilele și fluxurile de mediu, urmați acești pași pentru a publica soluția.
- În Power Apps, accesați Soluții.
- Selectați mediul și soluția.
- Selectați Publicați toate personalizările.
Când finalizezi acești pași, Agentul de Cheltuieli este complet configurat și gata de utilizare.
Pasul 6: Activați agentul de cheltuieli în Microsoft Teams (opțional)
Pentru a permite comunicarea bazată pe Teams pentru Excost Agent, adăugați canalul Teams la agent în Power Apps. Agentul poate apoi trimite carduri adaptive prin Teams.
Activarea canalului Teams
Pentru a activa canalul Teams, urmează acești pași:
- Conectați-vă la Copilot Studio și selectați mediul corect.
- Pe fila Agenți , selectați Agent de introducere a cheltuielilor.
- În vizualizarea agentului, pe fila Canale , selectați Teams și Microsoft 365 Copilot.
- Selectați Adăugare canal pentru a activa integrarea Teams și urmați pașii din secțiunea Configurați disponibilitatea aplicației Teams pentru a configura cine doriți să partajeze aplicația.
Aflați mai multe în Deschideți panoul de configurare pentru canalul Teams + Microsoft 365.
Configurarea disponibilității aplicației Teams
Pentru a configura disponibilitatea aplicațiilor Teams, urmează acești pași:
După crearea aplicației Teams, selectați Opțiuni de disponibilitate.
Selectați cu cine doriți să partajați aplicația:
- Utilizatori specifici din cadrul organizației
- Întreaga organizație
Trimiteți aplicația pentru aprobare.
Publicarea aplicației în centrul de administrare Teams
Pentru a publica aplicația în centrul de administrare Teams, urmează acești pași:
- conectați-vă la Centrul de administrare Teams.
- Mergi la aplicația > Teams Gestionează aplicațiile. Caută "cheltuială" și selectează aplicația Exper Entry Agent unde starea aplicației este blocată.
- Selectați Publicare pentru a debloca aplicația. Odată ce acțiunea de publicare se finalizează cu succes, asigură-te că starea aplicației se schimbă în neblocată.
Aflați mai multe în Conectați și configurați un agent pentru Teams și Microsoft 365.
Când finalizezi acești pași, agentul tău de cheltuieli este gata de utilizare.
Notă
De asemenea, puteți oferi feedback asupra liniilor de cheltuieli generate de agenți și rapoartelor folosind pictogramele cu degetul mare în sus și în jos și fereastra pop-up de feedback din mediul Dynamics 365 Finance.
Dezinstalați Expense Agent
Pentru a dezinstala Excost Agent, urmează acești pași:
- Conectează-te la portalul Microsoft Power Apps Maker.
- Selectați Soluții, căutați msdyn_ExpenseAI, selectați cele trei puncte și selectați Ștergere.
- Caută msdyn_FnOCopilotAnchor și șterge soluția.