SharePoint 2010 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
SharePoint 2010 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Cuma, Temmuz 10, 2015

SharePoint Yetkilendirme - 3

SharePoint yetkilendirme kavramına daha önce aşağıdaki 2 yazı ile giriş yapmıştık. Öncelikli olarak aşağıdaki linklerdeki yazıları gözden geçirmenizi öneririm.

Bu yazımızda Site Collection düzeyindeki yetkilendirme özellikleri üzerinde ilerliyor olacağız. SharePoint üzerinde SiteCollection Administrator yetkiniz varsa ayarlar tuşundan Site Settings'e geçtiğinizde aşağıdaki bölüm size görünür olacaktır. Tabi bunun için en üst seviye site ayarlarında olmanız gerekmektedir. Eğer ilgili yerde yani Top Level Site üzerinde değilseniz zaten aşağıda görüntülenmekte olan bölümde bir link sizi buraya yönlendiriyor olacaktır.



Bir SiteCollection üzerinde Site Collection Admin hakkınız varsa tahmin edeceğiniz üzere o SiteCollection üzerinde her şeyi yapabilirsiniz. Bu yazımızın odak noktası Yetkilendirme olduğu için yukarıda görüntülenmekte olan bölüm değil daha üstte en sol ve en üstteki grupla yani User and Permissions bölümü ile ilgileniyor olacağız.


Buradaki ayarları başlık başlık açıklayacak olursak en basitinden başladığımızda Site Collection Administrators dikkatimizi çekecektir. Bu link aracılığı ile şu anda sistemde bulunan site koleksiyonu yöneticilerini görür ve yenisini eklersiniz. Daha önceki yazılarımızdan hatırlayacağınız gibi Central Administration Site üzerinden sadece iki tane yönetici tanımlayabiliyordunuz ama bu sınırımız burada aktif değil. Bir site koleksiyonunun ikiden fazla yöneticisi olması durumunda ziyaret etmeniz gereken URL burasıdır.

People and Groups başlığı altında o an aktif olarak sitede tanımlı olan grupları görüntüleyip işlem yapabilirsiniz. Bu yazımızda grupların detaylarına girmeyip bir sonraki yazımızda bu detayı inceliyor olacağız.

Site Permissions bölümü ise site üzerindeki yetki verdiğiniz kişi ve grupları görüntülediğiniz bölümdür. Kimde hangi yetki varı burada görebilirsiniz ve yenilerini ekleyebilirsiniz.

Site App Permissions ise SharePoint sitenize erişecek olan ve içeriği okumasına izin verdiğiniz 3rd party App'leri görüntüleyecektir. Bir APP'in sisteminize erişimini kısıtlamak istiyorsanız buradan silebilirsiniz.

Herhangi bir kişiye yetki vermeden önce ya da var olan yetkileri düzenlemeye geçmeden önce dikkat çekmek istediğim bir nokta söz konusu: Permission Levels (Yetki Seviyeleri)
Permission Levels SharePoint'te yetkinin yani Authorization kavramının en temellerini oluşturmaktadır. Daha açıklayıcı bir şekilde kullanılabilecek yetki kombinasyonları olarak düşünebiliriz. Şimdi yukarıda görüntülenmekte olan Users and Permissions bölümüne tıklayalım ve hiç farklı bir noktaya odaklanmadan doğrudan Ribbon üzerinden Permisson Levels bağlantısını bulalım.



Permission Levels bağlantısına tıkladığınızda aşağıdaki ekran bizi karşılayacaktır.



Bu ekran bize Site üzerinde verilebilecek yetki seviyelerini listelemektedir. Her seviyenin yanında da o seviyenin hakkında açıklama yer almaktadır. Yani şu anda herhangi bir kişiye yetki vermek istersek burada gördüklerimizi ya da bunların kombinasyonlarını kullanabiliriz. Hangi yetki seviyesi ne içeriyoru görmek içinde herhangi bir seviyenin üzerine tıklayabilirsiniz. Burada tiplere göre farklı yetkilerin yer aldığını ve seviyelerin bunların birleşiminden oluştuğunu gözlemlemiş olmalısınız. Dikkat!: Yetkiler arasında yasak (Deny) olmadığına dikkat edin. Yani Windows yetkilerinden alışık olduğumuz en tepeden her yetkiyi ver en alta geldiğinde de bir kişiyi yasakla ki asla girmesin durumu burada söz konusu değil. Yetki verirken ki stratejimiz çok çok önemli olacaktır. 
Yetki seviyelerinden bir tanesine tıkladığınızda  CheckBox'lar sizi karşılayacak ve o seviyeyi dilediğiniz gibi değiştirebilirsiniz. CheckBox'lardaki seçimleri değiştirdiğinizde birbiri ile ilişkili olanlarında otomatik olarak seçildiğine dikkat edin. Peki var olan yetki seviyelerini değiştirmek iyi bir çözüm mü? Bana sorarsanız asla iyi bir çözüm değil? Ama projede kişilerin düzenleme yetkisi olmasını ancak Silme yetkisinin olmamasını istiyorsunuz ve Deny yok!  Bunu nasıl yapacağız?

Yetki seviyesinin en altına indiğinizde Copy Permisson Level düğmesini göreceksiniz. Bu düğmenin yardımı ile size en yakın gelen yetki seviyesini kopyalayıp üzerinde değişikliği yapıp yeni bir isim ve açıklama belirttikten sonra bunu rahatlıkla kullanabilirsiniz. Burada sıfırdan yeni oluşturmak da mümkündür ama hayat tecrübesi olarak burada genellikle bazı CheckBox'ların unutulduğunu söyleyebilirim bu sebeple kopyalayıp ilerlemek en anlamlı yöntem.

Yetki seviyelerini Site seviyesinde de değiştirebilirsiniz ama önerim bu işlemi en üst düzeyde yapmak olacaktır.

Yetki seviyelerini öğrendiğimize göre sıra geldi yetki vermeye ve grup oluşturmaya. Bir sonraki yazımızda gruplar üzerine yoğunlaşıp daha sonra da nihayet yetki veriyor olacağız.

Salı, Mart 10, 2015

Hatırlatma: Microsoft SharePoint Web Application Servisi

Bu gün almış olduğum bir soru üzerinde bu yazıyı yazmaya karar verdim. Soru: Bu servisi durdurursak ne olur?

SharePoint Farm'larını kurgularken sunucu rollerini belirleriz. Şu sunucu Web Front End sunucu olsun, şu sunucu BackEnd ya da Application olsun deriz. SharePoint Farm'ında bir sunucunun Web Front End sunucusu olmasını sağlayan servis Microsoft SharePoint Web Application Servisi'dir. Bir Farm'da bu servisin açık olduğu sunuculara son kullanıcılar gelir, yani Conent Database'lerinin bağlanmış olduğu Web Application'ların oluşturulmasını sağlayan servis budur.

Peki kapandığında ne olur! Yukarıdaki açıklamalar ışığında şunu söyleyebilirim: Sunucudaki tüm kullanıcı Web Application'ları silinir ve yaptığınız ayarların tamamı çöpe gider, doğal olarak sistem erişilmez olur. Bu sebeple eğer sunucuyu Farm'dan çıkarmayacaksanız bu servis normal şartlar altında durdurulup yeniden başlatılmaz.

Cumartesi, Ocak 03, 2015

SharePoint Yetkilendirme - 2

Serimizin bir önceki yazısında yetkilendirme kavramına hızlıca göz atmıştık. Bir önceki yazıya http://burakbatur.blogspot.com.tr/2014/12/sharepoint-yetkilendirme-1.html adresinden ulaşabilirsiniz.

