﻿
{"id":16141,"date":"2020-05-27T23:26:09","date_gmt":"2020-05-27T23:26:09","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=16141"},"modified":"2020-05-27T23:26:09","modified_gmt":"2020-05-27T23:26:09","slug":"odata-unbound-function-action","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/odata-unbound-function-action\/","title":{"rendered":"OData &#8211; Unbound Function\/Action"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bir \u00f6nceki <a href=\"https:\/\/www.gencayyildiz.com\/blog\/odata-action-function-yapilanmasi-ile-custom-metot-olusturma\/\" target=\"_blank\" rel=\"noopener noreferrer\">OData \u2013 Action\/Function Yap\u0131lanmas\u0131 \u0130le Custom Metot Olu\u015fturma<\/a> ba\u015fl\u0131kl\u0131 makalemizde OData protokol\u00fcnde varsay\u0131lan kurallar\u0131 a\u015fmam\u0131z\u0131 sa\u011flayan custom metotlar\u0131n Action ve Function yap\u0131lanmalar\u0131yla aralar\u0131ndaki n\u00fcanslar\u0131 g\u00f6z \u00f6n\u00fcne alarak ne \u015fekilde olu\u015fturulduklar\u0131n\u0131 incelemi\u015ftik. Bu incelemeler esnas\u0131nda(makaleye g\u00f6z atarsan\u0131z e\u011fer) her iki yap\u0131lanmada da bir entity&#8217;e ba\u011fl\u0131 metot geli\u015ftirmi\u015f bulunmaktay\u0131z. \u0130\u015fte bu i\u00e7eri\u011fimizde ise OData&#8217;n\u0131n herhangi bir entity&#8217;e ba\u011fl\u0131 olmaks\u0131z\u0131n custom metot tasarlamam\u0131z\u0131 sa\u011flayan Unbound Function ya da Action yap\u0131lar\u0131n\u0131n nas\u0131l olu\u015fturuldu\u011funu inceleyece\u011fiz.<\/p>\n<p>Unbound Function ya da Action tasarlamak her iki yap\u0131lanma i\u00e7inde ayn\u0131 bildirimi gerektirece\u011finden dolay\u0131 bizler i\u00e7eri\u011fimizde Function \u00fczerinden bir \u00f6rneklendirmede bulunaca\u011f\u0131z. Sizler verilen \u00f6rnekteki function tan\u0131mlamalar\u0131n\u0131 action ile de\u011fi\u015ftirerek istedi\u011finiz \u015fekilde \u00f6zelle\u015ftirebilirsiniz.<\/p>\n<p>\u015eimdi ilk olarak <strong>entity&#8217;e ba\u011fl\u0131 bir function nas\u0131l geli\u015ftiriyorduk<\/strong> hat\u0131rlayal\u0131m&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            .\r\n            .\r\n            .\r\n            var builder = new ODataConventionModelBuilder();\r\n            builder.EntitySet&lt;Personel&gt;(&quot;Personel&quot;);\r\n            builder.EntitySet&lt;Kategori&gt;(&quot;Kategori&quot;);\r\n            builder.EntitySet&lt;Satis&gt;(&quot;Satis&quot;);\r\n\r\n            builder.EntityType&lt;Personel&gt;()\r\n                   .Function(&quot;toplampersonel&quot;)\r\n                   .Returns&lt;int&gt;();\r\n\r\n            app.UseEndpoints(endpoints =&gt;\r\n            {\r\n                endpoints.MapODataRoute(&quot;odata&quot;, &quot;odata&quot;, builder.GetEdmModel());\r\n                endpoints.OrderBy().Expand().Select().MaxTop(50).Count();\r\n            });\r\n            .\r\n            .\r\n            .\r\n<\/pre>\n<p>Burada 9. sat\u0131ra g\u00f6z atarsan\u0131z e\u011fer &#8216;EntityType&lt;Personel&gt;&#8217; generic metodu ile bildirilen ifade de olu\u015fturulan bu metot bildiriminin bir entity&#8217;e(Personel) ba\u011fl\u0131 oldu\u011fu bildirilmektedir. Dolay\u0131s\u0131yla url \u00fczerinden yap\u0131lacak t\u00fcm sorgulamalarda bu entity&#8217;e set edilmi\u015f constructor ismi a\u015fa\u011f\u0131daki gibi bildirilmesi gerekmektedir.<br \/>\n<code style=\"color:red;\"><strong>https:\/\/localhost:5001\/odata\/<span style=\"color:blue;\">personel(1)<\/span>\/toplampersonel<\/strong><\/code><br \/>\nE\u011fer ki unbound bir action ya da function olu\u015fturmak istiyorsak a\u015fa\u011f\u0131daki gibi bu generic &#8216;EntityType&#8217; fonksiyonunun \u00e7a\u011fr\u0131lmamas\u0131 gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\n            builder.Function(&quot;toplampersonel&quot;)\r\n                   .Returns&lt;int&gt;();\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>\u0130\u015fte bu kadar&#8230;<\/p>\n<p>Herhangi bir entity&#8217;e ba\u011fl\u0131 olmaks\u0131z\u0131n geli\u015ftirilen bu metodu istedi\u011finiz bir controllerda a\u015fa\u011f\u0131daki gibi tan\u0131mlayabilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class MyPersonelController : ODataController\r\n    {\r\n        &#x5B;ODataRoute(&quot;ToplamPersonel&quot;)]\r\n        &#x5B;HttpGet]\r\n        public IActionResult ToplamPersonel()\r\n        {\r\n            \/\/i\u015flemler...\r\n            return Ok(150);\r\n        }\r\n    }\r\n<\/pre>\n<p>\u0130lgili metotu tetikleyecek url, entity&#8217;e ba\u011fl\u0131 olmad\u0131\u011f\u0131ndan dolay\u0131 haliyle herhangi bir controller bilgisi bulunmaks\u0131z\u0131n a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<br \/>\n<code style=\"color:red;\"><strong>https:\/\/localhost:5001\/odata\/toplampersonel<\/strong><\/code><br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/OData-Unbound-Function-Action.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/OData-Unbound-Function-Action.jpg\" alt=\"OData - Unbound Function\/Action\" width=\"429\" height=\"204\" class=\"aligncenter size-full wp-image-16157\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/OData-Unbound-Function-Action.jpg 429w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/OData-Unbound-Function-Action-300x143.jpg 300w\" sizes=\"auto, (max-width: 429px) 100vw, 429px\" \/><\/a><br \/>\nE\u011fer ki parametreli unbound bir function\/action tasarlamak istiyorsan\u0131z a\u015fa\u011f\u0131daki gibi bildirimde ve tan\u0131mlamada bulunman\u0131z yeterli olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n           .\r\n           .\r\n           .\r\n           var toplamPersonel = builder.Function(&quot;ToplamPersonel&quot;)\r\n                   .Returns&lt;int&gt;();\r\n\r\n            toplamPersonel.Parameter&lt;int&gt;(&quot;girisYili&quot;);\r\n            toplamPersonel.Parameter&lt;int&gt;(&quot;kidem&quot;);\r\n           .\r\n           .\r\n           .\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class MyPersonelController : ODataController\r\n    {\r\n        &#x5B;ODataRoute(&quot;ToplamPersonel(GirisYili={girisYili},Kidem={kidem})&quot;)]\r\n        &#x5B;HttpGet]\r\n        public IActionResult ToplamPersonel(int girisYili, int kidem)\r\n        {\r\n            \/\/i\u015flemler...\r\n            return Ok(150);\r\n        }\r\n    }\r\n<\/pre>\n<p>Parametrelere url \u00fczerinden de\u011fer g\u00f6nderebilmek i\u00e7in url&#8217;in<br \/>\n<code style=\"color:red;\"><strong>https:\/\/localhost:5001\/odata\/toplampersonel<span style=\"color:blue;\">(girisyili=2000, kidem=5)<\/span><\/strong><\/code><br \/>\n\u015feklinde olu\u015fturulmas\u0131 yeterlidir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/OData-Unbound-Function-Action-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/OData-Unbound-Function-Action-1.jpg\" alt=\"OData - Unbound Function\/Action\" width=\"516\" height=\"197\" class=\"aligncenter size-full wp-image-16161\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/OData-Unbound-Function-Action-1.jpg 516w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/OData-Unbound-Function-Action-1-300x115.jpg 300w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/a><\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bir \u00f6nceki OData \u2013 Action\/Function Yap\u0131lanmas\u0131 \u0130le Custom Metot Olu\u015fturma ba\u015fl\u0131kl\u0131 makalemizde OData protokol\u00fcnde varsay\u0131lan kurallar\u0131 a\u015fmam\u0131z\u0131 sa\u011flayan custom metotlar\u0131n Action ve Function yap\u0131lanmalar\u0131yla aralar\u0131ndaki n\u00fcanslar\u0131 g\u00f6z \u00f6n\u00fcne alarak ne \u015fekilde olu\u015fturulduklar\u0131n\u0131 incelemi\u015ftik.&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":15889,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3516],"tags":[3514,3556,3555],"class_list":["post-16141","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-odata","tag-odata","tag-odata-unbound-action","tag-odata-unbound-function"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/16141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=16141"}],"version-history":[{"count":20,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/16141\/revisions"}],"predecessor-version":[{"id":16163,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/16141\/revisions\/16163"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/15889"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=16141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=16141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=16141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}