Silverlight 3 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Silverlight 3 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Pazar, Ekim 10, 2010

SharePoint 2010 Client Object Models – The ECMAScript library

a managed .NET API for building client applications using a SharePoint object model.
a managed Silverlight object model.
an object model to be used in Javascript, the ECMAScript library.
For developers this is an important step forward. Until now, developing SharePoint applications using an object model was limited to applications running on the server. For client applications we had to rely on web services and the RPC protocols. Using these 3 new models, it will be much easier to create client applications. And the reach of our applications will be bigger, because they are very likely to also run on the new SharePoint Online. The three object models are a limited sub set of the server object model. Most objects, properties and methods of the site collection (SPSite) and it’s underlying structures are available in the new models.

In this article I will show you an example of a custom ASPX page that will use the Javascript library. It is a page that runs in the LAYOUTS folder. It shows all users that have direct permissions on the current site. By clicking a user name, the page will show me more information about that user. By selecting a user and one of the available SharePoint groups, the page will add the user to that group. After doing that, the page will remove the permissions for the user.

Showing the users and the user groups is done in server side code. Showing user information and moving the user’s permissions to the group is handled by javascript using the ECMAScript library.

Step 1 – Show the users and groups

The ASPX page loads the lists with users and groups in the OnLoad of the page. It creates a collection of custom objects and sets these collections as the datasource for the Repeater controls. The code snippet below shows how the users are loaded:

   1: SPWeb web = SPContext.Current.Web;
   2: List<SharePointUser> users = new List<SharePointUser>();
   3: foreach (SPRoleAssignment assignment in web.RoleAssignments)
   4: {
   5:     if (assignment.Member is SPUser)
   6:     {
   7:         SPUser user = (SPUser)assignment.Member;
   8:         SharePointUser usr = new SharePointUser(user.ID, user.Name);
   9:         users.Add(usr);
  10:     }
  11: }
  12: listUsers.DataSource = users;
  13: listUsers.DataBind();
The snippet below shows the ASPX code for the repeater that shows the users:

   1: <asp:Repeater ID="listUsers" runat="server">
   2:     <HeaderTemplate>
   3:     <h3>Users with direct permissions on this site</h3>
   4:     </HeaderTemplate>
   5:     <ItemTemplate>
   6:     <li style="list-style-type:none">
   7:         <input type="checkbox" id="selectUser<%# DataBinder.Eval(Container.DataItem, "ID") %>" name="selectUser" />
   8:         <a href="javascript:getUserInfo(<%# DataBinder.Eval(Container.DataItem, "ID") %>);">
   9:             < %# DataBinder.Eval(Container.DataItem, "Name") %>
  10:         </a>
  11:     </li>
  12:     </ItemTemplate>
  13: </asp:Repeater>
For every user in the collection, a hyperlink is rendered. When the link is clicked, javascript function “selectUser” is called. This function takes the ID of the user as parameter

Step 2 – Preparing the page for using the ECMAScript library

The ECMAScript library is available in a number of JS files in the LAYOUTS folder. The main file is SP.js. When you include this file in the APSX page using a ScriptLink control, all other required JS files are loaded automatically. This MSDN page shows all relevant files. By linking SP.js to your page, the SP namespace is registered. This is the SharePoint namespace that contains all objects. If you are going to build code using this library, you will very likely need this MSDN Page to reference what object, properties and methods are available. The SharePoint js files are minified (‘crunched’ in the SDK) versions. This makes them hard to read and use for debugging. Therefore every js file also has a ‘debug’ equivalent in the same folder. By opening sp.debug.js you will be able to see what is available in the SP namespace.

The snippet below show how to prepare the ASPX page:

   1: <SharePoint:ScriptLink
   2:     Name="sp.js" LoadAfterUI="true" Localizable="false"
   3:     runat="server" ID="ScriptLink1" />
Step 3 – Getting the user information

As we have seen in step 1, clicking a user’s name fires the javascript function ‘selectUser’. This function is shown in the snippet below.

   1: function getUserInfo(userID) {
   2:     var clientContext = new SP.ClientContext.get_current();
   3:     var web = clientContext.get_web();
   4:     var userInfoList = web.get_siteUserInfoList();
   5:     var camlQuery = new SP.CamlQuery();
   6:     camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name=\'ID\'/>' +
   7:                           '<Value Type=\'Number\'>' + userID + '</Value></Eq>' +
   8:                           '</Where></Query><RowLimit>1</RowLimit></View>');
   9:     this.collListItem = userInfoList.getItems(camlQuery);
  10:     clientContext.load(collListItem);
  11:     clientContext.executeQueryAsync(
  12:         Function.createDelegate(this, this.onQuerySucceeded),
  13:         Function.createDelegate(this, this.onQueryFailed));
  14: }