Bu yazımızda sunucu düzeyindeki bir kaç yetkiden bahsediyor olacağız. İlk olarak Windows Server seviyesinden başlayalım. Bir sunucuya SharePoint kurulumu yaptığınızda sunucunun Lokal gruplarına 3 tane yeni grup eklenir. Bunlar;

WSS_ADMIN_WPG
WSS_RESTRICTED_WPG_V4
WSS_WPG

Bilgisayarınızın yönetim ekranına gittiğinizde aşağıdaki resimde de olduğu gibi bu grupları görüntüleyebilirsiniz. Tabi ki bir Farm yapısı söz konusu ise her sunucunun lokalinde bu gruplar vardır ve bu grup üyeliklerinin her sunucuda düzenlenmesi gerekir.


WSS_ADMIN_WPG
Bu gruba ekli olan kullanıcılara tüm SharePoint üzerinde yazma yetkisi verilir. Genel bir yazma yetkisine sahip olması gereken kullanıcılarınız söz konusu ise bu gruba eklemelisiniz.

WSS_RESTRICTED_WPG_V4
SharePoint'te verilebilecek en yüksek yetkiyi kişileri bu gruba dahil ederek verebilirsiniz. Bu grubun üyeleri Site Collection düzeyindeki izinleri düzenlemekten, WebApplication oluşturma ve silmeye kadar her şeyi yapabilir. Bu sebeple açıkladığımız gruplardan en az üyesi olması gereken grup budur.

SharePoint Yazılımı yapan firmalarda en sık gördüğümüz hata tek bir SPAdmin hesabı ile herkesin bağlanıp yazılım geliştirmeye çalıştırmasıdır. Bu firmaların kolayına gelmekle birlikte genellikle bilgi eksikliğinden kaynaklanmaktadır. Yazılım ekip üyelerinizin hesaplarını bu gruba ekleyerek rahatlıkla Development Farm'ı üzerinde geliştirme yapmasını sağlayabilirsiniz. Tabi ufak bir hatırlatma: Deployment yapılabilmesi için ilgili hesaba SQL tarafında da gerekli yetkilerin verilmiş olması gerekiyor.

WSS_WPG
Bu grubun üyelerine tüm farm üzerinde okuma yetkisi verilir. Özellikle Search servisinde kullanılan Search Content Access Account'unun eklenmesi gereken gruptur.

Windows Server seviyesinden Central Admin'e geçtiğimizde de bir kaç ayar daha söz konusu olacaktır. Bunlardan ilki Web Application ayarları sayfasından erişilen User Policy ayarıdır. Bu ayar ile belli bir kullanıcı ve gruba tüm Web Application düzeyinde yetki verebilir ya da kişilerin bu WebApplication'a girmesini yasaklayabilirsiniz.

 

Central  Administration Site üzerinden yapabileceğiniz bir kaç yetki ayarı daha tüm Web Application'ı anonim erişme açmak ya da kapatmak da olabilir. Yukarıdaki resimde gördüğünüz Permission Policy ise bir Web Application içerisindeki Site Collection ve alt seviyelerde kullanılabilecek yetki seviyelerini belirler. Bu adımda örneğin hiç kimseye Deny yetkisi verdirmeyebilirsiniz.

Central Administration Site üzerinde en sık kullandığımız bir diğer ayar da Application Management -->Change Site Collection Administrators bağlantısıdır. Bu bağlantı ile bir Site Collection'ın 1. ve 2. seviye yöneticilerini Central Administration Site üzerinden belirtilebilirsiniz. Burada unutulmaması gereken bir nokta bu bölümden sadece 2 tane kullanıcıyı yetkilendirebilirsiniz. Daha fazlası için Site Collection'a erişip Site Collection ayarları üzerinde aksiyon almanız gerekiyor.

Perşembe, Temmuz 10, 2014

SharePoint InfoPath Form Services Arayüzde Olmayan Özellikleri Listeleme

Her ne kadar geleceği çok parlak olmasa da pek çoğumuz için Microsoft Office InfoPath çoğu noktada hayat kurtaran bir uygulama olmuştur. Özellikle formlara Browser üzerinden erişip işlem yaptırmak, Client'larda herhangi bir şey kurulu olmadan aksiyon alıyor olmak ve çoğu işlemi de kod yazmadan kurallar ile işletmek gerçekten kulağa çok hoş geliyor. Proje ve kullanım oranı büyüdükçe çok güvendiğiniz SharePoint InfoPath Form servisleri zaman zaman size problem çıkarmaya başlar. Bu problemler uygulamanın tasarımı, sistem kaynaklarının yetersizliği gibi konulardan kaynaklanmakla birlikte zaman zaman da arka plandaki gizli ayarlardan kaynaklanıyor olabilir. Uygulamanız geniş kitlelere yayıldıkça zaman zaman varsayılan değerlerle oynamanız gerekebilir. SharePoint Central Administration ekranı üzerinden bir takım ayarlar ile oynayabiliyorsunuz ama asıl hayat kurtaran ayarlara PowerShell ile müdahale etmeniz gerekebilir. Bu işlemler oldukça basittir. 

InfoPath Form Services'in tüm ayarlarını görüntülemek için ilk olarak SharePoint Management Shell ekranını Run As Administrator seçeneği ile açalım ardından aşağıdaki kod ile InfoPath Form Services'in tüm ayarlarını görüntüleyebilirsiniz.

$SPInfopath=Get-SPInfoPathFormsService

$SPInfopath | Select *

Bu kodları çalıştırdığınızda ekranda aşağıdaki şekilde tüm ayarları ve bu ayarlara atanmış olan değerleri görüyor olacaksınız.

TypeName                                 : Forms Service
FormTemplates                            : ......
DefaultDataConnectionTimeout             : 10000
MemoryCacheSize                          : 250
MaxDataConnectionTimeout                 : 20000
MaxDataConnectionResponseSize            : 1500
MaxDataConnectionRoundTrip               : 20000
MaxFormLoadTime                          : 40000
RequireSslForDataConnections             : True
AllowEmbeddedSqlForDataConnections       : False
AllowUdcAuthenticationForDataConnections : False
AllowUserFormCrossDomainDataConnections  : True
AllowUserFormBrowserEnabling             : True
MaxSizeOfFormSessionState                : 4194304
MaxSizeOfUserFormState                   : 4194304
MaxPostbacksPerSession                   : 75
MaxUserActionsPerPostback                : 200
ActiveSessionsTimeout                    : 1440
AllowUserFormBrowserRendering            : True
AllowViewState                           : False
ViewStateThreshold                       : 40960
DataConnectionFiles                      : {}
ExemptUserAgents                         : {crawler, googlebot, ms search, msnb
                                           ot...}
Instances                                : {}
Applications                             : {}
Required                                 : False
JobDefinitions                           : {}
RunningJobs                              : {}
JobHistoryEntries                        : {}
CanUpgrade                               : True
IsBackwardsCompatible                    : True
NeedsUpgradeIncludeChildren              : False
NeedsUpgrade                             : False
UpgradeContext                           : Microsoft.SharePoint.Upgrade.SPUpgra
                                           deContext
Name                                     :
DisplayName                              :
Id                                       : c4211568-4ede-4e2f-81f1-******
Status                                   : Online
Parent                                   : SPFarm Name=SharePoint_Config_***
Version                                  : 1814277
Properties                               : {}
Farm                                     : SPFarm Name=SharePoint_Config_***

UpgradedPersistedProperties              : {}

Bu ayarlardan herhangi birini düzenlemek için aşağıdaki örnekteki gibi bir aksiyon alabilirsiniz. Örneğin biz bu örneğimizde DefaultDataConnectionTimeout değerini 10 000'den 20 000'e çekiyoruz.

$SPInfopath.DefaultDataConnectionTimeout = 20000

