Kullanıcı Kılavuzu

esrefatak edited this page Feb 2, 2015 · 2 revisions

logo-big-blue

  • Dashboard
  • Listeler
  • Site Haritası
  • Dosyalar
  • Eklentiler (Geliştiriciler için)
  • Roller
  • Kullanıcılar
  • Kullanıcı Rolleri
  • Role Atanan Modüller
  • Yönlendirmeler
  • Veri Kaynakları (Geliştiriciler için)
  • Bekleyen işler

Dashboard

Proje kullanıcısının UniGate’e giriş yaptığında karşılaştığı ilk ekrandır. Burada projenin içeriği hakkında genel bilgiler bulunabilir. Örn siteye yapılan yorumlar, kredi başvuruları, iletişim mesajları... gibi bilgileri gösteren bölümdür. Bu genel bilgileri isteğe göre de çoğaltabilirsiniz. Bu genel bilgiler Eklenti geliştirilerek tasarlanabilir. Bunun yanı sıra sonuçları günlük, haftalık ve aylık gibi grafik sonuçlarından da takip edebilirsiniz.

Listeler

Listeler modülü veri tabanınızdaki tablolara denk gelmektedir. Üye listesinden sipariş listesine, sipariş listesinden il listesine, illerden duyurulara, haberlere gibi aklınıza gelebilecek her türlü veriyi depolayıp üzerinde onay mekanizması, versiyonlama, yetkilendirme yapılabilen veri yönetim modülüdür. Bu modülde kayıtlar arasında Filtreleme, Kayıt sayısı görme, Yeni kayıt ve Tablolar arası ilişki gibi işlemler yapılır.

Modül üzerinden bir liste oluşturulduğunda veri tabanı üzerinde ana tablo ve history tablosu olmak üzere iki adet tablo oluşmakta, veri giriş alanları otomatikman tasarlanmakta ve veri girişine hazır hale gelmektedir. Bu noktada önemli nokta ise canlı site sadece ana tablolardan beslenmektedir. History tabloları panel üzerinde ilgili öğelerin tarihçesini tutmak amaçlı kullanılmaktadır. Liste modülü sayesinde geliştiricinin veri tabanı bağımlılığı ortadan kalkmaktadır. Geliştirici tablo oluşturmak ya da var olan bir tablo üzerinde değişiklik yapmak için “SQL Server Management Studio” açmaya gerek duymamaktadır. Yani veri depolamak için bir tablo açma ihtiyacı doğduğunda geliştirici liste oluşturmalıdır. Aşağıda adım adım bir liste nasıl oluşturulur, yetki nasıl verilir, otomatik veri kaynakları nasıl oluşturulur, sütunları, iş akışı nasıl ayarlanır gibi tüm bilgiler bulunmaktadır.

Liste oluştururken karşınıza aşağıdaki gibi bir ekran gelecektir. Ekran üzerinde de görüldüğü gibi liste oluştururken “Genel” ve “İçerik Değişkenleri” olmak üzere iki adet seçenek bulunmaktadır.

Oluşturulacak listeler istisnai bir durum haricinde her zaman “Genel” tipinde oluşturulmalıdır. “İçerik Değişkenleri” tipinde bir listeyi ise sadece ve sadece sistem çapında global değişken tanımlamak için kullanmalıyız. Örneğin site üzerinde telefon numarası, mail adresi, kalan ürün adedi hatta sayfa linkleri bile içerik değişkeni olarak oluşturulabilir. Bu sayede telefon numarası değiştiğinde sadece ilgili değişkenin değerini değiştirerek tüm site üzerinde ilgili değişiklik yapılmış olur.

Liste oluşturulurken hem başlık alanı hem de tablo adı alanı girilmelidir. Başlık alanı takma isim olarak düşünülebilir, daha okunabilir daha anlaşılır olsun diye kullanılmaktadır. Tablo adı ise veri tabanı üzerinde oluşturulan tablonun adı olarak kullanılmaktadır. Veri kaynağı modülü üzerinden veri kaynağı oluşturulurken işlemler tablo adına göre yapılmalıdır.

Başlık: UniGate ekranlarında göreceğiniz isimdir. Örn; Haberler, Ürünler, Duyurular, Bayiler, Üyeler... gibi dilediğiniz ismi verebilirsiniz.

Tablo Adı: Projenizde işlem yaptığınızda kullanacağınız isimdir, kodlarda, veri kaynaklarında... bunu kullanırsınız. Burada dikkat etmeniz gereken veritabanı hazırlarken tablolarda isim belirlediğinizde Türkçe karakter ve Boşluk kullanmama gibi tüm kurallar geçerlidir.

Listeler > Sütunlar

“Id”, “MasterId”, “SiteLanguageId”, “Slug”, “CreatedBy”, “CreateDate”, “UpdatedBy” ve “UpdateDate” sütunları sistem tarafından kullanılmakta olup içerik girilen ekranda kesinlikle görüntülenmeyecek alanlardır. Görüntülenecek alan ise, listenin oluşturulduğu an sadece “Title” dır. Geliştirici ihtiyacına göre listeye yeni bir sütun eklemek istendiğinde karşısına aşağıdaki ekran gelecektir.

Listeler > Sütunlar > Yeni Sütun Ekleme

Sütun Ekle butonuna tıkladığınızda karşınıza yukarıdaki ekran gelecektir. Birazda bu kısmı inceleyelim.

Başlık: Sütunun Kullanıcıya görünen kısmıdır.

Veri Tabanı Alan Adı: Tablonuzda sütun üzerinde işlem yaptığınızda bu kısmı kullanırsınız ve örnek olarak veri tabanı alan adını Comment olarak tanımladığınız bir sütunda aşağıdaki gibi kullanırız;

var news = UnigateObject.Query("News").Column("Image").ToList<News>();

Tip: Sütunda ekleyeceğiniz Verinin hangi tür formatta saklanacağını belirler, bu veri tipi yapacağınız işlemlerde etkili olmaktadır.

Veri Tipleri;

Sütun eklerken seçilebilecek olan tipler aşağıda karşılıklarıyla beraber listelenmiştir.

Tip SQL Server Veri Tiplari
Kullanıcı int
Tam Sayı int
Tarih ve Saat DateTime
Saat nvarchar(5)
Ondalıklı Numeric(18,2)
Tek Satırlı Metin nvarchar(Size)
Uzun HTML nvarchar(Size)
kısa HTML nvarchar(Size)
Dosya nvarchar(Size)
Çok Satırlı metin nvarchar(Size)
Tarih DateTime
Evet /Hayır bit