As in server side code, we first need to get the SharePoint context. Because our page is an ASPX page running in the LAYOUTS folder, it is always in context of the current SharePoint site. In all 3 new client object models, the SharePoint context is represented in a ClientContext object. In line 2 of the snippet above, we’re getting the current SharePoint context. The next few lines look pretty familiar if you are used to SharePoint server side programming. We are getting a reference to the User Information List of the current site. Next we create a CAML query to find the list item for the user that was selected, and we load the items based on that query from the list. The big difference with the server side object model, is that we did not yet have any contact with SharePoint. Although we have called the getItems method of the list, our collection is not yet loaded. This happens when we load the collection in line 10 and execute the query using clientContext.ExecuteQuery in line 11. This gives you the option to minimize the number of roundtrips to the server from your client code. This makes SharePoint client programming different from server side programming. You need to do more thinking about what objects and properties to use when. It makes sense to load as many objects you need, before calling ExecuteQuery once, to actually get the objects from the server.

In the sample above, you see another difference between client and server side programming. The ECMAScript library is, as the Silverlight API, asynchronous. The ExecuteQuery method takes 2 parameter, the functions that will be called in both a success and a failure scenario. The snippet below shows the ´success´ function of my sample page:

   1: function onQuerySucceeded(sender, args) {
   2:     var item = collListItem.itemAt(0);
   3:     var profile = item.get_item('Notes');
   4:     var pictureUrl = item.get_item('Picture').get_url();
   5:    
   6:     var userImage = document.getElementById('userImage');
   7:     userImage.src = pictureUrl;
   8:     var profileDiv = document.getElementById('userProfile');
   9:     profileDiv.innerHTML = profile;
  10: }
This code loads the first item from the collection, get the values of the Notes and Picture

Step 4 – Move the user to the group

Last part of this article show how to remove the user permissions and add the user to the selected group. When a groupname is clicked, the javascript function moveSelectedUsersToGroup is called and the ID of the group is passed as parameter. The snippet below shows this function:

   1: function moveSelectedUsersToGroup(groupID) {
   2:     var users = document.getElementsByName('selectUser');
   3:     this.clientContext = new SP.ClientContext.get_current();
   4:     this.web = clientContext.get_web();
   5:     var groups = web.get_siteGroups();
   6:     var group = groups.getById(groupID);
   7:     var groupUsers = group.get_users();
   8:     for (i = 0; i < users.length; i++) {
   9:         if (users[i].checked) {
  10:             var id = users[i].id.replace(/selectUser/, '');
  11:             var siteUsers = web.get_siteUsers();
  12:             var user = siteUsers.getById(id);
  13:             groupUsers.addUser(user);
  14:             var assignments = web.get_roleAssignments();
  15:             var assignment = assignments.getByPrincipalId(id);
  16:             assignment.deleteObject();
  17:             clientContext.executeQueryAsync(
  18:                 Function.createDelegate(this, this.addUsersSucceeded),
  19:                 Function.createDelegate(this, this.onQueryFailed));
  20:         }
  21:     }
  22: }
What this does before the query is executed to SharePoint, is:

get a reference to the SharePoint group
find the selected user in the site users
add the user to the selected group
find the role assignment for the selected user
delete the role assignment for the selected user
By submitting the query to SharePoint, all these actions are all executed at once in 1 roundtrip to the server. If this action is successful, the javascript function addUsersSucceeded is called. This function has not specical function, it notifies the user about the outcome of the process.

In this article we have seen how to use one of the three new client object models, the ECMAScript library. Although programming client applications is now a lot easier, and is more like programming the server, the are some conceptual differences that are important to understand. The next few articles will show you some examples on how to get started using the other two client object models.

Perşembe, Mayıs 20, 2010

Silverlight Business Application – WCF RIA Services