Yukarıdaki kodu çalıştırdığınızda değer direkt güncellenecektir. Tüm özellikleri tekrar listeleyerek sonuca göz atabilirsiniz. Bu arada hangi özelliği ne zaman değiştirmeniz gerekiyor? Buna tabiki siz direkt karar vermemelisiniz. Herhangi bir hata aldığınızda ilgili log dosyasına gidip hatayı analiz ettiğinizde SharePoint zaten size gerekli bilgiyi veriyor olacaktır. 

Pazartesi, Eylül 17, 2012

SharePoint 2010 Nasıl Yapılır? - CAML Query Builder ile Liste Sorgulama

Daha önce CAML'ın ne olduğunu ve nasıl kullanıldığını açıklamıştık. Hatırlanacağı üzere CAML Xml tabanlı bir sorgulama diliydi ve oluşturup kurgulaması oldukça zordu. Bu zorluk sebebi ile farklı uygulamalar kullanabileceğimizden bahsetmiştik. Bu yazımızda U2U CAML Query Builder'ı anlatıyor olacağız. 

Uygulamayı http://www.u2u.be/res/tools/camlquerybuilder.aspx adresinden indirebilirsiniz. Uygulamayı indirip kurulumun ardından çalıştırdığınızda aşağıdaki ekran sizi karşılıyor olacak.

 
Yukarıdaki ekranda bir SharePoint sitesine bağlanmak istediğimizi belirtiyoruz. URL kısmında sitenin (Dikkat! SiteCollection değil, site) URL'ini belirtiyoruz ve siteye bağlanırken hangi metot ile bağlanacağımızı belirtiyoruz. Bildiğiniz gibi bir SharePoint sitesine iki farklı şekilde bağlanabiliriz. Bunlardan bir tanesi Object Model bir diğeri de Web Servisleri. Object Model ile siteye bağlanırken sunucu üzerinde olmanız gerekmektedir, uzak bir bağlantı yapmak istiyorsanız da Web Servislerini tercih edebilirsiniz. Tabi web servislerini tercih ettiğinizde kullanıcı belirtmeyi unutmamanız gerekiyor.
 
 
Bağlantıyı oluşturduktan sonra sizi aşağıdaki ekran karşılıyor olacak.
 


  
Gördüğünüz gibi CAML Query Builder size bağlanmış olduğunuz sitedeki listeleri listeledi. Buradaki listelerden herhangi birini seçip Query'nizi oluşturmaya başlayabilirsiniz. Bu işlem için listeyi seçtikten sonra, üstte aktif olan Buttonlardan "New Query"'i tıklıyoruz. New Query Butonuna tıkladıktan sonra aşağıdaki resimde yer alan görüntü ile karşılaşıyor olmalıyız.


Yukarıdaki ekran aracılığı ile de kolaylıkla sorgularımızı oluşturuyoruz. Burada dikkat edilmesi gereken noktalardan bir tanesi ilk olarak AND OR koşul yapınızı oluşturmanız. Filtre bölümünden ilk olarak AND, OR hiyerarşisini oluşturup ardından da sütunu seçip filtreleme kriteri ile birlikte sorgunuzu kolaylıkla oluşturabilirsiniz. Bu işlemin ardından aktif olan "Execute Query" seçeneği ile sorgunuzu test edebilirsiniz. Aşağıda ufak bir örnek resim daha yayınlıyorum.


Resimden de anlaşılacağı üzere, yukarıdaki sorgu AdSoyad sütunundaki değerleri a veya b ile başlayan sonuçları ters sıralı olarak getirecektir. Gördüğünüz gibi sorguları oluşturmak oldukça kolay bu şekilde istediğiniz komplekslikteki sorgularınızı buradan oluşturup kopyalayıp projelerinizde kullanabilirsiniz.

Cumartesi, Eylül 15, 2012

SharePoint 2010 Nasıl Yapılır?-SharePoint Object Model: CAML ile Liste Sorgulama

SharePoint üzerinde yazılım geliştirirken olmazsa olmazlardan bir tanesi de listelerdeki dataları sorgulamaktır. Listeleri SQL tabloları gibi düşünüp datayı listelerde saklayıp T-SQL'de olduğu gibi listeleri de sorgulayabilirsiniz. SharePoint listelerini sorgularken direkt SQL veri tabanına gidiyor olmak doğru bir çözüm değildir. SQL tabloları oldukça karmaşık ve sütun tipine göre verinin saklanmış olduğu değişiklik gösterebilmektedir. Direkt SQL tablosuna gidemediğimize göre SharePoint listelerini nasıl sorgulayacağız? Bu sorgulama dilinin özel bir adı vardır ve kısaltması da CAML olarak adlandırılmaktadır. Farklı bir açıdan baktığımızda CAML'ı T-SQL'in sadece sorgulama tarafı (Retrieve) olarak düşünebiliriz. CAML'ın tam açılımı ise Collaborative Application Markup Language anlamına gelmektedir.
CAML XML tabanlı bir dildir ve XML hiyerarşisi ile sorgular oluşturulabilir. Mantık şu şekilde işlemektedir; ilk olarak koşulu yazıp, koşul düğümünün için de de bu koşula uygun sonuç dönmesini sağlayacak bir sütun yer almalıdır. En basit hali ile bir listenin "Title" sütunundaki "SharePoint" değerine eşit olan öğeleri elde etmek için aşağıdaki sorguyu yazabiliriz. 

   <Where>
      <Eq>
         <FieldRef Name='Title' />
         <Value Type='Text'>SharePoint</Value>
      </Eq>
   </Where>
   


Kodlardan da göreceğiniz gibi Where koşulunu belirtiyoruz. Where koşulunu içinde eşit durumu için <Eq> düğümünü kullanmak gerekiyor. <Eq> düğümünün içinde de sorgulanacak olan sütunun adı ve ardından da hangi değer ile sorgulanacağını belirtiyoruz. Sorgulama kriterlerinde;

Eşit olma durumu için: Eq
Eşit olmama durumu için: Neq
Değerin büyük olmasını sorgulamak için : Gt
Değerin büyük veya eşit oması durumu için: Geq
Küçük olma durumu için: Lt
Küçük veya eşit olma durumu için: Leq
Değerin NULL olma durumunu sorgulamak için: IsNull
NULL olmama durumu için: IsNotNull
Değerin bir değer ile başladığını sorgulamak için: BeginsWith
Değerin bir değeri içerdiğini sorgulamak için: Contains

Parametreleri kullanılır. Tabi bunlara ek olarak AND ve OR gibi sorgulama kriterleri ile ORDER BY gibi sıralama kriterleri de ekleyebiliyorsunuz. İşin içine AND ve OR'un girmesi ile birlikte tahmin edeceğiniz üzere hiyerarşi yine değişiyor ve sorgu kriterleri büyüdükte oldukça zorlaşıyor. Çözüm olarak ise sizin için istediğiniz CAML'ı üreten ücretsiz toolları kullanabilirsiniz. Piyasada kabul görmüş en iyi tool U2U'nun CAML Query Builder uygulamasıdır. Uygulamayı http://www.u2u.be/res/tools/camlquerybuilder.aspx adresinden indirebilirsiniz.4.0 versiyonunu SharePoint 2010 ile sorunsuzca kullanabilirsiniz.

Peki üretilen CAML'i nasıl kullanacağız? Aşağıda herhangi bir listenin tüm öğelerini döndüren bir kod parçasını görüyorsunuz.

SPSite siteCollection = new SPSite("http://sharepointdev:27500/");
SPWeb web = siteCollection.OpenWeb();
SPList liste = web.Lists["DataSorgulamaListesi"];
Literal1.Text = string.Empty;
foreach (SPListItem item in liste.Items)
{
      Literal1.Text += item.Title;
      Literal1.Text+="-"+item["Tip"]+"<br/>";
}

