﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bilgehan Yıldız</title>
	<atom:link href="http://bilgehanyildiz.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bilgehanyildiz.com</link>
	<description>Yenmek de yenilmek de seçimle başlar, sadece istersen yenilirsin</description>
	<lastBuildDate>Sat, 18 Feb 2012 10:38:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>FLUENT NHIBERNATE DE PARENT-CHILD (MASTER- DETAIL) FORMATTA  KAYIT EKLEME(SAVE YONTEMİ))</title>
		<link>http://bilgehanyildiz.com/2012/02/18/fluent-nhibernate-de-parent-child-master-detail-formatta-kayit-eklemesave-yontemi/</link>
		<comments>http://bilgehanyildiz.com/2012/02/18/fluent-nhibernate-de-parent-child-master-detail-formatta-kayit-eklemesave-yontemi/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 10:38:39 +0000</pubDate>
		<dc:creator>bilgehanyildiz</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://bilgehanyildiz.com/?p=246</guid>
		<description><![CDATA[Aralarında 1 – n ilişki olan varlıklarda child varlıkta parent kayda ilişkin bir Foreign Key tutarız.Dolayısıyla child varlığı ekleyeceğimiz zaman bu Foreign Key değerini vererek gerekli kayıt işlemini gerçekleştirmiş oluruz.Ancak bazı durumlarda parent kayıt eklenirken (Daha henüz databasede yaratılmadan) bu &#8230; <a href="http://bilgehanyildiz.com/2012/02/18/fluent-nhibernate-de-parent-child-master-detail-formatta-kayit-eklemesave-yontemi/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Aralarında 1 – n ilişki olan varlıklarda child varlıkta parent kayda ilişkin bir Foreign Key tutarız.Dolayısıyla child varlığı ekleyeceğimiz zaman bu Foreign Key değerini vererek gerekli kayıt işlemini gerçekleştirmiş oluruz.Ancak bazı durumlarda parent kayıt eklenirken (Daha henüz databasede yaratılmadan) bu parent kayda bağlı child varlıkları eklemek ve bunların hepsini bir seferde database kayıt olmasını isteyebiliriz.Örnek olarak Bir Master Kayıt Kişi ve buna bağlı Telefonlar ikiside farklı varlıklar olarak düşünülürse kişiyi eklediğimiz anda telefonlarınıda eklemek istiyoruz ve bunuda database iki kere gitmeden tek bir save ile halletmek istiyoruz</p>
<p>Fluent Nhibernate de bunu yapabilmek için aşağıdaki adımlar izlenmelidir</p>
<p>Burada  master entity PersonType ,child Entity Person olarak düşünülmüştür.Amaç Yeni bir persontype yaratırken buna bağlı personlarıda veritabanına ekleyebilmektir.</p>
<p>Birinci varlığımız PersonType içinde childları olan personları barındırıyor</p>
<p>public class PersonType</p>
<p>{</p>
<p>public virtual int ID { get; set; }</p>
<p>public virtual string Name { get; set; }</p>
<p>public virtual ICollection&lt;Person&gt; Persons { get; set; }</p>
<p>}</p>
<p>İkinci varlığımız(child olan) Person ise dikkat edilirse Foreign Keyini direkt int gibi alacak şekilde değil,nesne tabanlı olacak şekilde tasarlıyoruz.</p>
<p>public partial class Person</p>
<p>{</p>
<p>public virtual int ID { get; set; }</p>
<p>public virtual string Name { get; set; }</p>
<p>public virtual PersonType PersonTypes { get; set; }</p>
<p>}</p>
<p>Maplarimiz ise aşağıdaki şekilde tasarlıyoruz.Dikkat edilirse Fluent Nhibernate Giriş 2 deki basit mapleme mantığından farklı olarak artık İlişkili alanları nesne mantığında tutuyoruz.</p>
<p>public PersonTypeMap()</p>
<p>{</p>
<p>Table(&#8220;PersonType&#8221;);</p>
<p>Schema(&#8220;dbo&#8221;);</p>
<p>Id(x =&gt; x.ID);</p>
<p>Map(x =&gt; x.Name);</p>
<p>HasMany&lt;Person&gt;(x =&gt; x.Persons).Cascade.AllDeleteOrphan().KeyColumn(&#8220;ID&#8221;).Inverse().Table(&#8220;PersonType&#8221;);</p>
<p>}</p>
<p>public class PersonMap:ClassMap&lt;Person&gt;</p>
<p>{</p>
<p>public PersonMap()</p>
<p>{</p>
<p>Table(&#8220;Person&#8221;);</p>
<p>Schema(&#8220;Common&#8221;);</p>
<p>Id(x =&gt; x.ID);</p>
<p>Map(x =&gt; x.Name);</p>
<p>References(x =&gt; x.PersonTypes).Column(&#8220;PersonTypeID&#8221;).Cascade.None();</p>
<p>}</p>
<p>}</p>
<p>Bundan sonra Parent – Child olarak tek bir seferde save yapabilmek için aşağıdaki gibi bir kod yazmak yeterli olacaktır.Aşağıdaki koddada görüldüğü üzere Sistem Admin Tipini yaratırken ona bağlı olarak Person varlığınıda yaratıyoruz.Bu işlemleride runtimede tek bir savede yaptığımız için mappinglerimizide nesne tabanlı çalışcak hale getiriyoruz.</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>PersonType p = new PersonType();</p>
<p>p.Name = &#8220;Sistem Admin&#8221;;</p>
<p>p.Persons  = new Collection&lt;Person&gt;();</p>
<p>Person p2 = new Person { Name = &#8220;Bilgehan Yıldız&#8221;,PersonTypes=p};</p>
<p>p.Persons.Add(p2);</p>
<p>session.Save(p);</p>
]]></content:encoded>
			<wfw:commentRss>http://bilgehanyildiz.com/2012/02/18/fluent-nhibernate-de-parent-child-master-detail-formatta-kayit-eklemesave-yontemi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL SERVER 2008 REPORTING SERVICE HTML FORMATINDA BİLGİ GÖSTERME</title>
		<link>http://bilgehanyildiz.com/2012/01/13/sql-server-2008-reporting-service-html-formatinda-bilgi-gosterme/</link>
		<comments>http://bilgehanyildiz.com/2012/01/13/sql-server-2008-reporting-service-html-formatinda-bilgi-gosterme/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 10:00:43 +0000</pubDate>
		<dc:creator>bilgehanyildiz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://bilgehanyildiz.com/?p=227</guid>
		<description><![CDATA[SSRS 2008 deki özelliklerden biride eğer verilerimiz veritabanından html formatında geliyor ise bunu yorumyalabilmesidir.Aşağıdaki şekilde Düz başlığı altında yazan yerde görüldüğü gibi eğer verilerimizi direkt olarak basarsak bu şekilde gözükecektir Ancak yukarıdaki şekilde html başlığındaki gibi verilerimizdeki html taglarının yorumlanmasını &#8230; <a href="http://bilgehanyildiz.com/2012/01/13/sql-server-2008-reporting-service-html-formatinda-bilgi-gosterme/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>SSRS 2008 deki özelliklerden biride eğer verilerimiz veritabanından html formatında geliyor ise bunu yorumyalabilmesidir.Aşağıdaki şekilde Düz başlığı altında yazan yerde görüldüğü gibi eğer verilerimizi direkt olarak basarsak bu şekilde gözükecektir</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/ssrs2008html1.jpg"><img class="alignnone size-medium wp-image-228" title="ssrs2008html1" src="http://bilgehanyildiz.com/wp-content/uploads/ssrs2008html1-156x300.jpg" alt="" width="156" height="300" /></a></p>
<p>Ancak yukarıdaki şekilde html başlığındaki gibi verilerimizdeki html taglarının yorumlanmasını istiyorsak bu değişikliği yapmak istediğimiz hücreye çift tıklayıp sağ tuş dan create placeholder diyoruz.</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/ssrs2008html2.jpg"><img class="alignnone size-medium wp-image-229" title="ssrs2008html2" src="http://bilgehanyildiz.com/wp-content/uploads/ssrs2008html2-300x95.jpg" alt="" width="300" height="95" /></a></p>
<p>Açılan popup da markuptype kısmında html interpret seçeneğini seçiyoruz.Daha sonra gene aynı popupta value değerini belirliyoruz.Böylece gelen verimizdeki html tagları yorumlanabiliyor</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/ssrs2008html3.jpg"><img class="alignnone size-medium wp-image-230" title="ssrs2008html3" src="http://bilgehanyildiz.com/wp-content/uploads/ssrs2008html3-300x277.jpg" alt="" width="300" height="277" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://bilgehanyildiz.com/2012/01/13/sql-server-2008-reporting-service-html-formatinda-bilgi-gosterme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ADO.NET-1</title>
		<link>http://bilgehanyildiz.com/2011/12/31/adonet1/</link>
		<comments>http://bilgehanyildiz.com/2011/12/31/adonet1/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 09:15:43 +0000</pubDate>
		<dc:creator>bilgehanyildiz</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://bilgehanyildiz.com/?p=218</guid>
		<description><![CDATA[1-)Öncelikle bağlantı cümlesini tek merkezi bir yerde tutmalısınız,bu şart değildir ancak uygulama taşımalarında kolaylık sağlar. Bu window uygulamaları için app.config ,web uygulamaları için web.configdir.Bunlar temelde bir nevi xml dosyası olup genelde uygulamarda tek bir merkezden okunması gereken değerler buralara konur &#8230; <a href="http://bilgehanyildiz.com/2011/12/31/adonet1/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>1-)Öncelikle bağlantı cümlesini tek merkezi bir yerde tutmalısınız,bu şart değildir ancak uygulama taşımalarında kolaylık sağlar. Bu window uygulamaları için app.config ,web uygulamaları için web.configdir.Bunlar temelde bir nevi xml dosyası olup genelde uygulamarda tek bir merkezden okunması gereken değerler buralara konur</p>
<p>Örnek app.config dosyası  burada connection stringimizi aşağıdaki gibi yazıyoruz.Daha sonra veri tabanımızın yolu vs değişirse sadece burdan değişiklik yapmamız yeterli oluyor.Bunuda projene eklemek için aşağıdaki adımları izlemelesiniz.</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/ado1.jpg"><img class="alignnone size-medium wp-image-219" title="ado1" src="http://bilgehanyildiz.com/wp-content/uploads/ado1-263x300.jpg" alt="" width="263" height="300" /></a></p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/ado2.jpg"><img class="alignnone size-medium wp-image-220" title="ado2" src="http://bilgehanyildiz.com/wp-content/uploads/ado2-300x186.jpg" alt="" width="300" height="186" /></a></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243; ?&gt;</p>
<p>&lt;configuration&gt;</p>
<p>&lt;configSections&gt;</p>
<p>&lt;/configSections&gt;</p>
<p>&lt;connectionStrings&gt;</p>
<p>&lt;add name=&#8221;TelefonRehberiConnectionString&#8221;</p>
<p>connectionString=&#8221;Data Source=.;Initial Catalog=TelefonRehberi;Integrated Security=True&#8221;</p>
<p>providerName=&#8221;System.Data.SqlClient&#8221; /&gt;</p>
<p>&lt;/connectionStrings&gt;</p>
<p>&lt;/configuration&gt;</p>
<p>Bunuda kodda kullanmak için aşağıdaki şekilde kod yazmamız lazım</p>
<p>Bunu yapmadan önce projemize referans&#8211;&gt;Add&#8211;&gt;System.Configuration dll eklememiz gerekmektedir</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/ado3.jpg"><img class="alignnone size-medium wp-image-221" title="ado3" src="http://bilgehanyildiz.com/wp-content/uploads/ado3-300x280.jpg" alt="" width="300" height="280" /></a></p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/ado4.jpg"><img class="alignnone size-medium wp-image-222" title="ado4" src="http://bilgehanyildiz.com/wp-content/uploads/ado4-300x252.jpg" alt="" width="300" height="252" /></a></p>
<p>string baglantiyolu = ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString;</p>
<p>2-)connection string örnekleri</p>
<p>Connection stringde</p>
<p>Data Source àmakina adı,ip vs olabilir,. Dersen makinandaki local sql servera bağlanır</p>
<p>Initial CatalogàBuraya database adını yazman gerekir</p>
<p>User IdàDatabaselere genelde güvenlik için kullanıcılar açılır.Databasede hakkı olan kullanıcı</p>
<p>PasswordàDatabase kullanıcısına ait şifre</p>
<p>Data Source=ServerAd;Initial Catalog=DbAd;User Id=KullanıcıAd;Password= 1234;</p>
<p>Bu şekilde bir bağlantı yapılırsa Integrated Security =True diye bu o database windows authenticate yani şifre vermeden bağlanabileceğini gösterir</p>
<p>Data Source=.;Initial Catalog=TelefonRehberi;Integrated Security=True</p>
<p>Alternatif bağlantı cümleleri için aşağıdaki adresi inceleyebilirsiniz</p>
<p><a href="http://www.connectionstrings.com/">http://www.connectionstrings.com/</a></p>
<p>3-)Veritabanına bağlanıp sonuçları bir küme içine almak için gereken kodlar</p>
<p>Sql serverla iş yapacaksan SqlConnection ,Access ile yapacaksan OleDbConnection gibi veritabanın değişirse kullancağın bu yapıları değiştirmelisin ancak mantıkları aynıdır.</p>
<p>string baglantiyolu = ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString;</p>
<p>//Sql Connection bunun ile içine veritabanı yolunu vererek nereye bağlancağımızı belirtiyoruz</p>
<p>SqlConnection conn = new SqlConnection(baglantiyolu);</p>
<p>//Veritabanımızdan döncek kayıtları bir yere almam lazım ,datatable de verileri alabileceğim bir küme olarak düşün</p>
<p>DataTable dt = new DataTable();</p>
<p>//Select sorgusu atarak veritabanından istediğim alanları çekebilirim</p>
<p>string sorgu = &#8220;Select KisiID,Ad,Soyad from Kisi&#8221;;</p>
<p>//Sqldataadapter ise kendisine verilen sorgu ve veritabanını kullanarak işlemleri gerçekliyeceğimiz sınıftır</p>
<p>SqlDataAdapter adap = new SqlDataAdapter(sorgu, conn);</p>
<p>//Fill metodu ile Datatable gibi dolmasını istediğimiz veri kümesinin içine datalarımızı atıyoruz</p>
<p>adap.Fill(dt);</p>
<p>//En sonda bu veri kümemizi grid gibi bir elemanın kaynağına atayarak gösterilmesi vs.. gibi işlemleri yapabiliriyoruz</p>
<p>dataGridView1.DataSource = dt;</p>
<p>4-)SqlCommand ise SqlAdapter gibidir ancak daha çok stored procedure,insert,update,delete gibi işlemlerde tercih edilir.Ancak Command ile işlem yapılırken database bağlantıyı senin açıp kapaman gerekir.</p>
<p>conn.Open();àVeritabanı bağlantısını açar</p>
<p>cmd.ExecuteNonQuery();àCommand nesnesini çalıştırmak için kullanılır</p>
<p>conn.Close();Veritabanı bağlantısını kapar</p>
<p>sqlparameter ise sorgularının parametre almasını istersen resimdeki değerleri formdan okuyup database kaydetmek istiyorsan önce</p>
<p>sorgunda @ ile belirttiğin kelimeler parametredir</p>
<p>Daha sonra bu parametreler değer ataman gerekir</p>
<p>Örnek parametre listesinin 0 ıncı elemanı @Ad parametresine denk geliyor değeri formdaki name alanı</p>
<p>paramlist[0]=new SqlParameter(&#8220;@Ad&#8221;, txtName.Text);</p>
<p>Bütün bunları yaptıktan sonra query çalıştırmadan önce bunların hepsini aşağıdaki gibi commandına eklemen lazım</p>
<p>cmd.Parameters.AddRange(paramlist);</p>
<p>Bütün bunları yaptıktan sonra command nesneni aşağıdaki gibi çalıştırdığında işlemi yapıyor</p>
<p>cmd.ExecuteNonQuery();</p>
<p>bool Cinsiyet;</p>
<p>if(rdbBay.Checked)</p>
<p>Cinsiyet=true;</p>
<p>else</p>
<p>Cinsiyet=false;</p>
<p>string baglantiyolu = ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString;</p>
<p>SqlConnection conn = new SqlConnection(baglantiyolu);</p>
<p>string sorgukisiekle = &#8220;Insert Into Kisi(Ad,Soyad,Cinsiyet,Yas,TcKimlik) values(@Ad,@Soyad,@Cinsiyet,@Yas,@TcKimlik)&#8221;;</p>
<p>SqlParameter[] paramlist = new SqlParameter[5];</p>
<p>paramlist[0]=new SqlParameter(&#8220;@Ad&#8221;, txtName.Text);</p>
<p>paramlist[1] = new SqlParameter(&#8220;@Soyad&#8221;, txtSoyad.Text);</p>
<p>paramlist[2] = new SqlParameter(&#8220;@Cinsiyet&#8221;, Cinsiyet);</p>
<p>paramlist[3] = new SqlParameter(&#8220;@Yas&#8221;, nudYas.Value);</p>
<p>paramlist[4] = new SqlParameter(&#8220;@TcKimlik&#8221;, txtTcKimlik.Text);</p>
<p>SqlCommand cmd = new SqlCommand(sorgukisiekle, conn);</p>
<p>cmd.Parameters.AddRange(paramlist);</p>
<p>conn.Open();</p>
<p>cmd.ExecuteNonQuery();</p>
<p>conn.Close();</p>
<p>5-)SqlParametrelerini kullanmanın farklı yöntemleri var örnek olarak yukarıda benim yaptığım bir parametre listesi oluşturmaktı ancak parametreleri şu şekilde de ekleyebilirdim</p>
<p>Aşağıdaki gibi parametreleri tek tek ekleyebilirsiniz mesela farklı algoritmalarda işine yarar</p>
<p>SqlParameter param=new SqlParameter(&#8220;@Ad&#8221;, txtName.Text);</p>
<p>cmd.Parameters.Add(param);</p>
<p>6-)Aşağıdaki şekilde hiç parametre kullanmadan da işlem yapılabilir ancak bunu kesinlikle yapma ,sql injection hatalarına vs neden olabilir.ve kod okunabilirliğini azalır.</p>
<p>string sorgukisiekle = &#8220;Insert Into Kisi(Ad,Soyad,Cinsiyet,Yas,TcKimlik) values(@Ad=&#8221;+txtName.Text+&#8221;,@Soyad=&#8221;+txtSoyad.Text&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://bilgehanyildiz.com/2011/12/31/adonet1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FluentNHibernate – Nhibernate Giris -2</title>
		<link>http://bilgehanyildiz.com/2011/11/10/fluentnhibernatenhibernategiris2/</link>
		<comments>http://bilgehanyildiz.com/2011/11/10/fluentnhibernatenhibernategiris2/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 11:41:34 +0000</pubDate>
		<dc:creator>bilgehanyildiz</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://bilgehanyildiz.com/?p=213</guid>
		<description><![CDATA[Mapping işlemlerinden ve SessionFactory Create ettikten sonra artık örnek sorguları oluşturabilirsiniz Nhibernate le alakalı örnek sorgular 1-)Select All var session = NHibernateHelper.OpenSession(); IList&#60;Person&#62; ab = session.CreateCriteria(typeof(Person)).List&#60;Person&#62;(); 2-) ID vererek bir listedeki tek kaydı çekme var session = NHibernateHelper.OpenSession(); PersonType pt=session.Load&#60;PersonType&#62;(1); &#8230; <a href="http://bilgehanyildiz.com/2011/11/10/fluentnhibernatenhibernategiris2/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Mapping işlemlerinden ve SessionFactory Create ettikten sonra artık örnek sorguları oluşturabilirsiniz</p>
<p>Nhibernate le alakalı örnek sorgular</p>
<p>1-)Select All</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>IList&lt;Person&gt; ab = session.CreateCriteria(typeof(Person)).List&lt;Person&gt;();</p>
<p>2-) ID vererek bir listedeki tek kaydı çekme</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>PersonType pt=session.Load&lt;PersonType&gt;(1);</p>
<p>3-)Insert</p>
<p>using (var session = NHibernateHelper.OpenSession())</p>
<p>{</p>
<p>using (var transaction = session.BeginTransaction())</p>
<p>{</p>
<p>var newPerson = new Person</p>
<p>{</p>
<p>Name = &#8220;abc4&#8243;,</p>
<p>PersonTypeID = 3</p>
<p>};</p>
<p>session.Save(newPerson);</p>
<p>transaction.Commit();</p>
<p>}</p>
<p>}</p>
<p>4-)Update</p>
<p>using (var session = NHibernateHelper.OpenSession())</p>
<p>{</p>
<p>using (var transaction = session.BeginTransaction())</p>
<p>{</p>
<p>var newPerson = new Person</p>
<p>{</p>
<p>ID = 5,</p>
<p>Name = &#8220;abc88&#8243;,</p>
<p>PersonTypeID = 3</p>
<p>};</p>
<p>session.Update(newPerson);</p>
<p>transaction.Commit();</p>
<p>}</p>
<p>}</p>
<p>5-)Insert or Update &#8212; &gt; SaveOrUpdate bu kodda eğer ID verirseniz güncelleme yapar,ID verilmez ise direkt olarak insert yapar.Ancak ID niz otomatik artansa ve o ID ait kayıt yoksa bu kod size hata fırlatır.</p>
<p>using (var session = NHibernateHelper.OpenSession())</p>
<p>{</p>
<p>using (var transaction = session.BeginTransaction())</p>
<p>{</p>
<p>var newPerson = new Person</p>
<p>{</p>
<p>// ID = 5,</p>
<p>Name = &#8220;abc78&#8243;,</p>
<p>PersonTypeID = 3</p>
<p>};</p>
<p>session.SaveOrUpdate(newPerson);//session.Update(newPerson);</p>
<p>transaction.Commit();</p>
<p>}</p>
<p>}</p>
<p>6-)Select Top sorgu sonucu maximum istenen kayıt sayısı</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>ICriteria crit = session.CreateCriteria(typeof(Person));</p>
<p>crit.SetMaxResults(1);</p>
<p>IList mylist = crit.List();</p>
<p>7-)Distinct</p>
<p>Distinct Metod 1</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>IList mylist = session.CreateCriteria(typeof(Person)).SetProjection(Projections.Distinct(Projections.Property(&#8220;Name&#8221;))).List();</p>
<p>Distinct Metod 2</p>
<p>ICriteria criteria</p>
<p>= session.CreateCriteria(typeof(Person));</p>
<p>criteria.SetProjection(Projections.Distinct(Projections.ProjectionList().</p>
<p>Add(Projections.Alias(Projections.Property(&#8220;Name&#8221;), &#8220;Name&#8221;)).</p>
<p>Add(Projections.Alias(Projections.Property(&#8220;PersonTypeID&#8221;), &#8220;PersonTypeID&#8221;))));</p>
<p>criteria.SetResultTransformer(new NHibernate.Transform.AliasToBeanResultTransformer(typeof(Person)));</p>
<p>IList people = criteria.List();</p>
<p>8-)Order By</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>IList mylist = session.CreateCriteria(typeof(Person)).AddOrder(Order.Desc(&#8220;ID&#8221;)).List();</p>
<p>9-)Inner Join</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>IList mylist = session.CreateCriteria(typeof(Person)).CreateAlias(&#8220;PersonTypes&#8221;, &#8220;PersonType&#8221;, NHibernate.SqlCommand.JoinType.InnerJoin).List();</p>
<p>10-)Aggerate Fonksiyonlaràavg,max,min vs&#8230;</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>IList mylist = session.CreateCriteria(typeof(Person)).SetProjection(Projections.Avg(&#8220;ID&#8221;)).List();</p>
<p>11-)Sorgularımıza where koşulu ekleme örnek Nhibernate ile in , eq ,like vs&#8230;</p>
<p>Expression kullanarak Filtre</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>IList mylist = session.CreateCriteria(typeof(Person))</p>
<p>/*In sorgusu*/</p>
<p>//   .Add(Expression.In(&#8220;ID&#8221;, new int[] { 1, 2 })).List();</p>
<p>/*Eşittir*/</p>
<p>// .Add(Expression.Eq(&#8220;ID&#8221;, 1)).List();</p>
<p>/*Like*/</p>
<p>.Add(Expression.Like(&#8220;Name&#8221;,&#8221;abx%&#8221;)).List();</p>
<p>Restriction kullanarak Filtre yapmak</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>IList mylist = session.CreateCriteria(typeof(Person))</p>
<p>.Add(Restrictions.Eq(&#8220;ID&#8221;, 1)).List();</p>
<p>Not :Restriction ve Expression birbirlerine benzer ancak expression daha fazla depreciated metoddur.Tavsiye edilen Restriction kullanımıdır.</p>
<p>12-)CreateAlias ve CreateCriteria:İkisi arasında temelde fark yoktur.Tek fark CreateCriteriada daha fazla overload şansınız vardır.</p>
<p>IList mylist = session.CreateCriteria(typeof(Person)).CreateCriteria(&#8220;PersonTypes&#8221;, &#8220;PersonType&#8221;, NHibernate.SqlCommand.JoinType.InnerJoin).List();</p>
<p>IList mylist2 = session.CreateCriteria(typeof(Person)).CreateAlias(&#8220;PersonTypes&#8221;, &#8220;PersonType&#8221;, NHibernate.SqlCommand.JoinType.InnerJoin).List();</p>
<p>13-)Nhibernate içine direkt olarak Sql kodu koyabilmek</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>session.CreateSQLQuery(&#8220;select * from PersonType p&#8221;).List();</p>
<p>14-)HSQL: Nhibernate criteria ile yapılabilen sorgulama hsql ile yapılabilir.Ancak nhibernate forumlarında hsql daha esnek olduğu yönündedir</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>int count= Convert.ToInt32(session.CreateQuery(&#8220;select Count(*) from PersonType&#8221;).UniqueResult()); /</p>
<p>//HSQL içine parametre koymak</p>
<p>var blogs = session.CreateQuery(&#8220;from PersonType p where p.ID = :ID&#8221;)</p>
<p>.SetParameter(&#8220;ID&#8221;, &#8220;1&#8243;).List();</p>
<p>IQuery query = session.CreateQuery(&#8220;FROM PersonType&#8221;);</p>
<p>IList&lt;PersonType&gt; pers = query.List&lt;PersonType&gt;();</p>
<p>15-)Nhibernate de Lamda Expression ve Linq kullanım örneği</p>
<p>Linq kullanabilmek için Nhibernate.Linq namespaceini eklememiz gerekmektedir</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>Lamda Expression</p>
<p>// PersonType p = session.QueryOver&lt;PersonType&gt;().Where(px =&gt; px.ID==1).SingleOrDefault();</p>
<p>PersonType p2 = session.Query&lt;PersonType&gt;().Where(px =&gt; px.ID == 1).SingleOrDefault();</p>
<p>Linq Örneği</p>
<p>var BuildQuery1=(from p in session.QueryOver&lt;PersonType&gt;() where p.ID==1 select p).List();</p>
<p>var BuildQuery = (from p in session.Query&lt;PersonType&gt;() where p.ID == 1 select p).ToList();</p>
]]></content:encoded>
			<wfw:commentRss>http://bilgehanyildiz.com/2011/11/10/fluentnhibernatenhibernategiris2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FluentNHibernate – Nhibernate Giriş -1</title>
		<link>http://bilgehanyildiz.com/2011/11/10/fluentnhibernatenhibernategiris1/</link>
		<comments>http://bilgehanyildiz.com/2011/11/10/fluentnhibernatenhibernategiris1/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 11:39:46 +0000</pubDate>
		<dc:creator>bilgehanyildiz</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://bilgehanyildiz.com/?p=208</guid>
		<description><![CDATA[Nhibernate entity framework,llblgen gibi bir orm tooludur.FluentNHibernate ise nhibernatedeki xml olarak yapılan nesnelerin mapping işlemini classlarda daha kolay bir şekilde yapmamıza olanak sağlayan bir yapıdır. Nhibernate ve FluentNHibernate kullanmak için bazı dllleri alıp kendi projenize eklemek yeterlidir.Ayrıca bir program kurmaya &#8230; <a href="http://bilgehanyildiz.com/2011/11/10/fluentnhibernatenhibernategiris1/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Nhibernate entity framework,llblgen gibi bir orm tooludur.FluentNHibernate ise nhibernatedeki xml olarak yapılan nesnelerin mapping işlemini classlarda daha kolay bir şekilde yapmamıza olanak sağlayan bir yapıdır.</p>
<p>Nhibernate ve FluentNHibernate kullanmak için bazı dllleri alıp kendi projenize eklemek yeterlidir.Ayrıca bir program kurmaya vs gerek yoktur</p>
<p>FluentNHibernate.dll</p>
<p>NHibernate.dll&#8230;</p>
<p>Gibi bir kaçtane dlli http://fluentnhibernate.org/ adresinden indirerek kendi projenize referans olarak ekleyin.Fluent Nhibernatele beraber xml olarak yazacağımız mapping sınıfları kodda yapabiliyoruz.Ancak stored procedure vs kullanmak istersek bu işlemleri gene xml ile yapmak gerekmektedir</p>
<p>Öncelikle Veritabanımızdaki tablolarımızı modelliyoruz</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/nhibernate1.jpg"><img class="alignnone size-medium wp-image-209" title="nhibernate1" src="http://bilgehanyildiz.com/wp-content/uploads/nhibernate1-300x108.jpg" alt="" width="300" height="108" /></a></p>
<p>Önce Person ve PersonType ları modelliyoruz.Propertyleri virtual yapmamızın amacı nhibernatedeki lazy load özelliğini kullanabilmek içindir.Burdaki her Person bir tipte alabileceği için tek nesnede.PersonTypeler ise birden fazla Personda olacağı için liste şeklinde tasarlandı</p>
<p>public class Person</p>
<p>{</p>
<p>public virtual int ID { get; set; }</p>
<p>public virtual string Name { get; set; }</p>
<p>public virtual int PersonTypeID { get; set; }</p>
<p>public virtual PersonType PersonTypes { get; set; }</p>
<p>}</p>
<p>public class PersonType</p>
<p>{</p>
<p>public virtual int ID { get; set; }</p>
<p>public virtual string Name { get; set; }</p>
<p>public virtual IList&lt;Person&gt; Persons { get; set; }</p>
<p>}</p>
<p>Fluent Nhibernate ile normal nhibernate xml de yaptığımız mapping işlemini kodla yapabiliyoruz.Map sınıflarını kullanabilmek için ise namespace ekliyoruz</p>
<p>using FluentNHibernate.Mapping;</p>
<p>Map classımızı mutlaka ClassMap den türemelidir ve içine generic olarak map etmek istediğimiz nesneyi yazıyoruz.</p>
<p>Diğer dikkat edilmesi gereken nokta ise ilişkiler kısmıdır.</p>
<p>Bizim senaryomuz gereği her Person bir tipi olacaktır.Dolayısıyla person nesnesindeki PersonTypeID alanı esasında bir foreign keydir</p>
<p>Bu ilişkiyide References komutuyla yapıyoruz.Ancak PersonTypeMap classında böyle bir foreign key yok ancak bunun personla ilişkisini belirtmek için HasMany komutunu kullanıyoruz</p>
<p>public class PersonMap:ClassMap&lt;Person&gt;</p>
<p>{</p>
<p>public PersonMap()</p>
<p>{</p>
<p>Table(&#8220;Person&#8221;);</p>
<p>Schema(&#8220;Common&#8221;);</p>
<p>Id(x =&gt; x.ID);</p>
<p>Map(x =&gt; x.Name);</p>
<p>Map(x =&gt; x.PersonTypeID);</p>
<p>References(x =&gt; x.PersonTypes).Column(&#8220;PersonTypeID&#8221;).ReadOnly();//ReadOnly demezsek bu alan insertte soruna neden oluyor</p>
<p>}</p>
<p>}</p>
<p>public class PersonTypeMap : ClassMap&lt;PersonType&gt;</p>
<p>{</p>
<p>public PersonTypeMap()</p>
<p>{</p>
<p>Table(&#8220;PersonType&#8221;);</p>
<p>Schema(&#8220;dbo&#8221;);</p>
<p>Id(x =&gt; x.ID);</p>
<p>Map(x =&gt; x.Name);</p>
<p>HasMany&lt;Person&gt;(x =&gt; x.Persons);</p>
<p>}</p>
<p>}</p>
<p>Daha sonra ise bir tane Helper Class yazarak SessionFactory mizi fluent nhibernate le uyumlu olacak şekilde oluştuyoruz</p>
<p>GetSessionFactory() metodundaki</p>
<p>.FluentMappings.AddFromAssemblyOf&lt;PersonTypeMap&gt;())</p>
<p>addfromassemblyof komutu ile de mappingleri yüklüyoruz ancak oluşturulan xml dosyalarını da bir yere almak istersek bu kodun sonuna ExportTo komutunu koyarak mappinglerin xml hallerinide görebiliriz</p>
<p>.Mappings(m =&gt; m.FluentMappings.AddFromAssembly(assembly)<br />
.ExportTo(@&#8221;C:\your\export\path&#8221;)</p>
<p>public  class NHibernateHelper</p>
<p>{</p>
<p>private static ISessionFactory _SessionFactory;</p>
<p>public static ISessionFactory SessionFactory</p>
<p>{</p>
<p>get</p>
<p>{</p>
<p>if (_SessionFactory == null)</p>
<p>//InitializeSessionFactory();</p>
<p>_SessionFactory = GetSessionFactory();</p>
<p>return _SessionFactory;</p>
<p>}</p>
<p>}</p>
<p>public static ISessionFactory GetSessionFactory()</p>
<p>{</p>
<p>return Fluently.Configure()</p>
<p>.Database(</p>
<p>MsSqlConfiguration.MsSql2005</p>
<p>.ConnectionString(c =&gt; c</p>
<p>.Database(&#8220;TelefonRehberi&#8221;)</p>
<p>.Server(&#8220;.&#8221;)</p>
<p>.Password(&#8220;1234&#8243;)</p>
<p>.Username(&#8220;sa&#8221;)</p>
<p>)</p>
<p>)</p>
<p>.Mappings(m =&gt; m</p>
<p>.FluentMappings.AddFromAssemblyOf&lt;PersonTypeMap&gt;())</p>
<p>.BuildSessionFactory();</p>
<p>}</p>
<p>public static ISession OpenSession()</p>
<p>{</p>
<p>return SessionFactory.OpenSession();</p>
<p>}</p>
<p>}</p>
<p>Daha sonra Formumuzdan aşağıdaki gibi bir yöntemle ilk sorgumuzu yazabiliyoruz</p>
<p>private void button2_Click(object sender, EventArgs e)</p>
<p>{</p>
<p>var session = NHibernateHelper.OpenSession();</p>
<p>IList&lt;Person&gt; ab = session.CreateCriteria(typeof(Person)).List&lt;Person&gt;();</p>
<p>MessageBox.Show(ab[1].PersonTypes.Name);</p>
<p>}</p>
<p>Yukarıdaki sorgu Person tablosundaki bütün kayıtları alarak ekrana gelen Person nesnesin PersonType ‘ın adını bize verecektir.</p>
]]></content:encoded>
			<wfw:commentRss>http://bilgehanyildiz.com/2011/11/10/fluentnhibernatenhibernategiris1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dynamics CRM 4 Varlıklara Hızlı Bulda Pasif Kayıtlarında Dahil Edilmesi</title>
		<link>http://bilgehanyildiz.com/2011/10/25/dynamics-crm-4-varliklara-hizli-bulda-pasif-kayitlarinda-dahil-edilmesi/</link>
		<comments>http://bilgehanyildiz.com/2011/10/25/dynamics-crm-4-varliklara-hizli-bulda-pasif-kayitlarinda-dahil-edilmesi/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 07:27:12 +0000</pubDate>
		<dc:creator>bilgehanyildiz</dc:creator>
				<category><![CDATA[CRM]]></category>

		<guid isPermaLink="false">http://bilgehanyildiz.com/?p=199</guid>
		<description><![CDATA[Hızlı Bulda Genellikle Etkin kayıtlar içinde arama yapılır.Veya farklı kombinasyonlarda bu hızlı arama sorgusunu değiştirmek isteyebiliriz. Ancak hızlı bul görünümü direkt olarak özelleştirmelerden formlardan girerel değiştirmek mümkün değildir Bunun için özelleştirmeler den özelleştirmeleri ver diyerek ilgili varlığığın customization dosyasını alıyoruz &#8230; <a href="http://bilgehanyildiz.com/2011/10/25/dynamics-crm-4-varliklara-hizli-bulda-pasif-kayitlarinda-dahil-edilmesi/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hızlı Bulda Genellikle Etkin kayıtlar içinde arama yapılır.Veya farklı kombinasyonlarda bu hızlı arama sorgusunu değiştirmek isteyebiliriz.</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/quick1.jpg"><img class="alignnone size-medium wp-image-200" title="quick1" src="http://bilgehanyildiz.com/wp-content/uploads/quick1-300x37.jpg" alt="" width="300" height="37" /></a></p>
<p>Ancak hızlı bul görünümü direkt olarak özelleştirmelerden formlardan girerel değiştirmek mümkün değildir</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/quick2.jpg"><img class="alignnone size-medium wp-image-201" title="quick2" src="http://bilgehanyildiz.com/wp-content/uploads/quick2-300x104.jpg" alt="" width="300" height="104" /></a></p>
<p>Bunun için özelleştirmeler den özelleştirmeleri ver diyerek ilgili varlığığın customization dosyasını alıyoruz</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/quick3.jpg"><img class="alignnone size-medium wp-image-202" title="quick3" src="http://bilgehanyildiz.com/wp-content/uploads/quick3-300x54.jpg" alt="" width="300" height="54" /></a></p>
<p>Daha sonra customization dosyasını açarak Hızlı bul formunu buluyoruz.Dikkat edileceği gibi ilgili formun fetch xml yapısında değişiklik yapmamız gerekmektedir.Aşağıdaki resimdeki ve bu senaryodaki gibi pasifleşmiş inaktif kayıtlarıda hızlı bula dahil etmek istersek en alttaki resimdeki gibi kırmızı içine alınmış filtre conditionını kaldırmamız yeterli olacaktır</p>
<p><strong> &lt;filter&gt;</strong></p>
<p><strong> &lt;condition attribute=&#8221;statecode&#8221; operator=&#8221;eq&#8221; value=&#8221;0&#8243; /&gt;</strong></p>
<p><strong> &lt;/filter&gt;</strong></p>
<p><strong><a href="http://bilgehanyildiz.com/wp-content/uploads/quick4.jpg"><img class="alignnone size-medium wp-image-203" title="quick4" src="http://bilgehanyildiz.com/wp-content/uploads/quick4-300x234.jpg" alt="" width="300" height="234" /></a></strong></p>
<p><strong>Daha sonra ise bu customizationımızı yine özelleştirmeler </strong><strong>àözelleştirmeleri  al diyerek sisteme yüklüyoruz.Değişikliklerimizi yayımla dedikten sonra  artık inaktif kayıtlarda hızlı bul aramalarında gelebiliyor olacaktır</strong></p>
<p><strong><em>NOT:ANCAK BU GELİŞTİRME UNSUPPORTED BİR GELİŞTİRMEDİR!!!</em><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://bilgehanyildiz.com/2011/10/25/dynamics-crm-4-varliklara-hizli-bulda-pasif-kayitlarinda-dahil-edilmesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KODDA ENUM DEĞİŞKENLERİNİ ÇOKLU OLARAK KULLANMAK – BİT İŞLEMLERİ</title>
		<link>http://bilgehanyildiz.com/2011/10/22/koddaenumdegiskenlerinicokluolarakkullanmakbitislemleri/</link>
		<comments>http://bilgehanyildiz.com/2011/10/22/koddaenumdegiskenlerinicokluolarakkullanmakbitislemleri/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 10:39:54 +0000</pubDate>
		<dc:creator>bilgehanyildiz</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://bilgehanyildiz.com/?p=194</guid>
		<description><![CDATA[Enumlar kod okunabilirliğini arttıran veya bazı keywordlerimizi belli değerlerle birlikte temsil etmemize sağlayan bir tiptir. Hemen hemen her yerde görebileceğimiz en temel enum yapısına örnek olarak genelde günler kullanılır. public enum Gunler { Pazartesi, Sali, Carsamba, Persembe, Cuma, Cumartesi, Pazar &#8230; <a href="http://bilgehanyildiz.com/2011/10/22/koddaenumdegiskenlerinicokluolarakkullanmakbitislemleri/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Enumlar kod okunabilirliğini arttıran veya bazı keywordlerimizi belli değerlerle birlikte temsil etmemize sağlayan bir tiptir.</p>
<p>Hemen hemen her yerde görebileceğimiz en temel enum yapısına örnek olarak genelde günler kullanılır.</p>
<p>public enum Gunler</p>
<p>{</p>
<p>Pazartesi,</p>
<p>Sali,</p>
<p>Carsamba,</p>
<p>Persembe,</p>
<p>Cuma,</p>
<p>Cumartesi,</p>
<p>Pazar</p>
<p>}</p>
<p>Tabi Enumlarımızı temsil eden değerlerde atabiliriz.Bu makalede içine enum tipinde bir değişken alan fonksiyonun kullanımını göreceğimiz için ben aşağıdaki gibi bu temsil değerlerini 2 ve 2 nin katları şeklinde yaptım nedeni ise bit işlem yapabilmek için</p>
<p>public enum Gunler</p>
<p>{</p>
<p>Pazartesi=1,</p>
<p>Sali=2,</p>
<p>Carsamba=4,</p>
<p>Persembe=8,</p>
<p>Cuma=16,</p>
<p>Cumartesi=32,</p>
<p>Pazar=64</p>
<p>}</p>
<p>Mesela gelen gunler Salı günü ise Sınavınız var diye yazacak bir örnek fonksiyon tanımlayalım.Aşağıdaki gibi fonksiyonumuzu önce direkt günün değerini yazdırdığımızda ekrana 10 değeri gelecektir.Ancak biz fonksiyonun içine Salı ve Perşembe gününü beraber gönderdik.Aşağıdaki gibi direkt bir kullanım yaparsak sonuç bize Belirtilen günlerde sınavınız yok dönecektir</p>
<p>SinavGunlerGoster(Gunler.Sali | Gunler.Persembe);</p>
<p>public void SinavGunlerGoster(Gunler gun)</p>
<p>{</p>
<p>//MessageBox.Show(gun.ToString());Bunun çıktısı 10 olacaktır</p>
<p>if (gun == Gunler.Sali)</p>
<p>{</p>
<p>MessageBox.Show(&#8220;Belirtilen günlerden birinde sınavınız var&#8221;);</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>MessageBox.Show(&#8220;Belirtilen Günlerde Sınavınız Yok&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Programın doğru çalışması için &amp; le bit işlemi yapmamız gerekmektedir</p>
<p>if ((gun &amp; Gunler.Sali) == Gunler.Sali)</p>
<p>{</p>
<p>Değerleri 2 ve katları vererek binary işlem yaparak doğru sonucu bulmuş olduk.</p>
<p>Mantık aşağıdaki gibidir</p>
<p>Gunler.Sali | Gunler.Persembe &#8212; Sali-2 Perşembe 8 binary formatta</p>
<p>010</p>
<p>100 veya işlemine soktuğumuzda 110 yapar ki bunun toplamı 10 dur</p>
<p>Ancak bunu tekrar &amp; le filtrelediğimizde(ve işlemine tuttuğumuzda) sadece Sali kalacak ve doğru sonucu bize verecektir (1 veya 0 &#8211;&gt; 1 ,1 ve 0 &#8211;&gt;0 döner)</p>
<p>Metod son olarak bu şekilde olacaktır.</p>
<p>public void SinavGunlerGoster(Gunler gun)</p>
<p>{</p>
<p>//MessageBox.Show(gun.ToString());</p>
<p>if ((gun &amp; Gunler.Sali) == Gunler.Sali)</p>
<p>{</p>
<p>MessageBox.Show(&#8220;Sınav Var&#8221;);</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>MessageBox.Show(&#8220;Sınav Yok&#8221;);</p>
<p>}</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>http://bilgehanyildiz.com/2011/10/22/koddaenumdegiskenlerinicokluolarakkullanmakbitislemleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CRM 4.0 CRM SERVİSİ KULLANARAK KAYDININ ETKİNLİĞİNİ DEĞİŞTİRME</title>
		<link>http://bilgehanyildiz.com/2011/09/24/crm-4-0-crm-servisi-kullanarak-kaydinin-etkinligini-degistirme/</link>
		<comments>http://bilgehanyildiz.com/2011/09/24/crm-4-0-crm-servisi-kullanarak-kaydinin-etkinligini-degistirme/#comments</comments>
		<pubDate>Sat, 24 Sep 2011 08:32:11 +0000</pubDate>
		<dc:creator>bilgehanyildiz</dc:creator>
				<category><![CDATA[CRM]]></category>

		<guid isPermaLink="false">http://bilgehanyildiz.com/?p=189</guid>
		<description><![CDATA[Bazı durumlarda Crm’in kendi aktif ve pasif yapma fonksiyonlarını kullanmak yerine kodla bunu yapmak isteyebiliriz.Örneğin zorunlu alanların sürekli değiştiği bir sistemde kullanıcı eskiden zorunlu olmayan ama daha sonra zorunlu hale getirilen bir alanı pasif yapmadan önce doldurmak zorunda kalabilir.Bu alanlarla &#8230; <a href="http://bilgehanyildiz.com/2011/09/24/crm-4-0-crm-servisi-kullanarak-kaydinin-etkinligini-degistirme/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Bazı durumlarda Crm’in kendi aktif ve pasif yapma fonksiyonlarını kullanmak yerine kodla bunu yapmak isteyebiliriz.Örneğin zorunlu alanların sürekli değiştiği bir sistemde kullanıcı eskiden zorunlu olmayan ama daha sonra zorunlu hale getirilen bir alanı pasif yapmadan önce doldurmak zorunda kalabilir.Bu alanlarla ilgili javascriptleri doğru ayarlamak da bir yöntem olabilir.Ancak toolbara isv configden bir button ekleyerekde kendi aktif ve pasif işleminizi yapabilirsiniz.Veya kendi iş akışlarınızda belli senaryolarda bu tarz bir kod kullanmanız gerekebilir.</strong></p>
<p><strong> </strong></p>
<p><strong>Contact kaydını kodla pasifleştircek örnek kod aşağıdadır.Contact Kaydını pasifleştirmek için SetStateContactRequest ve SetStateContactResponse mesajlarını kullanabilir.Burada da ContactID mizi isv confige eklediğimiz tuştan gönderildiğini varsaydım.</strong></p>
<p><strong> </strong></p>
<p>protected void Page_Load(object sender, EventArgs e)</p>
<p>{</p>
<p>string ContactID = Request.QueryString["oId"].ToString();</p>
<p>CrmService activeService = new CrmService();</p>
<p>activeService.Credentials = System.Net.CredentialCache.DefaultCredentials;</p>
<p>activeService.CrmAuthenticationTokenValue = new CrmAuthenticationToken();</p>
<p>activeService.CrmAuthenticationTokenValue.OrganizationName = &#8220;Bilgehan&#8221;;</p>
<p>activeService.Timeout = 600 * 36000;</p>
<p>Guid EntityID=new Guid(ContactID);</p>
<p>string message=ChangeEntityStatus(activeService, EntityID, 2);</p>
<p>}</p>
<p>private string ChangeEntityStatus(CrmService service, Guid EntityId, int statuscode)</p>
<p>{</p>
<p>SetStateContactRequest req = new SetStateContactRequest();</p>
<p>req.ContactState = ContactState.Inactive;</p>
<p>req.ContactStatus = statuscode;</p>
<p>req.EntityId = EntityId;</p>
<p>SetStateContactResponse resp=(SetStateContactResponse)service.Execute(req);</p>
<p>return &#8220;Bilgehan&#8221;;</p>
<p>}</p>
<p><strong>Crm kendi varlıkları içinbu tarz mesajlar mevcuttur.Ancak custom bir varlık için biraz daha değişik işlemler yapmak gerekir.Buradada kullancağımız mesajlar  SetStateDynamicEntityRequest ve SetStateDynamicEntityResponsedur.Crm kendi varlıklarından farklı olarak burada custom entity nin adınıda vermemiz gerekir.Moniker ise yeni bir instance üretmek için işimize yarar.</strong></p>
<p><strong> </strong></p>
<p>private static bool ChangeCustomEntityStatus(CrmService service, Guid EntityId, int statuscode, string statecode, string EntityName</p>
<p>)</p>
<p>{</p>
<p>SetStateDynamicEntityRequest req = new SetStateDynamicEntityRequest();</p>
<p>req.State = statecode;</p>
<p>req.Status = statuscode;</p>
<p>req.Entity = new Moniker();</p>
<p>req.Entity.Id = EntityId;</p>
<p>req.Entity.Name = EntityName;</p>
<p>SetStateDynamicEntityResponse resp = (SetStateDynamicEntityResponse)service.Execute(req);</p>
<p>return true;</p>
<p>}</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>http://bilgehanyildiz.com/2011/09/24/crm-4-0-crm-servisi-kullanarak-kaydinin-etkinligini-degistirme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REPORT VIEWER KULLANIMI</title>
		<link>http://bilgehanyildiz.com/2011/08/22/report-viewer-kullanimi/</link>
		<comments>http://bilgehanyildiz.com/2011/08/22/report-viewer-kullanimi/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 16:04:16 +0000</pubDate>
		<dc:creator>bilgehanyildiz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://bilgehanyildiz.com/?p=183</guid>
		<description><![CDATA[Microsoft Reporting Service kullanarak oluşturduğumuz sql raporlarını kendi programımız içerisinden çağırmak istediğimiz zaman default olarak Toolboxda Reporting tabında bulunan ReportViewer kontrolünü kullanıyoruz Burada report servera deploy edilmiş rapora ulaşabilmek için Choose Reportdan ServerReport ReportServerUrl &#8211;Report serverın adresi ReportPath&#8211;ReportServerda raporumuzun bulunduğu &#8230; <a href="http://bilgehanyildiz.com/2011/08/22/report-viewer-kullanimi/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Microsoft Reporting Service kullanarak oluşturduğumuz sql raporlarını kendi programımız içerisinden çağırmak istediğimiz zaman default olarak Toolboxda Reporting tabında bulunan ReportViewer kontrolünü kullanıyoruz</strong><br />
<a href="http://bilgehanyildiz.com/wp-content/uploads/ReportViewer1.jpg"><img class="alignnone size-medium wp-image-184" title="ReportViewer1" src="http://bilgehanyildiz.com/wp-content/uploads/ReportViewer1-300x190.jpg" alt="" width="300" height="190" /></a></p>
<p><strong>Burada report servera deploy edilmiş rapora ulaşabilmek için Choose Reportdan ServerReport</strong></p>
<p><strong> </strong></p>
<p><strong>ReportServerUrl </strong><strong>&#8211;Report serverın adresi</strong></p>
<p><strong>ReportPath</strong><strong>&#8211;ReportServerda raporumuzun bulunduğu kısmın yolunu yazmamız yeterlidir.Bundan sonra projemizi çalıştırırsak raporumuzu görüntüleyebiliriz.(Tabi reportserverımız anonymous erişime açıksa)</strong></p>
<p><strong><a href="http://bilgehanyildiz.com/wp-content/uploads/ReportViewer2.jpg"><img class="alignnone size-medium wp-image-185" title="ReportViewer2" src="http://bilgehanyildiz.com/wp-content/uploads/ReportViewer2-217x300.jpg" alt="" width="217" height="300" /></a></strong></p>
<p>Bunun dışındada aşağıdaki kodlar yazılarak ReportServera erişim yapılarak,içine raporun parametreleri vsler gönderilebilir.Rapor servera gönderilen raporlar parametreler istenirse gizlenebilir</p>
<p>if (!Page.IsPostBack)</p>
<p>{</p>
<p>ReportViewer1.ProcessingMode = ProcessingMode.Remote;</p>
<p>ServerReport serverReport = ReportViewer1.ServerReport;</p>
<p>serverReport.ReportServerUrl = new Uri(&#8220;http://10.0.0.1/reportserver&#8221;);</p>
<p>serverReport.ReportPath = &#8220;/BilgehanReports/Report3&#8243;;</p>
<p>// IReportServerCredentials irsc = new CustomReportCredentials(&#8220;userid&#8221;, &#8220;password&#8221;, &#8220;domain&#8221;);</p>
<p>// ReportViewer1.ServerReport.ReportServerCredentials = irsc;</p>
<p>ReportParameter param1 = new ReportParameter();</p>
<p>param1.Name = &#8220;UserId&#8221;;</p>
<p>param1.Visible = false; //(Gönderilen parametre gizli olsun)</p>
<p>param1.Values.Add(&#8220;2&#8243;) ;</p>
<p>ReportViewer1.ServerReport.SetParameters(new ReportParameter[] { param1 });</p>
<p>}</p>
<p>Yukarıdaki koddan farklı olarak eğer report servera ulaşmak için credential kullanmanız gerekiyor ise yukarıdaki kodda commentlenmiş iki satırı açarak</p>
<p>Aşağıdaki gibi bir class tanımlayarak bağlantı sağlayabiliriz.Aşağıdaki msdn forumdan alınmış bunun  için güzel bir class örneğide mevcuttur</p>
<p>public class CustomReportCredentials : Microsoft.Reporting.WebForms.IReportServerCredentials</p>
<p>{</p>
<p>// local variable for network credential.</p>
<p>private string _UserName;</p>
<p>private string _PassWord;</p>
<p>private string _DomainName;</p>
<p>public CustomReportCredentials(string UserName, string PassWord, string DomainName)</p>
<p>{</p>
<p>_UserName = UserName;</p>
<p>_PassWord = PassWord;</p>
<p>_DomainName = DomainName;</p>
<p>}</p>
<p>public WindowsIdentity ImpersonationUser</p>
<p>{</p>
<p>get</p>
<p>{</p>
<p>return null;  // not use ImpersonationUser</p>
<p>}</p>
<p>}</p>
<p>public ICredentials NetworkCredentials</p>
<p>{</p>
<p>get</p>
<p>{</p>
<p>// use NetworkCredentials</p>
<p>return new NetworkCredential(_UserName, _PassWord, _DomainName);</p>
<p>}</p>
<p>}</p>
<p>public bool GetFormsCredentials(out Cookie authCookie, out string user, out string password, out string authority)</p>
<p>{</p>
<p>// not use FormsCredentials unless you have implements a custom autentication.</p>
<p>authCookie = null;</p>
<p>user = password = authority = null;</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>http://bilgehanyildiz.com/2011/08/22/report-viewer-kullanimi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>REPORT SERVER LOGLAMA &#8211; AUDIT</title>
		<link>http://bilgehanyildiz.com/2011/08/17/report-server-loglama-audit/</link>
		<comments>http://bilgehanyildiz.com/2011/08/17/report-server-loglama-audit/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 09:08:38 +0000</pubDate>
		<dc:creator>bilgehanyildiz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://bilgehanyildiz.com/?p=173</guid>
		<description><![CDATA[Report Serverın ayarları açık ise report servera her bir istek gönderildiği zaman report serverda bir kayıt oluşur.Yani reportserverda ne zaman view report tuşuna basılırsa veya kaydetme tuşlarından excel,pdf veya başka bir formata rapor alınmak istenirse report serverda kaydı tutulur Eğer &#8230; <a href="http://bilgehanyildiz.com/2011/08/17/report-server-loglama-audit/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Report Serverın ayarları açık ise report servera her bir istek gönderildiği zaman report serverda bir kayıt oluşur.Yani reportserverda ne zaman view report tuşuna basılırsa veya kaydetme tuşlarından excel,pdf veya başka bir formata rapor alınmak istenirse report serverda kaydı tutulur</strong></p>
<p><strong><a href="http://bilgehanyildiz.com/wp-content/uploads/ReportLog1.jpg"><img class="alignnone size-medium wp-image-174" title="ReportLog1" src="http://bilgehanyildiz.com/wp-content/uploads/ReportLog1-300x47.jpg" alt="" width="300" height="47" /></a></strong></p>
<p><strong>Eğer değiştirilmediyse report serverın default log tutma süresi 60 gündür ve bu özellik açık olarak gelir.Ancak report serverın propertiesinden bu süre arttırılabilir veya report serverın loglaması kapatılabilir</strong></p>
<p><strong><a href="http://bilgehanyildiz.com/wp-content/uploads/ReportLog2.jpg"><img class="alignnone size-medium wp-image-175" title="ReportLog2" src="http://bilgehanyildiz.com/wp-content/uploads/ReportLog2-300x153.jpg" alt="" width="300" height="153" /></a></strong></p>
<p><strong><a href="http://bilgehanyildiz.com/wp-content/uploads/ReportLog3.jpg"><img class="alignnone size-medium wp-image-176" title="ReportLog3" src="http://bilgehanyildiz.com/wp-content/uploads/ReportLog3-300x101.jpg" alt="" width="300" height="101" /></a></strong></p>
<p><strong>Daha sonra Report Server db sine giderek ExecutionLogStorage tablosuna bakalırsa işlem logları bu tabloda tutulmaktadır</strong></p>
<p><strong> </strong></p>
<p>Select  * from ExecutionLogStorage</p>
<p>ExecutionLogStorage tablosundaki bazı önemli alanlar şunlardır</p>
<p><strong>UserName</strong> àEğer program domain mantığında çalışıyor ise burada domain user ismi</p>
<p>àEğer program domain değil anonymous mantığı ile çalışıyor ise dummy user olarak kayıt çıkacaktır</p>
<p><strong>Format:</strong> RPL,Excel,PDF vs hangi formatta veri istenmişşe o gözükür.Zaten view report butonuna basıldığında direkt olarak format alanı RPL olacak şekilde sisteme bi kayıt düşer</p>
<p><strong>Parameters:</strong>Rapora gönderilen parametreler aşağıdaki gibi &amp; işareti ile ayrılarak tutulur</p>
<p><strong>begin=12.06.2011&amp;end=13.06.2011&amp;BU=6163296b-f798-df11-8fa0-001a64c78ef4</strong></p>
<p><strong> </strong></p>
<p><strong>ReportID:</strong>Hangi rapordan istek yapıldığının ID si tutar.Buradaki reportID catalog tablosunda itemID ile join edilerek Catalog tablosundan raporun report servera deploy edilmiş hali bulunur</p>
<p>Select ItemID,Name from Catalog</p>
<p><strong>TimeStart:</strong>İsteğin başladığı tarihi gösterir</p>
<p><strong>RowCount:</strong>Kaç kaydın o anda alındığını gösterir</p>
<p>Yalnız rowcount excel,pdf aktara basıldığında rowcount atmaz.Sadece bir tane log kaydı oluşur.RowCount view report basıldığında sorgu sonucu dönen kaydı tutar</p>
<p>Dolayısıyla her reportview ,ve excel,pdf aktarma işlemi için report serverda bi log oluşur</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/ReportLog4.jpg"><img class="alignnone size-medium wp-image-177" title="ReportLog4" src="http://bilgehanyildiz.com/wp-content/uploads/ReportLog4-300x32.jpg" alt="" width="300" height="32" /></a></p>
<p>Eğer sisteminiz domain mantığı ile çalışıyorsa  ExecutionLogStoragedaki UserName kullanarak kendi user tablonuzdaki domain name ile eşleştirebilirsiniz</p>
<p>Yok eğer sisteminiz domain mantığında değilse ve hangi kullanıcının işlem yaptığını öğrenmek istiyorsanız bunun için Her raporunuza sabit olacak şekilde Sisteminizdeki report viewara UserId diye bir parametre göndermek ve daha sonra UserId parse ederek buradaki değer ile kendi user tablonuzdaki değeri eşleyerek işlem yapabilirsiniz</p>
<p><strong>Uyarı</strong>:Eğer report serverınız ile programınızın kullandığı veritabanı ayrı sqllerde ise ve siz link server ile report servera sorgu atacak iseniz  aşağıdaki gibi hata alacaksınız.Çünkü ExecutionLogStorage içinde xml bir alan olduğu için size izin vermeyecektir</p>
<p><a href="http://bilgehanyildiz.com/wp-content/uploads/ReportLog5.jpg"><img class="alignnone size-medium wp-image-178" title="ReportLog5" src="http://bilgehanyildiz.com/wp-content/uploads/ReportLog5-300x37.jpg" alt="" width="300" height="37" /></a></p>
<p>Bunu aşmak için linked serverdan sorgu çekeceğiniz yerde OPENQUERY komutunu kullanmanız gerekir.Aşağıdaki gibi örnek bir sorgu ile hem linked serverdan parametrik olarak veri çekip sonra bunu bir temp table yardımı ile kendi veritabanımız ile birleştirerek kullanabiliyoruz</p>
<p>DECLARE @sqlQuery VARCHAR(8000)</p>
<p>DECLARE @finalQuery VARCHAR(8000)</p>
<p>SET @sqlQuery = &#8216;Select  UserName AS UserID,Name AS RaporAd,ReportID,Format,[RowCount] AS RowAdet,TimeStart,TimeEnd from  [ReportServer].[dbo].[ExecutionLogStorage] inner join [ReportServer].[dbo].[Catalog] on [Catalog].ItemID=ExecutionLogStorage.ReportID WHERE TimeStart &gt;= &#8216; + &#8221;&#8221; + &#8221;&#8221; + convert(varchar,@TimeStart) + &#8221;&#8221; + &#8221;&#8221;  + &#8216;and TimeStart&lt;&#8221;&#8217; + &#8221;&#8221;+convert(varchar,@TimeEnd) + &#8221;&#8221; + &#8221;&#8221;</p>
<p>SET @finalQuery = &#8216;SELECT * FROM OPENQUERY([CRM4APP],&#8217; + &#8221;&#8221; + @sqlQuery + &#8221;&#8221; + &#8216;)&#8217;</p>
<p>CREATE TABLE #List1</p>
<p>(</p>
<p>UserID varchar(500), RaporAd varchar(500) ,ReportID uniqueidentifier,Format varchar(100),RowAdet int,TimeStart datetime,TimeEnd DateTime</p>
<p>)</p>
<p>INSERT INTO #List1</p>
<p>(</p>
<p>UserID,RaporAd,ReportID,Format,RowAdet,TimeStart,TimeEnd)</p>
<p>exec(@finalQuery )</p>
<p>select  SystemUser.SystemUserId AS UserID,SystemUser.FullName AS KullanıcıAd,SystemUser.DomainName,RaporAd,ReportID,Format,RowAdet,convert(varchar,TimeStart,103) AS TimeStart,convert(varchar,TimeEnd,103) AS TimeEnd,BusinessUnit.Name AS BayiAd  from #List1</p>
<p>inner join SystemUser on SystemUser.DomainName=#List1.UserID COLLATE Turkish_CI_AI</p>
<p>inner join BusinessUnit on SystemUser.BusinessUnitId=BusinessUnit.BusinessUnitId</p>
<p>drop Table #List1</p>
]]></content:encoded>
			<wfw:commentRss>http://bilgehanyildiz.com/2011/08/17/report-server-loglama-audit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

