ASP.NET etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ASP.NET etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Çarşamba, Aralık 11, 2013

Sharepoint – Lokalizasyon (LCID) Kodları

Merhaba,

 

Geçen günlerde ilgilendiğim bir proje ile ilgili Localizasyon kodlarına gereksinim oldu. Elimin altında olması ve gerekirse sizlere de kolaylık sağlayabilmesi amacıyla alt kısımda bu listeyi paylaşıyorum.

 

Listenin alındığı orjinal adres: http://msdn.microsoft.com/en-us/goglobal/bb964664 şeklindedir.

Language - Country/Region LCID Hex LCID Dec
Afrikaans - South Africa 0436 1078
Albanian - Albania 041c 1052
Alsatian 0484 1156
Amharic - Ethiopia 045e 1118
Arabic - Saudi Arabia 0401 1025
Arabic - Algeria 1401 5121
Arabic - Bahrain 3c01 15361
Arabic - Egypt 0c01 3073
Arabic - Iraq 0801 2049
Arabic - Jordan 2c01 11265
Arabic - Kuwait 3401 13313
Arabic - Lebanon 3001 12289
Arabic - Libya 1001 4097
Arabic - Morocco 1801 6145
Arabic - Oman 2001 8193
Arabic - Qatar 4001 16385
Arabic - Syria 2801 10241
Arabic - Tunisia 1c01 7169
Arabic - U.A.E. 3801 14337
Arabic - Yemen 2401 9217
Armenian - Armenia 042b 1067
Assamese 044d 1101
Azeri (Cyrillic) 082c 2092
Azeri (Latin) 042c 1068
Bashkir 046d 1133
Basque 042d 1069
Belarusian 0423 1059
Bengali (India) 0445 1093
Bengali (Bangladesh) 0845 2117
Bosnian (Bosnia/Herzegovina) 141A 5146
Breton 047e 1150
Bulgarian 0402 1026
Burmese 0455 1109
Catalan 0403 1027
Cherokee - United States 045c 1116
Chinese - People's Republic of China 0804 2052
Chinese - Singapore 1004 4100
Chinese - Taiwan 0404 1028
Chinese - Hong Kong SAR 0c04 3076
Chinese - Macao SAR 1404 5124
Corsican 0483 1155
Croatian 041a 1050
Croatian (Bosnia/Herzegovina) 101a 4122
Czech 0405 1029
Danish 0406 1030
Dari 048c 1164
Divehi 0465 1125
Dutch - Netherlands 0413 1043
Dutch - Belgium 0813 2067
Edo 0466 1126
English - United States 0409 1033
English - United Kingdom 0809 2057
English - Australia 0c09 3081
English - Belize 2809 10249
English - Canada 1009 4105
English - Caribbean 2409 9225
English - Hong Kong SAR 3c09 15369
English - India 4009 16393
English - Indonesia 3809 14345
English - Ireland 1809 6153
English - Jamaica 2009 8201
English - Malaysia 4409 17417
English - New Zealand 1409 5129
English - Philippines 3409 13321
English - Singapore 4809 18441
English - South Africa 1c09 7177
English - Trinidad 2c09 11273
English - Zimbabwe 3009 12297
Estonian 0425 1061
Faroese 0438 1080
Farsi 0429 1065
Filipino 0464 1124
Finnish 040b 1035
French - France 040c 1036
French - Belgium 080c 2060
French - Cameroon 2c0c 11276
French - Canada 0c0c 3084
French - Democratic Rep. of Congo 240c 9228
French - Cote d'Ivoire 300c 12300
French - Haiti 3c0c 15372
French - Luxembourg 140c 5132
French - Mali 340c 13324
French - Monaco 180c 6156
French - Morocco 380c 14348
French - North Africa e40c 58380
French - Reunion 200c 8204
French - Senegal 280c 10252
French - Switzerland 100c 4108
French - West Indies 1c0c 7180
Frisian - Netherlands 0462 1122
Fulfulde - Nigeria 0467 1127
Galician 0456 1110
Georgian 0437 1079
German - Germany 0407 1031
German - Austria 0c07 3079
German - Liechtenstein 1407 5127
German - Luxembourg 1007 4103
German - Switzerland 0807 2055
Greek 0408 1032
Greenlandic 046f 1135
Guarani - Paraguay 0474 1140
Gujarati 0447 1095
Hausa - Nigeria 0468 1128
Hawaiian - United States 0475 1141
Hebrew 040d 1037
Hindi 0439 1081
Hungarian 040e 1038
Ibibio - Nigeria 0469 1129
Icelandic 040f 1039
Igbo - Nigeria 0470 1136
Indonesian 0421 1057
Inuktitut 045d 1117
Irish 083c 2108
Italian - Italy 0410 1040
Italian - Switzerland 0810 2064
Japanese 0411 1041
K'iche 0486 1158
Kannada 044b 1099
Kanuri - Nigeria 0471 1137
Kashmiri 0860 2144
Kashmiri (Arabic) 0460 1120
Kazakh 043f 1087
Khmer 0453 1107
Kinyarwanda 0487 1159
Konkani 0457 1111
Korean 0412 1042
Kyrgyz (Cyrillic) 0440 1088
Lao 0454 1108
Latin 0476 1142
Latvian 0426 1062
Lithuanian 0427 1063
Luxembourgish 046e 1134
Macedonian 042f 1071
Malay - Malaysia 043e 1086
Malay - Brunei Darussalam 083e 2110
Malayalam 044c 1100
Maltese 043a 1082
Manipuri 0458 1112
Maori - New Zealand 0481 1153
Mapudungun 0471 1146
Marathi 044e 1102
Mohawk 047c 1148
Mongolian (Cyrillic) 0450 1104
Mongolian (Mongolian) 0850 2128
Nepali 0461 1121
Nepali - India 0861 2145
Norwegian (Bokmål) 0414 1044
Norwegian (Nynorsk) 0814 2068
Occitan 0482 1154
Oriya 0448 1096
Oromo 0472 1138
Papiamentu 0479 1145
Pashto 0463 1123
Polish 0415 1045
Portuguese - Brazil 0416 1046
Portuguese - Portugal 0816 2070
Punjabi 0446 1094
Punjabi (Pakistan) 0846 2118
Quecha - Bolivia 046B 1131
Quecha - Ecuador 086B 2155
Quecha - Peru 0C6B 3179
Rhaeto-Romanic 0417 1047
Romanian 0418 1048
Romanian - Moldava 0818 2072
Russian 0419 1049
Russian - Moldava 0819 2073
Sami (Lappish) 043b 1083
Sanskrit 044f 1103
Scottish Gaelic 043c 1084
Sepedi 046c 1132
Serbian (Cyrillic) 0c1a 3098
Serbian (Latin) 081a 2074
Sindhi - India 0459 1113
Sindhi - Pakistan 0859 2137
Sinhalese - Sri Lanka 045b 1115
Slovak 041b 1051
Slovenian 0424 1060
Somali 0477 1143
Sorbian 042e 1070
Spanish - Spain (Modern Sort) 0c0a 3082
Spanish - Spain (Traditional Sort) 040a 1034
Spanish - Argentina 2c0a 11274
Spanish - Bolivia 400a 16394
Spanish - Chile 340a 13322
Spanish - Colombia 240a 9226
Spanish - Costa Rica 140a 5130
Spanish - Dominican Republic 1c0a 7178
Spanish - Ecuador 300a 12298
Spanish - El Salvador 440a 17418
Spanish - Guatemala 100a 4106
Spanish - Honduras 480a 18442
Spanish - Latin America 580a 22538
Spanish - Mexico 080a 2058
Spanish - Nicaragua 4c0a 19466
Spanish - Panama 180a 6154
Spanish - Paraguay 3c0a 15370
Spanish - Peru 280a 10250
Spanish - Puerto Rico 500a 20490
Spanish - United States 540a 21514
Spanish - Uruguay 380a 14346
Spanish - Venezuela 200a 8202
Sutu 0430 1072
Swahili 0441 1089
Swedish 041d 1053
Swedish - Finland 081d 2077
Syriac 045a 1114
Tajik 0428 1064
Tamazight (Arabic) 045f 1119
Tamazight (Latin) 085f 2143
Tamil 0449 1097
Tatar 0444 1092
Telugu 044a 1098
Thai 041e 1054
Tibetan - Bhutan 0851 2129
Tibetan - People's Republic of China 0451 1105
Tigrigna - Eritrea 0873 2163
Tigrigna - Ethiopia 0473 1139
Tsonga 0431 1073
Tswana 0432 1074
Turkish 041f 1055
Turkmen 0442 1090
Uighur - China 0480 1152
Ukrainian 0422 1058
Urdu 0420 1056
Urdu - India 0820 2080
Uzbek (Cyrillic) 0843 2115
Uzbek (Latin) 0443 1091
Venda 0433 1075
Vietnamese 042a 1066
Welsh 0452 1106
Wolof 0488 1160
Xhosa 0434 1076
Yakut 0485 1157
Yi 0478 1144
Yiddish 043d 1085
Yoruba 046a 1130
Zulu 0435 1077
HID (Human Interface Device) 04ff 1279