Aşağıdaki kodlar ise aynı listenin bir WHERE koşulu ile sorgulanmasını yani CAML ile sorgulanmasını göstermektedir. Gördüğünüz gibi bir tane SPQuery nesnesi oluşturuyoruz ve nesnenin Query parametresine CAML'ımızı belirtiyoruz. Ardından da GetItems() metodu ile SPQuery tipindeki nesnemizi belirterek CAML ile listemizi sorguluyoruz.

SPSite siteCollection = new SPSite("http://sharepointdev:27500/");
SPWeb web = siteCollection.OpenWeb();
SPList liste = web.Lists["DataSorgulamaListesi"];
Literal1.Text = string.Empty;
SPQuery sorgu = new SPQuery();
sorgu.Query = "<Where><Eq><FieldRef Name='Title' /><Value Type='Text'>SharePoint</Value></Eq></Where>";

foreach (SPListItem item in liste.GetItems(sorgu))
{
      Literal1.Text += item.Title;
      Literal1.Text+="-"+item["Tip"]+"<br/>";
}

Pazartesi, Ekim 17, 2011

SharePoint Summit Istanbul | 6-7 Aralık Swissotel

Avrupa ve Orta Doğu bölgelerinde SharePoint teknolojilerinin anlatıldığı en kapsamlı etkinlik olan SharePoint Summit Istanbul, 6-7 Aralık 2011 tarihlerinde Swissotel'de gerçekleştiriliyor.
Bu etkinlikte bende konuşmacı olarak yer alıyor olacağım. Etkinliğin ilk günü saat 14:30'da, SharePoint 2010 ile BCS Kullanarak İş Süreçlerini Otomatikleştirme konusunu ele alacağız. Aynı gün saat 16:50'de başlayacak olan Excel, Visio ve PerformancePoint Hizmetleri ile Gelişmiş İş Karneleri ve Panolar konulu konuşmayı da sevgili dostum Osman Çokakoğlu anlatıyor olacak.
Etkinlik süresince sizlerle TCM'in standında da bir araya geleceğiz. Ücretli olan etkinliğe 1 Kasım'dan önce kayıt olduğunuzda indirimlerden faydalanabiliyorsunuz. 
SharePoint Summit Istanbul'da görüşmek üzere...

Kayıt ve detaylı bilgi için:
http://www.sharepointsummitistanbul.com  

Cuma, Eylül 30, 2011

SharePoint Güvenlik Tipleri

SharePoint'in güvenlik tipleri üzerinde konuşmadan önce ilk olarak kimlik denetimi (Authentication) ve yetkilendirme (Authorization) kavramları üzerinde durmak lazım. Authentication yani kimlik denetimi veri tabanında kullanıcının olup olmadığı ve eğer varsa doğru parolayı bildirip bildirmediği ile ilgilenmektedir. Eğer kullanıcı doğru bilgileri vermedi ise sisteme giremez. Kullanıcı sisteme girdikten sonra ne yapacağı ise Authorization ile belirtilmektedir. Kelime anlamından da anlaşılacağı gibi Authorization kullanıcının sisteme girdikten sonra sistemde hangi bölümlere erişeceğini belirtir. SharePoint'e bu bilgiler çerçevesinden bir kez daha baktığımızda göreceğiz ki SharePoint'in arayüzü üzerinden gerçekleştirmiş olduğumuz güvenlik ayarlarının tamamı yetkilendirme ayarlarıdır. Peki kimlik denetimi tarafını nasıl çözüyoruz? Kimlik denetiminde iki yöntem söz konusudur bunlar ASP.NET'te de olan Windows tabanlı güvenlik ve Forms tabanlı güvenliktir.

SharePoint 2010'la birlikte bu güvenlik modlarının kullanımı ve isimlendirmesi de biraz değiştirildi. Temel anlamda yine iki farklı güvenlik modu bulunmaktadır. Bunlar;

  • Claims Based Authentication
  • Classic Mode Authentication

Olarak isimlendirilmektedir.

Classic Mode Authentication sadece Windows tabanlı güvenliğe destek verir ve makinenin yerel kullanıcıları ve yerel grupları ile dahil olunan domain içindeki kulllanıcılar ve gruplar kullanılabilir. Classic Mode Authentication seçili ise kullanıcıların Authenticate olması için genellikle çok fazla ayar yapmanıza gerek kalmamaktadır. Kullanıcı eklerken SharePoint domaini tarayıp kullanıcıları sizin için arayacaktır. Kullanıcılar Authenticate olurken ise iş henüz SharePoint'e devredilmeden IIS devreye girer ve kimlik denetimini gerçekleştirir. Windows tabanlı güvenlik Form tabanlı güvenliğe göre daha yüksek seviye bir koruma sağlıyor olacaktır. Windows tabanlı güvenliğin içerisinde de güvenlik seviyeleri alt kırılımlara ayrılmaktır bu alt kırılımlar ve detayları için IIS güvenlik makalelerini takip etmenizi öneririm.

Claims Based Authentication yönteminde ise kullanıcıların kimliklerini ister Windows Tabanlı güvenlik ile isterseniz de Form tabanlı güvenlik ile denetleyebilirsiniz. Eğer isterseniz bir Web Application için her iki yöntemi de tercih edebilirsiniz. Kullanıcılar ne taraftan Authenticate olmaları gerektiğini kendileri seçip doğru kullanıcı adı ve parola belirttikten sonra sisteme gireceklerdir. Form tabanlı güvenliği tercih ettiğiniz senaryoda ise kullanıcı yönetimi üstlenecek olan bir tane Membership, rollerin yönetimini üstlenecek olan bir tane de Role sağlayıcısı belirtmek zorundasınız. Burada ASP.NET'in Membership ve Role Provider'ını tercih edebileceğiniz gibi kendiniz de yeni bir Provider geliştirebilirsiniz. Benim önerim, eğer kullanıcılar ve roller sıfırdan oluşturulacaksa ASP.NET Membership Provider'ı kullanmanız olacaktır çünkü kullanıcıların yönetimi bu provider'da oldukça profesyonel bir şekilde ele alınmıştır ve yine kullanmak için sizin yapmanız gereken ayarlar dışında fazla bir şey yoktur. Kullanıcıları daha önce var olan tamamen özel bir veri tabanında saklıyorsanız ya da kullanıcıların var olan domain'e girerken kullandıkları kullanıcı adı ve parolaları ile sisteme girmesini istiyorsanız mutlaka yeni bir Provider yazmak durumundasınız. Her iki çözüm için de MSDN üzerinde oldukça yeterli makaleler mevcuttur. Bu konuları özellikle ASP.NET sitelerinde ararsanız daha fazla sonuca ulaşırsınız.

SharePoint 2010'da güvenlik ayarlarını gerçekleştirirken karşılaştığımız bir problemi de sizlerle paylaşayım: Güvenlik modu Classic mode olarak ayarlanmış bir WebApplication'un güvenlik modunu Claims Based güvenliğe döndürmek için arayüz üzerinden destek maalesef sağlanmıyor ve bu sıklıkla bizim karşımıza çıkıyor. Bunun nedeni daha önce Forms Authentication desteğine gerek görülmeyen bir WebApplication'un Classic modda oluşturulmasından kaynaklanmaktadır. Çözüm olarak SharePoint PowerShell üzerinden aşağıdaki komutu çalıştırmanız gerekiyor. Aşağıdaki kodları SharePoint'in Management Shell'i üzerinde çalıştırdığınıza web uygulamanız artık Claims Based güvenliği kullanıyor olacaktır ve yukarıda açıkladığımız her şey artık bu WebApplication için de geçerlidir.

$w = Get-SPWebApplication "http://<server>/"
$w.UseClaimsAuthentication = 1
$w.Update()
$w.ProvisionGlobally()