Çok Satırlı Metin: Text tipindeki uzun yazılar için kullanılır.Örn:SQL Server’da Text tipi gibi.

Tek Satırlı Metin: Text tipindeki kısa yazılar için kullanılır.Min. ve Max. olarak karakter kısıtlaması vardır.Örn: Ad, Soyad, Şifre vb.

Tarih: Sistemde Date gibi türlerin saklandığı değişken tipidir.Örn: Kayıt Tarihi vb.

Tarih ve Saat: Sistemde DateTime gibi türlerin saklandığı değişken tipidir.Örn: Kayıt Tarihi ve Saati vb.

Parola: Sistemde String tipinde şifreleri saklamak için kullanılır. UniGate’ in bize sağladığı güvenlik açısından önemini artıran bir tiptir. UniGate ara yüzünde kullanıcıların parola amaçlı girdikleri text bölümünün " * " gibi karakterle görünmesini sağlar.

Ondalık: SQL Server’daki Decimal türüne denk gelen ondalık sayılardır.

Tam Sayı: SQL Server’daki İnt türüne denk gelen bütün tam sayılarıdır.

Saat: Sistemde Time gibi türlerin saklandığı değişken tipidir. Örn: Kayıt Saati vb.

Kısa HTML: Html kodlarını içinde barındırırken normal yazı, resim ve dosya gibi nesneleri Html kodları biçimde saklayan alandır. Örn: Kısa alanlarda kullandığımız Title, İcon gibi nesnelerde kullanılır.

Uzun HTML: Html kodlarını içinde barındırırken normal yazı, resim ve dosya gibi nesneleri Html kodları biçimde saklayan alandır. Örn: Sayfalarda belirleyeceğiniz uzun alanlarda belirtilir.

Evet/Hayır: SQL Server’daki bit türüne denk gelen ve karar verme gibi işlemler için kullanılır.

Dosya: Zip, Rar ve JPEG vb. dosyaları sistemde depolamak amaçlı kullanılan tip türüdür. UniGate bu dosyaları kendi dizininde bulunan Documents klasöründe saklamaktadır. Bu alana ise sakladığı dosyanın Url’sini barındırır.

Tekil Olmalıdır: Aynı kayıttan birden fazla olmamasını sağlar listenizde TC kimlik numarası gibi her kayıtta farklı olması gereken veriler için kullanılır.

İçerik Listesinde Görünsün: UniGate’te kullanıcı kayıt girişi yaptıktan sonra kaydınızdaki sütunun kayıt listesinde görünüp görünmeyeceğini belirler.

Sıra Numarası: Sütununuzun listedeki kaçıncı sırada olacağını belirler.

GELİŞTİRİCİLER İÇİN: Sıra numarası ile ilgili sütunun veri giriş ekranlarında kaçıncı sırada görüntüleneceği ayarlanabilmekte, varsayılan Insert ve Update değerleri ile ilgili işlemde sütuna varsayılan değer olarak ne atanacağı belirtilebilmektedir. Varsayılan değer olarak “User.Id” gibi kodsal işlemler dahi yapılabilmektedir.

Önemli nokta: Bir sütunun slug gibi çalışması isteniyorsa yapılması gerekenler:

  • İlgili sütun metin türünde açılmalı,
  • Otomatik tekilleştir seçeneği seçilmeli,
  • Doldurulması zorunludur seçeneği seçilmeli,
  • Hem “Varsayılan Insert Değeri” hem de “Varsayılan Update Değeri” kısımlarına “ConvertHelper.ConvertToFriendlyUrl(ContentHelper.GetCurrentColumn('Title'))” yazılmalıdır.

Yukarıda bahsedilen dört adım takip edilip “Kaydet” butonuna basıldıktan sonra, sütun bilgileri “temp” (geçici) olarak tutulur ta ki aşağıda ki “Uygula” butonu tıklanana kadar. “Uygula” butonu tıklandıktan sonra veri tabanı üzerinde gerekli işlemler yapılır ve artık ilgili liste girilmiş olan sütun bilgi ya da bilgilerine göre güncellenir.

Dosya yükleme imkanı veren bir sütun eklemek istiyorsanız "File" tipini kullanabilirsiniz. Veritabanına depolansın seçeneğini seçerek dilerseniz dosyaları disk yerine veritabanına depolayabilirsiniz.

Önemli nokta: “Uygula” butonu tıklanmadan çıkılırsa yapılan işlemler geçersiz sayılmaktadır.

Listeler > Yetkiler

Sistemde “Okuma”, “Değiştirme” ve “Silme” olmak üzere üç farklı yetki tipi vardır. Var olan yetkiler rol bazlı her bir listeye ayrı ayrı verilebilmektedir. İçerik oluşturabilmek için verilen yetkinin yanı sıra herhangi bir listeye ait içerik oluşturabilmek için kullanıcının ait olduğu rol grubunun iş akışında ilk sırada olması gerekmektedir.

Listeler > İş Akışı

Bir listeye ait içeriğin hangi aşamalardan geçerek yayına alınacağının belirlendiği modüldür. Veri ekleme, güncelleme ve silme işlemi yapılırken ilgili tablo bir listeyse iş akışına tabi tutulacak eğer değilse doğrudan işlem yapılacaktır. İş akışı belirlemek için ilgili listeye girilir ve “İş Akışı” butonu tıklanarak modüle giriş yapılır. Aşağıda iş akışı modülünün ekran görüntüsünü görebilirsiniz. Örneğin listeye sıra numarası "1" olan ikinci bir satır eklerseniz, Admin onayladıktan sonra içerik ikinci rolün/kişinin onayına düşer. İkinci rol onayladıktan sonra canlıya çıkar, aksi durumda canlıya çıkmaz.

Listeler > İlişkiler

Listeler arası ilişkilerin kurulduğu modüldür. Örneğin arabaların isimlerini kaydederken marka seçtirmek istiyorsanız marka listesi ile araba listesini ilişkilendirmeniz gerekir. Böylece kişi arabanın bilgilerini girerken marka seçmesini ister sistem.

İlişki kurmak için “Otomobil” listesine girildikten sonra “İlişkiler” butonu tıklanır. Geliştiricinin karşısına gelen ekranda ilgili listedeki hangi sütunun hangi liste ile ilişkilendirileceği seçilir. Aşağıdaki örnekte “Otomobil” listesine “Marka” aşağıdaki gibi ilişkilendirilmiştir.