Kolay gelsin.

--

TT

Cuma, Ağustos 13, 2010

SharePoint 2010 - SPD 2010 ile Server–Side Kod Yazmak

SharePoint Designer 2010 ile cs ya da vb kod yazamıyorum. Ne yapmam gerekiyor? Sad smileCEVAP: Aşağıdaki yazıyı okuman sana yardımcı olabilir. Smile

SharePoint 2010 ile basit web sayfalarını en rahat oluşturabileceğimiz ve master page birlikteliğini sağlayabilceğimiz en başarılı uygulama SharePoint Designer 2010 (SPD 2010) uygulamasıdır. Bu sebepten ötürüdür ki SharePoint 2010 ‘u eline alan uygulama geliştiricilerin büyük bir çoğunluğu root klasöre de erişebilme özelliği sebebi ile yeni bir sayfa v.b. eklemek istediklerinde bu uygulamayı kullanırlar. Evet kesinlikle kabul ediyorum en hızlı Asp.Net sayfa oluşturup yayınlayabileceğiniz uygulamadır. Ancak Server-Side kod yazarken yani Event yakalayıp o esnada bir işlem yaptırtmak istediğimiz zamanlarda biraz sıkıntılı bir yanı vardır. Bu yazımızda sıkıntılı yanı nasıl aşabileceğimize değinmeye çalışacağız.

 

Öncelikle SPD 2010 üzerinde SitePages kısmına gelip web sayfası oluşturuyor sonraısında ise arka planda otomatik oluşmuş kod parçasına göz atıyoruz.

 

Kod kısmının görünümü ise aşağıdaki gibidir.

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"</a>>
<%@ Page Language="C#" %>
<html dir="ltr" xmlns="<a href="http://www.w3.org/1999/xhtml"">http://www.w3.org/1999/xhtml"</a> xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">

<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<head runat="server">
<meta name="WebPartPageExpansion" content="full" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled 1</title>

<!--[if gte mso 9]>
<SharePoint:CTFieldRefs runat=server Prefix="mso:" FieldList="FileLeafRef,WikiField,_dlc_DocId,_dlc_DocIdUrl,_dlc_DocIdPersistId"><xml>
   