Cuma, Temmuz 01, 2011

SharePoint 2010 Service Pack 1 Yayınlandı!

Microsoft SharePoint 2010 ürünlerinin Service Pack 1'leri yayınlandı. Service Pack'leri http://technet.microsoft.com/tr-tr/office/ee748587.aspx adresinden indirebilirsiniz.

Service Pack 1'i SharePoint'e yüklemek için aşağıdaki yolu takip edebilirsiniz.
  1. İlk olarak SharePoint Foundation 2010'un Service Pack'ini yükleyin.
  2. SharePoint 2010 Foundation Dil Paketinin Service Pack'ini yükleyin (Eğer Sistemde varsa).
  3. Microsoft SharePoint Server 2010'un Service pack'ini yükleyin.
  4. SharePoint Server Dil Paketi'nin Service Pack'ini yükleyin (Eğer sistemde varsa).
Microsoft tarafından yapılan açıklamaya göre Service Pack Nisan ayına kadar olan güncellemelerin bütününü içeriyor, Haziran ayında yayınlanan güncelleme paketi Service Pack 1 içerisinde yer almıyor. Service pack 1'in kurulumunun ardından Haziran güncellemelerinin de sisteme kurulması önemle önerilmektedir.

Konu hakkında detaylı bilgi için SharePoint'in resmi bloğunda yer alan http://sharepoint.microsoft.com/blog/Pages/BlogPost.aspx?pID=984 adresindeki posta göz atmanızda fayda var. 

Pazartesi, Haziran 27, 2011

SharePoint 2010 Service Pack 1 Geliyor...

Microsoft SharePoint bloğunda Temmuz ayı içerisinde SharePoint 2010'un Service Pack 1'inin yayınlanacağı duyuruldu. Service Pack bu güne kadar yayınlanmış olan update pack'lerin yanı sıra SharePoint'e ek özelliklerde getiriyor olacak. Şimdilik belirtilmiş olan yeni özelliklerden bazıları; Site Recycle Bin, Shallow Copy ve StorMan.aspx'in geri getirilmesi.

Site Recycle Bin özelliği ile silinmiş olan Site Collection'ların ve site'ların geri dönüşüm kutusundan kolaylıkla geri getirilmesi sağlanıyor olacak. Bu özellik ile hatayla yok edilen bir siteyi ya da site koleksiyonunu geri dönmek için yedekten dönmeye gerek kalmayacak.

Shallow Copy özelliği ile SiteCollection'ların taşınması sırasında binary dosyaların taşınması daha kolay hale gelecek.

StorMan.aspx ile sitelerimizin kotalarını ne şekilde kullandığımızı yeniden görüntülüyor olacağız. SharePoint'in eski versiyonlarını kullandıysanız bu sayfanın daha önce olduğunu ancak SharePoint 2010'la birlikte ortadan kaybolduğunu fark etmişsinizdir. Açık konuşmak gerekirse bu özelliğin kaldırılmasına anlam verememiştim, yeniden ekleniyor olması güzel.

Daha detaylı bilgi için http://sharepoint.microsoft.com/blog/Pages/BlogPost.aspx?pID=973 adresini ziyaret edebilirsiniz...

Cuma, Haziran 24, 2011

SharePoint 2010 Nasıl Yapılır? - Anket'lerde Dallanma Mantığının Kullanımı (Branching Logic)

SharePoint varsayılan olarak kullanıcılara Anket listesi sağlamaktadır. Anket listelerinde site yöneticileri hızlı bir şekilde dinamik olarak anketler oluşturup çalışanlarla paylaşabilmektedirler. Anket oluşturmak için yeni öğe ekleme menüsünden anketi(Survey) seçmek yeterli olmaktadır. Bu seçimin ardından anketin adı ve diğer ufak tefek ayarları yapıp anketi kolaylıkla oluşturabilirsiniz. Anket oluşturulduktan sonra sistem ankette kullanıcılara soracağınız soruları oluşturmanıza olanak tanımaktadır. Soruların hepsini size sağlanan sihirbaz araılığı ile oluşturabileceğiniz gibi, daha sonra anket ayarlarından soru ekleme bölümünden de oluşturabilirsiniz. Bu işlemin aslında listeye sütun eklemekten daha farklı bir işlem olmadığını kolaylıkla anlıyor olacaksınız. Peki; soruların kullanıcının vereceği cevaplara göre belli bir mantık çerçevesinde hangi sıra ile sorulacağına nasıl karar veriyoruz? SharePoint anket listelerinde varsayılan olarak bu özelliğe de destek vermektedir. Bu postumuzda anket listelerinde dallanma mantığının nasıl uygulandığını adım adım gerçekleştiriyor olacağız.

Anket listesini oluşturduktan sonra hiç soru oluşturmadan sihirbazı vazgeç tuşu ile sonlandıralım ve soruları daha sonra anket ayarlarından teker teker ekliyor olalım. Dallanma mantığını daha iyi örnekleyebilmek için aşağıdaki soruları sıra ile ekliyor olalım. Parantez içlerinde sütunların tiplerini ve verilebilecek cevapları
da listeliyorum.
  1. Medeni Durumunuz (Seçim Listesi: Evli, Bekar)
  2. Çocuğunuz var mı? (Seçim Listesi: Var, Yok)
  3. Kaç çocuğunuz var? (Sayı:Kullanıcı sayı girebilecek)
  4. Yaşadığınız Şehir. (Tek Satır Metin: Kullanıcı şehri direkt yazacak.)



Yukarıdaki soruları sıra ile herhangi bir dallanma mantığı uygulamadan direkt anketimize ekliyor olalım. Sorular eklendikten sonra ayarlardaki soru bölümünde anket aşağıdaki gibi görünüyor olacaktır.


Sorular incelendiğinde 1. ve 2. sorulardan sonra kullanıcının vereceği cevaba göre kullanıcının karşına farklı soruların çıkarılacağı sonucu ortaya çıkmaktadır. 1. soruda kullanıcı Bekar dediğinde direkt yaşadığı şehir sorusuna yönlendirilmelidir. 2. soru da da var cevabı verildiğinde 3. soruya yok cevabı verildiğinde ise yine yaşadığınız şehir sorusuna yönlendirilmelidir. Kaç çocuğunuz var sorusundan sonra ise direkt son soru olan yaşadığınız şehire yönlendirilmelidir.

Bahsedilen işlemleri yapmak için yine anketin ayarlar sayfasından yukarıda da resmini gördüğünüz sorular bölümüne geçiyoruz. Dallanma mantığını uygulamak istediğimiz sorunun üzerine tıkladığımızda en altta ilgili ayarı yapabileceğiniz bölümü görüyor olacaksınız. Aşağıdaki resimde ilk sorunun dallanma mantığı ayarlarını görüyorsunuz, ayarları kaydettikten sonra bu soru artık istenilen şekilde dallanıyor olacaktır. Benzer işlemleri diğer sorular içinde yapıp anketi tamamlıyoruz.



Tüm sorular üzerinde gerekli ayarları yaptıktan sonra ayarlar sayfasında sorular bölümü aşağıdaki gibi görünüyor olmalıdır. Bu adımdan sonra anketi doldurup gerekli testleri yapabilirsiniz ve verdiğiniz cevaplara göre farklı sorulara yönlendirildiğinizi fark ediyor olacaksınız.

Çarşamba, Mayıs 04, 2011

TCM Microsoft Teknolojileri Seminerinde Buluşalım

5 Mayıs 2011 günü Microsoft Türkiye'de gerçekleştirecek olduğumuz seminerlere sizleri de bekleriz. Sabah saat 09:30'da başlayacak olan seminer dizisi saat 16:45'e kadar beş farklı oturumla devam ediyor olacak. Seminerler kapsamında ben de SharePoint ile Proje Geliştirmek konusunu ele alıyor olacağım ve SharePoint 2010'un sağlamış olduğu avantajlarla bunların proje içerisinde kullanımı konusuna deyineceğim.

