Makale Özeti

SharePoint 2010 da List (SPList) ler arası ilişki kurmak için LookUp kolonları kullanabiliriz. Bu sayede ardışıl silme işlemleri ve silmeyi engelleme (cascade and restrict delete) gibi ilişki kısıtlayıcılarla daha efektif çözümler üretebilirken veri bütünlüğünü korumayı da sağlamış oluruz.

Makale

SharePoint 2010 LookUp Columns

SharePoint 2010 da List (SPList) ler arası ilişki kurmak için LookUp kolonları kullanabiliriz. Bu sayede ardışıl silme işlemleri ve silmeyi engelleme (cascade and restrict delete) gibi ilişki kısıtlayıcılarla daha efektif çözümler üretebilirken veri bütünlüğünü korumayı da sağlamış oluruz.

Her e-ticaret sitesinin vazgeçilmezi olan Sipariş ve Sipariş Detay tabloları üzerinden örnekler vererek konuyu anlatmaya çalışacağım.

Orders tablosu basit olarak

  • OrderID (Unique) - Number
  • Title – Single line of text
  • Description – Single line of text
  • Price - Currency

Bu tablomuzu Database tablosunun muadili olan SPList olarak yaratıyoruz. (Site Actions -> More Options -> Create -> List -> Custom List) SPList imize ben “Orders” adını veriyorum. Listemiz yaratıldıktan sonra List Settings e gidip kolonlarımı düzenliyorum. Currency kolonunu seçerken TL-Turkey seçiyorum formatı.

Sipariş detaylarını barındıracak olan OrderItems tablomuz ise

  • OrderItemId (Unique) – Number
  • OrderItemTitle – Single line of text
  • OrderID – LookUp Column
  • OrderTitle – LookUp Column

Şeklinde olacak. Burada fark edileceği üzere, OrderItemId ve OrderItemTitle kolonları OrderItems tablosuna özgü olurken, OrderID ve Order Title kolonları, Orders tablosundaki OrderID ve Title alanlarına referans veriyorlar.

Aynı şekilde OrderItems SPListimizi de yaratalım (Site Actions -> More Options -> Create -> List -> Custom List) ancak bu sefer dikkat edeceğimiz bir kısım var. OrderItemId ve OrderItemTitle kolonlarını Orders SPList ini yaratırken gibi yarattıktan sonra OrderID ve OrderTitle kolonlarının tipini “Lookup (information already on this site)” olarak seçiyoruz. Get information from : Orders ve In this column: OrderID

Bu aşamada relationship kısmından da Enforce relationship behaviour ı aktif ederek “Cascade Delete” i seçiyorum ki, bir sipariş silindiğinde o siparişe ait sipariş detaylarının da sistemden silinmesi sağlanmış olsun. Burada “Restrict Delete” seçerek silme işlemini engellemiş de olabilirsiniz, tamamen sizin ihtiyaçlarınıza ve tercihlerinize kalmış.

Order Title kolonunu da aynı yukarıdaki şekilde Orders tablosundaki Title alanına bağlıyorum.

Cascade Delete ve Restrict Delete olaylarını biraz açarsak,

Cascade Delete ile Orders tablosunda bir kayıt silindiğinde, OrderItems tablosundan da o OrderID ile ilişkili kayıtların silinmesini sağlıyoruz. Cascade delete seçeneği bizi ileride oluşabilecek karışıklardan kurtarır.

Restrict Delete işlemi ise, Orders tablosundaki OrderID ya bağlı OrderItems kayıtları mevcutken, Orders tablosundaki verinin silinmesini engeller.

İki tablo arasındaki ilişkiyi kuran LookUp kolonları aynı zamanda indexli olmak zorundadır. SharePoint 2010 LookUp kolon yarattığınız anda indexini de otomatik olarak yaratır ve sizi de yaratmadan önce uyarır ve kolonlar arası ilişki silinmeden de bu index silinemez. Eğer LookUp kolonu yaratırken “Enforce Relationship” seçilmezse bu silme operasyonu kısıtlamalarına takılmazsınız. LookUp kolonları aynı zamanda birden fazla kolona bağlayabilirsiniz. Kaynak tablodan birden fazla alan seçerek bu çoklu ilişkiyi gerçekleştirebilirsiniz.

Orders listesine birkaç veri girelim

Daha sonra OrderItems tablosuna veri girelim, giriş yaparken artık LookUp kolonlarını girerken göreceğiniz üzere bize bir dropdownlist olarak seçenekler sunulmaktadır.

OrderItems a da birkaç deneme girişi yaptıktan sonra listemiz şu görünümü alıyor.

LookUp kolonlarını yaratırken biz Cascade Delete tipini seçmiştik. Orders tablosundan OrderID si 1 olan kayıt silindiği takdirde OrderItems listesinden de ilgili kayıtların silindiğini göreceksiniz.

Silme işlemi gerçekleşmeden önce aşağıdaki şekilde bir uyarı alacaksınız.

Tekrar OrderItems listemize gidip bakacak olursak

İlgili kayıtların da silindiğini göreceksiniz.