İlişki kurulduktan sonra en önemli noktalardan bir tanesi veri giriş ekranının ilişki kurmaya hazır olarak oluşturulmasıdır. Aşağıda “Otomobil” listesine içerik girmek için açılan ekranı görebilirsiniz.

Görüldüğü üzere aşağıdaki gibi ilişkilendirilmiş olan listelere ait alanlar “combobox” olarak oluşturulmuştur. Bu sayede ilişkili olan listede seçilecek olan değer geliştirici karşısına aşağıdaki gibi gelmektedir.

Listeler > Veri Kaynağı

Geliştirici isterse oluşturduğu liste için “Select”, “Insert”, “Update” ve “Delete” sorgularını otomatikman oluşturabilmektedir. Bunun için ilgili listeyi açıp, “Veri Kaynağı Oluşturma” sekmesinde bulunan butonlardan istediğine basması kâfidir.

Listeler > İçerikleri Dışarı Aktarma (Export)

Sistem üzerinde toplanan verilerin raporlanması, dışarı aktarılıp üçünü parti yazılımlara

eklenmesi, ya da mobil geliştiricilere verilere erişim kaynağı sağlanması için verileri dışa aktar özelliği kullanılmalıdır. Sistem üzerinde üç farklı formatta çıktı alınabilmektedir.

• Excel

• CSV (Comma Seperated Values)

• JSON (JavaScript Object Notation)

Verileri dışarı aktarabilmek için “Veri Kaynağı” modülü üzerinden işlem yapılmaktadır. Burada önemli nokta sadece ve sadece “Veri Okuma” veri kaynaklarında verilerin dışarı aktarılabileceğidir.

Verileri Dışarı Aktar

Yukarıdaki ekran görüntüsünde görüldüğü üzere “Dışa Aktar” kolonunda sadece ve sadece veri okunabilecek veri kaynaklarında “Dışa Aktar” butonları aktiftir. Excel butonuna basılarak veri kaynağının çektiği tüm verileri Excel dokümanı olarak aşağıda ki gibi bilgisayara indirmek mümkündür.

Verileri Dışarı Aktar - Excel (I)

Verileri Dışarı Aktar - Excel (II)

İlgili sonuçlar Excel butonuna basılarak bilgisayara indirilebileceği gibi CSV butonuna basılarak da CSV formatında bilgisayara indirilebilir. CSV formatında indirilen dosyanın asıl amacı herhangi bir üçüncü parti yazılıma sistemden alınan verilerin eklenebilmesi (import edilebilmesi) dir.

Verileri Dışarı Aktar - CSV

Herhangi bir yazılımcının kodlara ya da veri tabanına erişmeksizin sadece verilere erişebilmesini sağlayabilmek için JSON formatta verileri dışarı aktarmak ya da ilgili modüle yetki vererek aktarabilmesini sağlamak mümkündür. Aşağıdaki örnekte loğların JSON formatta çıktısı alınmıştır.

Verileri Dışarı Aktar - JSON

Görüldüğü gibi verileri dışarı aktarmak bir o kadar kolaydır. JSON format kendine has yapısından ötürü kullanıcıya karışık gelebilir bu noktada URL üzerinden gönderilecek ek birkaç parametre ile sonuçları düzenlemek mümkündür. “Indent” parametresi ile peşi sıra eklenen veriler aşağıdaki şekilde düzelecektir.

Verileri Dışarı Aktar - JSON - Indent Parametesi

Tarih içeren herhangi bir sonuç listesinde tarih formatı “DateTimeFormat” parametresi ile değiştirilebilir. Alternatif tarih formatlarını http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx linkinden bulmak mümkündür.

Site Haritası

Site üzerinde var olan tüm sayfaları dil bazlı olarak görüntüleyen modüldür. Görüntüsü ise aşağıdaki resimde mevcuttur.

Seçili sayfa şekildeki gibi özellikleri sağ tarafta görünmektedir. Bu özellikleri ele alacak olursak aşağıdaki gibi sıralayabiliriz;

Başlık: Sayfamızın kullanıcıya listede görüneceği isimdir.

Adres: Sitenizin Adres çubuğunda URL’sini belirler sayfanız bir başka sayfanın alt sayfası ise alt sayfa isimlerini otomatik olarak alır.

Şablon: .NET MVC deki Layout mantığını belirler site üzerinde birden çok sayfada kullanacağınız tasarım ve şablonu tek bir seferde belirleyerek bu seçenekten istediğiniz sayfaya uygulayabilirsiniz.

Dosyalar

Bu bölüm sitenizin içinde barınan dosyalardır. Bunu bir örnek üzerinden inceleyelim. Öncelikle Listeler bölümünde bir listenizin olduğunu düşünün ve listenizin içinde de bulunan Onay, Resim, Başlık gibi sütunlar olduğunu varsayın. Bu sütunlar içinde bulunan Resim bölümünü seçtikten sonra sol üst köşede bulunan Ayarlar butonuna tıkladığınızda gelen ekranda Sütunlar sekmesi bulunur. Oradan Resim sütununun tipini dosya/disk olarak ayarlamanız halinde bu sütun dosyalar kısmına eklenir ve Dosyalar kısmında da Listeler adı altında bulunan listenin içinde bulunur.

Eklentiler

Sisteme yeni özellikler eklenmesi ve aynı zamanda müşterilerin isteklerine uygun olarak sistemi şekillendirebilmek eklenti ve genişletme özellikleri sayesinde kolaylıkla gerçekleştirilebilmektedir. Bu sayede müşterilerin isteklerine hızlı ve özelleştirilebilir cevaplar vermek mümkündür. Sistemin çekirdek yapısı sabit kalacak şekilde eklenti ve genişletme özellikleri sayesinde geliştirici her türlü ihtiyaca yönelik geliştirim yapabilmektedir. Sosyal medya entegrasyonundan, anket modülüne, anket modülünden etkinlik takvimine, etkinlik takviminden e‐ticaret sistemine kadar her türlü geliştirim eklenti ve genişletme şeklinde yapılıp sisteme entegre edilebilmektedir.

Yukarıdaki resimde projenizde var olan Eklentiler bulunmaktadır. Silme, Değiştirme ve Yeni Eklenti Ekleme gibi işlemleri de yapabilirsiniz.