<mso:CustomDocumentProperties>
<mso:_dlc_DocId msdt:dt="string">WM56YMSTHXCT-11-5</mso:_dlc_DocId>
<mso:_dlc_DocIdItemGuid msdt:dt="string">e2f62402-89fd-4320-9663-f86e1492ee1a</mso:_dlc_DocIdItemGuid>
<mso:_dlc_DocIdUrl msdt:dt="string"><a href="http://turhal-pc/test/_layouts/DocIdRedir.aspx?ID=WM56YMSTHXCT-11-5">http://turhal-pc/test/_layouts/DocIdRedir.aspx?ID=WM56YMSTHXCT-11-5</a>, WM56YMSTHXCT-11-5</mso:_dlc_DocIdUrl>
</mso:CustomDocumentProperties>
</xml></SharePoint:CTFieldRefs><![endif]-->
</head>

<body>

<form id="form1" runat="server">
</form>

</body>

</html>

 

Sayfanın SharePoint şablonlarını saymazsak Asp.Net sayfası olduğunu gözlemleriz. Bu durumda eski bilgilerimizi aklımıza getirelim. Eğer ki asp.net sayfada kod dosyası kullanma şansımız yoksa aspx sayfaya server-side kod için script ekleyip metot v.b. kod parçalarını bu kısma ekliyorduk. O zaman şimdi bu yöntem ile sayfayı düzenleyip ve Page_Load olayını tetikleyen ufak bir kod parçası yazalım.

 

<script runat=”Server” >

protected void Page_Load (object sender, EventArgs e)

{

    form1.InnerHtml = “<h1> Merhabaaa </h1>”

}
</script>

 

Bu değişikliği kaydedip publish ettiğimizde source kodun içerisinde server-side kod kullanamayacağımızı açıklayan bir hata alırız. Peki bu durumda ne yapmamız gerekiyor. Aslında işlem basit. Web.config içerisinde SharePoint tarafında aspx sayfalarının içerisinde Server-Side kullanımı engelenmiştir. Bizim yapmamız gereken bunu aktif duruma getirmek olacaktır.

 

Web.Config dosyasının içerisinde configuration/SharePoint/PageParserPath bölümüne gelip aşağıdaki kod parçasını ekliyoruz.

 

<PageParserPaths>

    <PageParserPath VirtualPath=”test/SitePages/Article_Page.aspx” CompilationMode=”Always” AllowServerScript=”True” />

</PageParserPaths>

 

Evet işlem sadece bu kadar. Değişiklik sonrasında sayfanızı sorunsuzca kullanmaya başlayabilirsiniz. Ancak bu yazıyı okuduktan sonra aklınıza şu tür sorular gelebilir. Evet bu şekilde sayfayı çalıştırdık. Ancak benim 100 tane sayfam var hepsi içinde mi bu yöntemi kullanmalıyım. Hepsine bir arada seçebileceğim bir teknik yok mudur?

Cevabı ise hayır yoktur olacaktır. SharePoint 2010 genel anlamda eğer ki Server-Side kod geliştirmek istiyorsanız bunu Visual Studio içerisinde yapmanız gerekmektedir der. Bu sebeple bu kadar çok sayfanız var ise yapılması gereken VS2010 uygulamasında SharePoint Module ‘ler geliştirip web sayfalarını onun üzerind en taşımak olacaktır. Hayır bunu istemiyorum derseniz ise tek tek sayfanızın sunucu da olduğu yer bilgisi ile birlikte eklemeniz gerekecektir.

 

Umarım yararlı olmuştur.

Salı, Haziran 01, 2010

Visual Studio 2010 – Microsoft Report Raporlarına Resim Ekleme

Hem kurumsal hem de kobilere uygulama geliştiren yazılım geliştiricileri göz önüne aldığımızda en çok uğraştıkları alan sqlden veri çekip bu veriler üzerinde işlem yapmaktır. Bu işlemlerin büyük bir çoğunluğu da satış verilerinin raporlanması ve sunulması üzerinedir. Bir önceki yazımızda Microsoft Report yardımı ile hızlıca bir raporu nasıl hazırlayabileceğimizi incelemeye çalışmıştıktık. Bu yazımızda ise tablo içerisinde sunmuş olduğumuz verilerden gelen değerlere göre resim eklemek için neler yapabileceğimizi incelemeye çalışıyor olacağız.

Şöyle bir senaryo üzerinden anlatmak gerekirse, bir firma elinde var olan satışları dönemsel olarak karşılaştırmak istiyor. Eğer ki iki dönem arasında elde edilen sonuç negatif ise eksi yönde bir resim, pozitif yönde ise artı yönde bir resmin gösterilmesi gerekecektir. Ya da başka bir örnek üzerinden düşünürksek bir ürünün stok durumu takip ediliyor ve veriler var ya da yok şeklinde gösteriliyor. Ancak raporu kontrol eden insanlar o metin kalabalığının arasında bir de var/yok şeklinde metin aramak yerine varsa bunu gösteren bir simge, yoksa da yine aynı şekilde bunu gösteren bir simgenin olmasıni istemektedir ki bu isteğinde oldukça haklıdır. Yine bu durumda gelen değere göre resim eklenebilmesi mümkündür. O zaman şimdi hızlıca bir önceki raporun görüntüsünü hatırlayalım ve resmi nasıl ekleyebileceğimizi hızlıca öğreniyor olalım.

mak94_1

Resim ekleme işlemine başlayabiliriz. Öncelikli olarak RDLC rapor dosyasını veri nesnelerinin yer aldığı ReportData Toolbar 'ına gidiyor ve Image klasörünün üzerinde sağ tıklama ile resim ekle diyoruz.

mak94_2

