Virtual Entities (Sanal Varlıklar) Nedir?
Merhaba,
Bu yazıda Dynamics 365 CE ‘nin 2017 güncellemesi ile hayatımıza giren Virtual Entities (Sanal Varlıklar) kavramını ele alacağız. Virtual Entities kendi içinde farklı bileşenleri barındırdığı için bu yazıda temel kavramlar üzerinde duracağız. Diğer konuları farklı yazılarda detaylandıracağız.
Basit bir arama ile Virtual Entities hakkında bir çok farklı yazıya ulaşabilirsiniz, fakat çoğu birbirinin kopyası ve hepsi copy/paste olarak aynı örnekler üzerinden ilerleyip, gerçek dünya örneklerine yer vermemiş. Bu nedenle bu yazı dizisinde gerçek dünya senaryoları üzerinden de örneklendirme yapmaya çalışacağım.
Virtual Entity Nedir?
Virtual Entity, Common Data Service platformunda herhangi bir fiziksel entity (tablo) ilişkisi olmadan, dış kaynaklarda bulunan dataları Dynamics 365 (Common Data Service) platformunda kullanmaya yardımcı olan custom entity ‘lerdir.
Aynı data ‘nın birden fazla kaynakta saklanması / kopyalanması (data replication) gibi bir durum olmadan, dış kaynaklardan ihtiyaç olduğunda anlık olarak data okumak için kullanılmaktadır.
Microsoft resmi dokümantasyonunda aşağıdaki şekilde gösterilmektedir.
Nasıl Çalışır?
Virtual Entity ‘ler 3 ana bileşenden oluşmaktadır. Bunlar;
- Data Provider
- Data Source
- Virtual Entity (Dynamics 365 Custom Entity)
Data Provider, dış kaynaktan okunan data ‘yı işleyebilmek için Retrieve ve RetrieveMultiple plug-in ‘ler ile Data Source varlık kaydını içermektedir. Dynamics 365 Plugin Registration Tool kullanarak sisteme tanımlanır. Bu konuyu daha sonra farklı bir yazı ile detaylı olarak anlatacağım.
Data Source, bağlantı bilgilerini ve parametreler gibi metadata bilgilerini içeren kayıttır.
Virtual Entity ise Dynamics 365 (Common Data Service) ‘te kayıtları göstermek için kullanıdığımız custom entity ‘dir. Data ‘ları kullanabilmek için Data Source ile ilişkili olmalıdır.
Dynamics 365 varsayılan olarak bir çok farklı Data Provider barındırmaktadır. Bizim işimize yarayacak ve en çok kullanacağımız Data Provider “OData v4 Data Provider” ‘dır. Bunun dışında preview olarak Azure Cosmos DB için bir provider mevcut, bunu Microsoft AppSource ‘dan download etmeniz gerekli. AppSource ‘da “Azure Cosmos DB for DocumentDB API Data Provider” olarak arama yapabilirsiniz.
Azure Cosmos DB hakkında detaylı bilgi için https://azure.microsoft.com/en-us/services/cosmos-db adresine bakabilirsiniz.
Ayrıca kendimize özel Data Provider oluşturup sisteme tanımlayabiliriz. Bu konuyu sonraki yazılarda detaylı olarak aktaracağım.
Avantajları
Virtual Entity ‘lerin en önemli avantajları aşağıdaki başlıklar altında toplanabilir.
- External sistem ile anlık entegrasyon
- External sistem tarafından oData standardlarında sağlanan API ile ilgili sistemin kayıtlarına anlık olarak Dynamics 365 (Common Data Service) platformu üzerinden erişim ve kullanım imkanı
- Data Replication olmadan işlem yapma
- İlgili data ‘ya ihtiyaç olduğunda external sistemden API ile anlık olarak okunmaktadır. Bu sayede sistemler arasında data replication olmadan ortak data kullanılabilir.
- Ek database, disk alanı ve lisanslama ihtiyacı olmaması
- Bildiğiniz gibi Dynamics 365 (Common Data Service) platformunda data saklamak oldukça maaliyetli bir işlem. Virtual Entity ile ilgili data ‘lar external sistem üzerinden okunacağı için Dynamics 365 (Common Data Service) üzerinde barındırmaya ihtiyacımız yoktur. Bu sayede ilgili data için ek bir kapasite planlaması yapmamıza gerek yok.
Limitleri – Dezavantajları
Her güzel şey gibi Virtual Entity ‘nin de bazı kusurları var maalesef. Bunların bazıları external kaynak sistem ile ilgili zorunluluklar bazıları ise Dynamics 365 (Common Data Service) platformu ile ilgili kısıtlamalar.
- External sistem / API zorunlulukları
- Virtual Entity olarak kullanılacak kaynak tablonun Primary Key bilgisi için data tipi GUID (Uniqueidentifier) olmalı
- Kullanılacak olan API OData standardlarına göre hazırlanmış olmalı
- Dynamics 365 (Common Data Service) limitleri
- Virtual Entity ‘ler read-only varlıklardır. Dolayısıyla kayıtlar üzerinde herhangi bir güncelleme yapılamaz
- Virtual Entity Ownership (sahiplik) türü Organization seviyesindedir. Bu nedenle Dynamics 365 (Common Data Service) güvenlik rollerinde ilgili rol için okuma bilgisi direkt olarak var / yok şeklindedir
- Field Level Security kullanılamaz
- Access Teams (Erişim Takımları) kullanılamaz
- Queue (Kuyruk) yapıları kullanılamaz
- SLA kullanılamaz
- Knowledge Management kullanılamaz
- Duplicate Detection kullanılamaz
- Audit (Denetleme) kullanılamaz
- Change Tracking kullanılamaz. Bundan dolayı Data Export Service gibi data ‘yı dışa aktaran entegrasyonlarda bu varlıklar aktif olmaz
- Virtual Entity, “Aktivite” türünde olamaz. Varlık oluştururken “Define as an activity entity” seçemezsiniz
- Business Process Flow yapısı desteklenmez
- Relevance Search kullanılamaz
- Virtual Entity ‘de yer alan alanlar Roll-up Field ya da Calculated Field olamaz. Tüm hesaplamalar external sistem üzerinde yapılıp, simple (basit) alan olarak gösterilmeli
- Virtual Entity ‘lerde sadece API ‘lerde bulunan external alanları oluşturabiliriz. Eğer API ‘de karşılığı yoksa Dynamics 365 (Common Data Service) platformunda bulunan diğer varlıklar ile Lookup alan üzerinden bağlantı kurulamaz
- Offline caching (data download) desteklenmez
- Workflow ‘lar kullanılamaz
- Aşağıdaki alanlar Virtual Entity ‘lerde bulunmaz
- StateCode
- StatusCode
- CreatedOn
- ModifiedOn
- Aşağıdaki türde alanlar oluşturulamaz
- Currency
- Image
- Customer
Virtual Entity Oluşturalım
Bu yazıyı hazırladığım tarihte (14 Haziran 2020) Virtual Entity oluşturmak için gerekli olan adımlar yeni arayüzde (https://make.powerapps.com) desteklenmiyor. Bu nedenle aşağıdaki adımları eski arayüz (legacy web interface) üzerinden anlatacağım.
Data Source Ekleme
Eğer Dynamics 365 (Common Data Service) ‘e ilk kez Virtual Entity ekleyeceksek muhtemelen sistemde kayıtlı bir Data Source yoktur. Bunun için Dynamics 365 menüsünden Settings> Administrator> Virtual Entity Data Sources adımlarını izlemeliyiz.
Açılan sayfada New (Yeni) butonunu kullanarak yeni bir Data Source tanımlaması yapabiliriz.
Data Provider olarak “OData v4 Data Provider” seçip, devam ediyoruz.
Açılan pencerede kullanacağımız oData servis bilgilerini ve gerekli parametreleri doldurup, Save (Kaydet) butonu ile işlemi tamamlayabiliriz.
- Name, tanımlama amaçlı olup, kullandığımız servis için bir istediğimiz bir isim verebiliri
- URL alanına ilgili servisin base url bilgisini girmeliyiz, herhangi bir endpoint detayı içermemeli.
Virtual Entity – Custom Entity Oluşturma
Yazının başında belirttiğim gibi Virtual Entity ‘ler Dynamics 365 (Common Data Service) platformunda bulunan Custom Entity ‘lerdir.
Bir Virtual Entity tanımlamak için, Dynamics 365 (Common Data Service) içinde bulunan bir Solution (çözüm) kullanılabilir ya da yeni bir Solution oluşturulabilir.
İlgili Solution içinde yeni bir entity oluşturup işleme devam ediyoruz.
Yukarıdaki ekranda görüldüğü üzere Virtual Entity oluşturabilmek için Entity formunda “Virtual Entity” checkbox ‘ı seçmiş / işaretlemiş olmalıyız.
Bu durumda Ownership alanı disable olup, otomatik olarak “Organization” değeri atanıyor.
Ayrıca diğer entity tanımlamalarında olmayan, Data Source, External Name ve External Collection Name alanları görünür hale geliyor.
Data Source olarak, önceki adımda tanımladığımız ya da sistemde daha önce tanımlı olan Data Source bilgisi seçilmeli, aksi durumda Virtual Entity çalışmayacaktır.
External Name ve External Collection Name alanları ilgili API ‘de kullanmak istediğimiz endpoint bilgisini içermektedir. Örnekte Purdue API ‘den kurs bilgilerini alacağım için bu alana Courses değerini girdim.
OData endpoint ‘leri case-sensitive olarak çalışmaktadır. Bu nedenle gireceğiniz bilgileri API ‘de yer aldığı gibi girmelisiniz, aksi durumda Virtual Entity çalışmayacaktır.
Save (Kaydet) butonu ile Virtual Entity ‘i oluşturup, Fields (Alanlar) bölümüne giriyoruz.
Yukarıdaki ekran görüntüsünde görüldüğü üzere Dynamics 365 (Common Data Service) ‘te bulunan diğer entity ‘lerden aşina olduğumuz şekilde “prefix_entitynameid
” ve “prefix_name
” alanları otomatik olarak oluşturuldu. Standard varlıklardan farklı olarak, Virtual Entity ‘lerde oluşan bu alanları external sistem ile eşleştirmemiz gerekiyor. İlgili alanın üzerine çift tıklayıp detay sayfasına ulaşabiliriz.
Bu sayfada yer alan External Name değeri olarak ilgili field ‘ın external API ‘de eşleşmesi gereken değeri girmeliyiz.
İlgili API ‘da bu alanların değerleri CourseId ve Title olduğu için ben bu şekilde girdim, siz kendi API bilgilerinize göre düzenlemelisiniz.
Bu alanların dışında kullanmak istediğimiz diğer alanları opsiyonel olarak tanımlayabiliriz. Bu işlem standard alan tanımlamasından farklı değildir, sadece External Name eşleştirmesi yapmalıyız.
Form ve View tasarımları Dynamics 365 (Common Data Service) standard entity ‘lerde olduğu olarak yapılmaktadır.
Son adım olarak ilgili varlığı Publish butonu ile yayına alıp kullanabiliriz.
İlgili Application ya da Advanced Find üzerinden Virtual Entity üzerinde bulunan kayıtları listeleyebilir, kayıtların detaylarına ulaşabiliriz.
OData Örnek Data API ‘ler
İnternette birbirinden farklı bir çok OData API bulunmakta. Eğer test amaçlı bir çalışma yapacaksanız aşağıdaki kaynakları kullanabilirsiniz.
- OData.org API
- https://services.odata.org/V3/OData/OData.svc/Advertisements
- Bu API farklı endpoint ‘ler içermekte, fakat sadece Advertisements endpoint ‘i GUID formatında primary key bilgisi içermekte.
- İnternette Virtual Entities ile ilgili neredeyse tüm yazılar bu enpoint üzerinden örneklendirilmiş.
- Purdue API
- http://api.purdue.io/odata
- Birbiri ile ilişkili bir çok endpoint bulunmakta. Yukarıdaki örnekte ben de Purdue API kullanarak Kurs Konusu (Subjects) ve Kurs (Courses) kayıtlarını Dynamics 365 ‘e aktardım.
- D365TR OData Demo API
- https://d365odata.azurewebsites.net/odata
- Demo amaçlı olarak benim oluşturduğum, ülke ve şehir (sadece Türkiye için) bilgilerini içeren OData servisi. Gerçek dünya senaryosu olarak Lead – Contact – Account kayıtlarının Ülke – Şehir bilgilerini tutmak için kullanılabilir.
Gerçek Dünya Örnek Senaryo
External sistemimizde bulunan ülke bilgilerini Dynamics 365 (Common Data Service) platformumuzda kullanıp, Contact kaydı üzerinde bu bilgileri lookup alan olarak tutabiliriz.
Bunun için aşağıdaki gibi Virtual Entity oluşturmamız gerekli.
- Country (
prefix_country
)
Yeni oluşturduğumuz Country varlığını Contact varlığımızda lookup olarak eşleştirip kullanabiliriz.
İş ihtiyaçlarınıza göre farklı senaryolar planlayabilirsiniz. Eğer mevcut yapılarınızda kullandığınız örnek senaryolar varsa yorumlar kısmında paylaşabilirseniz sevinirim.
Umarım faydalı bir yazı olmuştur.