UDE Ortamında Yeni Model Oluşturma ve İlk X++ Geliştirme

Dynamics 365 F&O UDE Serisi | Bölüm 6

UDE Ortamında Yeni Model Oluşturma ve İlk X++ Geliştirme

Model, package, Operations Project, runnable class, build kontrolü ve UDE’de local/cloud geliştirme ayrımı

Giriş

Serinin önceki yazısında Visual Studio 2022′yi Power Platform üzerinde oluşturduğumuz developer-enabled UDE ortamına bağlamıştık. Environment URL ve Finance and Operations URL ayrımını, Connect to Dataverse adımını, Finance & Operations assets indirme sürecini, metadata configuration kontrolünü ve Application Explorer’ın doğru açıldığını nasıl doğrulayacağımızı ele almıştık.

Bu yazıda artık bir adım daha ileri gidiyoruz. Bağlantısı tamamlanmış bir UDE ortamında yeni bir model oluşturacağız, bu modeli doğru package yapısı içinde konumlandıracağız, Visual Studio’da bir Operations Project açacağız ve ilk basit X++ geliştirmemizi yapacağız.

Klasik development VM modelinden gelen geliştiriciler için burada hem tanıdık hem de farklı noktalar var. Model, package, project, Application Explorer ve build kavramları tanıdık. Fakat UDE ile birlikte geliştirme tier’ı ve çalışma tier’ı ayrıldığı için bazı alışkanlıkları yeniden düşünmek gerekiyor. Kod ve metadata lokal bilgisayarda hazırlanıyor; çalışma, deploy ve test ise buluttaki Finance & Operations runtime üzerinde gerçekleşiyor.

Bu ayrımı doğru anlamak, UDE üzerinde sağlıklı geliştirme yapmanın temel şartlarından biri. Çünkü lokal bilgisayarda bir X++ nesnesini oluşturmak ve build etmek, onun otomatik olarak cloud runtime’da çalışacağı anlamına gelmiyor. Çalıştırma ve test için ilgili modelin online UDE ortamına deploy edilmesi gerekiyor. Bu yazıda önceliği model, proje ve ilk build tarafına vereceğim; deploy ve debug tarafını ise kısa bir girişle ele alıp sonraki yazıya bağlayacağım.

Bu yazıda ne yapacağız?

Bu yazının amacı, UDE ortamına bağlanmış Visual Studio üzerinde ilk geliştirme akışını uçtan uca anlamak. Özellikle ilk denemede çok karmaşık bir senaryo seçmek yerine, basit ve kontrollü bir örnekle ilerlemek daha doğru olur.

Bu kapsamda aşağıdaki adımları ele alacağız:

  • UDE’de development tier ve execution tier ayrımını kısaca hatırlayacağız.
  • Model, package ve project kavramlarını UDE açısından konumlandıracağız.
  • Yeni bir model oluşturacağız.
  • Model için yeni package mı yoksa mevcut package mı kullanılmalı sorusunu değerlendireceğiz.
  • Referenced packages seçimini basit bir örnek üzerinden açıklayacağız.
  • Visual Studio’da Operations Project oluşturacağız.
  • Projeyi oluşturduğumuz model ile ilişkilendireceğiz.
  • İlk runnable X++ class nesnesini ekleyeceğiz.
  • Basit bir X++ kodu yazıp build alacağız.
  • Output penceresi üzerinden build sonucunu kontrol edeceğiz.
  • Deploy/debug tarafına geçmeden önce kontrol listesi çıkaracağız.

Böylece UDE üzerinde ilk kez X++ geliştirme yapan biri için “bağlandım, şimdi ne yapacağım?” sorusuna pratik bir cevap vermiş olacağız.

Başlamadan önce kontrol listesi