Kullanacak olduğumuz ikonları seçeceğimiz ekran karşımıza çıkacaktır. Buradan istediğimiz ikonları seçenebiliriz.

mak94_3

ReportData kısmında resimleri gördükten sonra gerekli işlemleri yapmaya başlayabiliriz.

mak94_4

Şimdi yapmamız gereken Discontinued kolonunda expression değer kısmına resimlerden birini sürüklüyoruz.

mak94_5

Bu işlem sonrasında karşımıza bilgilendirme ekranı çıkacak. Buradan da fx düğmesine bastığımızda da karşımıza expression girebileceğimiz bir ekran çıkacaktır. Bu ekranda hangi durumda hangi resmin görüntüleneceğini belirtiyoruz.

mak94_6

=IIf(Fields!Discontinued.Value = True, “discontinued_icon”, “available_icon”)
mak94_7

İşlemler sonrasında raporu kaydettiğimizde Discontinued yazan kısımda artık burada resmin gösterileceğini belirten ufak bir ikonunu yer aldığını görüyor olacağız.

mak94_8

Şimdi ise görünecek olan resmin boyutunu sabitleyerek tasarımsal bir sorun ile karşılaşmamak için yapmamız gereken bir kaç işlem var. Bunun için resimin üzerine sağ tıklama yapıyor özellikler ekranından değerlerini aşağıdaki gibi düzenliyoruz.

mak94_9

İstersen Border kısmında resimlere kenarlık belirtebilmemiz mümkündür.

mak94_10

Yapmış olduğumuz işlemler sonrasında raporun düzenlenmesi tamamlanmıştır. Bakalım görsel olarak görüntüsü istediğimiz gibi olabilmiş mi?

mak94_11

Evet. İstenen sonuç oldukça tatmin edici.

Sonuç olarak bu yazımızda Microsoft Report raporlarında gelen verinin durumuna göre bunları resim ile nasıl gösterebileceğimizi incelemeye çalıştık.

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

Turhal Temizer

info@turhaltemizer.com

Pazartesi, Mayıs 31, 2010

Visual Studio 2010 – Asp.Net ile Microsoft Report Kullanımı

Hem kurumsal hem de kobilere uygulama geliştiren yazılım geliştiricileri göz önüne aldığımızda en çok uğraştıkları alan sqlden veri çekip bu veriler üzerinde işlem yapmaktır. Bu amaçla da en sık yapılan işlem elde bulunan mevcut verilerin raporlanması ve bunların Excel, Word, PDF v.b. formatlarda sunumlarının yapılmadır. Zaman içerisinde ilerleyen istekler doğrultusunda raporların istendiği an görüntülenip çıktılarının alınması gibi isteklerde olacaktır. Bu isteklere yanıt verebilmek için ise, SQL Server Reporting Services aracını kullanır ve özel istekleri spesifik olarak karşılayan raporlar hazırlanır. SSRS üzerinde uygulama geliştirilmek istediğinde bu aracın özelliklerine hakim olmak ve istekleri sql procedure 'leri yardımı ile oluşturup bunları kullanabilmek gibi işlemlerin yapılması gerekiyor. Ek olarak bu konu ayrı bir uzmanlık alanıdır. Ancak bilişim sektöründe yazılımcılardan bu konular üzerinde de bilgi sahibi olmaları ve geliştirme yapabilmeleri beklentisi bulunmaktadır. İşte biz bu noktada SSRS 'in biraz daha basitleşmiş ancak SSRS 2005 sürümünden daha yetkin olan Visual Studio 2010 üzerindeki Report şablonunu kullanarak asp.net üzerinde görüntüleyebilmek mümkündür. Bizde *.RDLC rapor tiplerini asp.net üzerinde kullanmak için ne gibi işlemler yapılması gerektiğini ve nasıl entegre edebileceğimizi incelemeye çalışacağız.

İşlemlere başlamadan önce Visual Studio 2010 IDE 'sini .Net Framework 4.0 sürümünü kullandığımızı belirtmekte yarar var.

mak93_1

Projeyi oluşturduktan sonra veri ile ilgili sınıf ve entity 'leri içerisinde barındıracak olan DAL isimli klasör oluşturuyoruz.

mak93_2

Örnek üzerinde kullanacak olduğumuz veri Northwind satış verileri olacaktır. Erişmek için ise Ado.Net Entity Framework Data Model 'i kullanıyor olacağız.

mak93_3

Generate from Database seçeneğine seçerek işlemlere devam ediyoruz.

mak93_4
Karşımıza çıkacak olan ekrandan Northwind veri tabanına erişmeyi sağlayacak olan veri bağlantısını hazırlayıp bir sonraki adıma geçiyoruz.

mak93_5

Sıra kullanacak olduğumuz tabloları seçmeye geldi. Kullanacak olduğumuz tablolar, kategoriler, ürünler ve satıcılar olacaktır. Bu üçünü seçip işlemlere devam ediyoruz.

mak93_6

Sihirbazın adımlarını sonlandırarak Ado.Net Entity Framework Data Model içerisine eklenmiş olan tabloları ve elemanlarını kontrol ettikten sonra uygulamayı bir kez derliyor ve işlemlerimize devam ediyoruz.

mak93_7
Artık veri tabanına erişmek için gerekli tabloları kullanabilir duruma geldik. Şimdi ise yapmamız için veri transferi için sınıfları oluşturmak olacaktır. Bu işlemler esnasında tablolar içerisinde kullanacak olduğumuz elemanları Business Entity olarak tanımlıyor olacağız.

Adım adım sınıfları oluşturmaya başlayalım. Veri ile ilgili sınıfların DAL klasörünün içerisinde bulunacağından bahsetmiştik. ProductViewModel isimli sınıfı ekliyor ve içeriğine aşağıda yer alan kod parçasını ekliyoruz.