Web uygulamaları günler geçtikte daha bir görsel ve daha bir işlevsel olmaktadır. Bu gelişmenin Microsoft gerçekleşmesini sağlayan teknoloji ise Silverlight 'tır. Başlarda basit animasyon işlemleri yaparken şu anda WCF servisleri ile validation kontrolleri ile ve diğer bir çok özelliği ile Asp.Net uygulamalarına alternatif olarak düşünebilir seviyeye gelme yolunda son sürat ilerlediğini gözlemliyoruz. Bu süreçlerin ilerlemesi ile iş uygulamalarında da Silverlight düşünülmeye başlanmıştır. Bildiğiniz üzere Asp.Net MVC Framework yardımı ile veri, nesne ve görsel katmanları ayrı ayrı kullanabilmemize olanak tanıyan bir şablon ile karşımıza gelmektedir. Bu uygulama şablonunda özellikle Entity katmanı yardımı ile veri işlemleri üzerinde yapacak olduğumuz işlemleri rahatça yapılabilmesi mümkündür. Silverlight Business Application yardımı ile de hazır bir şablon gelmekte ve işleri kolaylaştırabilmektedir. Silverlight Business Application hakkında temel bilgi ve proje şablonu hakkında bilgi edinmek için burada yer alan yazıdan yararlanabilirsiniz.

Silverlight Business Application, WCF RIA servisleri yardımı ile veri işlemlerini domain servisler ile uyumlu bir şekilde gerçekleştirebilmesi mümkündür ki alt yapısı da bu entegrasyon üzerine kurulmuştur. Biz de bu yazımızda WCF RIA servislerini kullanarak veri üzerinde ekleme, silme ve gösterme işlemlerini inceliyor olacağız.

Not: WCF RIA servisleri konusunda ayrıntılı bilgi edinmek için buradan yararlanabilirsiniz.

Silverlight Business Application Silverlight 3 ve 4 araçları içerisinde yer alan iş süreçlerine uyumluluğu olan bir proje şablonudur. Yeni bir proje oluşturulurken kullanıcı üyelik, sisteme giriş, windows authentication yardımı ile sisteme giriş yapabilme, ana sayfa gibi temel yapıları bünyesinde katmansal bir yapı ile bulundurduğu için tercih edilebilecek oldukça güzel bir proje şablonudur. Şimdi adım adım basit bir örnek üzerinde neler yapabileceğimize incelemeye başlayalım.

Not: Geliştirilecek olan uygulama, Visual Studio 2010 üzerinde Silverlight 4 kurulu bulunan bir bilgisayar üzerinde yapılacaktır. Ayrıca veri tabanı sunucusu olarak SQL Server 2008 Express Edition kullanılıyor olacak. Uygulama esnasında kullanılacak olan veri tabanını buradan indirip kendi veri tabanı sunucusunuza ekleyip kullanabilir ve yazı içerisinde yapılan örnekleri benzer veriler ile uygulayabilirsiniz. Dosyanın boyutu 3 mb 'dir.

Uygulama geliştirirken Entity Framework ve WCF RIA Domain servisi kullanıyor olacağız. Visual Studio üzerinde yeni proje oluştur diyip Silverlight proje sablonları arasından Silverlight Business Application 'ı bulup projemizi oluşturuyoruz.

mak92_1

Karşımıza Silverlight ve web projesi olmak üzere içerisinde iki proje olan şablon ile açılmaktadır.

mak92_2

Projeyi oluşturduktan sonraki bir diğer adım WCF RIA Servisini uygulama hangi projeden link alarak kullanacağıdır. Bu amaçla Silverlight projesinin özellikler ekranında bu özelliğin aktif olup olmadığını kontrol ediyoruz.

mak92_3

Web projesine WCF RIA Servisi linkini vererek kullanıcı tarafında domain servislerinin kullanılabilmesini de aktif duruma getirmiş oluyoruz. Bu sayede entity framework ile gösterecek olduğumuz verileri web uygulamasını referans göstererek her yerde kullanabilmemiz mümkün olacaktır. Peki, geliştirilecek olan uygulamalarda WCF RIA servisi kullanmanın ne gibi avantajları olacaktır.

Katmansal uygulamalarda geliştirme kolaylığı, .Net ile geliştirilen uygulamaların sunucu-kullanıcı arasındaki etkileşimi sağlamayı kolaylaştırır.
Varlıkların karşılıklı paylaşılması, Model sınıfları, doğrulama (Validation) kuralları ve diğer veri ilişkileri
Kullanıcı tabanlı destekleyiciler, Otomatik veri eşlemeleri, sayfalama, güncelleme, değişiklik takibi

şeklinde temel faydalarını kısa başlıklar altında sıralayabiliriz.

 mak92_4

