Bildiğiniz gibi Dynamics 365 v9.x ile birlikte kullanılan javascript modelinde değişiklikler ve ilaveler oldu. Bir çoğumuz yeni projelerimizde kullandığımız hazır kütüphanelerimizi tekrar elden geçirmek durumunda kaldık.
Tabi birde bunun var olan 2016 ve daha eski versiyondaki projelerimizin Dynamics 365 v9.x sürümüne geçişi var. Bu geçiş esnasında yazılan javascript kodlarımızın neredeyse tamamını elden geçirmemiz gerekecek.
Eski kodların birçoğu deprecated durumda on-premise versiyonda çalışmaya devam ediyor olsa bile, Unified Interface üzerinde bunların neredeyse hiç birisi artık çalışmıyor.
İşte tam bu yüzden bu makaleyi hazırladım. Ben çektim, araştırdım bir araya topladım. Siz bari uğraşmayın
Bu arada, sorun yaşamanız durumunda yorumlarınızla ya da sosyal medya üzerinden bana ulaşarak çekinmeden destek isteyebilirsiniz.
İsterseniz çok sık kullanmadığımız hatta bir çoğumuzun ihtiyacı dahi olmamış olan Xrm.Page.context modeli ile yavaştan başlayalım.
İlgili model içerisinde, eskiden var olan Kullanıcı verileri ile organizasyona ait veriler aynı model içerisinde barınmaktaydı. Değiştirilen API ile birlikte bunlarda model içerisinde değişikliğe uğradılar.
Aşağıdaki tabloda eski – yeni karşılaştırmasını görebilirsiniz.
Deprecated API |
Replacement API |
Xrm.Page.context.getTimeZoneOffsetMinutes | globalContext.userSettings.getTimeZoneOffsetMinutes |
Xrm.Page.context.getUserId | globalContext.userSettings.userId |
Xrm.Page.context.getUserLcid | globalContext.userSettings.languageId |
Xrm.Page.context.getUserName | globalContext.userSettings.userName |
Xrm.Page.context.getUserRoles | globalContext.userSettings.securityRoles |
Xrm.Page.context.getIsAutoSaveEnabled | globalContext.organizationSettings.isAutoSaveEnabled |
Xrm.Page.context.getOrgLcid | globalContext.organizationSettings.languageId |
Xrm.Page.context.getOrgUniqueName | globalContext.organizationSettings.uniqueName |
Tablo-1
Tablo1 de görüldüğü üzere, Önceden Page.context modelinde bulunan fonksiyonların tamamı, kendi içerisinde gruplanarak yeni isimler ile birlikte globalContext altına taşındı. İsimlerdeki değişikliklerle de aslında benim fikrime göre kullanım kolaylığı sağlandığını ve hatırlamakta zorluk çekilmeyecek isimlendirmeler kullanıldığını düşünüyorum.
Örneğin, getUserLcid fonksiyonu userSettings.languageId şeklinde değiştirildi. Eskiden context altında usera ait localization id bilgisi istenirken şimdi, kullanıcı ayarları modeline girdiğinizde direkt userId, languageId şeklinde datalarınıza erişebiliyorsunuz.
İkinci modelimiz ise, Grid fonksiyonları.
Grid fonksiyonlarında çok büyük bir değişiklik olmamasına rağmen yine de isimlerde değişiklikler oldu.
Hadi bunlara da bakalım.
Deprecated API |
Replacement API |
GridRow.getData | GridRow.data |
GridRowData.getEntity | GridRowData.entity |
Tablo-2
Gördüğünüz gibi Grid fonksiyonlarında büyük değişikliklerimiz yok. Ancak yine de revizyon mevcut.
En büyük değişikliklerin olduğu Xrm.Utility modelimize bakacak olursak buradaki fonksiyonların neredeyse tamamının hem kullanım şekilleri hem de isimlendirmeleri değişmiş durumda. Ayrıca kullanım esnasında da büyük değişiklikler, Dialoglarda görsel revizyonlarda mevcut.
Sonraki makalelerimizde ilgili fonksiyonların kullanımlarında ne gibi değişiklikler olduğuna da değiniyor olacağım.
Şimdi Xrm.Utility Modelimizdeki revizyonları inceleyelim.
Deprecated API |
Replacement API |
alertDialog | Xrm.Navigation.openAlertDialog |
confirmDialog | Xrm.Navigation.openConfirmDialog |
getbarcodeValue | Xrm.Device.getBarcodeValue |
getCurrentPosition | Xrm.Device.getCurrentPosition |
openEntityForm | Xrm.Navigation.openForm |
openQuickCreate | Xrm.Navigation.openForm |
openWebResource | Xrm.Navigation.openWebResource |
Tablo-3
Buradaki en büyük değişiklik openEntityForm ve openQuickCreate fonksiyonlarında gerçekleşti. İki fonksiyon tek fonksiyon altında toplandı.
Eskiden openEntityForm fonksiyonunda string olarak açılacak entity adını verirken şimdi, açılacak entity bilgilerini (daha fazla özellikle açabiliyoruz.) obje halinde iletmemiz gerekiyor. Aynı zamanda, fonksiyon tetiklendiğinde success ve error callback fonksiyonları da var
Aslında detaylı incelendiğinde, Yeni API güzellikleri yanında bazı zorlukları da beraberinde getirmiyor değil.
Misal eskiden HTML Web Resource’lar içerisinde, parent.Xrm.Page şeklinde ilgili modele ve XRM Contextine erişim sağlanabilirken, artık erişim sağlayabilmek için ilgili HTML web resource’un formun içerisine eklenmiş olması zorunluluğu geldi. Bunun dışında sitemap içerisinden ya da farklı şekilde açılan HTML Web resource’larda artık ilgili context erişilemez durumda.
GlobalContext’e erişim ise, eskiden Xrm.Page.context şeklinde sağlanırken, artık Xrm.Utility.getGlobalContext şeklinde değiştirildi.
Şimdilik 1. Partımız burada sonlansın isterseniz. Sizleri de yormayalım gözlerinizi de yormayalım
Umarım faydalı olabilmişimdir sizlere.
Bir sonraki makalede daha çok örnekle karşınızda olmak üzere şimdilik hoşça kalın, MSHOWTO ile kalın.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
TAGs: Dynamics 365 Yeni Javascript Modeli – Model Değişiklikleri 1,dynamics 365 deprecated api, dynamics 365 new javascript api, dynamics crm javascript, Xrm.Page.context