Bu yazıya başlamadan önce Bölüm 5′teki bağlantı adımlarının tamamlanmış olması gerekir. Aksi durumda model oluşturma veya project açma adımlarında farklı hatalarla karşılaşılabilir.

  • Visual Studio 2022 açılabiliyor olmalı.
  • Power Platform Tools for Visual Studio extension kurulmuş olmalı.
  • Finance & Operations Visual Studio extension kurulmuş olmalı.
  • Connect to Dataverse ile doğru UDE ortamına bağlanılmış olmalı.
  • Assets ve metadata download işlemleri tamamlanmış olmalı.
  • Configure Metadata ekranında aktif metadata configuration doğru görünmeli.
  • Custom metadata folder doğru lokal klasöre veya Git repo klasörüne işaret etmeli.
  • Application Explorer açılmalı ve AOT nesneleri görünebilmeli.
  • Output penceresinde önceki kurulumdan kalan kritik hata bulunmamalı.
UDE bağlantısı sonrası Visual Studio kontrol ekranı

Resim-1

UDE’de local development ve cloud execution ayrımı

UDE’nin klasik development VM’den en önemli farkı, geliştirme ve çalışma katmanlarının ayrılmasıdır. Microsoft’un UDE dokümanlarında da bu ayrım development tier ve execution tier olarak ifade edilir. Development tier lokal bilgisayarda metadata ve X++ kaynak kodunu içerir; execution tier ise buluttaki Finance & Operations ortamıdır.

Bu yapı şunu değiştirir: Visual Studio’da oluşturduğumuz model ve X++ nesneleri önce lokal metadata yapısında oluşur. Build işlemi de lokal geliştirme araçlarıyla yapılır. Fakat kodu gerçekten çalıştırmak istediğimizde, ilgili modelin cloud runtime’a deploy edilmesi gerekir.

Bu nedenle UDE üzerinde ilk geliştirme akışını üç parçaya ayırmak faydalı olur:

  • Metadata hazırlığı: Model, package, project ve X++ nesnelerinin lokal metadata klasöründe oluşturulması.
  • Build kontrolü: Projenin veya modelin lokal geliştirme araçlarıyla derlenmesi ve hataların temizlenmesi.
  • Cloud runtime aşaması: Hazırlanan modelin online UDE ortamına deploy edilmesi, çalıştırılması ve debug edilmesi.

Bu yazı ağırlıklı olarak ilk iki parçaya odaklanıyor. Cloud runtime’a deploy ve debug ise serinin devamında daha detaylı ele alınabilir.

Not: UDE’de build başarılı olsa bile bu, kodun cloud ortamda çalıştırılmaya hazır olduğu anlamına tek başına gelmez. Çalıştırma için ilgili modelin online UDE ortamına deploy edilmesi gerekir.

Model, package ve project kavramlarını doğru konumlandırmak

Yeni bir geliştirmeye başlamadan önce model, package ve project kavramlarını doğru konumlandırmak gerekir. Bu kavramlar klasik Dynamics AX / Dynamics 365 Finance & Operations geliştirme dünyasından tanıdık olsa da UDE ve Git kullanımıyla birlikte daha dikkatli ele alınmalıdır.

Model nedir?

Model, geliştirdiğimiz metadata ve X++ nesnelerinin mantıksal grubudur. Bir model; table, class, form, menu item, EDT, enum, security artifact gibi nesneleri içerebilir. Model aynı zamanda hangi package içinde yer aldığını, hangi publisher’a ait olduğunu, hangi layer’da konumlandığını ve hangi referanslara ihtiyaç duyduğunu belirler.

Package nedir?

Package, bir veya birden fazla modeli barındırabilen fiziksel ve derlenebilir yapıdır. Genellikle geliştirme ve deployment açısından asıl paketleme birimi package üzerinden düşünülür. Yeni model oluştururken mevcut bir package içine mi ekleneceğine yoksa yeni bir package mı oluşturulacağına karar vermek gerekir.

Project nedir?

Project, Visual Studio içinde üzerinde çalıştığımız model elemanlarını organize ettiğimiz çalışma alanıdır. Operations Project, Finance & Operations geliştirme için kullanılan proje tipidir. Project içindeki elemanlar bir modele bağlıdır. Bu nedenle proje property’lerinde Model alanının doğru seçili olması kritik öneme sahiptir.

Model / package / project ilişkisi

Pratik olarak şöyle düşünebiliriz: Model geliştirme kapsamını, package fiziksel dağıtım ve build sınırını, project ise Visual Studio’daki çalışma organizasyonunu temsil eder. İlk UDE denemelerinde bu üç kavramı sade tutmak, ileride Git ve pipeline süreçlerinde daha kontrollü ilerlemeyi sağlar.