Seminer hakkında detaylı bilgi ve kayıt olmak için http://www.tcm.com.tr/MayisSeminer.htm  adresini ziyaret edebilirsiniz...

Pazar, Aralık 19, 2010

SharePoint 2010 Nasıl Yapılır? - SharePoint Designer ile External Content Type Oluşturmak

Daha önceki bir kaç postumda SharePoint 2010 ile hayatımıza giren External Content Type, External List ve Business Data Connectivity Services hakkında bilgiler vermeye çalışmıştım. Daha önceki postlara aşağıdaki linklerden erişebilirsiniz.
Bu yazımızda SharePoint'e SharePoint Designer aracılığı ile yeni bir External Content Type'ı nasıl eklediğimizi tartışacağız. Daha önceki yazılardan hatırlanacağı üzere External List'ler; verilerin direkt istenilen veri tabanından okunup yine aynı veritabanına yazılmasına olanak tanıyordu. İşlemleri biraz daha hızlandırmak adına bu işlem SharePoint Designer aracılığı ile kod yazmadan hızlıca gerçekleştirilebilmektedir. İşe ilk olarak veritabanımızı hazırlayarak başlayalım; aşağıdaki kodlardaki sorgu çalıştırıldığında istenilen tablo oluşturulacaktır.

CREATE TABLE [dbo].[Personel]([KisiID] [int] IDENTITY(1,1) NOT NULL,[Ad] [nvarchar](50) NOT NULL,[Soyad] [nvarchar](50) NOT NULL,[SicilNo] [char](10) NOT NULL,CONSTRAINT [PK_Personel] PRIMARY KEY CLUSTERED ([KisiID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
Veritabanı hzırlandıktan sonra SharePoint Designer'ı açıp External List oluşturmak istenilen siteye bağlanalım. SharePoint Designer üzerinde site objelerinin görüntülenmiş olduğu bölümde External Content Types dikkatinizi çekecektir. Bu bölümden var olan External Content Type'ları düzenleyebilir ya da yenisini ekleyebilirsiniz.



External Content Types bölümüne tıkladıktan sonra daha önce oluşturulmuş olan tipler burada listelenmektedir. Yenisini eklemek için Ribbon'da yer alan (En üstte en solda) Create External Content Type düğmesi ile yeni bir tip eklemenin ilk adımını gerçekleştirebiliriz. İlgili tuşa tıkladıktan sonra aşağıdaki ekran karşınıza gelecektir. Bu ekrandan oluşturulacak olan External Content Type'ın adı, açıklaması gibi bilgileri girdikten sonra veri detayları için Click here to discover external data sources and define opearitions linkine tıklayıp ilgili ekrana geçiyoruz.



External Content Type'ın içeriğini belirlemek için linke tıkladıktan sonra ilk olarak bağlantı seçilmesi gerekmektedir. Burada daha önce kodlarını paylaştığımız tabloyu oluşturduğumuz veritabanını seçiyor olalım. Veritabanı seçildikten sonra düğümler genişletilerek ilgili tablonun üzerinde operasyonlar tanımlanmalıdır. Bunlar sizin de tahmin edeceğiniz gibi, veri ekleme, silme, güncelleme ve görüntülemedir. Hepsini teker teker tanımlayabileceğiniz gibi tabloya aşağıdaki şekilde de görüldüğü üzere sağ tıklayıp hepsini tanımla denebilir.


Create All Operations seçildikten sonra açılan sihirbaz aracılığı ile tüm operasyonlar oluşturulabilir. Bu örnek için next , next ve finish işinizi görecektir çünkü her şeyi varsayılan ayarlarla tanımlamak istiyoruz. Finish'e tıkladıktan sonra sihirbaz kapanacak ve oluşturulan operasyonlar size görüntüleniyor olacaktır.

Herhangi bir problem yoksa oluşturmuş olduğumuz tipi kaydedip; External List oluşturup kullanmaya başlayabilirsiniz. Çok kolay değil mi? External List'i nasıl oluşturulacağın daha önceki postlarda anlatmaya çalışmıştım, yukarıdaki linklerden tıklayarak tekrar hatırlayabilirsiniz.

Not: SharePoint Designer üzerinden de External List ekleyebilirsiniz!

Pazar, Aralık 12, 2010

SharePoint 2010'da Kişisel Site (My Site) Oluşturma Problemi

MySite'lar (Türkçe dil paketi kurulu olan SharePoint çözümlerinde Sitem olarak adlandırılır.) SharePoint'te kullanıcıların kendi kişisel sitelerini oluşturmalarına olanak tanıyan yapılardır. Problemsiz bir konfigürasyon gerçekleştirildikten sonra SharePoint 2010'a oturum açan kullanıcılar MySite tuşuna tıklayarak kendi sitesini oluşturabilir, kişisel dokümanlarını kendi alanında SharePoint üzerinde saklayabilir eğer isterse Blog yayını da yapabilir. 
Sistemde konfigürasyon problemi varsa kullanıcılar MySite tuşuna tıkladığında bir hata mesajı görüntülenir ve MySite oluşturulamaz, bunun çok farklı nedenleri olabilir ancak ilk olarak aşağıda açıklamaya çalıştığım maddeleri gözden geçirirseniz problem büyük ihtimalle çözülecektir;
  1. MySite'ları saklamak için yeni bir WebApplication oluşturun.
  2. İki tane yönetilebilir yol ekleyin. (Managed Path)
    -usersite (Explicit inclusion)
    -personel (Wildcard inclusion)
  3. /usersite yoluna yeni bir Site Collection oluşturun. Template olarak Enterprise bölümünde yer alan MySite Host'u seçin.
  4. Root'a (/) bir tane SiteCollection ekleyin. Zaten dolu ise bir şey eklemenize gerek yok ancak WebApplicatinon'ın Root'undan muhakkak bir Site Collection yer alıyor olmalıdır.
  5. Self Service Site Creation özelliğini aktive edin. Bu ayar Web Application düzeyinde bir ayardır ve Central Administration > Application Management > Manage Web Applications > Click on Web Application created above > Ribbon > Self-Service Site Creation > On > OK yolunu kullanarak aktif hale getirebilirsiniz.
  6. Central Administration > Application Management > Manage service applications > User Profile Service Application > Setup My Sites  yolunu kullanarak My Site Host alanını http://WebApplicationAdı/usersite şeklinde doldurun. Burada usersite bölümünü 2. adımda oluşturduğumuzu hatırlayalım.

Salı, Eylül 21, 2010

ASP.NET ve SharePoint'te Güvenlik Açığı (Microsoft Security Advisory (2416728))

ASP.NET'te SharePoint'i de etkileyen bir güvenlik açığı duyuruldu. Bu güvenlik açığı ile ViewState verisi elde edilebiliyor ya da sitede bulunan web.config gibi dosyaların içeriği görüntülenebiliyor. Güvenlik açığının detay bilgilerine buraya tıklayarak erişebilirsiniz.


Güvenlik açığından kurtulmak için; sitenin Custom Errors modunu "On" olarak ayarlayıp site içerisinde hata oluşması durumunda kullanıcıyı kendi tasarladığınız custom bir hata sayfasına yönlendirmeniz yeterli oluyor. SharePoint için yapılması gereken işlemleri maddeler halinde SharePoint'in resmi bloğunda olduğu şekilde açıklıyorum;


1. SharePoint'i yüklemiş olduğunuz dizinde %CommonProgramFiles%\Microsoft Shared\Web Server Extensions\14\template\layouts klasörüne geçin.

2. Klasörde error2.aspx adında bir dosya oluşturup içeriğini aşağıdaki hale getirin:


3. %SystemDrive%\inetpub\wwwroot\wss\virtualdirectories dizinine geçin.


4. Her alt klasör için aşağıdaki işlemleri tekrarlayın:


     1. web.config'i açın. 
     2. custom Errors düğümünü bulup aşağıdaki gibi düzenleyin;
          default Redirect="/_layouts/error2.aspx" />
     3. Değişiklikleri Kaydedin. 
     4. Run iisreset /noforce

Daha fazla bilgi için:

Microsoft Security Advisory (2416728) - Vulnerability in ASP.NET Could Allow Information Disclosure


Security Advisory 2416728 Released – Microsoft Security Response Center Blog


Understanding the ASP.NET Vulnerability – Microsoft Security Research & Defense Blog


Important: ASP.NET Security Vulnerability – Scott Guthrie’s Blog


Frequently Asked Questions about the ASP.NET Security Vulnerability – Scott Guthrie’s Blog

Çarşamba, Eylül 15, 2010

SharePoint 2010 Nasıl Yapılır? - External List'lere CRUD yeteneği kazandırmak!

Daha önceki yazılarımızda SharePoint 2010 ile birlikte hayatımıza giren External List'in ne olduğu ve nasıl oluşturulabildiğini ele almıştık daha önceki posta erişmek için buraya tıklayabilirsiniz; Bu postta da External List'e yeni öğe eklemeyi ve var olanları düzenlemeyi ele alıyoruz.  External List'te CRUD yeteneği kazandırma konusunda Internet'te yapmış olduğum araştırmalarda konu ele alınırken veri ekleme, silme ve güncelleme işlemlerinin Linq to SQL Classes aracılığı ile gerçekleştirildiğini gördüm sizler de bu metodu tercih ederseniz SharePoint'in resmi bloğunu ziyaret edebilirsiniz. Biz burada biraz daha farklı bir yöntemle ilerliyor olacağız, veri tabanına erişmek için kullanacağımız kodları tamamen kendimiz geliştireceğiz.

Yeni bir Business Data Connectivity Model oluşturarak işleme başlayalım. Yeni bir BDC Model oluşturmak için Visual Studio 2010'da New/project ekranından SharePoint bölümü aracılığı ile BDC Model projesini seçelim.

Proje şablonunu seçip OK butonuna basıldıktan sonra geliştirmenin hangi site üzerinde gerçekleştirileceği Visual Studio'ya belirtilmelidir. Buraya oluşturulacak olan modelin deploy edilecek olduğu siteyi yazıp Finish butonu ile proje oluşturulur.


Oluşturulan projeye BDC Model'de kullanılmak üzere bir tane class ekleyeceğiz. Ekleyecek olduğumuz Class hem tip olarak kullanılacak hem de CRUD olarak kısaltabileceğimiz Create, Retrieve, Update ve Delete metodlarını içerecek. Visual Studio'da Projeye sağ tuş ile tıklayıp New Item menüsünden Kisi adında bir tane Class ekleyelim. Oluşturulan Class aşağıdaki resimde yer alan Rehber isimli tabloya veri ekleyip silecektir. Resimden de anlaşılacağı üzere tablonun beş tane sütunu var bu sütunlardan KisiID olanı primary key ve aynı zamanda da identity özellikli Create ve Update işlemlerinde bu sütuna dikkat etmek gerekiyor.

Oluşturulan Class'ın içeriğini gerekli işlemlerin yapılabilmesi adına aşağıdaki şekilde dolduruyoruz.

Kisi.cs
using System;
using System.Collections.Generic;

using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;


namespace BdcRehberMakale
{
     public class Kisi
     {
          public int KisiID { get; set; }
          public string Ad { get; set; }
          public string Soyad { get; set; }
          public string Email { get; set; }
          public string Telefon { get; set; }
          public string ConnectionString
          {
               get
              {
                    return "Data Source=.; Initial Catalog=TCMLABTEST; Integrated Security=True";
               }
          }


          public Kisi()
          {


          }


          public Kisi(int kisiID,string ad,string soyad, string email, string telefon)
          {
                    this.KisiID = kisiID;
                    this.Ad = ad;
                    this.Soyad = soyad;
                    this.Email = email;
                    this.Telefon = telefon;
          }


          public void Create()
          {
               SqlConnection baglanti = new SqlConnection();
               baglanti.ConnectionString = this.ConnectionString;


               SqlCommand komut = new SqlCommand();
               komut.Connection = baglanti;
               komut.CommandText = "INSERT INTO Rehber (Ad,Soyad,Email,Telefon) VALUES (@Ad,@Soyad,@Email,@Telefon)";


               komut.Parameters.AddWithValue("@Ad", this.Ad);
               komut.Parameters.AddWithValue("@Soyad", this.Soyad);
               komut.Parameters.AddWithValue("@Email", this.Email);
               komut.Parameters.AddWithValue("@Telefon", this.Telefon);


               baglanti.Open();
               komut.ExecuteNonQuery();
               baglanti.Close();
          }


          public List RetrieveAll()
          {
               SqlConnection baglanti = new SqlConnection();
               baglanti.ConnectionString = this.ConnectionString;


               SqlCommand komut = new SqlCommand();
               komut.Connection = baglanti;
               komut.CommandText = "Select * FROM Rehber ORDER BY KisiID";


               DataTable dt = new DataTable();
               SqlDataAdapter adapter = new SqlDataAdapter(komut);
               adapter.Fill(dt);


               List kisiler = new List();
               foreach (DataRow row in dt.Rows)
               {
               kisiler.Add(new Kisi(Convert.ToInt32(row["KisiID"]),"" + row["Ad"], "" + row["Soyad"], "" + row["Email"], "" + row["Telefon"]));
               }


               return kisiler;
          }


          public Kisi RetrieveByID(int kisiID)
          {
               SqlConnection baglanti = new SqlConnection();
               baglanti.ConnectionString = this.ConnectionString;

               SqlCommand komut = new SqlCommand();
               komut.Connection = baglanti;
               komut.CommandText = "Select * FROM Rehber WHERE KisiID=@KisiID";
               komut.Parameters.AddWithValue("@KisiID", kisiID);


               DataTable dt = new DataTable();
               SqlDataAdapter adapter = new SqlDataAdapter(komut);
               adapter.Fill(dt);


               Kisi k = new Kisi();
               if (dt.Rows.Count == 1)
               {
                    k.KisiID = kisiID;
                    k.Ad=""+dt.Rows[0]["Ad"];
                    k.Soyad = "" + dt.Rows[0]["Soyad"];
                    k.Email = "" + dt.Rows[0]["Email"];
                    k.Telefon = "" + dt.Rows[0]["Telefon"];
               }
               return k;
          }


          public void Update()
          {
               SqlConnection baglanti = new SqlConnection();
               baglanti.ConnectionString = this.ConnectionString;


               SqlCommand komut = new SqlCommand();
               komut.Connection = baglanti;
               komut.CommandText = @"UPDATE Rehber SET
                                                            Ad=@Ad,
                                                            Soyad=@Soyad,
                                                            Email=@Email,
                                                            Telefon=@Telefon
                                                            WHERE   KisiID=@KisiID";
               komut.Parameters.AddWithValue("@Ad", this.Ad);
               komut.Parameters.AddWithValue("@Soyad", this.Soyad);
               komut.Parameters.AddWithValue("@Email", this.Email);
               komut.Parameters.AddWithValue("@Telefon", this.Telefon);
               komut.Parameters.AddWithValue("@KisiID", this.KisiID);


               baglanti.Open();
               komut.ExecuteNonQuery();
               baglanti.Close();
          }


          public void Delete()
         {
               SqlConnection baglanti = new SqlConnection();
               baglanti.ConnectionString = this.ConnectionString;


               SqlCommand komut = new SqlCommand();
               komut.Connection = baglanti;
               komut.CommandText = @"DELETE FROM Rehber
                                                            WHERE KisiID=@KisiID";
               komut.Parameters.AddWithValue("@KisiID", this.KisiID);


               baglanti.Open();
               komut.ExecuteNonQuery();
               baglanti.Close();
          }
     }
}

Kisi class'ını dikkatle incelediğimizde yapılandırıcı metod dışında toplam beş tane metod olduğu gözlerden kaçmayacaktır. Bu metodlardan iki tanesi veri getirmek diğer üçü de veri yazmak için olan işlemlerdir. Veri getirmek için kullanılan metodların dönüş değerinin Kisi sınıfı ve Kisi koleksiyonu olduğuna dikkat ediniz. Veri sınıfımız başka bir deyişle Data Access Layer hazırlandı şimdi sıra geldi BDC Modeli'ni hazırlamaya. Visual Studio'da Solution Explorer'a göz atacak olursak orada BDCModel1 adında bir modelin yer aldığını görüyor olacağız. Her şeyi sıfırdan yapmak adına BDCModel1 isimli modeli projemizden silelim. Yeni bir model eklemek için projeye sağ tıklayalım ve New Item menüsünden SharePoint/2010 bölümünde yer alan Business Data Connectivity Model tipini seçelim. Model adı olarak BdcModelRehber belirleyelim. BDCModelRehber'e tıklayarak model'in içeriğine göz atabiliriz. Oluşturulan modelde Entity1 isimli bir entity hazır halde karşımıza gelecektir, bunu da silip yenisini ekleyeceğiz. Entity1'e tıkladıktan sonra delete tuşu ile gerekli aksiyonu alabiliriz. Yeni bir Entity eklemek için sol tarafta yer alan ToolBox'ı kullanabiliriz. ToolBox'tan bir tane Entity'i sürükleyip modelimizin üzerine bırakalım. Bu Entity'in adını da kendimize göre kişiselleştiriyor olmalıyız. Gerekli güncellemeleri yapmak için Entity'e sağ tıklayıp properties'i seçelim, özelliklerden Entity'nin adını EntityRehber olarak değiştirelim. Şimdilik EntityRehber adında boş bir Entity sistemde mevcut, bu entity'nin bir adet kimlik niteliğinde bir üyesi olmalı.

Entity'ye yeni bir kimlik yani identifier eklemek için identifiers bölümüne sağ tıkladıktan sonra add new identifier tuşuna tıklayalım. Ardından oluşturulan identifier'ın özelliklerinden Name özelliğini KisiID ve tipini de System.Int32 olarak belirleyelim. 



BDC Modelimizin kimlik niteliğindeki üyesini ekledikten sonra sıra geldi metodlarını oluşturmaya. Entity'nin methods bölümüne tıkladığımızda Visual Studio'da BDC Method Details penceresi görüntüleniyor olacaktır. Method Details penceresi aracılığı ile gerekli olan metodları ekleyebiliriz. Metod tipleri Visual Studio'da önceden tanımlanmıştır ve tek tıklama ile oluşturulabilir. Burada ilk olarak veri getirmek için gerekli olan ReadItem metodunu ekliyor olacağız. Method Details penceresinden Specific Finder Method'u seçerek gerekli methodu oluşturabiliriz.


ReadItem metodu oluşturulduktan sonra sıra geldi geri döndürülecek olan tipi tanımlamaya. Geri döndürülecek olan tip Method Details penceresinde ReadItem'a tıklanıldığında return parametresinde görüntüleniyor olacaktır. Parametreye tıklayıp edit diyerek tipi özelleştirebiliriz.


Edit'e tıkladıktan sonra BDC Explorer penceresi görüntüleniyor olacaktır. Bu pencereden @entityRehber parametresi genişletildikten sonra geri dönecek olan tipe erişilebilir. Bu tipin içinde yer alacak üyelerin tanımlamaları burada yapılmalıdır. EntityRehber'e sağ tıklanıp Add Type Descriptor'a tıklanarak gerekli üyeler eklenebilir. Sırası ile KisiID, Ad, Soyad, Email ve Telefon'u buraya ekliyor olacağız. Bu üyelerden KisiID'nin tipi Int32 diğerleri ise varsayılan yani string olacaktır. KisiID'nin Identifier Entity özelliği EntityRehber (BdcRehberMakale.BdcModelRehber.EntityRehber) ve Identifier özelliği de KisiID olarak atanmış olmalıdır. Bu atamaları yazmak yerine size sunulan seçimlerden seçmelisiniz.

Üyelerin tanımlanmasının ardından EntityRehber'in özelliklerine geçip burada da bir ayarlama yapılması gerekiyor. EntityRehber'in TypeName özelliğini BdcRehberMakale.Kisi, BdcModelRehber olarak ayarlıyoruz. Bunu da yine listeden seçiyoruz.


ReadItem metodu oluşturulduktan sonra sıra geldi diğer metodları oluşturmaya metod oluşturma işlemini yukarıda anlattığımız şekilde yaparak sırası ile Finder, Creator, Updater ve Deleter metodlarımızı oluşturalım. Burada dikkat edilmesi gereken bir şey vardır Visual Studio bir önceki adımda tanımlamış olduğumuz tipi tanıyacak ve bu metodlarda da otomatik olarak gerekli tanımlamalar yapılacaktır.

Metodlar oluşturululmasının ardından sıra çalışacak olan kodları yazmakta... Şu anda arka planda metod tanımlamaları yapıldı ancak doğal olarak içlerine gerekli kodların da yazılması gerekmektedir. BDC Explorer'da EntityRehber'e sağ tıklanıp View Code denildikten sonra metodların tanımlamaları görüntüleniyor olacaktır. Bu tanımlamaları aşağıdaki gibi doldurarak gerekli geliştirmeyi tamamlayabiliriz.

public static Kisi ReadItem(int kisiID)

{
     Kisi k = new Kisi();
     return k.RetrieveByID(kisiID);
}


public static IEnumerable ReadList()
{
     Kisi k = new Kisi();
     return k.RetrieveAll();
}

public static Kisi Create(Kisi newEntityRehber)
{
     Kisi k = new Kisi();
     k.Ad = newEntityRehber.Ad;
     k.Soyad = newEntityRehber.Soyad;
     k.Email = newEntityRehber.Email;
     k.Telefon = newEntityRehber.Telefon;


     k.Create();
     return k;
}


public static void Update(Kisi entityRehber)
{
     Kisi k = new Kisi();
     k.KisiID = entityRehber.KisiID;
     k.Ad = entityRehber.Ad;
     k.Soyad = entityRehber.Soyad;
     k.Email = entityRehber.Email;
     k.Telefon = entityRehber.Telefon;


     k.Update();
}


public static void Delete(int kisiID)
{
     Kisi k = new Kisi();
     k.KisiID = kisiID;


     k.Delete();
}

Geliştirmiş olduğumuz modelin kullanılabilmesi için modelin SharePoint'e gönderilmesi gerekmektedir. Visual Studio 2008 tarafında problem yaşadığımız deployment senaryolarının tamamı Visual Studio 2010'da çözülmüş durumdadır ve projeye sağ tıklandıktan sonra Deploy'a tıklayarak modeli SharePoint'e gönderebiliriz. Deploy işleminin ardından daha önceki postta belirttiğimiz şekilde External List oluşturup kullanmaya başlayabilirsiniz. SharePoint 2007 tarafında oldukça ek geliştirme ile çözebildiğimiz bu durumun SharePoint 2010'da bu kadar kolay bir şekilde çözülüyor olması gerçekten harika...