27 Ocak 2010 Çarşamba

Sharepoint Modal Dialog Box

Sharepoint 2010 ile gelen yeniliklerden bir tanesi de DialogBox'dır.
Dialog Box; Öğenin detaylarını gösterme, güncelleme vs işlemleri gibi birçok işlemi Popup pencere şeklinde açarak ajax desteğiyle daha esnek ve güzel yapıda göstermektedir.
14 klasörü altında \TEMPLATE\LAYOUTS klasöründe bulunan .js dosyalari ile bu işlemi gerçekleştirebiliriz. Oluşturacağımız Dialog Options'a ait
  • width,
  • height,
  • dialogReturnValueCallback,
  • url,
  • x,
  • y,
  • title,
  • allowMaximize,
  • showMaximized,
  • showClose,
  • autoSize
parametrelerine değer atayabiliriz. Bu parametrelerin varolan değerleri bulunduğundan hepsini kullanmamıza gerek bulunmamaktadır.
DialogBox gösterme işlemini yapabilmek için birden fazla yol bulunmaktadır. Ben bunlardan bir tanesi ile yaptığım örneğe aşağıda yer verdikten sonra kısaca anlatacağım.
<script type="text/javascript">
function openDialog(ID, Title) {
function demoCallback(dialogResult, returnValue) {
SP.UI.Notify.addNotification('Haberler!');
SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);
}
var options = {
url: '/sites/adil/Lists/Haberler/DispForm.aspx?ID=' + ID,
title: Title,
allowMaximize: false,
showClose: true,
width: 800,
height: 600,
dialogReturnValueCallback: demoCallback
};
SP.UI.ModalDialog.showModalDialog(options);
}
</script>

<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<a href='' onclick='openDialog(<%# Eval("ID") %>, "<%# Eval("Title") %>");return false;'>
<%# Eval("Title") %></a>
<br />
<%# Eval("Açıklama") %>
</ItemTemplate>
</asp:Repeater>


Oluşturduğumuz VisualWebpart ile "adil" adlı sitenin altındaki "Haberler" Liste'sinden haberleri listeleyip, Haber detaylarını DialogBox ile "url" ve "title" alanı dinamik gösterilecek şekilde oluşturduk.

DialogOptions'ı oluşturup ilgili parametrelere değerlerini atadım.
"SP.UI.Notify.addNotification" ile de DialogBox kapanıp ilgili sayfaya dönüşünde "Operation Successful!" yazısı gibi

"Haberler!" yazısı çıkarttım.


25 Ocak 2010 Pazartesi

InfoPath 2010 ile Sharepoint List Formlarını özelleştirme

Sharepoint 2010 ile gelen yeniliklerden bir tanesi de oluşturduğumuz listeleri MS InfoPath 2010 ile birlikte tasarımı değiştirebiliyor ve rule tanımlayabiliyor olmamızdır.
Gelin resimlerle zenginleştirdiğimiz bir örnek ile detaylandıralım.

Çalışanların Listesinin tutulduğu "Çalışanlar" adlı liste oluşturalım.
Ad, Soyad, Email, Dahili, Mezuniyet fieldlarını oluşturularım.
Görüntü aşağıdaki gibi sade gözükmektedir.

Aşağıdaki ekran görüntüsünde görüleceği üzere Customize Form diyerek InfoPath üzerinden listemiz tasarımında değişiklik yapmaya başlayabiliriz.

İlk anda bu şekildegelen form tasarımımız üzerinden oynamaya başlayabiliriz :)

Page Design sekmesinden InfoPath 2010'un bize sunduğu templatelar arasından sarı renkli olanı seçerek form tasarımımı değiştirdim.

İstersek bütün formumuzu silerek kendi oluşturacağımız tablo üzerine listemize ait olan fieldlerin listelendiği sağ kısımdaki ilgili alanları tablomuz üzerine koyarak kendi tasarımımızı da oluşturabiliriz.

Yaptığımız değişikliklerden sonra File menusü altinda Publish diyerek formumuzun yeni halini yayına sunuyoruz.
InfoPath 2010 ile Rule Tanımlama:

Formda bulunan Email alanına düzgün formatta email adresi yazılıp yazılmadığının kontrolünü yapalım.
InfoPath 2010 Properties sekmesinin altında Add Rule diyerek veya Manage Rules dedikten sonra açilan Rules tabından rule oluşturabilir ve oluşturduğumuz ruleleri yönetibiliriz.
Eklediğimiz Rule'un Condition'una patternlerden emaili seçiyor ve ScreenTip alanına da uyarı mesajımızı yazıyoruz.

Rule tanımladıktan sonra formumuzu tekrar yayınlıyoruz. Email alanı uygun formatta değilse

ekrandaki gibi uyarı mesajı vermektedir.

Channel 9 daki videoyu izlemenizi, Customize a SharePoint List Form ve InfoPath 2010 Customize List diyerek arama yapmanızı tavsiye ederim.


Microsoft.SharePoint.Linq ScopeToFolder