Alan Öneri / Açıklama
Model Geliştirilen metadata ve X++ nesnelerinin mantıksal grubu.
Package Modelin fiziksel olarak bulunduğu ve build/deploy süreçlerinde kullanılan paket yapısı.
Operations Project Visual Studio içinde model elemanlarını düzenlemek, build etmek ve test akışını başlatmak için kullanılan proje tipi.
Custom metadata folder Kendi geliştirmelerimizin tutulduğu lokal klasör. Git repository ile çalışılacaksa bu klasör repo içindeki metadata klasörüne işaret etmelidir.

Yeni model oluşturmadan önce isimlendirme kararı

İlk deneme için model adını çok genel seçmemek faydalı olur. Gerçek projelerde model isimleri müşteri, ürün, modül veya geliştirme alanına göre belirlenebilir. UDE denemesi için ise hem kolay anlaşılır hem de ileride Git üzerinde takip edilebilir bir isim seçmek yeterlidir.

Örnek isimler:

  • DMRAITest
  • DMRCustomizations
  • ProjectXCustomizations
  • ProjectXIntegration
  • ProjectXReports

Bu yazıdaki örneklerde model adı olarak DMRAITest kullanacağım. Siz kendi ortamınızda müşteri veya proje standardınıza uygun bir isim tercih edebilirsiniz.

Not: İlk denemelerde model adını daha sonra gerçek projede kullanmayacağınız test amaçlı bir isimle seçmek daha güvenli olur. Gerçek proje model stratejisi ayrı bir karar olarak ele alınmalıdır.

Visual Studio’da yeni model oluşturma

Visual Studio’da yeni model oluşturmak için Dynamics 365 menüsü altındaki model management araçlarını kullanırız. Visual Studio’yu açtıktan ve doğru UDE metadata configuration’ın aktif olduğundan emin olduktan sonra şu menüye gidilir:

Extensions > Dynamics 365 > Model Management > Create model

Eğer bu menü görünmüyorsa Finance & Operations Visual Studio extension kurulumu tamamlanmamış olabilir veya Visual Studio yeniden başlatılmamış olabilir. Bu durumda önce Bölüm 5′teki extension ve metadata configuration adımlarını tekrar kontrol etmek gerekir.

Visual Studio Dynamics 365 menüsünden Create Model seçimi

Resim-2

Model parametreleri

Create model wizard açıldığında model için bazı temel bilgiler istenir. Bu bilgiler modelin kimliğini ve nasıl organize edileceğini belirler.

Alan Öneri / Açıklama
Model name DMRAITest gibi kısa, boşluksuz ve anlamlı bir teknik isim kullanılabilir.
Model publisher DMR Danışmanlık, müşteri adı veya ürün sahibi firma adı yazılabilir.
Layer Çoğu müşteri projesinde cus veya var layer tercih edilir. Eski versiyonlardaki gibi kritik bir yapı değil artık.
Model display name Kullanıcıya veya geliştiriciye daha okunur gelecek açıklayıcı isim kullanılabilir.
Description Modelin hangi amaçla oluşturulduğunu açıklayan kısa bir metin girilebilir.
Create model wizard model parametreleri

Resim-3

Yeni package mı, mevcut package mı?

Model oluşturma adımında en önemli kararlardan biri modelin yeni bir package içinde mi oluşturulacağı yoksa mevcut bir package içine mi ekleneceğidir.

İlk UDE denemesinde ve yeni başlayan bir geliştirme setinde genellikle yeni package oluşturmak daha temiz bir yaklaşımdır. Böylece modelin fiziksel sınırı, build kapsamı ve Git repository yapısı daha net olur.

Mevcut bir projede ise daha önce belirlenmiş package stratejisi varsa yeni model aynı package içine alınabilir. Ancak burada dikkat edilmesi gereken nokta, package bazlı bağımlılıkların ve deployment kapsamının doğru yönetilmesidir.

  • Yeni ve bağımsız bir geliştirme alanı için yeni package daha temiz olabilir.
  • Mevcut müşteri custom package yapısı varsa aynı package içine yeni model eklemek tercih edilebilir.
  • ISV veya ürün geliştirme senaryolarında package sınırı ayrıca tasarlanmalıdır.
  • Pipeline ve deployment stratejisi package kararını etkiler.
