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...

Çarşamba, Şubat 02, 2011

TCM'den SharePoint eğitimi hediyeli, Microsoft Office Eğitimi Kampanyası!

TCM, 1 Şubat - 1 Mart 2011 tarihleri arasında düzenlenecek olan Microsoft Office eğitimlerinde, çok özel fiyatların sunulduğu yeni bir kampanya başlatıyor.

Firmanıza özel 3 günlük MS Office sınıf eğitimi alana 1 günlük SharePoint 2007 veya SharePoint 2010 Son kullanıcı sınıf eğitimi veya MS 10174 : Configuring and Managing Microsoft SharePoint 2010 eğitimine 1 kişilik katılımı hediye ediyoruz.


Kampanya detayları için tıklayınız...

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!

Pazartesi, Aralık 13, 2010

Microsoft ve TCM İşbirliğiyle Üniversiteler SharePoint ve Business Intelligence Öğreniyor!

Microsoft Akademik ile gerçekleştirmiş olduğumuz işbirliği çerçevesinde 11 üniversitede SharePoint ve Business Intelligence seminerleri gerçekleştiriyoruz.
Seminer katılımcıları arasından seçilecek 16 kişiye TCM tarafından SharePoint 2010 ve Business Intelligence eğitimi verilecektir. Microsoft tarafından sağlanacak sınav kuponları ile eğitim sonunda katılımcıların sertifika almalarına olanak tanınıp, eğitim katılımcıları iş ve staj yeri bulma konusunda desteklenecektir.
Siz de seminerlerde yerinizi almak için üniversiteniz MSP'lerinin duyurularını takip edin! 

Şu ana kadar seminer programı kesinleşmiş üniversiteler ve seminer saatleri şu şekilde:

Bahçeşehir Üniversitesi
Tarih: 14.12.2010
Saat:  18:30 - 20:30


Yeditepe Üniversitesi
Tarih: 15.12.2010
Saat:  17:00 - 19:00


Yıldız Teknik Üniversitesi
Tarih: 17.12.2010
Saat:  16:00 - 19:00


Sakarya Üniversitesi
Tarih: 23.12.2010
Saat:  14:00 - 17:00


Marmara Üniversitesi
Tarih: 27.12.2010
Saat:  14:00 - 17:00




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.

Cumartesi, Aralık 11, 2010

nedirtv?com - Aralık Ayı Webinerleri

Nedir?Tv.com Aralık Ayı Webinerleri tüm hızıyla devam ediyor, 21 Aralık akşamı ben de Yazılımcılar için SharePoint 2010 yeniliklerini anlatıyor olacağım... Nedir?Tv.com Aralık Ayı Webinerleri'nin genel programı şu şekilde:



Konu: WCF Öğreniyorum-03:Bağlayıcılar(Bindings)
Tarih: 8 Aralık Çarşamba 21:00
Konuşmacı: Burak Selim Şenyurt
Link: http://nedirtv.com/webiner/20

Konu: Microsoft CRM 2011 - Programlama Yenilikleri
Tarih: 14 Aralık Salı 21:00
Konuşmacı: Barış Kanlıca
Link:
http://nedirtv.com/webiner/23

Konu: WCF Öğreniyorum-04:İstemci Tarafını Geliştirmek
Tarih: 15 Aralık Çarşamba 21:00
Konuşmacı: Burak Selim Şenyurt
Link:
http://nedirtv.com/webiner/24

Konu: ASP.NET MVC 3 RC Sürümüne Bakış
Tarih: 17 Aralık Cuma 21:00
Konuşmacı: İbrahim Atay
Link:
http://nedirtv.com/webiner/25

Konu: SharePoint 2010 - Yazılımcılar İçin Yenilikler
Tarih: 21 Aralık Salı 21:00
Konuşmacı: Burak Batur
Link:
http://nedirtv.com/webiner/26

Konu: WCF Öğreniyorum-05:Instance Management
Tarih: 22 Aralık Çarşamba 21:00
Konuşmacı: Burak Selim Şenyurt
Link:
http://nedirtv.com/webiner/28

Konu: Silverlight ve Web Dünyasına Getirdiği Yenilikler
Tarih: 24 Aralık Cuma 21:00
Konuşmacı: Görkem Sezgin
Link:
http://nedirtv.com/webiner/30

Pazartesi, Kasım 08, 2010

Nerede Kalmıştık! Nedir?Tv Kasım Ayı Webinerleri...