Yeni Eklenti ekleyeceğimiz vakit daha önceden hazırlamış olduğunuz Eklenti’leri buradan projemize dahil edebilirsiniz. Eklentinin nasıl kodlandığını "Proje Geliştirme" dokümanında bulabilirsiniz. En temel hatlarıyla değinmek gerekirse; aslında UniGate eklenti normal bir MVC Application'dan farklı değildir. Solution ve Project'te yapılması gereken birkaç ufak ayar mevcut. Bunları otomatik olarak yapan bir Visual Studio template ile geliştirmeye hemen başlayabilirsiniz.

Yeni Eklenti Ekleme Penceresi

Var olan Eklenti’i sayfada özellik olarak eklemek istediğimizde sayfanın sağ alt köşesinde bulunan Unigate Eklenti ayar penceresindeki eklenti ekle butonuna tıklanarak karşınıza çıkan pencereden Eklenti eklenelebilir. Aşağıdaki resim gibi

Pozisyon: Eklenti’in sayfa içerisinde nereye geleceğini belirler bu yeri şablonu tasarlanırken @Html.FrontHtml().Position("Banner") kodu ile belirlenir. Bu alanı şablon konusunda detaylı bir biçimde anlatılmaktadır.

Plugin: Sayfaya ekleyeceği Eklenti’e belirler.

Controller: Eklenti içinde bulunan Controllar’den hangisinin kullanacağını belirler.

Action: Seçilen Control'un içinde barınan ve çalışmasını istenilen Action metodunu belirler.

Roller

Sistemde tanımlanacak kullanıcıların “Admin”, “Editör”, “Finans Yönetimi” vb. şeklinde gruplandırılabileceği modüldür. Sistem kurulduğu vakit Admin rolü otomatik olarak gelmektedir. Roller modülü üzerinden iki adet işlem yapılabilmektedir.

  1. Rol Oluşturma (Yeni Ekle)
  2. Düzenleme, Yayından kaldırma

Roller hakkında ayar yapmak için istediğiniz rol seçili iken üst tarafta bulunan ayar butonuna tıklanır ve ardından rollere ait bir liste modülü gelmektedir. Burada role ait ayarlar yapılır.

Kullanıcılar

Sisteme giriş yapmak için oluşturulan kullanıcı modülüdür. Yeni ekle butonu tıklanarak yeni kullanıcı eklenir.

Kullanıcı için Şifre, E-Posta, İsim ve Kullanıcı Adını belirledikten sonra oluşturulur ve ardından aktif edilmediği takdirde kullanıcı sisteme giriş yapamaz.

Kullanıcı Rolleri

Sisteme giriş yapan kullanıcıların rolleri bu modül üzerinden atanır. Yeni ekleme veya ekli işlem üzerinde değişiklik yapacağınız vakit aşağıdaki ekran karşımıza gelir.

Kullanıcı: Sisteme giriş yapan kullanıcı belirlenir.

Rol: Roller sekmesinde belirlediğiniz rollerden kullanıcıya atanan rol belirlenir.

Site: Belirlenen kullanıcının belirlenen roldeki işlevselliği hangi site üzerinde aktif olacağı belirlenir.

Title: Atama yaptığınız işleme ait başlık belirlenir.

Role Atanan Modüller

Modüller kısmında eklemiş olduğunuz menülerin UniGate içerisinde hangi kullanıcının hangi bölüm hakkında söz sahibi olduğunu belirlendiği kısımdır. Modüller bölümün de anlatmış olduğumuz Ekleme, Silme ve Güncelleme esasları burada da geçerlidir.

Yönlendirmeler

Sitenizde belirlemiş olduğunuz Menülerin adres olarak hangi linke yönlendireceğinizi gösteren kısımdır.Daha önce size verilen bir örnekte üstüne tıkladığınızda ise sağ tarafta gelen Düzenle kısmından ayarlamaları yapabilirsiniz.

Veri Kaynakları

Bu modül UniGate’te geliştiricilere hitap etmektedir.

Geliştiricinin kendisinin ya da bir başkasının oluşturduğu listelerden veri çekmesi, listelere veri eklemesi, güncellemesi ve hata silmesi için JSON Query kodunu kullanarak yazacağı JSON tabanlı veri erişim yönetimidir.

Veri kaynağı oluşturmak çok basittir ve aşağıdakinden ibarettir:

veri kaynagi

Veri kaynağını kolayca oluşturulduktan sonra REST/JSON yöntemiyle URL'ini yazarak anında veri okumaya/yazmaya başlayabilirsiniz:

rest

Listeler modülünde de açıklandığı gibi geliştirici isterse oluşturduğu liste için “Select”, “Insert”, “Update” ve “Delete” sorgularını otomatik olarak oluşturabilir.Bunun için ilgili listeyi açıp, “Veri Kaynağı” sekmesinde bulunan butonlardan istediğini basıp gerçekleştirmesi mümkündür.

En önemli özelliklerinden biri de UniGate ekranlarından veri kaynağı oluşturmanıza gerek kalmadan direkt olarak C# koduyla veri okuyup yazabilirsiniz. Dokümandaki Kod Örnekleri bölümünde bu konuda çokca kod bulabilirsiniz.

Bir veri kaynağı “Select”, “Insert”, “Update” ve “Delete” olmak üzere dört farklı türde, farklı hizmetlere yönelik yazılabilir. Hangi türde veri kaynağı kullanılacağını belirtmek için JSON notasyon içerisinde “Action” anahtar kelimesi kullanılmalıdır.

{
  "Action": "select"
}

Örnek Kod: Action Anahtar Kelimesi

Hangi veri kaynağı işleminin yapılacağı “Action” anahtar kelimesi ile bildirdikten sonra hangi liste ya da listeler üzerinde yapılacağını belirtmek için “Lists” ve “Name” anahtar kelimeleri kullanılmalıdır. “Lists“ anahtar kelimesi ile sisteme listeleri bildireceğimizi belirtirken, “Name” anahtar kelimesi ile de hangi liste ya da listelerin üzerinde işlem yapacağımızı belirtiyoruz. Aşağıdaki örnekte Newsletter listesinden tüm kolonlar ile birlikte veriler çekilmektedir.

{
 "Action": "select",
 "Lists": [ { "Name": "Newsletter" } ]
}

Örnek Kod : Lists ve Name Anahtar Kelimeleri – Select (I)