Create model wizard içinde yeni package seçimi

Resim-4

Referenced packages seçimi

Model oluştururken referans verilecek package’lar seçilir. Bu seçim, yeni modelin hangi mevcut metadata ve kod bileşenlerini kullanabileceğini belirler.

Basit bir runnable class örneği için çoğu durumda Application Platform ve Application Foundation referansları yeterli olabilir. Daha ileri senaryolarda Application Suite veya başka ISV / custom package referansları gerekebilir.

Burada gereksiz referans eklememek önemlidir. Her referans, modelin bağımlılıklarını artırır. Özellikle büyük projelerde gereksiz bağımlılıklar build süresini, deployment kapsamını ve bakım maliyetini artırabilir.

Referenced packages seçimi

Resim-5
Not: Bu yazıdaki örnek minimal bir X++ class üzerinden ilerlediği için referanslar sade tutulabilir. Table, form, framework veya Application Suite nesnelerine erişilecek gerçek geliştirmelerde referans ihtiyacı yeniden değerlendirilmelidir.

Model oluşturulduktan sonra kontrol

Wizard tamamlandığında Visual Studio yeni model ve package yapısını oluşturur. Bu noktada hemen geliştirmeye başlamadan önce birkaç kısa kontrol yapmak faydalıdır.

  • Model oluşturma işlemi hatasız tamamlandı mı?
  • Output penceresinde hata veya uyarı var mı?
  • Custom metadata folder altında yeni package klasörü oluştu mu?
  • Application Explorer içinde model view açıldığında yeni model görünüyor mu?
  • Modelin referenced packages bilgisi beklenen şekilde mi?

Application Explorer’da AOT köküne sağ tıklayıp Model view seçeneğini kullanmak, yeni modelin görünürlüğünü kontrol etmek için pratik bir yöntemdir.

Create model summary ekranı

Resim-6

Operations Project oluşturma

Model oluşturulduktan sonra Visual Studio içinde bir Operations Project oluşturarak geliştirme yapacağımız çalışma alanını hazırlamamız gerekir. Application Explorer nesneleri görmek ve var olan nesneleri incelemek için kullanılır; yeni nesne oluşturma, düzenleme ve build işlemleri ise bir Finance & Operations project üzerinden yapılır.

Yeni project oluşturmak için şu adımlar izlenebilir:

  • Visual Studio’da File > New > Project menüsüne gidilir.
  • Project template listesinde Finance and Operations / Dynamics 365 kategorisi seçilir.
  • Operations Project template’i seçilir.
  • Project için anlamlı bir isim verilir. Örneğin DMRAITestProject.
  • Project’in lokasyonu Git repo yapısına uygun bir klasör olarak belirlenir.
  • Create seçeneğiyle project oluşturulur.
Operations Project oluşturma ekranı

Resim-7

Project oluşturulduktan sonra Solution Explorer içinde project görünür. Bu aşamada project properties ekranından model ilişkisinin doğru olduğunu kontrol etmek gerekir.

Solution Explorer > Project > Right click > Properties

Project properties içinde özellikle Model alanı önemlidir. Bu alan, project içindeki yeni elemanların hangi modele ait olacağını belirler. Yanlış model seçilirse yeni oluşturulan class, table veya diğer nesneler beklenen model yerine başka bir modele yazılabilir.

Project klasörü ve metadata konumu kontrolü

Resim-8

İlk X++ nesnesi: Runnable class

İlk deneme için table veya form yerine runnable class oluşturmak daha güvenli bir başlangıçtır. Çünkü table oluşturduğumuzda database synchronization konusu devreye girer. Form geliştirdiğimizde ise menu item, security ve çalıştırma senaryosu gibi ek adımlar gerekebilir.

Runnable class ise küçük bir X++ kodunu derlemek, deploy etmek ve debug etmek için iyi bir başlangıç örneğidir. Bu yazıda çok basit bir class oluşturup Infolog’a mesaj yazdıracağız.

Project üzerinde sağ tıklayarak yeni item ekleyelim:

Solution Explorer > Project > Add > New Item

Açılan ekranda Dynamics 365 items altında Code kategorisinden Runnable Class seçilir. Class adı olarak aşağıdaki örnek kullanılabilir:

DMRRunnableClassTest
Runnable Class item seçimi

Resim-9

Örnek X++ kodu

Visual Studio runnable class template’i oluşturduğunda main metodunu içeren temel class yapısı gelir. Bu örnekte main metoduna sadece basit bir info mesajı ekleyebiliriz. Ayrıca arayüzden test yapabilmek için menuye de bir ekleme yaptım.

Bu örneğin amacı işlevsel olarak büyük bir şey yapmak değil. Asıl amaç, modelin doğru oluşturulduğunu, project’in doğru modele bağlı olduğunu, X++ editor’ün çalıştığını ve build sürecinin hatasız ilerlediğini görmektir.

class DMRRunnableClassTest
{
    /// <summary>
    /// Class entry point. The system will call this method when a designated menu
    /// is selected or when execution starts and this class is set as startup object.
    /// </summary>
    /// <param name = "_args">The specified arguments.</param>
    public static void main(Args _args)
    {
        info("Hello from Dynamics 365 F&O UDE");
    }
}
Visual Studio içinde örnek runnable class kodu

Resim-10
Deploy Models to Online Environment menüsü

Resim-11

Project build alma

Class oluşturulduktan sonra ilk yapılması gereken işlem project build almaktır. Build işlemi, X++ kodunun ve metadata’nın doğrulanması için temel kontroldür.

Project build almak için Solution Explorer’da project üzerinde sağ tıklayıp Build seçilebilir veya üst menüden Build seçeneği kullanılabilir:

Solution Explorer > Project > Right click > Build

Build sırasında Visual Studio Output penceresi mutlaka açık olmalıdır. Output penceresi build adımlarını, compile hatalarını, best practice uyarılarını ve varsa metadata validation sorunlarını gösterir.

Project üzerinde Build işlemi

Resim-12

Build başarıyla tamamlandıktan sonra deployment’ın başarılı olduğunu görsel olarak doğrulamak için menüye bir ekleme yapıldı. Runnable class doğrudan menüde görünemediğinden bu yöntem deployment kontrolü için pratik bir yaklaşım sunmaktadır.

Build sırasında nelere bakılmalı?

Build başarılı olduğunda genellikle Output penceresinde hata bulunmaz ve project build tamamlandı mesajı görülür. Ancak özellikle ilk UDE denemelerinde sadece “başarılı” mesajına değil, uyarılara da bakmak gerekir.

  • Class doğru model altında mı oluştu?
  • Compile error var mı?
  • Metadata validation hatası var mı?
  • Referenced package eksikliği nedeniyle hata alınıyor mu?
  • Best practice uyarıları var mı?
  • Output penceresinde path veya permission kaynaklı hata var mı?
  • Build sırasında başka bir build işlemi devam ediyor uyarısı var mı?

Eğer build sırasında eksik referans hatası alınırsa modelin referenced packages seçimi tekrar değerlendirilmelidir. Eğer class beklenen modelde görünmüyorsa project properties içindeki Model alanı kontrol edilmelidir.

Synchronize database on build ayarı

Runnable class örneğinde database synchronization ihtiyacı yoktur. Ancak ilerleyen adımlarda table veya view gibi database yapısını etkileyen nesneler geliştirildiğinde synchronize database konusu gündeme gelir.

Operations Project properties içinde Synchronize database on build ayarı bulunur. Bu ayar açık olduğunda build sonrasında database synchronization işlemi de çalışabilir. Küçük denemelerde faydalı olabilir; ancak büyük projelerde build süresini uzatabileceği için kontrollü kullanılmalıdır.

Bu noktada kod çalışır mı?

Klasik development VM alışkanlığıyla bakarsak, build aldıktan sonra kodun hemen çalışmasını bekleyebiliriz. UDE’de ise durum biraz farklıdır. Kod lokal development tier üzerinde derlenmiştir, fakat çalışma cloud execution tier üzerinde gerçekleşir. Bu nedenle kodu çalıştırmak ve debug etmek için modelin online UDE ortamına deploy edilmesi gerekir.