public class ProductViewModel
{
    public int? ProductID { get; set; }
    public string ProductName { get; set; }
    public System.Nullable<decimal> UnitPrice { get; set; }
    public string CategoryName { get; set; }
    public int? CategoryID { get; set; }
    public int? SupplierID { get; set; }
    public bool Discontinued { get; set; }
}

Müşteri bilgisini daha sonra dropdownlist içerisinde kullanmak amacıyla SuppliersViewModel isimli sınıf oluşturuyoruz.

public class SupplierViewModel
{
    public string CompanyName { get; set; }
    public int SupplierID { get; set; }
}

CategoryViewModel sınıfını ekliyoruz.

Public class CategoryViewModel
{
    public string CategoryName { get; set; }
    public int CategoryID { get; set; }
}

IProductRepository isimli arayüz oluşturuyoruz. Bu arayüz ile entity model içerisinde yer alan objelere erişerek sorgular hazırlayarak bütün veriye ulaşmayı sağlayacağız.

interface IProductRepository
{
    IQueryable<Product> GetProducts();
    IQueryable<ProductViewModel> GetProductsProjected(int? supplierID, int? categoryID);
    IQueryable<SupplierViewModel> GetSuppliers();
    IQueryable<CategoryViewModel> GetCategories();
}

IProductRepository arayüzünü implement edecek ProductRepository isimli bir sınıf oluşturuyoruz ve arayüzün elemanlarına aşağıdaki görevleri yapacak olan kod parçalarını ekliyoruz.

GetProducts() - Bütün ürün bilgisini döndürecek
GetProductProjected() - SupplierID ve CategoryID 'ye göre filtrelenmiş veri döndürecektir.
GetSuppliers() - Satıcı verisini döndürecektir.
GetCategories() - Kategori bilgisini döndürecektir.

using System.Linq;

namespace NorthwindReports.DAL
{
    public class ProductRepository:IProductRepository
    {
        #region IProductRepository Members

        public IQueryable<Product> GetProducts()
        {
            var dataContext = new NorthwindEntities();
            var products = from p in dataContext.Products
                                 select p;
            return products;
        }

        public IQueryable<ProductViewModel> GetProductsProjected(int? supplierID, int? categoryID)
        {
            var projectedProducts = from p in GetProducts()
            select new ProductViewModel
                           {
                               ProductID = p.ProductID,
                               ProductName = p.ProductName,
                               UnitPrice = p.UnitPrice,
                               CategoryName = p.Category.CategoryName,
                               CategoryID = p.CategoryID,
                               SupplierID = p.SupplierID,
                               Discontinued = p.Discontinued
                           };
            if (supplierID.HasValue)
                projectedProducts = projectedProducts.Where(a => a.SupplierID == supplierID);

            if (categoryID.HasValue)
                projectedProducts = projectedProducts.Where(a => a.CategoryID == categoryID);

            return projectedProducts;
        }

        public IQueryable<SupplierViewModel> GetSuppliers()
        {
            var dataContext = new NorthwindEntities();
            var suppliers = from s in dataContext.Suppliers
                                  select new SupplierViewModel
                                  {
                                      SupplierID = s.SupplierID,
                                      CompanyName = s.CompanyName
                                  };
            return suppliers;
        }

        public IQueryable<CategoryViewModel> GetCategories()
        {
            var dataContext = new NorthwindEntities();
            var categories = from c in dataContext.Categories
                                   select new CategoryViewModel
                                   {
                                       CategoryID = c.CategoryID,
                                       CategoryName = c.CategoryName
                                   };
            return categories;
        }

        #endregion
    }
}

Bu sınıfıda hazırladıktan sonra DAL içerisinde yapacak olduğumuz işlemleri tamamlamış oluyoruz. Şimdi klasörün içerisine bir göz atalım hangi sınıflarımız oldu.

mak93_8
Raporları ekleyecek olduğumuz ve daha sonrasında da çağıracağımız RDLC isimli bir dosya kullanıyoruz. Bu dosyanın üzerinde sağ tıklama yaptıktan sonra rapor şablonları arasında yer alan Report Wizard şablonu yardımı ile raporu hazırlamaya başlıyoruz.

mak93_9

Karşımıza çıkan ekranda DataSet Name kısmına "ProductDataSet", DataSource kısmına "NorthwindReports.DAL" kullanacağı metodu ise ProductRepository(GetProductProjected) seçimlerini yaparak işlemlere devam ediyoruz.

mak93_10

Gösterilecek olan verileri Values bölümüne sürükleyip bırakıyoruz.

mak93_11

Sıradaki ekranda herhangi bir işlem yapmamıza gerek yoktur. Bu ekran raporun görünümünün nasıl olacağına ilişkin ufak bir görünüm sunmaktadır.

mak93_12

Raporu, eğer ki hazır stillerden birini seçerek kullanmak isterseniz işlemleri bu ekran üzerinden yapılır.

mak93_13

Artık raporun ön tasarımını hazırlamış bulunuyoruz. Şimdi üst ve alt bilgi ekleme işlemleri için boş bir kısımda sağ tıklama sonrasında aşağıdaki ekranı çıkarıyor ve alt, üst bilgi ekle seçeneklerini seçerek işlemlere devam ediyoruz.

mak93_14

Alt ve üst bilgilere textbox v.b. kontroller ekleyebiliriz.

mak93_15

Eklemiş olduğumuz bu kontrollerin ve verilerin gözükecek olduğu tablo üzerinde tasarımsal değişiklikler yapabiliriz. Bunun için üst kısımda yer alan formating toolbar işimizi görecektir.