Birden fazla liste üzerinde işlem yapılacak ise yazılması gereken kod parçası aşağıdaki gibi olacaktır.

{ 
 "Action": "select",
 "Lists": [
      {
         "Name": "News"
      }, 
      {
         "Name": "NewsType",
         "On": "NewsType.Id = News.NewsTypeId",    
         "JoinType": "LEFT"
      }
 ]   
}

Örnek Kod: Birden Fazla Liste İlişkilendirme - Join

“Örnek Kod 3” te görüldüğü gibi ikinci bir liste ile ilişkilendirme yapılması gerektiğinde, “Name” anahtar kelimesi ile yeni liste ekleniyor. “On” anahtar kelimesi ile listeler arasında hangi sütunlar vasıtasıyla ilişkilendirme yapılacağı, “Join Type” ile de ne türde bir birleştirme yapılacağı - “LEFT”, “INNER” ya da “FROM” belirteçleri ile - belirtilmektedir.

Veri kaynağı modülünde JSON notasyonu ile istenen kod yazıldıktan sonra, aşağıdaki ekran görüntüsünde görebileceğiniz çalıştır butonuna basarak sorguyu çalıştırabilir ve sonucu görebilirsiniz. Burada dikkat edilmesi gereken nokta eğer insert, delete ya da update gibi işlemler yapan veri kaynağı hazırlayıp çalıştır butonuna basarsanız gerçekten bu işlemin çalışıp ilgili listeye insert, update ya da delete yapacağıdır.

“Örnek Kod 2” deki kullanım ile aşağıdaki kullanım birebir aynıdır, “JoinType” verilmediği zaman default olarak “FROM” işlemi yapılmaktadır.

{
    "Action": "select",
    "Lists": [ { "Name": "Newsletter"} ]
}

Örnek Kod: Lists ve Name Anahtar Kelimeleri – Select (II)

Yukarıdaki örneklerde bir veya birden fazla listeden tüm sütunların nasıl çekileceği gösterilmiştir. Gerçek hayatta tüm sütunları döndürmek çoğu zaman istenilen bir durum değildir. İhtiyaca göre belli sütunlar çekmek gerekebilir. Örneğin Newsletter listesinden sadece “Email”, “NameSurname” ve “Company” sütunlarını yani kolonlarını çeken veri kaynağı yazılmak istendiğinde kullanılması gereken anahtar kelime “Columns”, isimleri belirtmek için ise “Name” dir.

{
    "Action": "select",
    "Lists": [
        {"Name": "Newsletter"}
    ],
    "Columns": [
        {"Name": "Newsletter.Email"},
        {"Name": "Newsletter.NameSurname"},
        {"Name": "Newsletter.Company"}
    ]
}

Örnek Kod : Belli Kolonları Çekmek

Geliştiricinin sorgularda belli bir sütuna göre sıralama yapma ihtiyacını karşılamak üzere kullanılması gereken anahtar kelime “Sorting”, hangi sütun üzerinde sıralama işlemi yapacağını belirtmek için “Column”, hangi yöne sıralama işlemi yapacağını belirtmek için ise “Direction” dır. Hangi yöne sıralama yapılacağı belirtilirken klasik sorgu yazımında olduğu gibi “DESC” (azalan sırada) ve “ASC” (artan sırada) olmak üzere iki ayrı alternatif söz konusudur.

{
   "Action": "select",
   "Lists": [
   { "Name": "Newsletter" } ],
   "Columns": [ 
     { "Name": "Newsletter.Email" },
     { "Name": "Newsletter.NameSurname" },
     { "Name": "Newsletter.Company" }
   ],
     "Sorting": [{
     "Column": "Newsletter.CreateDate",
     "Direction": "DESC"
    }]
}

Örnek Kod : Sorgu Üzerinde Sıralama - Sorting

Yazılan tüm sorgular aksi belirtilmediği sürece ilk 1000 satırı geri döndürecek şekilde yorumlanmaktadır. Aksini belirtmek için “Limit” anahtar kelimesi kullanılmaktadır. Aşağıdaki sorgu üzerinde Newsletter listesinden tüm sütunlar ve ilk 40 kayıt çekilmiştir.

{
   "Action": "select",
   "Lists": [ 
   { "Name": "Newsletter" } ],
   "Limit" : "40"
}

Örnek Kod : Belirli Sayıda Kayıt Çekmek - Limit

“Örnek Kod 7” ya kadarki tüm örneklerde herhangi bir koşula bakılmaksınız “select” işlemi yapılmıştır. Veri kaynağı yazarken koşul vermek istenirse, kullanılması gereken anahtar kelime “Filters”, hangi sütun üzerinde işlem yapılacağını belirtmek için “Column”, hangi kritere uyacağını belirtmek için “Criteria” ve değer verebilmek için ise “Value” anahtar kelimesidir. Burada önemli olan noktalardan bir tanesi veri kaynağına parametre gönderilecek olmasıdır. Bir veri kaynağı kendisine parametre olarak gönderilen değerleri çekebilmesi için “$ $” işaretleri arasında belirtilmiş olan değişken isimlerine göre işlem yapar.

{   
  "Action": "select",    
  "Lists": [     
    { "Name": "Newsletter" } ],   
     "Columns": [   
    { "Name": "Newsletter.Id" },
    { "Name": "Newsletter.Email" },   
    { "Name": "Newsletter.NameSurname" },   
    { "Name": "Newsletter.Company" }  
 ],  

 "Filters": [  
 {    
 "Column": "Newsletter.Email", 
 "Criteria": "=",    
 "Value": "$Email$"    
 }    
   ],  
 "Sorting": [
{  
 "Column": "Newsletter.Id", 
 "Direction": "DESC" 
 }
   ], 
 "Limit" : "40" 
}

Örnek Kod : Koşul Kullanmak - Filters

“Örnek Kod 8” üzerinde “Email” değişkeni tanımlanmıştır.

Ekran görüntüsünde de görebileceğiniz gibi “Örnek Kod 8” de yazılmış olan sorgu çalıştırılmış ve varsayılan değer olarak atanmış mail adresine göre filtreleme işlemi gerçekleştirilmiştir. Sorgulama yaparken benzersiz kayıtlar listelenmek istendiğinde “Distinct” anahtar kelimesi kullanılmalıdır. Distinct işlemi ile tekrarlanan kolonlar sadece bir kere listelenecektir. “Distinct” anahtar kelimesini kullanarak sorgulama yapmak için aşağıdaki gibi sorgu yazılmalıdır.