Web sunucusunu Domain Service ve Model 'den oluşmaktadır. Model Entity Modelinden oluşur ve içerisinde CRUD işlemleri olarak adlandırılan create,read,update ve delete işlemlerini barındırır. Domain Services ise Entity Data model 'de bulunan işlemlerin aktarılmasında yer alır. İşleyiş mantığı ise Silverlight kullanıcısından alınan verilerin model katmanı ile hangi yöne yönleneceğinin belirlenmesi ile gerekli veri mesajları Domain Context 'e iletilir. Buradan işi asıl yapacak olan web sunucusuna verilerin aktarılması işi ise WCF ile yapılmaktadır.

RIA Domain servielerininin temel olarak sağladıkları aşağıdaki gibidir.
WCF Servisleri, Bütün WCF özellikleri kullanılabilir. Servis referansları eklenebilir.
Özelleştirilmiş taban sınıfları, LinqToEntities (Ado.Net Entity Data Model), LinqToSQL (Linq To SQL Data Model) ve Authentication bazlı sınıfların oluşturulabilmesi.

WCF RIA servisleri yalnızca verilerin taşınması değil aynı zaman gösterilmesini sağlamaktadır. Proje içerisine eklenmiş olan DomainServise gösterilen veri modelini veri kaynağı olarak gösterdikten sonra oluşan objeleri silverlight formlar üzerine sürükle bırak yöntemi ile GridView görünümünde verilerin gösterilebilmesi ve düzenlenebilmesi olanağı vardır. Ayrıca bu grid içerisinde ListBox, Combox gibi kontrollerin kullanılabilmesi mümkündür. Ayrıca grid üzerinde gösterilmekte olan verileri düzenlenmesi anında Silverlight 'ın sağladığı bütün kontrollerin kullanılabilmesi olanağı da vardır. Peki ne tür veri kaynakları kullanabiliriz. Silverlight Business Application 'da WCF RIA servislerinin dışında .Net uygulamaları geliştirirken kullanılan bütün veri kaynaklarının kullanılabilmesi mümkündür. Tavsiye ise daha önceden açıkladığımız sebeplerden ötürü WCF RIA servisleridir.

Yapmış olduğumuz kısa tanımlamalar, açıklamalar ve uygulama içerisinde WCF RIA servislerinin link edildiğini görmemizin sonrasında uygulamamızı geliştirmeye başlayabiliriz.

RIA servislerinden bu kadar bahsettikten sonra öncelikli olarak web projesinin içerisinde services klasörünün içerisinde yer alan Domain Services sınıflarına göz atalım. İlk etapta iki tane sınıf bulunmaktadır. Bunlar, Authentication ve UserRegistration servisleridir. Bu sınıflarda gerekli servislerin içlerinde User nesnesini kullanarak kullanıcıların sismete giriş yapma veya kayıt olma işlemlerini yapabilmeleri mümkündür. Şimdi uygulamayı çalıştırarak oluşturulan login ve yeni kullanıcı formlarına hemen göz atalım.

mak92_5

Kullanıcı giriş ekranı ise,

mak92_6

şeklindedir. Daha önceden vermiş olduğumuz linkte yer alan veri dosyasını web uygulamasında yer alan App_Data klasörüne ekleyerek sonrasında da Server Explorer içerisinde tablolara bakarak veri dosyasının doğru olarak eklendiğini kontrol ediyoruz. Sonrasında ise veri modelini oluşturmamız gerekmektedir. Bu amaçla Ado.Net Entity Framework ten yararlanacağız. Web projesine yeni bir öğe ekle seçeğini kullanarak ADO.NET Entity Data Model 'i seçerek adımları tamamlıyoruz. Tablo kısmında aşağıda yer alan resimdekileri eklememiz yeterli olacaktır.

mak92_7

Bu adımdan sonra Entity Model tanımlanmış oluyor. Sonrasında sorunsuzca çalışması ve eklenen DLL 'lerin temp dosyalarının oluşması için bir kere uygulamayı derliyor ve sonrasında adımlarımıza devam ediyoruz. Şimdi uygulamaya Domain Service sınıfını ekleyeceğiz. Bunun için web uygulamasında services klasörünün üzerinde sağ tıklama yapıyoruz ve yeni bir öğe ekle diyoruz. Sonrasında web tabının içerisinde yer alan Domain Service Class ekliyoruz. Sonrasında bizden veri kaynağımıza ilişkin kullanacağımız tabloları seçmemizi isteyecektir. Bu ekranı aşağıdaki şekilde hazırlıyoruz.

mak92_8

