OData – Unbound Function/Action

Merhaba,

Bir önceki OData – Action/Function Yapılanması İle Custom Metot Oluşturma başlıklı makalemizde OData protokolünde varsayılan kuralları aşmamızı sağlayan custom metotların Action ve Function yapılanmalarıyla aralarındaki nüansları göz önüne alarak ne şekilde oluşturulduklarını incelemiştik. Bu incelemeler esnasında(makaleye göz atarsanız eğer) her iki yapılanmada da bir entity’e bağlı metot geliştirmiş bulunmaktayız. İşte bu içeriğimizde ise OData’nın herhangi bir entity’e bağlı olmaksızın custom metot tasarlamamızı sağlayan Unbound Function ya da Action yapılarının nasıl oluşturulduğunu inceleyeceğiz.

Unbound Function ya da Action tasarlamak her iki yapılanma içinde aynı bildirimi gerektireceğinden dolayı bizler içeriğimizde Function üzerinden bir örneklendirmede bulunacağız. Sizler verilen örnekteki function tanımlamalarını action ile değiştirerek istediğiniz şekilde özelleştirebilirsiniz.

Şimdi ilk olarak entity’e bağlı bir function nasıl geliştiriyorduk hatırlayalım…

            .
            .
            .
            var builder = new ODataConventionModelBuilder();
            builder.EntitySet<Personel>("Personel");
            builder.EntitySet<Kategori>("Kategori");
            builder.EntitySet<Satis>("Satis");

            builder.EntityType<Personel>()
                   .Function("toplampersonel")
                   .Returns<int>();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapODataRoute("odata", "odata", builder.GetEdmModel());
                endpoints.OrderBy().Expand().Select().MaxTop(50).Count();
            });
            .
            .
            .

Burada 9. satıra göz atarsanız eğer ‘EntityType<Personel>’ generic metodu ile bildirilen ifade de oluşturulan bu metot bildiriminin bir entity’e(Personel) bağlı olduğu bildirilmektedir. Dolayısıyla url üzerinden yapılacak tüm sorgulamalarda bu entity’e set edilmiş constructor ismi aşağıdaki gibi bildirilmesi gerekmektedir.
https://localhost:5001/odata/personel(1)/toplampersonel
Eğer ki unbound bir action ya da function oluşturmak istiyorsak aşağıdaki gibi bu generic ‘EntityType’ fonksiyonunun çağrılmaması gerekmektedir.

.
.
.
            builder.Function("toplampersonel")
                   .Returns<int>();
.
.
.

İşte bu kadar…

Herhangi bir entity’e bağlı olmaksızın geliştirilen bu metodu istediğiniz bir controllerda aşağıdaki gibi tanımlayabilirsiniz.

    public class MyPersonelController : ODataController
    {
        [ODataRoute("ToplamPersonel")]
        [HttpGet]
        public IActionResult ToplamPersonel()
        {
            //işlemler...
            return Ok(150);
        }
    }

İlgili metotu tetikleyecek url, entity’e bağlı olmadığından dolayı haliyle herhangi bir controller bilgisi bulunmaksızın aşağıdaki gibi olacaktır.
https://localhost:5001/odata/toplampersonel
OData - Unbound Function/Action
Eğer ki parametreli unbound bir function/action tasarlamak istiyorsanız aşağıdaki gibi bildirimde ve tanımlamada bulunmanız yeterli olacaktır.

           .
           .
           .
           var toplamPersonel = builder.Function("ToplamPersonel")
                   .Returns<int>();

            toplamPersonel.Parameter<int>("girisYili");
            toplamPersonel.Parameter<int>("kidem");
           .
           .
           .
    public class MyPersonelController : ODataController
    {
        [ODataRoute("ToplamPersonel(GirisYili={girisYili},Kidem={kidem})")]
        [HttpGet]
        public IActionResult ToplamPersonel(int girisYili, int kidem)
        {
            //işlemler...
            return Ok(150);
        }
    }

Parametrelere url üzerinden değer gönderebilmek için url’in
https://localhost:5001/odata/toplampersonel(girisyili=2000, kidem=5)
şeklinde oluşturulması yeterlidir.
OData - Unbound Function/Action

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*