Linq to Sharepoint ile gelen kolaylıklardan bir tanesi de
oluşturduğumuz Listenin itemlarına ve Listenin altındaki klasörlerin içerisindeki itemların hepsini bir arada kolaylıkla getirebilmemizdir.

Microsoft.SharePoint.Linq namespacesi altında ScopeToFolder methoduna göndereceğimiz klasör linki ve recursive parametleri ile bunu kolaylıkla sağlayabilmekteyiz.

Yukarı bahsettiğim konuya ait aşağıda örnek kod parçası bulunmaktadır.

string webUrl = SPContext.Current.Web.Url;
Entities.EntitiesDataContext dataContext = new Entities.EntitiesDataContext(webUrl);

var haberler = from haberListesi in dataContext.Haberler.ScopeToFolder("/sites/adil/Lists/Haberler", true)
select haberListesi;

Repeater1.DataSource = haberler.ToList();
Repeater1.DataBind();

Haberler listemizde subfolderları ile birlikte bütün itemları listelemiş olduk.


12 Ocak 2010 Salı

Linq to Sharepoint, SPMetal


Sharepoint 2010 ile birlikte gelen yeniliklerden birisi olan LinqToSharepoint ile birlikte artık Caml sorgusu yerine Linq sorguları ile verilerimizi çekebileceğiz.
SP2010 öncesinde CodePlex’de proje bulunmaktaydı.

Sorgularımız oluşturmak için 14 klasörü içerisinde bulunan BIN klasöründeki SPMetal.exe den yararlanmaktayız. SPMetal ile oluşturulan kodu projemize ekledikten sonra listelerimize, resim kütüphanelerimize, sayfalarımıza ulaşıp sorgulayabiliriz.

Gelin sade bir örnekle bunu inceleyelim.
Öncelikle haberlerimizin tutulacağı custom list oluşturalım adına “Haberler” diyelim.
Daha sonrasında haber resimlerinin tutulacağı resim kütüphanemizi oluşturalım adına “Haber Resimleri” diyelim
“Haberler” listemize Lookup Field olarak “Haber Resimleri” ekleyelim.
Haberlerin kolonları aşağıdaki gibi olsun
Örnek bir kaç haber girdikten sonra Visual Studio 2010 ile birlikte gelen Visual Web Part ile WebPartımızı geliştirelim.


Proje teması olarak Sharepoint seçeneği altındaki 2010 da bulunan Visaul Web Part seçtikten sonra projemizi deploy edeceğimiz siteyi yazıyoruz.
Projemizi oluşturduktan sonra SPMetal ile Entities kodumuzu oluşturalım.
Bunun için .bat dosyası oluşturmamız gerekmekte ve gerekli parametreleri girmeliyiz.

Set SPMETAL="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN\SPMETAL.EXE"
%SPMETAL% /web:YOURWEBSITE /namespace:Entities /code:Entities.cs

Yukarıdaki komutları not defterine yazıp “SPMetal.bat” olarak kaydedip çalıştırdığımızda Entities.cs olarak kodları oluşturmakta. YOURWEBSITE kısmını siz kendi sitenize göre değiştirmeyi unutmayınız.
Projemizi oluşturup ve Entities.cs’yi ekledikten sonra
böyle bir görüntü elde edeceğiz. Visual Web Partımızın adını HaberlerVisualWp olarak verdiğimizi varsayalım.
ISAPI klasörü altındaki Microsoft.Sharepoint.Linq dllini referans olarak projemize ekliyoruz.
using System.Linq;
using Microsoft.SharePoint.Linq;

namespacelerini ekliyoruz ve ardından linq sorgumuzu yazmaya geçelim.
Kategorisi “Bizden” olan haberleri listeledik. Burada en çok hoşuma giden nokta seçenek tipinde oluşturduğum fieldın seçeneklerinin Intellisense şeklinde kodda yer alması.


Kodumuzu yazdıktan sonra projemize deploy diyerek projemizi oluştururken belirttiğimiz siteye deploy ediyoruz.
İster F5 ile projeyi deploy ediyip yeni sayfa oluştur ister yukarıdaki gibi deploy deyip var olan bir sayfanıza WebPartı eklersiniz.
Deploy dedikten sonra ilgili sayfayı düzenleyip webpartımızı ekliyoruz. Haberler WebPartımız “Custom” altında web partlar içerisinde yerini almaktadır.

SP2007’de olduğu gibi SP2010’da da yardımcı toollar çıkmaya başladı. SPMetal’i görselleştiren .bat dosyası oluşturmanıza gerek kalmayan uygulamaya buradan ulaşabilirsiniz.

LinqToSharepoint de karşılaştığım sıkıntı senkron olmaması. Sharepoint portalımızda değişiklik yaptığımızda örneğin seçeneklere yeni bir seçenek eklediğimizde. Bunu Enitities.cs kodumuza da yansıtmamız gerekir isterseniz kendiniz yazarak ekleyebilirsiniz ama daha sağlıklı olması açısından tekrar SPMetal uygulamasını çalıştırıp kodu güncel hale getirmeliyiz.

Channel9'daki videoyu tavsiye ederim.