İşlemi tamamladıktan sonra EventManagerDomainService.cs ve EventManagerDomainService.metadata.cs isimli iki dosya oluşturmaktadır. Metadata dosyasının içerisinde tablolarda yer alan öğelerin nesnesel olarak metotlarda özellikleri yer alır. EventManagerDomainService içerisinde ise metadata içerisinde yer alan nesnelerden yararlanarak hazırlanmış olan CRUD işlemlerinin yapılacağı metotlar yer almaktadır.

Sıra işin biraz daha görsek kısımlarına geldi. Verileri göstermek için gerekli altyapıyı hazırladık. Şimdi bu verileri kullanarak son kullanıcıya değerler göstermemiz gerekmektedir. Bunun için Silverlight uygulamasının içerisinde Views klasörünün içerisinde yer alan Home.xaml ekranından yararlanıyor olacağız. Bu sayfayı açtıktan sonra data menüsünün altında yer alan Show Data Source 'a tıklayarak WCF RIA servisleri ile gelen veri kaynaklarını görüntüleyebiliriz.
mak92_9

Eklemiş olduğumuz tablolar veri kaynağı kısmında bizim kullanımızı hazır olarak beklemektedir.

mak92_10

EventManagerDomainContext içerisinde yer alan objelerin üzerine inceleme yaptıysanız GridView şeklinde hazırlanmış olduğunu ve direk kullanılabilir durumda olduğu dikkat çekmektedir. Bize bu durumda yalnızca form üstüne bunlardan herhangi birini sürükleyip verileri görüntelemek kalıyor. Bu yazımızda örnek olarak Event nesnesini kullanıyor olacağız.

mak92_11

Veri gösterme işini başarılı bir şekilde başardık. Sıradaki işlemimiz ise bu veriler üzerinde düzenleme yapmak için neler yapamamız gerektiği olacaktır.

Düzenleme işleminin yapılabilmesi için öncelikli olarak Views klasörüne yeni bir sayfa ekliyor olacağız. Silverlight Business Application ile örneği yaparken sayfaların navigation page olduğu dikkatinizi çekmiştir. Bunun amacı asp.net ve mvc 'den alışık olduğumuz  URL Routing 'e benzer bir yapı içermesinden ve sayfalar arası geçişin URI yardımı ile rahatlıkla yapılabilmesinden kaynaklanmaktadır. Şimdi düzenleme yapacağımız sayfayı ekleyebiliriz. Eklemiş olduğunuz sayfanın <navigation:Page ile başladığını görüyor olacaksınız.

Şimdi ana amacımız grid üzerinden seçilen kaydın değerlerini güncellemektir. Bu işlemi yapabilmek için de seçili olan satırın ID 'sine ulaşıp bu değeri taşımamız gerekmektedir. Bu amaçla formun üzerine bir adet buton ekliyoruz. Butonun içerisinde ID 'den yararlanarak başka bir sayfaya yönlendirecek ve değerleri güncelleyeceğiz. Butonu form üzerine ekledikten sonra üzerine tıklanması anında yapılacak olayları aşağıdaki gibi belirtiyoruz.
private void editEventButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
    Event selectedEvent = eventDataGrid.SelectedItem as Event;
    if (selectedEvent != null)
    {
        int eventId = selectedEvent.EventID;
        NavigateToEditEvent(eventId);
    }
}

private void NavigateToEditEvent(int eventId)
{
    Uri target = new Uri("/EditEvent?EventID=" + eventId, UriKind.Relative);
    NavigationService.Navigate(target);
}
YYapmış olduğumuz işlemler yardımı ile Event tablosunun içerisinde yer alan değerlerden seçili olanın ID 'sini yakalayıp EditEvent sayfasına o ID 'den yararlanaraj gerekli yönlendirmeyi yapıyoruz. Şimdi hızlıca yönlendirme işleminin sorunsuzca olup olmadığını test etmek için uygulamayı seçip kontrol edelim.

mak92_12

Sayfayı sorunsuzca yönlendirdik. Şimdi ise bu gelen ID yardımı ile verileri gösterip düzenleme işlemini nasıl yapabileceğimize göz atacağız. EditEvent sayfasına geliyoruz ve Data Source kısmına göz atıyoruz. Verileri gösterirken Event tablosunun içeriğini kullandık ve bu bize otomatik olarak GridView yardımı ile gerçekleştirmiştik. Şimdi aynı işlemi Event tablosunun içerisinde yer alan kolonların detaylarını göstererek yapmak gerekecektir. Bu amaçla Event tablosunun yanında açılan DropDownList 'in içerisinde Detail seçeneğini seçiyor ve EditEvent sayfasına tabloyu sürüklüyoruz.