mak93_16

TextBox 'ların içerisine yalnızca sabit veriler değil, değişken verilerinde eklenebilmesi mümkündür. Bunun için üzerinde sağ tıklama yaptıktan sonra Expression... seçeneği yardımı ile karşımıza çıkan ekranda başında "=" olacak şekilde kod parçacıklarını ekleyebiliriz.

mak93_17

Verilerin gösterileceği tabloda yer alan textbox lar üzerinde görünüm ile ilgili değişiklikler yapılabilmesi mümkündür. Örneğin UnitPrice değeri paradır ve bu değerin yanında o ülkenin para değerinin gözükmesi gerekmektedir. Bu işlemi yapabilmek için üzerinde sağ tıklama yaparak Text Box Properties seçeneğini seçiyoruz.

mak93_18

Sonrasında Number tabı içerisinde yer alan kategorilerden Currency 'i seçip işlemi tamamlıyoruz.

mak93_19

Raporları yalnızca tablo içerisinde veriler ile değil, grafiksel olarakta sunabilmemiz mümkündür. Bunun için Toolbox içerisinden Chart kontrolünü rapor ekranına sürüklememiz yeterli olacaktır.

mak93_20

Rapor kontrolünü sürüklediğimizde bizden ne tür arayüzde bir rapor istediğimize ilişkin bir seçim yapmamızı isteyecektir.

mak93_21

Sonrasında eklenen grafiğin hangi koordinatında hangi verinin olacağına ilişkin bilgiyi giriyor olacağız. Bunun için Report Data içerisinden UnitPrice ve CategoryName alanlarını sürüklüyoruz.

mak93_22
Koordinatların daha düzgün gözükebilmesi için grafiğin boyunu genişletiyoruz.

mak93_23

Görmüş olduğumuz seri doğrularının görsel görünümlerini değiştrebilmemiz mümkündür. Bunun için üzerinde sağ tıklama yaptıktan sonra Series Properties seçeneğini tıklıyoruz. Sonrasında Fill tabını seçiyor ve aşağıdaki görsel görünümü uyguluyoruz.

mak93_24

Sıradaki adım aspx dosyaya raporun görüntelenmesi için ReportViewer kontrolünü ekliyoruz.

<div>
    <asp:ScriptManager ID="smScriptManager" runat="server">
    </asp:ScriptManager>
    <div id="searchFilter">
        Filtre : Kategori :
        <asp:DropDownList ID="ddlCategories" runat="server" />
        ve Satıcı:
        <asp:DropDownList ID="ddlSuppliers" runat="server" />
    </div>
    <rsweb:ReportViewer ID="rvProducts" runat="server">
    </rsweb:ReportViewer>
</div>

Sayfa içerisinde değişiklik yaptıktan sonra görünümü aşağıdaki gibi olmuştur.

mak93_25

Sonrasında rapor ekranının boyutunu düzenliyoruz.

mak93_26

ReportViewer 'in veriyi göstereceği rapor dosyasını seçiyor sonrasında da choos Data Source ile düzenleme yapıyoruz.

mak93_27

Yeni bir DataSource seçeneğini seçiyoruz.

mak93_28

Object veri bağlantısı seçeneğini seçiyoruz.

mak93_29
ProductRepository iş nesnesini seçiyoruz.
mak93_30

Bir sonraki ekrandan GetProductProjected metodunu seçiyoruz.

mak93_31

Sonrasında supplierID ve categoryID 'yi Control olarak belirleyip ddlCategories kontorlüne bağlıyoruz.

mak93_32

Benzer işlemi supplier dropdownlist 'i için de hazırlıyoruz. Sonrasında bu iki bileşenin SelectedIndexChanged olaylarına aşağıdaki kod parçasını ekleyerek geliştirme sürecini tamamlıyoruz.

protected void ddlCategories_SelectedIndexChanged(object sender, EventArgs e)
{
    rvProducts.LocalReport.Refresh();
}

protected void ddlSuppliers_SelectedIndexChanged(object sender, EventArgs e)
{
    rvProducts.LocalReport.Refresh();
}

Bu işlemler sonrasında raporu hazırlamış bulunuyoruz.

Bu yazımız boyunca veri katmanını oluşturup, RDLC raporunu ekleyip, grafik ile görselleştirdikten sonra web sayfasına nasıl ekleyip kullanabileceğimizi incelemeye çalıştık.

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

Turhal Temizer

info@turhaltemizer.com

Perşembe, Nisan 22, 2010

Enterprise Library 5.0

Data, ön bellek, şifreleme, istisnai durumlar ve daha bir çok özelliği hazırlamış olduğumuz uygulamalarda daha esnek ve kolay geliştirmemize olanak tanıyan Enterprise Library ‘nin 5 sürümünü aşağıdaki linkten indirebilirsiniz. Bizlere sağladığı olanaklar aşağıdan erişebilirsiniz.

  • •Major architectural refactoring that provides improved testability and maintainability through full support of the dependency injection style of development
  • •Dependency injection container independence (Unity ships with Enterprise Library, but you can replace it with a container of your choice)
  • •Programmatic configuration support, including a fluent configuration interface and an XSD schema to enable IntelliSense
  • •Redesign of the configuration tool to provide:
    •     •A more usable and intuitive look and feel
    •     •Extensibility improvements through meta-data driven configuration visualizations that replace the requirement to write design time code
    •     •A wizard framework that can help to simplify complex configuration tasks
    • •Data accessors for more intuitive processing of data query results
    • •Asynchronous data access support
    • •Honoring validation attributes between Validation Application Block and DataAnnotations
    • •Integration with Windows Presentation Foundation (WPF) validation mechanisms
    • •Support for complex configuration scenarios, including additive merge from multiple configuration sources and hierarchical merge
    • •Optimized cache scavenging
    • •Better performance when logging
    • •A reduction of the number of assemblies
    • •Support for the .NET 4.0 Framework and integration with Microsoft Visual Studio 2010
    • •Improvements to Unity

    İyi çalışmalar…

 

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