Visual Studio içinde bunun için Dynamics 365 menüsü altındaki deploy seçeneği kullanılır:

Extensions > Dynamics 365 > Deploy > Deploy Models to Online Environment

Bu ekranda deploy edilecek package/model seçilir ve işlem buluttaki UDE ortamına gönderilir. Deploy sonrasında runnable class çalıştırılabilir ve debug süreci başlatılabilir.

Ancak bu adımı ayrı bir yazıda daha detaylı ele almak daha doğru olur. Çünkü deploy ve debug tarafında authentication, package seçimi, sembol yükleme, breakpoint davranışı, browser URL yapısı ve runtime üzerindeki test akışı gibi ek konular var.

Application Explorer içinde eklenen menü nesnesi

Resim-13
Online environment deployment seçim ekranı

Resim-14

Uygulamayı açıp menüye geldiğimizde yapılan geliştirmeyi görebiliyoruz.

Cloud Finance & Operations ortamında görsel kontrol

Resim-15

İlk geliştirme sonrası kontrol listesi

Bu yazıdaki adımlar tamamlandıktan sonra aşağıdaki kontroller yapılabilir:

  • Yeni model başarıyla oluşturuldu mu?
  • Model doğru package içinde mi?
  • Referenced packages doğru seçildi mi?
  • Application Explorer içinde model görünüyor mu?
  • Operations Project oluşturuldu mu?
  • Project doğru modele bağlı mı?
  • Runnable class doğru model altında oluştu mu?
  • X++ kodu compile ediliyor mu?
  • Project build başarılı mı?
  • Output penceresinde kritik hata veya uyarı var mı?
  • Custom metadata folder içinde dosyalar beklenen yerde mi?
  • Git kullanılıyorsa yeni dosyalar doğru şekilde takip ediliyor mu?
  • Deploy/debug adımına geçmek için model hazır mı?

Sık yapılan hatalar

Yanlış model altında geliştirme yapmak

Project properties içindeki Model alanı kontrol edilmezse yeni oluşturulan class veya diğer nesneler beklenen model yerine başka bir modele eklenebilir. Bu durum özellikle birden fazla model ile çalışılan ortamlarda çok sık karışıklık oluşturur.

Gereksiz referenced package eklemek

Model oluştururken ihtiyaç olmayan package’lara referans vermek bağımlılıkları artırır. Başlangıçta “nasıl olsa lazım olur” diyerek çok fazla referans eklemek yerine ihtiyaç oldukça kontrollü ilerlemek daha sağlıklı olur.

Package stratejisini düşünmeden model oluşturmak

Modelin yeni package içinde mi yoksa mevcut package içinde mi oluşturulacağı ileride build, deploy ve pipeline süreçlerini etkiler. Bu nedenle gerçek projelerde bu karar ekip standardına göre verilmelidir.

Build başarılı olunca kodun cloud ortamda çalışacağını düşünmek

UDE’de build lokal geliştirme katmanında gerçekleşir. Kodu online UDE runtime üzerinde çalıştırmak için modelin deploy edilmesi gerekir.

Kapanış

Bu yazıda UDE ortamına bağlı Visual Studio üzerinde yeni bir model oluşturmayı, package ve reference seçimlerini, Operations Project hazırlığını ve ilk basit X++ runnable class geliştirmesini ele aldık.

Bölüm 5′te Visual Studio ile UDE ortamı arasındaki bağlantıyı kurmuştuk. Bu yazıda ise artık geliştirme tarafına geçtik. Yeni modelin oluşturulması, project’in doğru modele bağlanması ve ilk build’in alınması UDE’de geliştirme düzeninin temelini oluşturuyor.

Burada en kritik nokta, UDE’nin local development ve cloud execution ayrımını doğru anlamak. Kod lokal bilgisayarda yazılıyor ve build ediliyor; fakat çalıştırma ve debug için online UDE ortamına deploy edilmesi gerekiyor. Bu ayrım klasik development VM modelinden gelen alışkanlıkları değiştiriyor.

Bir sonraki yazıda Azure Devops ve git e değineceğim.

 
  • Trackback are closed
  • Comments (0)
  1. No comments yet.