mak92_13

Detay kısmına getirdikten sonra form üzerinde sürüklediğimizde bize form kontrollerinden oluşan bir şablon çıkacak ve bunlar iki yönlü olarak veriye bağlanmış olacaktır. Sürükleyip bıraktığınızda karşınıza çıkacak olan şablon aşağıdaki gibi olacaktır.

mak92_14

Sırada yapmamız gereken bu formun içeriğini doldurabilmek amacıyla QueryString'ten yararlanarak EventId 'yi yakalamak ve sonrasında ekrana eklemiş olduğumuz buton ile güncelleme işlemini gerçekleştirmektir.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string eventIdString = NavigationContext.QueryString["EventID"];
    int eventId;
    if (int.TryParse(eventIdString, out eventId))
    {
        eventDomainDataSource.FilterDescriptors.Add(
            new FilterDescriptor
            {
                Operator = FilterOperator.IsEqualTo,
                PropertyPath = "EventID",
                Value = eventId
            });
    }
}

private void saveChangesButton_Click(object sender, RoutedEventArgs e)
{
    eventDomainDataSource.SubmitChanges();
}

QueryString ile yakaladığımız EventID 'yi filtre olarak kullanıp sonrasında içerik filtreleme yardımı ile EventID değerine eşit olan değerleri gösteriyoruz. Sonrasında ise Entity Framework 'un güzelliklerinden yararlanarak değişiklikleri kaydet diyerek işlemi tamamlıyoruz. Sonrasında uygulamayı çalıştırıp düzenleme işlemlerini yapıp değiştir dediğimizde yapmış olduğumuz değişikliklerin uygulandığını görmüş oluruz.

mak92_15
Düzenleme işlemlerini nasıl yapabileceğimizi incelemiş olduk. Şimdi ise yeni bir kaydı nasıl ekleyebileceğimizi incelemeye çalışacağız. Yeni bir kayıt eklerken yine Entity katmanından yararlanıyor olacağız. Ayrıca form üzerine var olacak kontrollere önceden bir kaç ön bilgi girerek daha anlaşılır olmasını sağlayacağız. Örneğin tarih kısmında <01.01.2010> gibi örnek bir değer olacaktır.

İşlemlerimize öncelikle bir kayıt ekle butonunu home.xaml sayfasına ekleyerek başlıyoruz. Sonrasında eklemiş olduğumuz tıklanması anındaki olayına aşağıdaki kod parçasını ekliyoruz.

private void newEventButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
    DateTime nowDate = DateTime.Now;
    Event newEvent = new Event
    {
        EventTitle = "<Yeni Aktivite>",
        EventVenueName = "<Yer>",
        EventDescription = "<Açıklama>",
        EventStartDate = nowDate,
        EventEndDate = nowDate
    };

    var ctx = new EventManagerDomainContext();
    ctx.Events.Add(newEvent);
    ctx.SubmitChanges(createOP =>
    {
        NavigateToEditEvent(newEvent.EventID);
    }, null);
}

Entity içerisinde bulunan Events koleksiyonuna varsayılan olarak gösterilecek değerleri ekledikten sonra WCF RIA servisi olarak eklemiş olduğumuz EventManagerDomainContext 'ten yararlanarak yeni kayıt eklenmesi için gerekli işlemleri ekledik. Ayrıca kayıt eklenmesi için gerekli formu aktivite düzenlemek için kullandığımız forma yönlendirmek için NavigateToEditEvent metodunu kullanarak gerekli yönlendirme işlemini gerçekleştirmiş oluyoruz.

Not: EventManagerDomainContext farklı isimler ile projenizin içerisinde bulunabilir. Bu tanımlamayı doğru olarak öğrenebilmek için DataSources tabının içerisinde yer alan veri kaynaklarına bakarak öğrenebilirsiniz.

mak92_10

Yaptığımız işlemler sonraında yeni kayıt girme ekranının nasıl gözüktüğüne hızlıca göz atalım.

mak92_16

Sonuç olarak bu yazımızda Silverlight Business Application proje şablonunda WCF RIA servislerini nasıl kullanabileceğimizi temel CRUD işlemleri üzerinde incelemeye çalıştık.

Umarım sizler için yararlı olabilmiştir.
 
Kaynaklar