Salı, Kasım 03, 2009

Sharepoint - Dinamik Olarak MasterPage Değiştirmek

Microsoft Sharepoint Server ve MOSS teknolojisi günümüzde portal sistemleri denince akla ilk gelen ve şirket yöneticilerinin aklına gelen ilk teknolojidir. Esnek yapısı ve alt yapı mimarisi ile geliştiricilerin işlerini kolaylaştıran araçları ile insanların ilgilisini çok kısa zamanda çekti ve çekmeyede devam edecektir. 

Bu yazımızda Sharepoint teknolojileri kullananan kurumlardan en çok istenen isteklerden birinin nasıl çözüleceğini incelemeye çalışacağız. Örneklemek gerekirse, bir kurumun içinde üç farklı çalışma grubu var yöneticinizin bu çalışma gruplarından hangisi sisteme girdiyse ona özel bir tasarım görünmesini istiyorum şeklinde isteği olabilir. Bu durumda bizim yapmamız gereken gerekli çözümleri üretip işi sonuca ulaştırmaktır.

Sharepoint Server ile MOSS üzerinde geliştirme yapılmaya başlandığında ilk olarak default.master ve CSS dosyası bizlerin kullanımına sunulmaktadır. Farklı kullanıcı gruplarından hangi grup girerse farklı bir masterpage 'in açılmasına olanak tanıyabilmek için ilk olarak bu masterpage 'leri sharepoint e uygun şekilde düzenlemek gerekmektedir. Şimdi masterpage 'leri sisteme dahil olan kullanıcı grubuna göre nasıl değiştirebileceğimizi incelemeye başlayalım.

ASP.NET Sayfasının İçerisinde MasterPage Nasıl Değiştirilir?

ASP.NET uygulama geliştiriciler sisteme dahil olan üyelere göre rahatlıkla masterpage ve sayfa içerisinde yer alan öğeleri değiştiebiliyorlar. Sisteme dahil olan kullanıcıları kontrol etmek için masterpage 'in içerisinde yer alan PreInit event 'ından yararlanmak gerekmektedir. Fakat unutulmaması gereken bir nokta var. Hazırlanmış olan uygulama da yalnızca üç beş tane asp.net sayfa olmayacak. Yüzlerce sayfa olacaktır. Bu durumda her sayfaya ve masterpage 'e PreInit olayını yakalamak ve belirteceğimiz kodları yazmak sistemi yavaşlatacak bir etken olacaktır. Bu sebepte her sayfa için taban bir sınıf oluşturup yapacak olduğumuz işlemleri bunun içerisinde yaparsak işlerimiz biraz daha kolaylayacaktır. Bu sebeple MyCustomBasePage isimli bir sınıf oluşturuyoruz ve Page sınıfından bu sınıfı türetiyoruz. Sonrasında ise, Page_PreInit olayına aşağıdaki kodları ekliyoruz.

public class MyCustomBasePage : System.Web.UI.Page
{
    protected void Page_PreInit(object sender, EventArgs e)
    {
        if (CurrentUser.UserType == UserType.Admin)
        {
            MasterPageFile = "~/MasterPages/AdminMaster.master";
        }
        else if (CurrentUser.UserType == UserType.NormalAuthenitcated)
        {
            MasterPageFile = "~/MasterPages/NormalAuthenticatedMaster.master";
        }
        else
        {
            MasterPageFile = "~/MasterPages/AnonymouskMaster.master";
        }
    }
}

Bu sınıfın içerisinde üç farklı kullanıcı grubu için master page ayarladık. Admin, Normal ve sistem tarafından tanınmayan kullanıcılara göre farklı masterpage ler çalışacak ve görsel olarak farklı bir görünüm ile karşılacaklardır.

Şimdi bu sınıfı oluşturduğumuza göre işimiz biraz daha kolaylaştı. Artık oluşturulan bütün sayfalardan MyCustomBasePage sınıfını kullanarak bu hazırlamış olduğumuz kontrolün aktifleşmesine olanak tanırız.

public partial class HomePage : MyCustomBasePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

Sharepoint İçerisinde MasterPage Nasıl Değiştirilir?

Ana mantık olarak web uygulamalarında her kullanıcı grubuna ya da değişik faktörlere göre masterpage 'i nasıl değiştrebileceğimizi biliyoruz. Biraz öncede incelemiştik. Harici bir sınıf oluşurulur ve sayfanın PreInit olayı yakalanılarak değişiklikler yapılabilirdi. Ancak Sharepoint içerisinde bu direk PreInit olayından yakalayabilmek dire mümkün değildir. Ancak bizden çözüm bekleniyor ve gerekli işlemleri yapmamız gerekmektedir. Sharepoint Sayfaları içerisinde PreInit olayını yakalayabilmek için HttpModule 'ün kullanılması gerekmektedir.

Asp.Net Pipeline Süreci

Asp.Net istek süreçleri pipeline mantığına göre işlemlerini sürdürmektedir. Aşağıdaki şekilde de göreceğiniz üzere her isteğe yanıt veren bir modül bulunmaktadır. İstekler yakalandıktan sonra gerekli modülün kullanılmasına olanak tanınır.



Genellikle istekler pipeline içerisinde yer alan modüller isteklere göre yanıt vermektedir. Eğer ki bir den fazla modüle istek yapılırsa da tek bir işleyici tarafında işlem yapılacaktır. Ancak bizim istediğimiz her modüle tek bir işleyicinin işlem yapmasıdır. Bu işlemide asp.net sayfasında PreInit olayı ile gerçekleştiririz.

