Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
- Ini adalah fitur pratinjau siap produksi.
- Pratinjau siap produksi tunduk pada ketentuan penggunaan tambahan.
Berlaku untuk Dynamics 365 Project Operations yang Terintegrasi dengan ERP dan Dynamics 365 Project Operations untuk manufaktur
Agen Pengeluaran menyatukan kemampuan dari Microsoft Dynamics 365 Project Operations, aplikasi keuangan dan operasi, Microsoft Copilot Studio, Power Automate, dan Dataverse untuk mengotomatiskan alur kerja pemrosesan pengeluaran dengan menggunakan AI. Fitur ini membantu menghemat waktu dan mengurangi upaya manual dengan memungkinkan sistem Anda memproses tanda terima dan menghasilkan baris pengeluaran dan laporan pengeluaran untuk pengguna. Ini menggunakan konektor Microsoft Power Platform untuk integrasi dengan Outlook, Microsoft Teams, kalender pengguna, dan lingkungan aplikasi keuangan dan operasi melalui entitas virtual Dataverse.
Agen Pengeluaran mencakup beberapa alur, tiga di antaranya berfungsi sebagai orkestrator inti:
- Proses Email – Alur ini memindai folder kotak surat yang dikonfigurasi setiap jam dan menyimpan lampiran sebagai tanda terima yang tidak terlampir di Dynamics 365 Finance.
- Ekstrak ID Tanda Terima – Alur ini mengambil tanda terima yang tidak terlampir dan memicu agen untuk mengekstrak detail tanda terima dan membuat baris pengeluaran yang tidak terlampir.
- Proses Laporan Pengeluaran – Alur ini mengonversi baris pengeluaran yang tidak terlampir dan menghasilkan laporan pengeluaran, berdasarkan Grup laporan berdasarkan konfigurasi yang Anda tetapkan dalam aplikasi untuk setiap badan hukum.
Selain itu, agen terintegrasi dengan Microsoft Teams, memungkinkan penggunaan kartu adaptif untuk peninjauan dan pengiriman laporan pengeluaran.
Agen mengandalkan beberapa konektor Microsoft Power Platform. Konektor ini secara otomatis direferensikan dalam alur Power Automate yang disediakan.
- Outlook (Office 365) – Konektor ini mengakses kotak surat bersama untuk mengekstrak tanda terima.
- Dataverse (Entitas Virtual) – Konektor ini terintegrasi dengan aplikasi keuangan dan operasi melalui entitas virtual.
- Microsoft Copilot Studio – Konektor ini memanggil model AI untuk mengekstrak informasi tanda terima.
- Microsoft Teams – Konektor ini mengirimkan kartu adaptif untuk interaksi pengguna (jika integrasi Teams diaktifkan).
- Pengguna Microsoft 365 – Konektor ini mengambil detail kalender pengguna (opsional, jika penguraian tanda terima sadar konteks).
Prasyarat
- Lingkungan keuangan dan operasional: Anda memerlukan setidaknya versi 10.0.44 (10.0.2263.175 dan yang lebih baru) atau 10.0.45 (10.0.2345.115 dan yang lebih baru) atau 10.0.46 (10.0.2428.69 dan yang lebih baru) dari lingkungan keuangan dan operasi untuk menginstal agen.
- Peran yang diperlukan untuk menyiapkan pengguna Agen Pengeluaran: Untuk menyelesaikan langkah-langkah dalam artikel ini, Anda harus menjadi administrator sistem organisasi dan memiliki peran berikut untuk menyiapkan pengguna agen pengeluaran untuk menginstal Agen Pengeluaran.
| System | Role | Komentar |
|---|---|---|
| pusat admin Power Platform | Administrator sistem |
|
| Keuangan dan operasi | Administrator sistem |
|
| Microsoft 365 | Administrator Exchange dan Administrator Pengguna |
|
| Pusat admin Teams | Administrator Teams | Diperlukan jika Anda berencana untuk mengaktifkan integrasi Microsoft Teams |
Langkah-langkah untuk menyiapkan Agen Pengeluaran
Untuk menginstal dan menyiapkan Agen Pengeluaran, ikuti langkah-langkah berikut:
- Instal Copilot untuk aplikasi keuangan dan operasi.
- Aktifkan fitur agen di lingkungan Anda.
- Buat pengguna pengeluaran untuk eksekusi agen.
- Menyiapkan kotak surat bersama.
- Siapkan Agen Pengeluaran.
- Aktifkan Agen Pengeluaran di Microsoft Teams (Opsional - jika Anda memerlukan integrasi Microsoft Teams)
Bagian berikut menjelaskan setiap langkah secara rinci.
Langkah 1: Instal Copilot untuk aplikasi keuangan dan operasi
Agen Pengeluaran tersedia sebagai bagian dari paket aplikasi Copilot untuk keuangan dan operasi. Setelah menginstal paket ini di lingkungan Anda, Anda secara otomatis mendapatkan semua aset yang diperlukan, termasuk agen, variabel lingkungan, dan alur Power Automate.
Untuk menginstal aplikasi yang diperlukan, ikuti langkah-langkah berikut:
- Buka pusat admin Power Platform di browser Anda.
- Dari daftar lingkungan, pilih nama lingkungan tempat Anda ingin menginstal aplikasi.
- Pada halaman detail lingkungan (BUKAN dari navigasi sebelah kiri), buka bagian Sumber Daya dan pilih aplikasi Dynamics 365.
- Cari aplikasi Copilot untuk keuangan dan operasi dalam daftar aplikasi Dynamics 365. Jika sudah diinstal dan pembaruan tersedia, pilih tombol Perbarui .
- Jika aplikasi tidak tercantum di bawah aplikasi Dynamics 365, pilih Instal aplikasi, pilih Copilot untuk aplikasi keuangan dan operasi, dan ikuti petunjuk untuk menyelesaikan penginstalan.
- Copilot untuk aplikasi Keuangan dan Operasi harus 1.0.3231.4 atau lebih baru
Nota
Pelajari selengkapnya tentang cara mengaktifkan Copilot di lingkungan Anda di Mengaktifkan kemampuan Copilot di aplikasi keuangan dan operasi.
Petunjuk / Saran
Untuk memverifikasi apakah paket berhasil diinstal, ikuti langkah-langkah berikut:
- Buka portal > pembuat Power Apps, pilih lingkungan > Anda, pilih Solusi > , Lihat riwayat > , pencarian dan pilih msdyn_ExpenseAI > Detail.
- Periksa bidang Hasil .
- Jika hasilnya menunjukkan Berhasil, paket telah diinstal dengan benar.
- Jika hasilnya tidak menunjukkan Berhasil, penginstalan gagal.
- Jika penginstalan gagal, hapus msdyn_FnOCopilotAnchor (lihat bagian penghapusan pemasangan) dan instal aplikasi Copilot untuk keuangan dan operasi lagi.
Langkah 2: Aktifkan fitur agen di lingkungan Anda
Setelah Anda menginstal paket aplikasi Copilot untuk keuangan dan operasi, aktifkan Agen Pengeluaran dari dalam lingkungan Dataverse dan keuangan dan operasi Anda.
Aktifkan fitur di Dataverse
Nyalakan bendera fitur Copilot di pusat admin Power Platform. Untuk mengaktifkan bendera fitur Copilot, ikuti langkah-langkah berikut:
- Buka pusat admin Power Platform.
- Pilih Lingkungan>, pilih lingkungan > Anda, Pengaturan>Produk>, pilih Fitur.
- Konfirmasikan bahwa bendera fitur Copilot diaktifkan.
Aktifkan fitur di lingkungan keuangan dan operasi Anda
Untuk mengaktifkan agen di aplikasi keuangan dan operasi, ikuti langkah-langkah berikut:
- Masuk ke lingkungan keuangan dan operasi Anda.
- Buka Manajemen Fitur, dan aktifkan fitur Beranda Imersif dan fitur Manajemen Agen .
- Untuk mengonfigurasi Agen Pengeluaran (penyiapan per badan hukum), bukaParameter Manajemen Pengeluaran>>Pengeluaran>.
- Pada tab Agen Entri Pengeluaran , konfigurasikan parameter seperti yang ditunjukkan pada tabel berikut.
| Parameter-parameternya | Nilai | Komentar |
|---|---|---|
| Aktifkan Agen Pengeluaran untuk badan hukum saat ini | Yes | Beralih ke Ya untuk mengaktifkan agen untuk badan hukum saat ini. |
| Frekuensi | Harian atau Mingguan | Konfigurasikan frekuensi untuk membuat laporan pengeluaran secara otomatis di organisasi Anda. |
| Laporan Grup berdasarkan | Perjalanan atau Proyek | Konfigurasikan untuk mengelompokkan pengeluaran berdasarkan proyek atau perjalanan. |
Langkah 3: Membuat pengguna agen pengeluaran untuk eksekusi agen
Buat pengguna agen pengeluaran khusus untuk memastikan bahwa agen berjalan secara independen dari identitas karyawan mana pun. Pendekatan ini membantu keamanan, pengelolaan, dan pemeliharaan jangka panjang. Meskipun Anda dapat menggunakan akun pengguna yang ada yang memiliki hak istimewa yang diperlukan, gunakan identitas milik sistem.
Membuat pengguna Agen Pengeluaran di ID Microsoft Entra
- Masuk ke portal Azure.
- Dari layanan Azure yang tersedia, pilih ID Microsoft Entra.
- Di bawah ID Microsoft Entra, buat pengguna baru.
- Pilih Tambahkan>Pengguna>Buat pengguna baru, dan masukkan detail berikut.
- Nama utama pengguna
- Pilih domain yang tepat
- Nama tampilan
- Kata sandi
- Tandai Akun diaktifkan
- Untuk melihat detail dan menyelesaikan proses pembuatan pengguna, pilih Tinjau + buat, lalu pilih Buat.
- Dari halaman Pengguna (Kelola > Pengguna), pilih pengguna, dan halaman tampilan detail.
- Pilih Edit properti, navigasikan ke tab Pengaturan , dan isi lokasi penggunaan yang sesuai.
Nota
Bergantung pada kebijakan organisasi Anda, Anda mungkin diminta untuk mengubah kata sandi dan menyiapkan autentikasi multifaktor (MFA). Ikuti langkah-langkah seperti biasa untuk mengubah kata sandi dan menyiapkan MFA.
Menetapkan lisensi yang diperlukan ke pengguna Agen Pengeluaran
Agar berhasil menginstal Agen Pengeluaran, tetapkan lisensi berikut ke pengguna agen pengeluaran:
- Lisensi Anggota Dynamics 365 Teams
- Microsoft 365 Business Basic atau lisensi apa pun yang mencakup Microsoft Teams dan Outlook (misalnya, Office 365 E5 dengan tim)
- Power Apps Premium
Untuk menetapkan lisensi, ikuti langkah-langkah berikut:
- Masuk ke pusat admin Microsoft 365 dengan pengguna yang memiliki akses untuk menetapkan lisensi yang merupakan pengguna dengan Administrator Lisensi atau lebih tinggi.
- PilihLisensi>>Lisensi Anggota Dynamics 365 Teams.
- Pilih +Tetapkan lisensi.
- Cari pengguna agen pengeluaran yang dibuat pada langkah sebelumnya.
- Pilih Tetapkan untuk menyelesaikan penetapan lisensi.
- Ikuti langkah 2 hingga 5 untuk lisensi lainnya – Microsoft 365 Business Basic dan Power Apps Premium juga.
Nota
Pelajari lebih lanjut cara memeriksa dan menetapkan lisensi di halaman Menggunakan halaman Pengguna aktif untuk menetapkan atau membatalkan penetapan lisensi.
Menambahkan pengguna ke lingkungan Power Platform
Untuk menambahkan pengguna ke lingkungan Power Platform, ikuti langkah-langkah berikut:
Masuk ke pusat admin Power Platform, dan pilih lingkungan yang sesuai.
Petunjuk / Saran
Halaman ini memberikan informasi terkait ID Lingkungan untuk Dataverse, URL Lingkungan untuk Dataverse, URL keuangan dan operasi. Simpan nilai-nilai ini untuk digunakan di bagian selanjutnya.
Buka Akses > Pengguna > Lihat semua.
Pilih Tambahkan pengguna, masukkan pengguna agen yang baru dibuat, dan pilih Tambahkan.
Pada halaman Kelola peran keamanan , tambahkan peran berikut.
- Peran Agen AI Pengeluaran
- Manajer Konfigurasi Agen Keuangan dan Operasi
- Penyesuai Sistem
Untuk mengonfirmasi penetapan peran, pilih Simpan.
Peran ini menyediakan akses ke komponen Dataverse dan Power Automate yang diperlukan agen untuk berfungsi.
Petunjuk / Saran
Jika pengguna sudah ada dan Anda hanya perlu menetapkan peran, buka pusat admin Power Platform, dan pilih lingkungan yang sesuai.
- Buka Akses > Pengguna > Lihat semua.
- Pilih pengguna agen yang dibuat.
- Pilih Kelola peran, dan tetapkan peran.
Tetapkan peran yang diperlukan dalam lingkungan keuangan dan operasi
Untuk menetapkan peran ExpenseAgentRole di lingkungan keuangan dan operasi, ikuti langkah-langkah berikut:
- Di lingkungan keuangan dan operasi, buka Pengguna administrasi> sistem.
- Buat rekaman pengguna untuk pengguna agen.
- Setelah membuat pengguna, buka bagian peran pengguna, pilih Tetapkan peran, dan cari ExpenseAgentRole.
- Pilih Simpan.
Nota
ExpenseAgentRole tersedia dalam versi aplikasi keuangan dan operasi dari 10.0.44 (10.0.2263.81) dan 10.0.45 (10.0.2345.6) dan dengan Copilot untuk aplikasi keuangan dan operasi versi 1.0.3121.1
Menetapkan akses ke akses kotak pesan bersama
Pengguna agen harus memiliki izin Microsoft Graph Mail.Read.Shared. Izin ini memungkinkan agen untuk membaca tanda terima dari kotak pesan bersama yang dikonfigurasi selama eksekusi alur.
Untuk menetapkan akses ke akses kotak pesan bersama, ikuti langkah-langkah berikut:
- Buka Microsoft Graph Explorer dan masuk dengan menggunakan pengguna agen yang dibuat.
- Pilih ikon pengguna di sudut > kanan atas, pilih Izin izin.
- Pilih menu drop-down untuk Mail> , cari Mail.Read.Shared,> pilih Consent, dan pilih Terima.
Ringkasan peran yang diperlukan untuk Pengguna Agen yang Dibuat
| Lingkungan | Peran | Komentar |
|---|---|---|
| Dataverse | Peran yang disebutkan memungkinkan agen untuk berinteraksi dengan alur Power Automate, variabel lingkungan, dan entitas virtual yang terhubung ke Dynamics 365 Finance | |
| Keuangan dan operasi | Peran ini diperlukan bagi agen untuk membuat dan mengelola entri pengeluaran di lingkungan aplikasi keuangan dan operasi. Catatan: ExpenseAgentRole tersedia dalam versi aplikasi keuangan dan operasi dari 10.0.44 (10.0.2263.81) dan 10.0.45 (10.0.2345.6) dan dengan aplikasi Copilot untuk aplikasi keuangan dan operasi versi 1.0.3121.1 |
|
| Akses kotak pesan bersama menggunakan penjelajah Graph | Mail.Baca.Dibagikan | Izin Microsoft Graph yang memungkinkan agen membaca tanda terima dari kotak pesan bersama yang dikonfigurasi selama eksekusi alur |
Langkah 4: Siapkan kotak surat bersama
Agen Pengeluaran menggunakan kotak surat bersama untuk menerima dan memproses email tanda terima. Pengguna dengan peran Administrator Exchange perlu membuat dan mengonfigurasi kotak pesan ini di Pusat Admin Microsoft 365.
Untuk membuat dan mengonfigurasi kotak pesan bersama, ikuti langkah-langkah berikut:
Masuk ke Pusat Admin Microsoft 365 dengan menggunakan akun Admin Exchange.
Di panel kiri, pilihKotak pesan bersama>.
Petunjuk / Saran
Anda mungkin perlu memilih Tampilkan semua untuk memperluas daftar lengkap.
Pilih Tambahkan kotak pesan bersama.
Masukkan nama dan alamat email untuk kotak surat bersama.
Pilih Simpan perubahan.
Di bawah Langkah berikutnya, pilih Tambahkan anggota ke kotak pesan bersama ini. (Manajemen anggota mungkin membutuhkan waktu beberapa menit untuk tersedia.)
Pilih Tambahkan anggota
Pilih pengguna agen yang dibuat dan orang lain yang harus memantau kotak pesan, dan pilih Tambahkan.
Pilih Tutup.
Nota
Anda menggunakan alamat email kotak surat bersama di langkah berikutnya. Setelah menyiapkan kotak pesan bersama, Anda harus memberikan alamat email dan jalur folder (secara default diatur ke Kotak Masuk) sebagai variabel lingkungan saat Anda mengonfigurasi Agen Waktu dan Pengeluaran. Untuk informasi selengkapnya, lihat Langkah 5: Menyiapkan Agen Pengeluaran.
Langkah 5: Siapkan Agen Pengeluaran
Anda memiliki dua opsi untuk menyiapkan Agen Pengeluaran:
- Opsi A: Menggunakan skrip PowerShell (disarankan)
- Opsi B: Lakukan penyiapan manual di Power Apps (tanpa PowerShell)
Penting
Sebelum melanjutkan penginstalan Agen Pengeluaran, pastikan agen berhasil disediakan di Microsoft Copilot Studio.
Untuk memverifikasi agen berhasil disediakan, ikuti langkah-langkah berikut:
- Masuk ke Microsoft Copilot Studio dan pilih lingkungan Anda.
- Buka Agen dan cari ExpenseAgent-Line (Pratinjau).
- Pastikan tombol Terbitkan diaktifkan.
- Jika diaktifkan, lanjutkan dengan instalasi. Jika dinonaktifkan, tunggu hingga agen disediakan.
- Ulangi langkah-langkah ini untuk memverifikasi Agen Entri Pengeluaran (Pratinjau) diaktifkan.
Petunjuk / Saran
Jika penyediaan aplikasi keuangan dan operasi Copilot membutuhkan waktu lebih dari 5-6 jam, hapus instalan dan instal ulang aplikasi untuk mengatasi potensi penundaan penyiapan. Untuk informasi selengkapnya, lihat bagian Menghapus Pemasangan Agen Pengeluaran di akhir artikel ini.
Opsi A: Gunakan skrip PowerShell (disarankan)
Penyiapan agen secara manual melibatkan pembuatan dan penautan koneksi, mengaktifkan alur Power Automate, dan menerbitkan solusi. Proses ini bisa memakan waktu dan rentan terhadap kesalahan. Untuk mengotomatiskan penyiapan, gunakan skrip PowerShell setelah memperbarui parameter yang diperlukan.
Skrip PowerShell mengotomatiskan tugas-tugas berikut:
- Memperbarui variabel lingkungan yang diperlukan.
- Menautkan koneksi Microsoft Power Platform dengan referensi koneksi solusi.
- Mengaktifkan semua alur Power Automate yang diperlukan Agen Waktu dan Pengeluaran.
- Menerbitkan agen Copilot.
- Memublikasikan solusi Dataverse.
Sebelum menjalankan skrip, Anda perlu membuat koneksi karena Anda perlu memberikan ID Koneksi untuk setiap konektor dalam file install.ps1. Untuk membuat koneksi ini, ikuti langkah-langkah ini menggunakan pengguna agen yang dibuat.
- Masuk ke portal pembuat Power Apps dengan menggunakan pengguna agen yang baru dibuat, dan pilih lingkungan Anda.
- Di panel kiri, pilih Lainnya dan pilih Koneksi.
- Pilih Koneksi baru dan cari dengan menggunakan Nama Koneksi dari tabel berikut (misalnya, Office 365 Outlook).
- Pilih konektor yang sesuai dari daftar dan buat.
- Setelah koneksi dibuat, perhatikan pengguna yang membuat koneksi. Idealnya ID pengguna agen yang dibuat. Perbarui ID pengguna ini dalam file penginstalan yang Anda buat di langkah berikutnya.
- Ulangi langkah 3 dan 4 untuk masing-masing sambungan yang diperlukan yang tersisa yang tercantum dalam tabel berikut.
| Nama Koneksi | Format URL Koneksi |
|---|---|
| Office 365 Outlook | https://make.powerapps.com/environments/environmentID/connections / shared_office365/connectionID/detail |
| Pengguna Office 365 | https://make.powerapps.com/environments/environmentID/connections / shared_office365users/connectionID/detail |
| Microsoft Teams | https://make.powerapps.com/environments/environmentID/connections / shared_teams/connectionID/detail |
| Microsoft Dataverse | https://make.powerapps.com/environments/environmentID/connections / shared_commondataserviceforapps/connectionID/detail |
| Microsoft Copilot Studio (pratinjau) | https://make.powerapps.com/environments/environmentID/connections / shared_microsoftcopilotstudio/connectionID/detail |
Informasi yang Anda perlukan untuk membuat file instalasi
Untuk membuat file instalasi - install.ps1, miliki informasi berikut yang tersedia. (Anda dapat merujuk ke tabel berikut untuk referensi.)
| Pengaturan | Detail lainnya |
|---|---|
| ID lingkungan Dataverse | Masukkan ID lingkungan yang Anda dapatkan dari pusat admin Power Platform. Nilai sampel: xxxx-xxxx-xxxx-xxxxxx-xxxxxxx |
| URL lingkungan Dataverse | Masukkan URL Lingkungan dari pusat admin Power Platform. Catatan: Pastikan https:// di awal dan tidak ada garis miring ke depan '/' di akhir. Nilai sampel: https://org123.crm.contoso.com |
| URL instans keuangan dan operasi | Masukkan detail lingkungan keuangan dan operasi dalam format berikut. Nilai sampel: https://org123.contoso.com Catatan: Pastikan https:// di awal dan tidak ada garis miring ke depan '/' di akhir. |
| OutlookFolderPath | Masukkan jalur folder yang dibuat di kotak surat bersama. Jika tidak ada folder lain yang dibuat, folder tersebut ditetapkan sebagai Kotak Masuk secara default. Nilai sampel: Kotak masuk Sebagai praktik terbaik, buat folder terpisah untuk pengelolaan pengeluaran |
| ID Alamat Kotak Surat | Masukkan alamat email kotak pesan bersama yang baru dibuat Nilai sampel: expenseagent@contoso.com |
| Nama koneksi Microsoft Dataverse Nama koneksi Microsoft Copilot Studio Nama koneksi Microsoft Office Outlook Nama koneksi Pengguna Microsoft Office 365 Nama koneksi Microsoft Teams |
Input ke semua nama koneksi sama dan merupakan ID email pengguna dari pengguna agen yang dibuat. Nilai sampel: createdexpenseagentuser@contoso.com |
Buat file skrip instalasi
Buat file skrip instalasi dengan menyalin kode berikut. Sisipkan variabel lingkungan yang diperlukan ke dalam skrip, lalu jalankan skrip menggunakan PowerShell.
Nota
Tempatkan file skrip instalasi di desktop lokal. Jangan simpan di One Drive.
Buat file skrip PowerShell dengan kode berikut. Perbarui parameter yang disebutkan sebelum menjalankan skrip.
Petunjuk / Saran
Saat Wajib = $true, PowerShell meminta Anda untuk memasukkan parameter secara interaktif, sehingga Anda tidak perlu memperbaruinya secara langsung dalam file skrip.
Jika Anda ingin menghindari input manual dan ingin menentukan parameter dalam skrip penginstalan, atur Wajib = $false di bagian Param dari kode sampel berikut.
Salin kode berikut ke dalam file skrip instalasi Anda dan simpan sebagai 'Install.ps1'. Perbarui variabel di bidang parameter masing-masing di bagian param. Anda perlu memperbarui 10 variabel.
Petunjuk / Saran
Gunakan tabel sebelumnya sebagai referensi dan ganti semua nilai sampel dengan detail Anda masing-masing.
#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
}
Untuk memicu file PowerShell, ikuti langkah-langkah berikut:
- Buka PowerShell (versi minimum diperlukan - PowerShell 7).
- Buka lokasi tempat Anda menyimpan file. (Gunakan perintah cd <file lokasi>).
- Picu skrip instalasi. (Gunakan perintah '.\Install.ps1').
- Ikuti petunjuk untuk masuk ke Azure.
- Setelah masuk, Anda mungkin perlu mengotorisasi sekali lagi. (Gunakan id pengguna agen yang dibuat.).
Tunggu hingga skrip berjalan sepenuhnya dan cari pesan Penyiapan agen berhasil diselesaikan!
Nota
Skrip sebelumnya melakukan tindakan berikut:
- Mengatur variabel lingkungan.
- Memverifikasi dan menautkan referensi koneksi.
- Mengaktifkan aliran Power Automate.
- Menerbitkan agen Copilot yang diperlukan.
- Memublikasikan solusi Dataverse.
Setelah skrip berhasil berjalan, Expense Agent sepenuhnya dikonfigurasi dan siap digunakan.
Opsi B: Menyiapkan secara manual di Power Apps (tanpa PowerShell)
Jika Anda tidak ingin menggunakan skrip PowerShell, Anda dapat mengonfigurasi Agen Pengeluaran secara manual melalui Power Apps. Proses ini melibatkan pembaruan variabel lingkungan, mengaktifkan alur Power Automate, dan menerbitkan solusi.
Memperbarui variabel lingkungan
Untuk memperbarui variabel lingkungan, ikuti langkah-langkah berikut:
Masuk Power Apps, dan pilih lingkungan Anda.
Pilih Solusi, lalu buka Solusi Default (atau solusi tempat agen diinstal).
Buka Variabel Lingkungan, dan atur nilai berikut.
Nama variabel Deskripsi Jalur Folder Outlook Agen Pengeluaran Tentukan jalur folder yang akan dipantau di kotak pesan bersama (secara default, Kotak Masuk). ID Alamat Kotak Surat Bersama Agen Pengeluaran Tentukan alamat email kotak surat bersama. Untuk menggunakan kotak pesan pengguna yang masuk, masukkan NA. URL Instans Keuangan dan Operasi Tentukan URL lingkungan aplikasi keuangan dan operasi (misalnya, https://org123.contoso.com).
Mengaktifkan Power Automate alur
Agen Pengeluaran mengandalkan alur Power Automate berikut:
- Pemeriksaan coba ulang entri pengeluaran
- Konfigurasi pengeluaran
- Dapatkan folder outlook pengeluaran
- Hasilkan laporan pengeluaran
- Kartu adaptif kirim laporan pengeluaran
- Biaya pencocokan otomatis
- Memproses email
- Mengekstrak ID tanda terima yang tidak terlampir untuk pemanggilan copilot
- Mengekstrak output tanda terima yang tidak terlampir menggunakan plugin Dataverse
- Hasilkan baris pengeluaran
- Hasilkan baris pengeluaran tanpa ID proyek dan ID status
- Mengidentifikasi ID proyek
- Acara kalender pengguna
- Memproses laporan pengeluaran menggunakan copilot
- Memanggil agen pengeluaran untuk pemrosesan tanda terima
Untuk mengaktifkan alur, ikuti langkah-langkah berikut:
Masuk ke Power Automate, dan pilih lingkungan Anda.
Pilih Alur Saya.
Untuk masing-masing dari 15 alur dalam daftar sebelumnya, ikuti langkah-langkah berikut:
- Temukan alurnya.
- Pilih Edit.
- Beralih ke tampilan Desainer Lama dengan menonaktifkan opsi Desainer Baru .
- Autentikasi koneksi yang diperlukan (hingga tanda centang hijau muncul).
- Pilih Lanjutkan lalu pilih Simpan.
- Pilih Aktifkan untuk mengaktifkan alur.
Publikasikan solusi
Setelah Anda selesai mengonfigurasi semua variabel dan alur lingkungan, ikuti langkah-langkah ini untuk menerbitkan solusi.
- Di Power Apps, buka Solusi.
- Pilih lingkungan dan solusi Anda.
- Pilih Publikasikan semua penyesuaian.
Saat Anda menyelesaikan langkah-langkah ini, Agen Pengeluaran sepenuhnya dikonfigurasi dan siap digunakan.
Langkah 6: Aktifkan Agen Pengeluaran di Microsoft Teams (Opsional)
Untuk mengaktifkan komunikasi berbasis Teams untuk Agen Pengeluaran, tambahkan saluran Teams ke agen di Power Apps. Agen kemudian dapat mengirim kartu adaptif melalui Teams.
Mengaktifkan saluran Teams
Untuk mengaktifkan saluran Teams, ikuti langkah-langkah berikut:
- Masuk ke Copilot Studio dan pilih lingkungan yang benar.
- Pada tab Agen , pilih Agen Entri Pengeluaran.
- Dalam tampilan agen, pada tab Saluran , pilih Teams dan Microsoft 365 Copilot.
- Pilih Tambahkan saluran untuk mengaktifkan integrasi Teams dan ikuti langkah-langkah di bagian Konfigurasikan ketersediaan aplikasi Teams untuk mengonfigurasi siapa yang ingin Anda bagikan aplikasi.
Pelajari selengkapnya di Buka panel konfigurasi untuk saluran Teams + Microsoft 365.
Mengonfigurasi ketersediaan aplikasi Teams
Untuk mengonfigurasi ketersediaan aplikasi Teams, ikuti langkah-langkah berikut:
Setelah aplikasi Teams dibuat, pilih Opsi Ketersediaan.
Pilih dengan siapa Anda ingin berbagi aplikasi:
- Pengguna tertentu dalam organisasi
- Seluruh organisasi
Kirim aplikasi untuk disetujui.
Menerbitkan aplikasi di pusat admin Teams
Untuk menerbitkan aplikasi di pusat admin Teams, ikuti langkah-langkah berikut:
- Masuk ke pusat admin Teams.
- Buka aplikasi > teams Kelola aplikasi. Cari "pengeluaran" dan pilih aplikasi Agen Entri Pengeluaran tempat status aplikasi diblokir.
- Pilih Terbitkan untuk membuka blokir aplikasi. Setelah tindakan publikasi berhasil diselesaikan, pastikan status Aplikasi berubah menjadi tidak diblokir.
Pelajari selengkapnya di Connect dan konfigurasikan agen untuk Teams dan Microsoft 365.
Setelah Anda menyelesaikan langkah-langkah ini, Agen Pengeluaran Anda siap digunakan.
Nota
Anda juga dapat memberikan umpan balik tentang baris dan laporan pengeluaran yang dihasilkan agen dengan menggunakan ikon jempol ke atas dan jempol ke bawah dan pop-up umpan balik dalam lingkungan Dynamics 365 Finance.
Menghapus Pemasangan Agen Pengeluaran
Untuk menghapus instalan Agen Pengeluaran, ikuti langkah-langkah berikut:
- Masuk ke portal pembuat Microsoft Power Apps.
- Pilih Solusi, cari msdyn_ExpenseAI, pilih tiga titik, dan pilih Hapus.
- Cari msdyn_FnOCopilotAnchor dan hapus solusinya.