Turhal Temizer

info@turhaltemizer.com

Pazartesi, Mayıs 17, 2010

Silverlight Business Application – Nedir?

Web uygulamaları günler geçtikte daha bir görsel ve daha bir işlevsel olmaktadır. Bu gelişmenin Microsoft gerçekleşmesini sağlayan teknoloji ise Silverlight 'tır. Başlarda basit animasyon işlemleri yaparken şu anda WCF servisleri ile validation kontrolleri ile ve diğer bir çok özelliği ile Asp.Net uygulamalarına alternatif olarak düşünebilir seviyeye gelme yolunda son sürat ilerlediğini gözlemliyoruz. Bu süreçlerin ilerlemesi ile iş uygulamalarında da Silverlight düşünülmeye başlanmıştır. Bildiğiniz üzere Asp.Net MVC Framework yardımı ile veri, nesne ve görsel katmanları ayrı ayrı kullanabilmemize olanak tanıyan bir şablon ile karşımıza gelmektedir. Bu uygulama şablonunda özellikle Entity katmanı yardımı ile veri işlemleri üzerinde yapacak olduğumuz işlemleri rahatça yapılabilmesi mümkündür. Silverlight Business Application yardımı ile de hazır bir şablon gelmekte ve işleri kolaylaştırabilmektedir. Birazdan bu detaylara değineceğiz. Ancak öncelikle Silverlight Business Application içerisinde yer alan katmansal yapıya bir göz atalım.

mak90_1 
mak90_2 
mak90_3
Silverlight Business Application temel olarak Validation Framework ve Forms Toolkit 'in katmansal olarak ilişkisi sonucunda oluşturulmuş bir proje şablonudur. Silverlight Validation Framework web uygulamalarından alışık olduğumuz  verilerin doğrulanması işlemleri Silverlight Business Application için de yapılabilmesi mümkündür. Yapmış olduğu kontrol listesi aşağıdaki gibidir.

•AlphaNumeric
•Alpha
•Between (Generic)
•Date
•Digits
•Email address
•Equals (Generic)
•Float
•GreaterThan (Generic)
•InArray (Generic)
•Integer
•LessThan (Generic)
•NotEmpty
•Regex
•StringLength
•Url

Silverlight Forms Toolkit ise Silverlight içerisinde yer alan kontroller ve bunlara ek olarak gelen şablonlar olarak mimari yapıda yer almaktadır.

Business Application şablonunun standart Silverlight proje şablonundan farkı hazır klasör yapıları ile gelmesinden öte System.Windows.RIA ve System.Windows.RIA.Controls DLL 'lerinin referans edilmiş olmasıdır.

Silverlight Business Application ile gelen proje şablonunu kısaca incelemek gerekirse, Silverlight 3 ve 4 sürümleri ile kullanılabilmektedir. http://silverlightbusiness.codeplex.com adresi üzerinden sürümler arasında yapılan değişiklikleri ve son yeniliklerin takip edilebilmesi mümkündür. Silverlight 4 toolkit 'i sisteminize kurduktan sonra Silverlight proje şablonları arasında yer alır ve kullanıma hazır bir şekilde bizleri bekler.

mak90_4
Projeyi oluştur dedikten sonra karşımıza bir tane silverlight bir tane bu uygulamanın gösterileceği asp.net uygulaması oluşturulur. Silverlight uygulaması içerisinde iş süreçlerinde kullanmış olduğumuz katmansal yapıdan yararlanılarak klasörleme ve basit olarak sayfa şablonları yer almaktadır.

mak90_5

Verileri Silverlight içerisindeki verileri web uygulaması ile entegre kullanabilmek ve web uygulamasına eklenmiş olan entity katmandan yararlanabilmek için DomainServicesClass 'ı yani WCF RIA 'yı kullanmaktadır. Bunun sorunsuzca gerçekleştiğini doğrulabilmek için eklenmiş olan Silverlight projesi üzerinde sağ tıklama yaptıktan sonra özellikler ekranında WCF RIA Services link başlığı altında yer alan listede istediğimiz projeyi seçebiliriz. Varsayılan olarak Silverlight uygulamasının web uygulaması seçili olarak geliyor olacaktır.
mak90_6
WCF RIA Servisleri yardımı ile sunucu-kullanıcı arasında ki köprünün de kurulduğuna ilişkin veri doğruması yaptıktan sonra hazırlanmış olan Business Application sablonunu çalıştırarak nasıl bir görünüme sahip olduğuna göz atalım.