HttpModule 'den yararlanarak PreInit Olayı İşlenmesinin Geliştirilmesi

HttpModule den yararlanarak bir sınıf geliştirilirken System.Web.IHttpModule sınıfı miraslanarak kullanılır. IHttpModule 'in iki tane metodu vardır. Bunlar Dispose ve Init 'dir. Init metodu başlatıldığında diğer aktif olan Initleri iptal ederek kendisini kullanmaya başlayacaktır.

public class DynamicMasterPageModule : IHttpModule
{
    public void Dispose()
    {
    }
    public void Init(HttpApplication context)
    {
        context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
    }
    void context_PreRequestHandlerExecute(object sender, EventArgs e)
    {
                Page page = HttpContext.Current.CurrentHandler as Page;
           if (page != null)
           {
               page.PreInit += new EventHandler(page_PreInit);
           }
    }
    void page_PreInit(object sender, EventArgs e)
    {
    }
}

Init metodunun içerisinde yer alan PreRequestHandlerExecute event 'ını yakalıyoruz. Asp.net sayfa başlarken bu olay tetiklenir. Sonrasıda açılacak olan sayfanın null olup olmadığının kontrolü sonrasında asp.net 'ten alışık oluğumuz PreInit olayının tetiklenmesi işlemini gerçekleştirebilmemize olanak tanınır.

Sharepoint MasterPage

Sharepoint 'in kendi varsayılan bir masterpage 'i vardır. Eğer bu masterpage üzerinde bir değişiklik ya da düzenleme yapmak istersek Sharepoint içeriğini görüntülemeye olanak tanıyan Sharepoint Designer içerisinde düzenleme yapmak gerekmektedir. Eğer ki oluşturulan ya da düzenlenen masterpage 'i kod tarafından çağırmak istersek Page.MasterPageFile özelliğini kullanmak gerekmektedir.

Page.MasterPageFile = "Masterpage 'in uygulama içerisindeki yolu";

Ancak dikkat edilmesi gereken bir nokta vardır. Masterpage sharepoint içerisinde farklı yerlerde bulıunabilir. Peki neden? Varsayılan sitenin içerisindeki olabilir, site koleksiyonunda olabilir gibi yerlerde olabilmektedir. Bunları örneklemek gerekirse,

"~site/MasterPageName.master"
Site klasörünün içerisinde yer alan masterpage 'in yolunu birden fazla masterpage olacağı için ~site/MasterPages/Masterpagename.master şeklinde güncellemelidir. MasterPage 'in yolunu adres çubuğunda görüntülemek için ise, http://sitecollection/site1 'in altında yer alan masterpage adresinden http://sitecollection/site1/masterpages/MyMaster.master yoluna göre güncelleriz.

"~sitecollection/MasterPageName.master"
Burada ise masterpage ~sitecollection yolunun içerisinden erişilebilmektedir. Ana sitenin yolu http://sitecollection iken http://sitecollection/MasterPageName.master yolu ile erişebilmek mümkündür.

Sharepoint İçerisinde Özel MasterPage Kullanımı

Eğer Sharepoint ile uygulama geliştirirken Sharepoint Designer yardımı ile yaparız. Özel bir masterpage oluşturmanın en kolay yolu var olan bir masterpage i tekrardan kopyalayarak yapıştırdıktan sonra gerekli düzenlemeleri yaparız.

Özel bir masterpage 'i oluşturduktan sonra diğer otomatik olarak bunun özel olarak oluşturulan bir masterpage olduğunu Sharepoint direkt anlamaz. Bu işlemi yapabilmek için Sharepoint Designer üzerinden de hazırlanan masterpage 'in üzerinde sağ tıklama yaparak bunu özel bir masterpage olduğunu belirten "Set as Custom Master Page" 'e tıklayarak belirtiriz.



Artık PreInit olayını yakaladıktan sonra web.config içerisinde MasterPage numarasını alıyoruz. Sonrasında eğer gelen sayfa numarası 1 ise custom1.master eğer gelen sayfa numarası 2 ise custom2.master 'ı aktif duruma getiriyoruz.


void page_PreInit(object sender, EventArgs e)
{
    Page page = sender as Page;
    string pageNo = ConfigurationManager.AppSettings["MasterPageNo"];


    if (page != null)
    {
        if (pageNo.Equals("1"))
            {
                page.MasterPageFile = "~masterurl/custom.master";
                if (SPContext.Current != null)
                {
                    SPContext.Current.Web.CustomMasterUrl = "/_catalogs/masterpage/custom1.master";
                }
            }
            else if (pageNo.Equals("2"))
           {
               page.MasterPageFile = "~masterurl/custom.master";
               if (SPContext.Current != null)
               {
                    SPContext.Current.Web.CustomMasterUrl = "/_catalogs/masterpage/custom2.master";
               }

           }
           else
           {
                page.MasterPageFile = "~masterurl/default.master";
                if (SPContext.Current != null)
               {
                    SPContext.Current.Web.MasterUrl = "/_catalogs/masterpage/default.master";
               }
       }

}

web.config 'den gelen değere göre hangi masterpage 'in geleceği dinamik olarak görüntülenmektedir. Bu işlemi işinizi görecek şekilde güncelleyerek sorunlarınızı kolayca çözebilirsiniz.

Sonuç olarak bu yazımızda belirli kriterler doğrultusunda sharepoint server portal in masterpage 'ini dinamik olarak nasıl değiştirebileceğimizi incelemeye çalıştık.

Umarım yararlı olabilmiştir.