Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
- Bu bir üretime hazır önizleme özelliğidir.
- Üretime hazır önizlemeler, ek kullanım koşullarına tabidir.
Üretim için ERP ve Dynamics 365 Project Operations ile entegre Dynamics 365 Project Operations için geçerlidir
Gider Aracısı, yapay zeka kullanarak gider işleme iş akışlarını otomatikleştirmek için Microsoft Dynamics 365 Project Operations, finans ve operasyon uygulamaları, Microsoft Copilot Studio, Power Automate ve Dataverse'den gelen yetenekleri bir araya getiriyor. Bu özellik, sisteminizin makbuzları işlemesine ve kullanıcılar için gider satırları ve gider raporları oluşturmasına olanak tanıyarak zamandan tasarruf etmeye ve el ile çabayı azaltmaya yardımcı olur. Dataverse sanal varlıkları aracılığıyla Outlook, Microsoft Teams, kullanıcı takvimleri ve finans ve operasyon uygulamaları ortamıyla tümleştirme için Microsoft Power Platform bağlayıcılarını kullanır.
Gider Aracısı, üçü temel düzenleyiciler olarak hizmet veren birden fazla akışı içerir:
- E-postaları İşleme – Bu akış, yapılandırılmış bir posta kutusu klasörünü saatte bir tarar ve ekleri Dynamics 365 Finance'da eklenmemiş alındı bilgileri olarak depolar.
- Makbuz Kimliklerini Ayıkla – Bu akış eklenmemiş makbuzları alır ve alındı bilgilerini ayıklamak ve eklenmemiş bir gider satırı oluşturmak için aracıyı tetikler.
- İşlem Gider Raporu – Bu akış, eklenmemiş gider satırlarını dönüştürür ve her tüzel kişilik için uygulamada ayarladığınız Yapılandırmaya göre grup raporları temelinde gider raporları oluşturur.
Ayrıca, aracı Microsoft Teams ile tümleştirildiğinden gider raporu incelemesi ve gönderimi için uyarlamalı kartların kullanılmasına olanak tanır.
Aracı, birkaç Microsoft Power Platform bağlayıcısını kullanır. Bu bağlayıcılara, sağlanan Power Automate akışlarında otomatik olarak başvurulur.
- Outlook (Office 365) – Bu bağlayıcı, alındı bilgilerini ayıklamak için paylaşılan posta kutusuna erişir.
- Dataverse (Sanal Varlıklar) – Bu bağlayıcı, sanal varlıklar aracılığıyla finans ve operasyon uygulamalarıyla tümleşir.
- Microsoft Copilot Studio – Bu bağlayıcı, makbuz bilgilerini ayıklamak için yapay zeka modellerini çağırır.
- Microsoft Teams – Bu bağlayıcı kullanıcı etkileşimleri için uyarlamalı kartlar gönderir (Teams tümleştirmesi etkinleştirildiyse).
- Microsoft 365 Kullanıcıları – Bu bağlayıcı, kullanıcı takvimi ayrıntılarını alır (makbuz ayrıştırma bağlama duyarlıysa isteğe bağlıdır).
Önkoşullar
- Finans ve operasyon ortamı: Aracıyı yüklemek için en az finans ve operasyon ortamının 10.0.44 (10.0.2263.175 ve üzeri) veya 10.0.45 (10.0.2345.115 ve üzeri) veya 10.0.46 (10.0.2428.69 ve üzeri) sürümüne ihtiyacınız vardır.
- Expense Agent kullanıcısını ayarlamak için gereken roller: Bu makaledeki adımları tamamlamak için kuruluşun sistem yöneticisi olmanız ve Gider Aracısı'nı yüklemek üzere gider aracısı kullanıcısını ayarlamak üzere aşağıdaki rollere sahip olmanız gerekir.
| System | Rol | Comments |
|---|---|---|
| Power Platform yönetim merkezi | Sistem yöneticisi |
|
| Finance and Operations | Sistem yöneticisi |
|
| Microsoft 365 | Exchange Yöneticisi ve Kullanıcı Yöneticisi |
|
| Teams yönetim merkezi | Teams Yöneticisi | Microsoft Teams tümleştirmesini etkinleştirmeyi planlıyorsanız gereklidir |
Gider Aracısı'nı ayarlama adımları
Expense Agent'ı yüklemek ve ayarlamak için şu adımları izleyin:
- Finans ve operasyon uygulamaları için Copilot'ı yükleyin.
- Ortamınızdaki aracı özelliklerini etkinleştirin.
- Aracı yürütme için bir gider kullanıcısı oluşturun.
- Paylaşılan posta kutusu ayarlama.
- Gider Aracısını ayarlama.
- Microsoft Teams'de Gider Aracısı'nı etkinleştirme (İsteğe bağlı - Microsoft Teams tümleştirmesine ihtiyacınız varsa)
Aşağıdaki bölümlerde her adım ayrıntılı olarak açıklanmaktadır.
1. Adım: Finans ve operasyon uygulamaları için Copilot'ı yükleyin
Gider aracısı, Copilot for finans ve operasyonlar apps paketinin bir parçası olarak kullanılabilir. Bu paketi ortamınıza yükledikten sonra aracı, ortam değişkenleri ve Power Automate akışları dahil olmak üzere tüm gerekli varlıkları otomatik olarak alırsınız.
Gerekli uygulamayı yüklemek için şu adımları izleyin:
- Tarayıcınızda Power Platform yönetim merkezine gidin.
- Ortam listesinden uygulamayı yüklemek istediğiniz ortam adını seçin.
- Ortamın ayrıntılar sayfasında (sol gezintiden DEĞİl ) Kaynaklar bölümüne gidin ve Dynamics 365 uygulamaları'nı seçin.
- Dynamics 365 uygulamaları listesinde Finans ve operasyon uygulamaları için Copilot öğesini arayın. Zaten yüklüyse ve bir güncelleştirme varsa Güncelleştir düğmesini seçin.
- Uygulama Dynamics 365 uygulamaları altında listelenmiyorsa Uygulamayı yükle'yi seçin, finans ve operasyon uygulamaları için Copilot'u seçin ve yönergeleri izleyerek yüklemeyi tamamlayın.
- Finans ve operasyon uygulamaları için Copilot 1.0.3231.4 veya üzeri olmalıdır
Uyarı
Copilot'ı ortamınızda etkinleştirme hakkında daha fazla bilgi için bkz. Finans ve operasyon uygulamalarında Copilot özelliklerini etkinleştirme.
Tavsiye
Paketin başarıyla yüklenip yüklenmediğini doğrulamak için şu adımları izleyin:
- Power Apps Maker Portal'a gidin > ortamınızı seçin > Çözümler'i seçin > Geçmişi görüntüle > arayın ve msdyn_ExpenseAI > Ayrıntılar'ı seçin.
-
Sonuç alanını denetleyin.
- Sonuç Başarılı'yı gösterirse paket doğru şekilde yüklenmiştir.
- Sonuç Başarılı'yı göstermezse yükleme başarısız olur.
- Yükleme başarısız olursa msdyn_FnOCopilotAnchor silin (kaldırma bölümüne bakın) ve finans ve operasyon uygulamaları için Copilot'u yeniden yükleyin.
Adım 2: Ortamınızdaki aracı özelliklerini etkinleştirin
Finans ve operasyon uygulamaları için Copilot paketini yükledikten sonra, Expense Agent'ı Dataverse ve finans ve operasyon ortamınızdan etkinleştirin.
Dataverse'te özellik etkinleştirme
Power Platform yönetim merkezinde Copilot özellik bayrağını açın. Copilot özellik bayrağını açmak için şu adımları izleyin:
- Power Platform yönetim merkezi'ne gidin.
- Ortamlar>'ı seçin, ortamınızı seçin >Ayarlar>Ürün>'ü seçin Özellikler'i seçin.
- Copilot özellik bayrağının açık olduğundan emin olun.
Finans ve operasyon ortamınızda özelliği etkinleştirme
Finans ve operasyon uygulamalarında aracıyı etkinleştirmek için şu adımları izleyin:
- Finans ve operasyon ortamınıza giriş yapın.
- Özellik Yönetimi'ne gidin ve Tam Ekran Giriş Sayfası özelliği ve Aracı Yönetimi özelliklerini etkinleştirin.
- Gider Aracısını yapılandırmak için (kurulum tüzel kişi başına yapılır), Gider Yönetimi>Kurulum>Genel>Gider Yönetimi parametreleri'ne gidin.
- Gider Girişi Aracısı sekmesinde, aşağıdaki tabloda gösterildiği gibi parametreleri yapılandırın.
| Parametreler | Değer | Comments |
|---|---|---|
| Geçerli tüzel kişilik için Gider Aracısı'nı etkinleştirme | Yes | Aracıyı geçerli tüzel kişilik için etkinleştirmek için Evet'e geçin. |
| Sıklık | Günlük veya Haftalık | Kuruluşunuzda gider raporlarını otomatik olarak oluşturmak için sıklığı yapılandırın. |
| Raporları gruplandırma ölçütü | Gezi veya Proje | Giderleri bir projeye veya geziye göre gruplandıracak şekilde yapılandırın. |
3. Adım: Aracı yürütmek için bir gider aracısı kullanıcısı oluşturun
Aracının herhangi bir çalışanın kimliğinden bağımsız olarak çalıştığından emin olmak için özel bir gider aracısı kullanıcısı oluşturun. Bu yaklaşım güvenlik, yönetilebilirlik ve uzun süreli bakım konusunda yardımcı olur. Gerekli ayrıcalıklara sahip mevcut bir kullanıcı hesabını kullanabilirsiniz ancak sisteme ait bir kimlik kullanın.
Microsoft Entra Id'de Expense Agent kullanıcısını oluşturma
- Azure portalınaoturum açın.
- Kullanılabilir Azure hizmetlerinden Microsoft Entra ID'yi seçin.
- Microsoft Entra ID altında yeni bir kullanıcı oluşturun.
-
Ekle>Kullanıcı>Yeni kullanıcı oluştur öğesini seçin ve aşağıdaki bilgileri girin.
- Kullanıcı asıl adı
- Doğru alan adını seçme
- Ekran adı
- Şifre
- Hesap etkinleştirildi işaretle
- Ayrıntıları görüntülemek ve kullanıcı oluşturma sürecini tamamlamak için İncele + oluştur'u seçin ve Oluştur'u seçin.
- Kullanıcı sayfasından (Yönet > Kullanıcılar) bir kullanıcı seçin ve ayrıntıları görüntüle sayfasını seçin.
- Özellikleri düzenle'yi seçin, Ayarlar sekmesine gidin ve uygun kullanım konumunu doldurun.
Uyarı
Kuruluş ilkenize bağlı olarak, parolanızı değiştirmeniz ve çok faktörlü kimlik doğrulaması (MFA) ayarlamanız gerekebilir. Parolayı değiştirmek ve MFA'yı ayarlamak için normalde yaptığınız adımları izleyin.
Gerekli lisansları Gider Aracısı kullanıcısına atama
Expense Agent'ı başarıyla yüklemek için gider aracısı kullanıcısına aşağıdaki lisansları atayın:
- Dynamics 365 Teams Members lisansı
- Microsoft 365 İş Temel veya Microsoft Teams ve Outlook'u kapsayan herhangi bir lisans (örneğin, Ekiplerle Office 365 E5)
- Power Apps Premium (Premium Sürümü)
Lisans atamak için şu adımları izleyin:
- Lisans Yöneticisi veya daha üst düzey yetkiye sahip bir kullanıcıyla Microsoft 365 yönetim merkezine giriş yapın.
- Faturalandırma>Lisanslar>Dynamics 365 Teams Üyeleri lisansı'nı seçin.
- +Lisans ata'yı seçin.
- Önceki adımda kullanıcının oluşturduğu gider aracısı için arama yapın.
- Lisans atamasını tamamlamak için Ata'yı seçin.
- Microsoft 365 İş Temel ve Power Apps Premium gibi diğer lisanslar için 2- 5. adımları izleyin.
Uyarı
Lisansların nasıl kontrol edileceği ve atanacağı hakkında daha fazla bilgi edinmek için Lisansları atamak veya atamalarını kaldırmak için Etkin kullanıcılar sayfasını kullanın konusuna bakın.
Kullanıcıyı Power Platform ortamına ekleme
Kullanıcıyı Power Platform ortamına eklemek için şu adımları izleyin:
Power Platform yönetim merkezine giriş yapın ve uygun ortamı seçin.
Tavsiye
Bu sayfa Dataverse için Ortam Kimliği, Dataverse için Ortam URL'si, finans ve operasyon URL'si ile ilgili bilgileri sağlar. Bu değerleri sonraki bölümlerde kullanmak üzere depolayın.
Erişim > Kullanıcılar > Tümünü gör'e gidin.
Kullanıcı ekle'yi seçin, yeni oluşturulan aracı kullanıcıyı girin ve Ekle'yi seçin.
Güvenlik rollerini yönet sayfasında aşağıdaki rolleri ekleyin.
- Gider AI Destekli Aracı Rolü
- Finans ve Operasyonlar Temsilci Yapılandırma Yöneticisi
- Sistem Özelleştirici
Rol atamasını onaylamak için Kaydet'i seçin.
Bu roller, aracının çalışması için gereken Dataverse ve Power Automate bileşenlerine erişim sağlar.
Tavsiye
Kullanıcı zaten varsa ve yalnızca rol atamanız gerekiyorsa Power Platform yönetim merkezine gidin ve uygun ortamı seçin.
- Erişim > Kullanıcılar > Tümünü gör'e gidin.
- Oluşturulan aracı kullanıcısını seçin.
- Rolleri yönet'i seçin ve rolleri atayın.
Finans ve operasyon ortamında gerekli rolü atama
Finans ve operasyon ortamında ExpenseAgentRole rolünü atamak için şu adımları izleyin:
- Finans ve operasyon ortamında Sistem yönetimi>Kullanıcılar'a gidin.
- Aracı kullanıcı için bir kullanıcı kaydı oluşturun.
- Kullanıcıyı oluşturduktan sonra roller bölümüne gidin, Rol ata'yı seçin ve ExpenseAgentRole araması yapın.
- Kaydetseçeneğini seçin.
Uyarı
ExpenseAgentRole, 10.0.44 (10.0.2263.81) ve 10.0.45 (10.0.2345.6) sürümlerindeki finans ve operasyon uygulamaları sürümlerinde ve Finans ve operasyon uygulamaları için Copilot sürümünde 1.0.3121.1 ile kullanılabilir
Paylaşılan posta kutusu erişimine erişim atama
Aracı kullanıcısının Mail.Read.Shared Microsoft Graph izni olmalıdır. Bu izin, aracının akış yürütme sırasında yapılandırılmış paylaşılan posta kutusundan gelen alındı bilgilerini okumasına olanak tanır.
Paylaşılan posta kutusu erişimine erişim atamak için şu adımları izleyin:
- Microsoft Graph Gezgini'ne gidin ve oluşturulan aracı kullanıcısını kullanarak oturum açın.
- Sağ üst köşedeki kullanıcı simgesini seçin >İzinlere onay ver seçeneğini belirleyin.
- Posta> açılır menüsünü seçin, Mail.Read.Shared> öğesini arayın, İzin öğesini seçin ve Kabul Et öğesini seçin.
Oluşturulan Aracı Kullanıcısı için gerekli rollerin özeti
| Çevre | Görevler | Comments |
|---|---|---|
| Dataverse | Bahsedilen roller, aracının Dynamics 365 Finance'a bağlı Power Automate akışları, ortam değişkenleri ve sanal varlıklarla etkileşim kurmasını sağlar | |
| Finance and Operations | Bu rol, aracının finans ve operasyon uygulamaları ortamında gider girişleri oluşturması ve yönetmesi için gereklidir. Not: ExpenseAgentRole, 10.0.44 (10.0.2263.81) ve 10.0.45 (10.0.2345.6) sürümlerindeki finans ve operasyon uygulamaları sürümlerinde ve Finans ve operasyon uygulamaları için Copilot sürümünde 1.0.3121.1 kullanılabilir |
|
| Graph gezginini kullanarak paylaşılan posta kutusu erişimi | Mail.Read.Shared | Akış yürütme sırasında aracının yapılandırılmış paylaşılan posta kutusundan makbuzları okumasına olanak tanıyan Microsoft Graph izni |
4. Adım: Paylaşılan posta kutusunu ayarlama
Gider Aracısı, makbuz e-postalarını almak ve işlemek için paylaşılan bir posta kutusu kullanır. Exchange Yöneticisi rolüne sahip bir kullanıcının Bu posta kutusunu Microsoft 365 Yönetim Merkezi'nde oluşturması ve yapılandırması gerekir.
Paylaşılan posta kutusunu oluşturmak ve yapılandırmak için şu adımları izleyin:
Exchange Yönetici hesabını kullanarak Microsoft 365 Yönetim Merkezi'nde oturum açın.
Sol bölmede Teams & Gruplar>Paylaşılan posta kutuları'nı seçin
Tavsiye
Listenin tamamını genişletmek için Tümünü göster'i seçmeniz gerekebilir.
Paylaşılan posta kutusu ekle'yi seçin.
Paylaşılan posta kutusu için bir ad ve e-posta adresi girin.
Değişiklikleri Kaydet'i seçin.
Sonraki adımlar altında Bu paylaşılan posta kutusuna üye ekle seçeneğini belirleyin. (Üye yönetiminin kullanılabilir duruma gelmesi birkaç dakika sürebilir.)
Üye ekle'yi seçin
Oluşturulan aracı kullanıcısını ve posta kutusunu izlemesi gereken diğer kullanıcıları seçin ve Ekle'yi seçin.
Kapat'ıseçin.
Uyarı
Sonraki adımda paylaşılan posta kutusunun e-posta adresini kullanacaksınız. Paylaşılan posta kutusunu ayarladıktan sonra, Zaman ve Gider Aracısı'nı yapılandırırken ortam değişkenleri olarak e-posta adresini ve klasör yolunu (varsayılan olarak Gelen Kutusu olarak ayarlanmıştır) sağlamanız gerekir. Daha fazla bilgi için bkz . 5. Adım: Gider Aracısı'nı ayarlama.
Adım 5: Gider Aracısını ayarlama
Gider Aracısı'nı ayarlamak için iki seçeneğiniz vardır:
- Seçenek A: PowerShell betiği kullanma (önerilen)
- B Seçeneği: Power Apps'te el ile kurulum yapma (PowerShell yok)
Önemli
Expense Agent'ın yüklenmesine devam etmeden önce aracının Microsoft Copilot Studio'da başarıyla sağlandığından emin olun.
Aracının başarıyla sağlandığından emin olmak için aşağıdaki adımları izleyin:
- Microsoft Copilot Studio'da oturum açın ve ortamınızı seçin.
- Aracılar'a gidin ve ExpenseAgent-Line (Önizleme) arayın.
- Yayımla düğmesinin etkinleştirildiğini doğrulayın.
- Etkinleştirilirse yüklemeye devam edin. Devre dışı bırakılırsa aracı sağlanana kadar bekleyin.
- Gider Giriş Aracısı (Önizleme)'nin etkin olduğunu doğrulamak için bu adımları tekrarlayın.
Tavsiye
Copilot finans ve operasyon uygulamasının sağlanması 5-6 saatten uzun sürüyorsa, olası kurulum gecikmelerini çözmek için uygulamayı kaldırıp yeniden yükleyin. Daha fazla bilgi için bu makalenin sonundaki Gider Aracısını Kaldırma bölümüne bakın.
Seçenek A: Bir PowerShell betiği kullanın (önerilir)
Aracının el ile kurulumu, bağlantıların oluşturulmasını ve bağlanmasını, Power Automate akışlarını etkinleştirmeyi ve çözümü yayımlamayı içerir. Bu işlem zaman alabilir ve hatalara açıktır. Kurulumu otomatikleştirmek için gerekli parametreleri güncelleştirdikten sonra bir PowerShell betiği kullanın.
PowerShell betiği aşağıdaki görevleri otomatikleştirir:
- Gerekli ortam değişkenlerini güncelleştirir.
- Microsoft Power Platform bağlantılarını çözüme ait bağlantı referansları ile ilişkilendirir.
- Zaman ve Gider Aracısı'nın gerektirdiği tüm Power Automate akışlarını etkinleştirir.
- Copilot aracılarını yayımlar.
- Dataverse çözümünü yayımlar.
Betiği çalıştırmadan önce, install.ps1 dosyasında her bağlayıcı için Bağlantı Kimliğini sağlamanız gerektiğinden bağlantılar oluşturmanız gerekir. Bu bağlantıları oluşturmak için, oluşturulan aracı kullanıcısını kullanarak bu adımları izleyin.
- Yeni oluşturulan aracı kullanıcısını kullanarak Power Apps oluşturucu portalında oturum açın ve ortamınızı seçin.
- Sol bölmede Daha Fazla'yı seçin ve Bağlantılar'ı seçin.
- Yeni bağlantı'yı seçin ve aşağıdaki tablodan Bağlantı Adı'nı (örneğin, Office 365 Outlook) kullanarak arama yapın.
- Listeden uygun bağlayıcıyı seçin ve oluşturun.
- Bağlantı oluşturulduktan sonra, bağlantının oluşturulduğu kullanıcıyı not edin. İdeal olarak oluşturulan aracı kullanıcı kimliği olmalıdır. Sonraki adımda oluşturduğunuz yükleme dosyasında bu kullanıcı kimliğini güncelleştirin.
- Aşağıdaki tabloda listelenen kalan gerekli bağlantıların her biri için 3. ve 4. adımları yineleyin.
| Bağlantı Adı | Bağlantı URL Biçimleri |
|---|---|
| Office 365 Outlook | https://make.powerapps.com/environments/environmentID/connections / shared_office365/connectionID/details |
| Office 365 Kullanıcıları | https://make.powerapps.com/environments/environmentID/connections / shared_office365users/bağlantıID/detaylar |
| Microsoft Ekipleri | https://make.powerapps.com/environments/environmentID/connections / shared_teams/bağlantıID/detaylar |
| Microsoft Dataverse | https://make.powerapps.com/environments/environmentID/connections / shared_commondataserviceforapps/connectionID/details |
| Microsoft Copilot Studio (önizleme) | https://make.powerapps.com/environments/environmentID/connections / shared_microsoftcopilotstudio/connectionID/details |
Yükleme dosyasını oluşturmak için ihtiyacınız olan bilgiler
- install.ps1yükleme dosyasını oluşturmak için aşağıdaki bilgilere sahip olun. (Başvuru için aşağıdaki tabloya başvurabilirsiniz.)
| Parametre | Diğer ayrıntılar |
|---|---|
| Dataverse ortamı kimliği | Power Platform yönetim merkezinden edindiğiniz ortam kimliğini girin. Örnek değer: xxxx-xxxx-xxxx-xxx-xxxxxxxxxx |
| Dataverse ortamı URL'si | Power Platform yönetim merkezinden Ortam URL'sini girin. Not: Başında https:// olduğundan ve sonunda eğik çizgi '/' olmadığından emin olun. Örnek değer: https://org123.crm.contoso.com |
| Finans ve operasyonlar kurulum URL'si | Finans ve operasyon ortamı ayrıntılarını aşağıdaki biçimde girin. Örnek değer: https://org123.contoso.com Not: Başında https:// olduğundan ve sonunda eğik çizgi '/' olmadığından emin olun. |
| OutlookFolderPath | Paylaşılan posta kutusunda oluşturulan klasör yolunu girin. Başka klasör oluşturulmazsa, varsayılan olarak Gelen Kutusu olarak ayarlanır. Örnek değer: Gelen Kutusu En iyi yöntem olarak gider yönetimi için ayrı bir klasör oluşturun |
| Posta Kutusu Adres Kimliği | Yeni oluşturulan paylaşılan posta kutusunun posta adresini girin Örnek değer: expenseagent@contoso.com |
| Microsoft Dataverse bağlantı adı Microsoft Copilot Studio bağlantı adı Microsoft Office Outlook bağlantı adı Microsoft Office 365 Kullanıcıları bağlantı adı Microsoft Teams bağlantı adı |
Tüm bağlantı adları için giriş aynı olup, oluşturulan aracı kullanıcısının hesap e-posta adresidir. Örnek değer: createdexpenseagentuser@contoso.com |
Yükleme betiği dosyasını oluşturma
Aşağıdaki kodu kopyalayarak bir yükleme betiği dosyası oluşturun. Betike gerekli ortam değişkenlerini ekleyin, ardından PowerShell kullanarak betiği çalıştırın.
Uyarı
Yükleme betiği dosyasını yerel masaüstüne yerleştirin. One Drive'da depolamayın.
Aşağıdaki kodla bir PowerShell betik dosyası oluşturun. Betiği çalıştırmadan önce belirtilen parametreleri güncelleştirin.
Tavsiye
Zorunlu = $true olduğunda, PowerShell parametreleri etkileşimli olarak girmenizi ister, böylece bunları doğrudan betik dosyasında güncelleştirmeniz gerekmez.
El ile girişten kaçınmak ve yükleme betiğindeki parametreleri önceden belirlemek istiyorsanız, aşağıdaki örnek kodun Param bölümünde Zorunlu = $false değerini ayarlayın.
Aşağıdaki kodu yükleme betiği dosyanıza kopyalayın ve 'Install.ps1' olarak kaydedin. param bölümündeki ilgili parametre alanlarındaki değişkenleri güncelleştirin. 10 değişkeni güncelleştirmeniz gerekir.
Tavsiye
Başvuru olarak önceki tabloyu kullanın ve tüm örnek değerleri ilgili ayrıntılarınızla değiştirin.
#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
}
PowerShell dosyasını tetikleme için şu adımları izleyin:
- PowerShell'i açın (gerekli en düşük sürüm - PowerShell 7).
- Dosyayı kaydettiğiniz konuma gidin. (cd <dosya konumu> komutunu kullanın).
- Yükleme betiğini tetikleme. (Şu komutu kullan: '.\Install.ps1').
- Azure'da oturum açmak için yönergeleri izleyin.
- Oturum açtığınızda bir kez daha yetkilendirmeniz gerekebilir. (Oluşturulan aracı kullanıcı kimliğini kullanın).
Betiğin tamamen çalışmasını bekleyin ve Aracı kurulumu başarıyla tamamlandı iletisini arayın!
Uyarı
Yukarıdaki betik şu eylemleri gerçekleştirir:
- Ortam değişkenlerini ayarlar.
- Bağlantı başvurularını doğrular ve bağlar.
- Power Automate akışlarını etkinleştirir.
- Gerekli Copilot aracılarını yayımlar.
- Dataverse çözümünü yayımlar.
Betik başarıyla çalıştırıldıktan sonra Gider Aracısı tam olarak yapılandırılır ve kullanıma hazırdır.
B Seçeneği: Power Apps'te el ile ayarlama (PowerShell yok)
PowerShell betiğini kullanmak istemiyorsanız Gider Aracısı'nı Power Apps aracılığıyla el ile yapılandırabilirsiniz. Bu işlem, ortam değişkenlerini güncelleştirmeyi, Power Automate akışlarını etkinleştirmeyi ve çözümü yayımlamayı içerir.
Ortam değişkenlerini güncelleştirme
Ortam değişkenlerini güncelleştirmek için şu adımları izleyin:
Power Apps'te oturum açın ve ortamınızı seçin.
Çözümler'i seçin, ardından Varsayılan Çözüm'ü (veya aracının yüklü olduğu çözümü) açın.
Ortam Değişkenleri'ne gidin ve aşağıdaki değerleri ayarlayın.
Değişken adı Açıklama Gider Aracısı Outlook Klasör Yolu Paylaşılan posta kutusunda izlenecek klasör yolunu belirtin (varsayılan olarak Gelen Kutusu). Harcama aracısı paylaşılan posta kutusu adresi kimliği Paylaşılan posta kutusunun e-posta adresini belirtin. Oturum açmış kullanıcının posta kutusunu kullanmak için NA girin. Finance and Operations Örnek url'si Finans ve operasyon uygulamaları ortamının URL'sini belirtin (örneğin, https://org123.contoso.com).
Power Automate akışlarını etkinleştirin
Gider Aracısı aşağıdaki Power Automate akışlarına dayanır:
- Gider girişi yeniden deneme denetimi
- Gider yapılandırması
- Outlook Gider Klasörünü al
- Gider raporu oluşturma
- Gider raporu uyarlamalı kartı gönder
- Giderleri otomatik olarak eşleştir
- E-postaları işle
- Yardımcı pilot çağrısı için bağlantısız makbuz kimliklerini ayıkla
- Dataverse eklentiyi kullanarak eklenmemiş alındı çıktısı ayıklama
- Gider satırı oluşturma
- Proje kimliği ve durum kimliği olmadan gider satırı oluşturma
- Proje kimliklerini tanımlama
- Kullanıcı takvimi etkinlikleri
- Yardımcı pilot kullanarak gider raporunu işle
- Makbuz işleme için gider aracısını çağırma
Akışları etkinleştirmek için şu adımları izleyin:
Power Automate'te oturum açın ve ortamınızı seçin.
Akışlarım'ı seçin.
Önceki listedeki 15 akışın her biri için şu adımları izleyin:
- Akışı bulun.
- Düzenle'yi seçin.
- Yeni Tasarımcı seçeneğini kapatarak Eski Tasarımcı görünümüne geçin.
- Gerekli bağlantıların kimliğini doğrula (yeşil onay işaretleri görünene kadar).
- Devam'ı seçin ve sonra Kaydet'i seçin.
- Akışı etkinleştirmek için Aç'ı seçin.
Çözümü yayımlayın
Tüm ortam değişkenlerini ve akışlarını yapılandırmayı tamamladıktan sonra, çözümü yayımlamak için bu adımları izleyin.
- Power Apps'te Çözümler'e gidin.
- Ortamınızı ve çözümünüzü seçin.
- Tüm Özelleştirmeleri Yayımla'yı seçin.
Bu adımları tamamladığınızda Gider Aracısı tamamen yapılandırılır ve kullanıma hazırdır.
6. Adım: Microsoft Teams'te Gider Aracısı'nı etkinleştirme (İsteğe bağlı)
Gider Aracısı için Teams tabanlı iletişimi etkinleştirmek için Teams kanalını Power Apps'te aracıya ekleyin. Daha sonra temsilci, Teams aracılığıyla adaptive kartlar gönderebilir.
Teams kanalını etkinleştirme
Teams kanalını etkinleştirmek için şu adımları izleyin:
- Copilot Studio'ya giriş yapın ve doğru ortamı seçin.
- Aracılar sekmesinde Gider Girişi Aracısı'nı seçin.
- Aracı görünümünde, Kanallar sekmesinde Teams ve Microsoft 365 Copilot seçin.
- Teams entegrasyonunu etkinleştirmek için Kanal ekle öğesini seçin ve uygulamayı kiminle paylaşacağınızı yapılandırmak için Teams uygulama kullanılabilirliğini yapılandırma bölümündeki adımları izleyin.
Daha fazla bilgi edinmek için Teams + Microsoft 365 kanalı için yapılandırma panelini açın bölümüne bakın.
Teams uygulamasının kullanılabilirliğini yapılandırma
Teams uygulamasının kullanılabilirliğini yapılandırmak için şu adımları izleyin:
Teams uygulaması oluşturulduktan sonra Kullanılabilirlik Seçenekleri'ni seçin.
Uygulamayı kiminle paylaşmak istediğinizi seçin:
- Kuruluş içindeki belirli kullanıcılar
- Kuruluşun tamamı
Uygulamayı onay için gönderin.
Uygulamayı Teams yönetim merkezinde yayımlama
Uygulamayı Teams yönetim merkezinde yayımlamak için şu adımları izleyin:
- Teams yönetim merkezi'nde oturum açın.
- Teams uygulaması > Uygulamaları yönet'e gidin. "Gider" araması yapın ve Uygulama durumunun engellendiği Gider Girişi Aracısı uygulamasını seçin.
- Uygulamanın engelini kaldırmak için Yayımla öğesini seçin. Yayımlama eylemi başarıyla tamamlandıktan sonra Uygulama durumunun engeli kaldırıldı olarak değiştiğinden emin olun.
Teams ve Microsoft 365 için bir aracı bağlama ve yapılandırma bölümünde daha fazla bilgi edinin.
Bu adımları tamamladığınızda Expense Agent'ınız kullanıma hazırdır.
Uyarı
Dynamics 365 Finance ortamında başparmak yukarı ve başparmak aşağı simgelerini ve geri bildirim açılır penceresini kullanarak aracı tarafından oluşturulan gider satırları ve raporları hakkında geri bildirim de sağlayabilirsiniz.
Gider Aracısının kaldırılması
Expense Agent'ı kaldırmak için şu adımları izleyin:
- Microsoft Power Apps oluşturucu portalında oturum açın.
- Çözümler'i seçin, msdyn_ExpenseAI arayın, üç noktayı seçin ve Sil'i seçin.
- msdyn_FnOCopilotAnchor arayın ve çözümü silin.