{    
  "Action": "select",  
  "Distinct":1,    
  "Lists":
 [     
  { "Name": "Newsletter" }
 ], 
 "Limit" : "10" 
}

Örnek Kod : Benzersiz Kayıt Çekmek - Distinct

Geliştirici sorgulama yaparken sayfalama özelliği kullanmak isterse kullanılması gereken anahtar kelime “Paging”, sayfada kaç tane veri olacağını belirtmek için “PageItems” ve hangi sayfada bulunulduğunun belirtilmesi için “PageIndex” anahtar kelimelerini kullanmalıdır.

{  
  "Action": "select",    
  "Lists": 
 [   
  { "Name": "Newsletter" }
 ],  
  "Columns":
 [ 
  { "Name": "Newsletter.Id" },  
  { "Name": "Newsletter.Email" },
  { "Name": "Newsletter.NameSurname" },
  { "Name": "Newsletter.Company" } 
 ],
 "Filters": 
 [
  {    
    "Column": "Newsletter.Email",
    "Criteria": "=",
    "Value": "$Email$"
   } 
 ],  
    "Sorting": 
 [
  {
   "Column": "Newsletter.Id",
   "Direction": "DESC" 
  }
 ],
   "Paging":
  {
   "PageItems": 20,
   "PageIndex": "$Sayfa$"
  },
   "Limit": "40" 
 }

Örnek Kod : Sayfalama - Paging

Veri Kaynağı Modülü Sayfalama Veri kaynağı oluştururken ya da güncellerken geliştiricinin “Cache Süresi” ve “Key” olmak üzere iki önemli noktaya daha dikkat etmesi gerekmektedir. Veri Kaynağı Cache Süresi ve Key Cache süresi yukarıdaki ekran görüntüsünden de anlaşılacağı üzere saniye cinsinden verilmektedir. Herhangi bir veri kaynağına (sadece “Select” türünde) cache süresi verildiğinde sorgunun çektiği veriler girilen süre boyunca cache den gelecektir.

Diğer bir önemli nokta ise; sistem tarafından üretilen “Key”, ilgili veri kaynağına kod içerisinden ulaşabilmek için kullanılacak olan benzersiz değerdir, ayrıca elle herhangi bir text ifade de verilebilir.

Veri kaynağı “Key” değeri atanırken dikkate edilmesi gereken nokta ilgili veri kaynağının tipidir. Doğru olan kullanım şekli aşağıdaki gibidir.

“System” Veri Kaynakları: Elle “Key” değeri girilebilir. Sistem çapında hızlıca kullanılması sağlanır. Örneğin: Log ekleme işlemi sistem veri kaynağı olarak nitelendirilebilir ve bu nedenle key olarak “InsertLog” gibi anlamlı bir değer atanabilir.

“User Defined” Veri Kaynakları: Sistem veri kaynağı haricinde herhangi bir veri kaynağı oluşturulurken otomatik olarak atanan “Key” değeri kullanılmalıdır. Örneğin: Anket katılımını sağlayacak olan veri kaynağı kullanıcı tanımlı olarak nitelendirilebilir ve bu nedenle “Key” değere dokunmadan işlem yapılması önerilmektedir. (E04F1B0A-4355-1DBF-5125-0A502EF05BD0)

Bu noktaya kadar veri kaynağında yapılan tüm işlemlerde “Action” olarak “Select” yani veri okuma işlemi yapıldı ve veri kaynağı modülünün nasıl kullanılması gerektiği detaylı olarak anlatıldı. Veri kaynağı modülü kullanılarak veri ekleme, güncelleme ve silme işlemleri de kolaylıkla yapılabilmektedir. Aşağıdaki örnekler sırasıyla “Insert”, “Update”, “Delete” ve “Select” sorgularına yönelik hazırlanmıştır.

Veri Ekleme – Güncelleme – Silme ve Okuma Örnekleri

Veri ekleme işlemi yapılırken “Action” anahtar kelimesi “insert” olarak belirtilmeli, listeye eklenecek olan alanlar “Columns” anahtar kelimesi ile, hangi listeye verinin ekleneceği ise “Lists” anahtar kelimesi kullanılarak aşağıdaki gibi belirtilmelidir.

Örnek : Log listesine kayıt ekleme işlemi (Insert)

{ 
  "Action": "insert",
  "Columns":
 [ 
  { "Name": "ApplicationServer", "Value": "$ApplicationServer$" },
  { "Name": "ApplicationName", "Value": "$ApplicationName$" }, 
  { "Name": "ServiceIp", "Value": "$ServiceIp$" },
  { "Name": "ServiceConsumerIp", "Value": "$ServiceConsumerIp$" },
  { "Name": "ServiceConsumerHostName", "Value": "$ServiceConsumerHostName$" },
  { "Name": "UserName", "Value": "$UserName$" },   
  { "Name": "TargetResource", "Value": "$TargetResource$" },  
  { "Name": "UserIp", "Value": "$UserIp$" },
  { "Name": "UserHostName", "Value": "$UserHostName$" },   
  { "Name": "EventCode", "Value": "$EventCode$" }, 
  { "Name": "EventDetails", "Value": "$EventDetails$" },
  { "Name": "Type", "Value": "$Type$" }
 ],    
  "Lists": [ { "Name": "Log" } 
 ]
}

Örnek Kod : Veri Eklemek - Insert (I)

Örnek : SurveyAttendace listesine veri ekleme işlemi (anket katılım) (Insert)

{
  "Action": "insert",
  "Columns": 
 [
  {
    "Name": "RecordDate", "Value": "$RecordDate$"
  },
  {
   "Name": "Ip", "Value": "$Ip$"
  },
  {  
    "Name": "SurveyOptionId", "Value": "$SurveyOptionId$"
  }   
 ],
   "Lists": [ { "Name": "SurveyAttendance" } 
 ]  
}

Örnek Kod : Veri Eklemek - Insert (II)

Veri güncelleme işlemi yapılırken “Action” anahtar kelimesi “update” olarak belirtilmeli, listede güncellenecek olan alanlar “Columns” anahtar kelimesiyle, hangi listede verinin güncelleneceği ise “Lists” anahtar kelimesiyle aşağıdaki gibi belirtilmelidir. İlgili listede hangi koşulda verilerin güncelleneceğini belirtmek için ise “Filters” anahtar kelimesi belirtilmelidir.