mak90_7

Sayfa üzerinde yer alan login linkine tıkladığınızda karşınıza giriş için gerekli olan kullanıcı adınızı ve şifrenizi girmenizi isteyen animasyonlu bir sayfa açılıyor olacaktır.

mak90_8

Eğer ki sisteme kayıtlı değil iseniz kendinizi kayıt ediyor olmanız gerekmektedir. Bunun için ise Register Now linkini tıklayarak açılan ekranda bilgilerinizi girerek kayıt işlemini tamamlayabilmeniz mümkündür.

mak90_9

Eğer ki kullanıcı adı ve şifre olmadan direk Windows kullanıcı ile girmek istersek Authentication modu Windows olarak değiştirmemiz yeterli olacaktır. Bunun web.config içerisinde yer alan Authentication kısmında form yerine Windows olarak belirtmek ve App.XAML dosyasında yer alan App() metodu içerisinde aşağıdaki değişiklikleri yapmak yeterli olacaktır.

public App()
{
    InitializeComponent();

    WebContext webContext = new WebContext();
    //webContext.Authentication = new FormsAuthentication();
    webContext.Authentication = new WindowsAuthentication();
    this.ApplicationLifetimeObjects.Add(webContext);
}

Bu işlemeler sonrasında uygulamaya Windows Authenticationdan yararlanarak login olduğumuz kullanıdığımız kullanıcı ile web uygulamasını da kullanabilmemiz mümkün olacaktır. Bu yazımızda basitçe Silverlight Business Application uygulamasına ilişkin kavramları incelemeye çalıştık. Bir sonraki yazımızda WCF RIA Servisleri yardımı ile veri gösterme, ekleme ve güncelleme işlemlerine göz atarak yazı serimize devam ediyor olacağız.

Umarım sizler için yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com

Pazartesi, Nisan 12, 2010

Visual Studio 2010 – RTM

Visual Studio 2010 çıktı.

Uzun bir gelişme sürecinin ardından Visual Studio 2010 resmi olarak satışa sunuldu.Visual Studio 2010

IDE üzerinde WPF ‘in nimetlerinden yararlanılarak yapılan değişiklikler, WWF ‘in tasarımın ve akış tiplerinin yenilenmesi, F# dilinin entegre edilmesi, MVC 2 ile beraber gelmesi ve diğer bir çok özelliği ile bugün VS2010 çıkmış bulunuyor. Deneme sürümünü indirip kurmak isteyenler aşağıda verecek olduğum linkten yararlanabilirler. Almak isteyenler için ise Visual Studio 2010 Ultimate satış fiyatı $11850. :)

http://www.microsoft.com/visualstudio/en-us/download

Perşembe, Mart 04, 2010

Silverlight: Merged Dictionaries

Silverlight ile uygulama geliştirirken resource dosyalarını kullanmanın en pratik yoludur MergedDictionaries. Ancak bunu kullanabilmek için çok az XAML bilmek gerekmektedir ve kullanım şekli aşağıdaki gibidir.

< ResourceDictionary >
    < ResourceDictionary.MergedDictionaries >
        < ResourceDictionary Source="BlueResourceDictionary.xaml" / >
    < / ResourceDictionary.MergedDictionaries >
< / ResourceDictionary >


 Bazı uygulama geliştiriciler "bu kullanımı kod ile yapabilir miyiz?" ya da "nasıl yapabiliriz?" şeklinde sorular sormaktadırlar. Bu mümkündür ve kullanım şekli aşağıdaki gibidir.


 var dictionary = Application.Current.Resources; dictionary.MergedDictionaries.Clear();
var dict = new ResourceDictionary { Source = new Uri("Blue.xaml", UriKind.Relative) };
dictionary.MergedDictionaries.Add(dict);



Kolay gelsin...








Cumartesi, Temmuz 11, 2009

Silverlight 3.0 Final& Expression Studio 3.0 RC sürüm yayınlandı.

Web uygulamalarında RIA uygulamalarına en kapsamlı şekilde kullanılmasına olanak tanıyan Microsoft Silverlight teknolojisinin 3.0 sürümü artık tam sürümü ile hazırdır.

HD Medya uygulamaları, tarayıcı dışında çalışabilen uygulamalar hazırlayabilmemize artık olanak tanınabilecektir. Ayrıca Expression Studio ailesi Rc sürümüne Silverlight 3.0 sürümü ise final sürüm durumuna getirilmiştir.

www.silverlight.net/getStarted