Uzunca bir aranın ardından Nedir?Tv Webinerlerine yeniden başlıyoruz!
Yaklaşık bir yıllık aradan sonra yine NedirTv ile sahalara dönüyorum. Daha önce MOSS ile ilgili bilgileri paylaşma fırsatı bulduğum NedirTv'de bu sefer de SharePoint 2010 ile ilgili yenilikler hakkında konuşuyor olacağız. Kasım ayının içerisinde bayram olmasına rağmen 6 farklı konuda sizlerle bir araya geliyoruz.
Webinerlere kayıt olup webiner detaylarına ulaşmak için http://www.facebook.com/home.php?#!/event.php?eid=167616929932997 linkine tıklayabilirsiniz.

Perşembe, Ekim 14, 2010

23 Ekim'de Yazgeliştir Gönüllüleri Toplantısında Görüşelim!

Türkiye’de yazılım geliştirme alanında çalışanların paylaşım noktası olan Yazgeliştir’i takip eden herkesi 23 Ekim Cumartesi günü düzenleyeceğimiz Yazgeliştir Gönüllüleri etkinliğine bekliyoruz. Bu etkinlikte Yazgeliştir editörleri ile tanışıp, Yazgeliştir ile ilgili son gelişmeler ve gelecek planlarından haberdar olacaksınız. Ayrıca Yazgeliştir ekibi olarak görüş ve önerilerinizi dinliyor olacağız.
Tüm bunların yanısıra etkinlikte yazılım geliştirme alanındaki son yenilikler içerikli bir sunum da olacak. Microsoft İstanbul ofisinde saat 13:00’te başlayacak etkinliğimizin program detaylarını aşağıda bulabilirsiniz:

Tarih:
23 Ekim 2010 Cumartesi, 13:00 – 17:00

Program:

  • 13:00 – 14:00 Yazgeliştir yönetimi ile tanışma

  • 14:00 – 15:00 Son gelişmeler ve 2011 planları

  • 15:00 – 15:45 Açık tartışma

  • 16:00 – 16:45 Yazılımcılar İçin Yenilikler – Tamer Öz

    Yer:
    Microsoft İstanbul Ofisi
    Bellevue Residence Levent Mahallesi
    Aydın Sokak. No:7
    Levent,
    34340 İstanbul/Türkiye

    Katılım için lütfen adınızı, soyadınızı yazgelistir@yazgelistir.com adresine mail atınız.
  • Cuma, Ekim 08, 2010

    Türk Telekom ve Microsoft'tan Dev İşbirliği

    Uzun zamandır TCM | Teknoloji Çözümleri Merkezi olarak bizim de yoğun çaba sarf ettiğimiz kampanya bu gün basına duyuruldu. Kampanya kapsamında Türk Telekom KOBİ ve esnaf müşterileri, Microsoft Office Ev ve İş 2010'u Türk Telekom faturalarında 36 ay için aylık 8,99 liraya ve 24 ay için aylık 12,49 liraya satın alabilecekler.

    Office 2010 satın alanlar paketlerin yanında hediye olarak verilen ek uygulamar CD'sine de ücretsiz sahip olabilecekler. CD'de Türk Telekom, Windows 7, Office 2010 ve TTNET İşyerim hakkındaki katalogların yanında Wirofon Outlook Eklentisi ve TCM tarafından geliştirilen Kobi-Soft Müşteri Takip Uygulaması da yer alıyor.

    Kampanyadan yararlanmak için Türk Telekom bayi ve ofislerine uğramanız veya KOBİ Satış Kanalı bayilerinin sizi ziyaret etmesi yeterli olacaktır.

    Kampanya hakkındaki detaylı bilgilere aşağıdaki linklerden erişebilirsiniz:

    Çarşamba, Eylül 29, 2010

    ASP.NET ve SharePoint'teki Güvenlik Açığı İçin Yama Yayınlandı (Microsoft Security Advisory (2416728))

    Daha önceki postlarımızda ASP.NET tarafında doğal olarak SharePoint'i de etkileyen 2416728 kodlu güvenlik açığından bahsedip geçici bir çözüm önerisinde bulunmuştuk. Microsoft bu açığı kapatmak için .NET Framewotk tarafında bir yama yayınladı güvenlik bültenini okumak ve yamayı indirmek için http://www.microsoft.com/technet/security/bulletin/ms10-070.mspx adresini ziyaret edebilirsiniz. 

    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...