Örnek : Kullanıcı bilgileri güncelleme (Update)

{    
  "Action": "update",
  "Columns":
  [
 { "Name": "FullName", "Value": "$FullName$" },    
 { "Name": "FirstName", "Value": "$FirstName$" },    
 { "Name": "LastName", "Value": "$LastName$" },    
 { "Name": "UserName", "Value": "$UserName$" },    
 { "Name": "Password", "Value": "$Password$" },    
 { "Name": "Email", "Value": "$Email$" },  
 { "Name": "RoleId", "Value": "$RoleId$" }, 
 { "Name": "IsActive", "Value": "$IsActive$" },
 { "Name": "IsLDAPUser", "Value": "$IsLDAPUser$" } 
  ],
 "Lists": 
  [   
   { "Name": "[User]" } 
  ],
  "Filters": 
  [ 
    {     
      "Column": "[User].Id", 
      "Criteria": "=",
      "Value": "$UserId$"
    }
  ]
}

Örnek Kod : Veri Güncellemek - Update (I)

Örnek : Etkinlik bilgileri güncelleme (Update)

{ 
  "Action":"update", 
  "Columns":
 [
   {"Name":"Title","Value":"$Title$"},
   {"Name":"StartTime","Value":"$StartTime$"},
   {"Name":"EndTime","Value":"$EndTime$"},
   {"Name":"IsAllDay","Value":"$IsAllDay$"},    
   {"Name":"StartTimezone","Value":"$StartTimezone$"},     
   {"Name":"EndTimezone","Value":"$EndTimezone$"},
   {"Name":"RecurrenceException","Value":"$RecurrenceException$"},
   {"Name":"RecurrenceRule","Value":"$RecurrenceRule$"},   
   {"Name":"CreatedBy","Value":"$CreatedBy$"}, 
   {"Name":"CreateDate","Value":"$CreateDate$"},
   {"Name":"UpdatedBy","Value":"$UpdatedBy$"},  
   {"Name":"UpdateDate","Value":"$UpdateDate$"}
 ],    
  "Lists":
 [
   {"Name":"Schedule"}
 ],    
  "Filters":
 [
  {    
    "Column":"[Schedule].Id",
    "Criteria":"=",   
    "Value":"$Id$" 
  }    
 ] 
}

Örnek Kod : Veri Güncellemek - Update (II)

Veri silme işlemi yapılırken “Action” anahtar kelimesi “delete” olarak belirtilmeli, hangi listede verinin silineceği ise “Lists” anahtar kelimesi kullanılarak aşağıdaki gibi belirtilmelidir. Ayrıca ilgili listede hangi koşulda verilerin silineceğini belirtmek için ise “Filters” anahtar kelimesi belirtilmelidir.

Örnek : Etkinlik silme (Delete)

{    
  "Action": "delete",
  "Lists": [{ "Name": "Schedule" }],
  "Filters": 
 [
  { 
 "Column": "[Schedule].Id",
 "Criteria": "=",
 "Value": "$Id$"
 }  
 ]  
}

Örnek Kod : Veri Silme - Delete

Örnek : Dil ve Slug parametresine göre duyuruları görüntülemek (Select)

{
  "Lists":
 [
  {
 "Name":"Announcement"
  }
 ],  
 "Filters":
 [   
  {
 "Column":"[Announcement].Slug", 
 "Criteria":"=", 
 "Value":"$Slug$"  
 },

 {
 "Column":"[Announcement].SiteLanguageId",
 "Criteria":"=",
 "Value":"$SiteLanguageId$"}  
 ]  
}

Örnek Kod : Veri Okuma - Select

Yukarıdaki örnek de görebileceğiniz üzere “Action” anahtar kelimesi kullanılmamış ama buna rağmen “Select” işlemi yapılmıştır. Eğer “Action” anahtar kelimesi ile işlem tipi belirlenmez ise varsayılan olarak “Select” işlemi yapılmaktadır.

Veri eklemek, güncellemek, silmek ve okumak için veri kaynaklarının nasıl oluşturulacağı hakkında tüm konulara yukarıda örnekler ile değinilmiştir. Peki, oluşturulan veri kaynakları kod tarafında nasıl kullanılacaktır?

Kod içerisinde herhangi bir veri kaynağı kullanmadan önce kontrol edilmesi ve bilinmesi gereken bazı konular vardır.

  1. Referanslar içerisine Mcms.Sdk dll’i eklenmelidir.

  1. Kullanılacak olan fonksiyon:

    GetDataSourceResultDataTable(string key, [System.Collections.Specialized.NameValueCollection parametersCollection = null])

Örnek Kod : Veri Kaynağı Kullanım Fonksiyonu

Fonksiyonun aşağıda da görüleceği üzere iki adet daha ek fonksiyonu vardır ancak “Key” değerini kullanarak işlem yapmak için aşağıdaki fonksiyonlardan ilk parametresi string tipinde olan fonksiyon (Örnek Kod 17) kullanılmalıdır.

Aşağıdaki örnek, anket katılım veri kaynağını kullanarak ilgili listeye veri ekleyen fonksiyondur.

Veri kaynağı oluşturulurken aşağıda görülebileceği üzere parametre değişkeni olarak belirlenen “RecordDate”, “Ip” ve “SurveyOptionId” değerleri “NameValueCollection” olarak fonksiyona geçilmekte, ayrıca ilgili veri kaynağına ait benzersiz olan “Key” değeri de - hangi veri kaynağını kullanacağını anlamak için - parametre olarak fonksiyona geçilmektedir.

Aşağıdaki örnekte toplamda kaç adet anket yapıldığını öğrenmek için bir veri kaynağı yazılmış ve kod içerisinden nasıl kullanıldığı incelenmiştir.

Veri Kaynağı - Toplam Anket Sayısı Örneği

public ActionResult Index()
 //…
 var totalCount = 
 DataSourceService.GetDataSourceResultDataTable(
 "3F173386-F077-47BD-AD87-3C5E576DA4F3", Request.QueryString).Results[0]; 
 @ViewBag.TotalCount =  
 totalCount != null ? totalCount.Rows.Count.ToString() : 
 "0";
 return ParitalRelativeView("Index.cshtml");

Örnek Kod : Veri Kaynağı - Veri Okuma Kullanım Örneği (I)

“Örnek Kod 19” de gördüğünüz gibi aşağıda ki kod satırıyla veri kaynağı ile iletişime geçilmektedir:

 var totalCount =  
 DataSourceService.GetDataSourceResultDataTable("3F173386-F077-47BD-AD87-   
 3C5E576DA4F3", Request.QueryString).Results[0];

Örnek Kod : Veri Kaynağı ile İletişime Geçme Örneği

GetDataSourceResultDataTable fonksiyonun geri dönüşü değeri aşağıdaki ekran görüntüsünden de görebileceğiniz üzere “DataSourceServiceResult” dır.

Veri kaynağından geriye dönen değerleri kullanmak için “List of Datatable” geri dönüşlü “Results” kullanılmalıdır. Kod içerisinde kullanırken ya “Örnek Kod 20” da görüldüğü gibi .Result[0] şeklinde kullanılmalı ya da “Örnek Kod 21” de görüldüğü gibi FirstOrDefault() metoduyla kullanılmalıdır.

public ActionResult Index()
 //Survey - Select Results
 Session["SurveyData"] = 
 DataSourceService.GetDataSourceResultDataTable("E6F6EB9C-C0D6-42F0-A644-92E38079F8AF", Request.QueryString);
 return ParitalRelativeView("Index.cshtml");

public ActionResult Read()
 //Get Survey Results
 var surveyData = (Mcms.Sdk.DataSource.Model.DataSourceServiceResult) Session["SurveyData"];
 var datatable = surveyData.Results.FirstOrDefault();
 //…

 return Json(model, JsonRequestBehavior.AllowGet);

Örnek Kod : Veri Kaynağı ile İletişime Geçme Örneği (II)

“On the Fly” veri kaynağı kullanımını anlatmaya geçmeden önce son örnek senaryo şeklinde aşağıda verilmiştir.

Senaryo: Medyasoft müşterilerine aylık olarak bir hem bilişim sektörüyle alakalı hem de kendi yaptığı projeler ile alakalı bilgiler sunmak ve bunu aylık bülten vasıtasıyla yapmak istiyor. Aylık bülten gönderilecek olan üyeler site üzerinden başvuru formuyla kayıt altına alınacak ve ayrıca üyelikten ayrılma formu da yapılacaktır. Üyeleri kaydederken istenecek olan bilgiler; ad ve soyadı, e-posta ve firma, üyelikten ayrılırken istenecek olan bilgi ise sadece e-postadır.

Veri kaynağı çözümü: Yukarıdaki senaryo için yazılacak olan veri kaynakları başvuru için ve ayrılış için olmak üzere iki adettir. Ekleme işlemi (üyelik başvurusu için)

"Action":"Insert",
 "Columns":
   [
 {"Name":"Newsletter.SiteLanguageId","Value":"$SiteLanguageId$"},  
 {"Name":"Newsletter.Title","Value":"$Title$"},
 {"Name":"Newsletter.Slug","Value":"$Slug$"},
 {"Name":"Newsletter.CreatedBy","Value":"$CreatedBy$"},
 {"Name":"Newsletter.CreateDate","Value":"$CreateDate$"},
 {"Name":"Newsletter.UpdatedBy","Value":"$UpdatedBy$"},
 {"Name":"Newsletter.UpdateDate","Value":"$UpdateDate$"}, 
 {"Name":"Newsletter.NameSurname","Value":"$NameSurname$"},
 {"Name":"Newsletter.Company","Value":"$Company$"},
 {"Name":"Newsletter.Email","Value":"$Email$"},  
 {"Name":"Newsletter.UserId","Value":"$UserId$"}    
   ],

 "Lists":[ {"Name":"Newsletter"} ]

Örnek Kod : Veri Kaynağı - Üye Ekleme

 protected void Save_Click(object sender, EventArgs e)

 try {
 var collection = new NameValueCollection
 {     
   {"Title", "E-Bülten"},     
   {"Slug", "E-Bülten"},    
   {"NameSurname", NameSurname.Text},
   {"Company", Company.Text},
   {"Email", Email.Text}
 };

 var key = "8fc9239b-c5d3-4197-9fb3-72999ee12377";
 var result = Sdk.DataSource.DataSourceService.GetDataSourceResultDataTable(key,collection);

 if(result.ResultCode != "0")
 throw new Exception(result.ResultMessage);
 var dataTable = result.Results.FirstOrDefault();
   }
catch(Exception ex) 
{ 
 //… 
 }
} 

Örnek Kod : Veri Kaynağını Üye Eklemek için Kullanmak

Silme işlemi (üyelikten ayrılış için)

"Action": "delete",
 "Lists": 
  [
 {
   "Name": "Newsletter"
 }
  ],
 
 "Filters": 
  [
 {
   "Column": "[Newsletter].Email",
   "Criteria": "=",
   "Value": "$Email$"
 }  
  ]

Örnek Kod : Veri Kaynağı - Üyelikten Ayrılış

protected void Leave_Click(object sender, EventArgs e)

 try
 {
   var collection = new NameValueCollection    
 {
   {"Email", NameSurname.Text.Trim()},
   {"UserId", Id.ToString()},
 };

 var key = "899A5DDE-6E3C-4261-9AD5-C5992771A1EE";
var result = Sdk.DataSource.DataSourceService.GetDataSourceResultDataTable(key, collection);

 if (result.ResultCode != "0")

  throw new Exception(result.ResultMessage);   
  var dataTable = result.Results.FirstOrDefault();
 }

 catch (Exception ex)

 {   
 //… 
 }

Örnek Kod : Veri Kaynağını Üyelikten Ayrılış için Kullanmak

Tasklar (Bekleyen İşler)

UniGate’te belirli sorumluluklarda bulunan kullanıcıların site yönetimi tarafından takip edildiği, izin verme ve onaylama gibi işlemlerin görüldüğü alandır. Bu alanı bir örnek üzerinden açıklayalım. Örneğin editör ve müdür adında kullanıcılarınız var. Editör gün boyu yazmış olduğu makaleyi bitirdikten sonra bunun sitede yayınlanmak istiyor. Bunu yapabilmesi için ilk öncelikle müdüründe bunu yayınlaması için izin vermesi gerekiyor.İşte bu gibi gerçekleşen tüm olayların takip edildiği bir ortamdır.

Tasklar bölümüne bastığınızda önünüze gelen ekran yukarıdaki gibidir.Aşağıdaki resimde ise üst tarafta bulunan Bul metoduna bastığınızda ise belirli kategorilerde arama yapmanızı sağlamaktadır.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.