Merhaba arkadaşlar bugün sizelere sharepoint online ya da on premise versiyonlarında Publishing Page için Custom Page Layout belirleyerek yeni bir sayfa oluşturmak ve bu saydaki alanlara değerlerini nasıl girebileceğinizden bahsedeceğim.
Ben bu uygulamayı biraz optimize hale getirerek tüm bilgileri konsol uygulamasını çalıştırdığınızda sizden isteyerek gerekli işlemi siz kod tarafında herhangi bir değişiklik yapmanıza gerek kalmadan yapacak şekilde tasarladım.
İlk olarak projemizi oluşturuyoruz ve projemize aşağıdaki referansları ekliyoruz.
- Microsoft.SharePoint.Client
- Microsoft.SharePoint.Client.Publishing
- Microsoft.SharePoint.Client.Runtime
Main içerisinde ilk olarak kullanıcıdan site adresini isteyerek başlıyoruz.
1 2 |
Console.WriteLine("Please Enter Site Address: "); string siteUrl = Console.ReadLine(); |
Kullanıcıdan site adresini aldıktan sonra bu adresin online mi yoksa on primes versiyon olup olmadığını algılamamız ve buna göre site erişim bilgilerini istememiz gerekmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
bool siteOnline = false; string siteUser = ""; string sitePassword = ""; string siteDomain = ""; if (siteUrl.Contains(".sharepoint.com")) { Console.WriteLine("This site is SharePoint Online Right ? (Y/N): "); string OnlineAnswer = Console.ReadLine(); if (OnlineAnswer.ToUpper() == "Y") { siteOnline = true; } } if (siteOnline) { Console.WriteLine("Please Enter Site Login User Email Address: "); siteUser = Console.ReadLine(); Console.WriteLine("Please Enter Site Login User Password: "); sitePassword = Console.ReadLine(); } else { Console.WriteLine("Please Enter Site Login User Domain Name: "); siteDomain = Console.ReadLine(); Console.WriteLine("Please Enter Site Login User Name: "); siteUser = Console.ReadLine(); Console.WriteLine("Please Enter Site Login User Password: "); sitePassword = Console.ReadLine(); } |
Bu kısımda girilen site adresinde “.sharepoint.com” var ise bu büyük ihtimal online hesabı olabilir ama on premise kısmında da bu şekil bir adres kullanma ihtimaline karşı online olsa bile bunu kullanıcıya doğrulatarak emin olmaya çalışıyoruz.
Eğer online ise kullanıcı mail adresi ve şifresi değil ise kullanıcı domain adı, kullanıcı adı ve şifresini istiyoruz. Bunların yanı sıra online olup olmamasına göre de login olma yöntemimizde değişecektir ondan dolayı tercihe göre de online mı değil mi diye elimizde bool değerinde bir değişken ile bu bilgiyi tutuyoruz.
Bu aşamadan sonra page layoutumuzun yer aldığı master page gallery adını almamız gerekmektedir.
1 2 |
Console.WriteLine("Please Enter Master Page Gallery Name: "); string siteMasterPageGallery = Console.ReadLine(); |
Burada farklı dillerde portaller olabileceği için bu isimler değişebilmektedir. Bundan dolayı bu adresler güncel almamız gerekiyor.
Daha sonra kullanıcıdan hangi page layout tipinde sayfa oluşturmak istediği bilgisini istiyoruz.
1 2 |
Console.WriteLine("Please Enter Create Publishing Page Content Type Display Name: "); string pageContentType = Console.ReadLine(); |
Burada girilecek bilgi page layoutun display name ismi olması gerekmektedir.
Daha sonra bu oluşturulacak sayfanın adını istememiz gerekiyor.
1 2 |
Console.WriteLine("Please Enter Create Publishing Page Name: "); string pageName = Console.ReadLine(); |
Bu kısımda istenen isim .aspx li url de oluşacak isim istenmektedir.
Bu kısıma kadar ki bilgiler sayfayı oluşturmamız için gerekli olan bilgilerdi. Şimdide Eğer bu page layout tipinde alanları da doldurmak istiyonip istenmediğini ve eğer isteniyorsa bu alanları ve değerlerini almamız gerekiyor.
1 2 3 4 |
Console.WriteLine("Do You Have Add Page Field Value (Y/N): "); string addPageValuAnswer = Console.ReadLine(); bool addPageValue = false; string addPageValueString = ""; |
Burada cevaba göre ilerideki işlemde ekleme işlemini dahil edip etmeyeceeğimizi hatırlamak içinde bir bool değişken ve eğer eklenecek ise bu alan isimleri ve değerlerini tutacağımız bir değişken tanımladık.
NOT: Burada eğer sizin seçtiğiniz page layout içinde zorunlu bir alan var ise bu alan için değer girmek zorundasınız. Değer girmediğiniz zaman uygulama da hata oluştu diye mesaj verecektir ama arka planda sayfayı oluşturmuş ve sizin üzerinizde check-out lu bir şekilde duruyor olacaktır. Burada hata verme sebebi sayfadaki zorunlu alanların girilmemesinden dolayı sayfayı check-in yapıp publish edememesidir.
1 2 3 4 5 6 7 8 |
if (addPageValuAnswer.ToUpper() == "Y") { addPageValue = true; Console.WriteLine("Please Enter Page Field Data ( ':' Separator Using For Field Name And Value, ';' Separator Using For Each Field Data ): "); Console.WriteLine("For Example ---> Title:TestPage;Comments:TestPage Comments "); Console.WriteLine(""); addPageValueString = Console.ReadLine(); } |
Eğer kullanıcı değer girişi istiyorsa burada giriş yapılacağını tutacağım bool değişkenimi true olarak güncelliyorum. Birden fazla alan bilgisi girilmesi için kendimce bir format tanımladım ve kullanıcıdan alan adı ve değeri arasına “:” işareti koyup her bir data için de aralarına “;” işareti koyarak data verilerini girmesini istiyorum. Bu yapıda şuanlık sadece string formatındaki alanlar için veri girişi sağlanmaktadır.
Bu işlemden sonra kullanıcı veri giriş aşamasını tamamlamış oluyoruz ve alınan bilgiler ile işlem yapma aşamasına geçiyoruz.
1 2 3 4 |
Console.WriteLine("Please Wait Start Create Process"); ClientContext clientContext = null; PublishingPage publishingPage = null; Web web = null; |
Kullanıcıya işleme başlandığına dair mesaj vererek genel olarak tüm süreçte kullanacağım değişkenleri tanımlıyorum. Bu kısımdan sonra aşama aşama ilerliyoruz.
ilk olarak site bağlantımızı yapıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
try { clientContext = new ClientContext(siteUrl); if (siteOnline) { clientContext.AuthenticationMode = ClientAuthenticationMode.Default; string password = sitePassword; System.Security.SecureString passwordChar = new System.Security.SecureString(); foreach (char ch in password) passwordChar.AppendChar(ch); clientContext.Credentials = new SharePointOnlineCredentials(siteUser, passwordChar); } else { clientContext.Credentials = new NetworkCredential(siteUser, sitePassword, siteDomain); } web = clientContext.Web; clientContext.Load(web); clientContext.ExecuteQuery(); } catch (Exception ex) { Console.WriteLine("This Site Connect Error Please Check Your Information And Try Again"); Console.WriteLine("Error Message: " + ex.Message); Console.ReadLine(); Environment.Exit(0); } |
Burada daha önce de bahsettiğim gibi sitenin online olup olmamasına göre site bağlantı çeşidimiz değişmekteydi. Bool bir değişken ile sitenin online olup olmadığını tutmuştuk ve buna görede bağlantı bilgilerini almıştık. Bu şekilde site bağlantımızı sağlıyoruz ve eğer bağlantımızda bir hata oluşursa yanlış bilgi veya başka bir sebepten bunun uyarısını vererek uygulamayı sonlandırıyoruz.
Siteye sorunsuz bir şekilde bağlantı sağladıktan sonra sayfa türümüze göre sayfamızı oluştuma aşamasına geçiyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
try { Console.WriteLine("This Site Connection Success"); Console.WriteLine("Please Wait Create Publishing Page"); List publishingLayouts = clientContext.Site.RootWeb.Lists.GetByTitle(siteMasterPageGallery); ListItemCollection allItems = publishingLayouts.GetItems(CamlQuery.CreateAllItemsQuery()); clientContext.Load(allItems, items => items.Include(item => item.DisplayName).Where(obj => obj.DisplayName == pageContentType)); clientContext.ExecuteQuery(); ListItem layout = allItems.Where(x => x.DisplayName == pageContentType).FirstOrDefault(); clientContext.Load(layout); PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(clientContext, web); clientContext.Load(publishingWeb); PublishingPageInformation publishingPageInfo = new PublishingPageInformation(); publishingPageInfo.Name = pageName.Contains(".aspx") ? pageName : pageName + ".aspx"; publishingPageInfo.PageLayoutListItem = layout; publishingPage = publishingWeb.AddPublishingPage(publishingPageInfo); clientContext.Load(publishingPage); clientContext.Load(publishingPage.ListItem.File); clientContext.ExecuteQuery(); } catch (Exception ex) { Console.WriteLine("This During Publishing Page Error Please Check Your Information And Try Again"); Console.WriteLine("Error Message: " + ex.Message); Console.ReadLine(); Environment.Exit(0); } Console.WriteLine("this Publishing Page Create Success"); |
Burada master page galeriye giderek orada verilen page layout tipimizi buralarak sayfa adımızı ile sayfayı oluştuma işlemini yapmaktayız. Sayfa adı kısmında kullanıcı url yapısı olduğundan sayfa adını .aspx olacak şekilde de girip girmeyeceğini belirtmediğimiz için kontrolümüzü burada sağlıyoruz. Eğer girmemiş ise biz ekliyoruz. Bu aşamada bir hata oluşursa eğer uyarı vererek hata mesajı ile uygulamayı sonlandırıyoruz. Eğer sorunsuz bir şekilde işlem gerçekleşti ise kullanıcıya mesaj ile bilgi veriyoruz.
Son aşamamız ise kullanıcının opsiyonuna göre çalış çalışmayacak olan sayfa verilerinin girişi kısmı olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
if (addPageValue) { try { Console.WriteLine("Please Wait Add Field Data Publishing Page"); ListItem listItem = publishingPage.ListItem; string[] dataArray = addPageValueString.Split(';'); foreach (string data in dataArray) { listItem[data.Split(':')[0]] = data.Split(':')[1]; } listItem.Update(); publishingPage.ListItem.File.CheckIn(string.Empty, CheckinType.MajorCheckIn); publishingPage.ListItem.File.Publish(string.Empty); clientContext.Load(publishingPage); clientContext.ExecuteQuery(); Console.WriteLine("Tihs Publishing Page Add Field Data Success"); } catch (Exception ex) { Console.WriteLine("This During Publishing Page Add Field Data Error Please Check Your Information And Try Again"); Console.WriteLine("Error Message: " + ex.Message); Console.ReadLine(); Environment.Exit(0); } } |
Daha önceden veri girişi yapıp yapmayacağı bilgisini ve eğer veri girişi yapacak ise bunu hangi formatta girmesi gerektiğini söyleyip gerekli bilgileri almıştır. Bu kısım eğer veri girişi yok ise atlanacaktır ama var ise istenilen formatta girilen verileri sayfaya ekleyecektir. Eğer veri giriş formatında ya da başka bir şeyden kaynaklı bir hata oluşacak olursa bunun bilgisi ve hata mesajı kullanıcıya verilecektir.
NOT: Burada daha önceki notta da bahsettiğim gibi yanlış alan adı veya fotmat girildiği zaman hata vermesine rağmen sayfa oluşmuş olacaktır sadece veri girişi olmayacak ve sadece sizin göreceğiniz şekilde üztünüzde check-out lu şekilde duracaktır.
Yukarıdaki veri girişi işlemi olmadığı zaman ya da olupta sorunsuz bir şekilde tamamlandıktan sonra kullanıya tüm bu işlemlerin başarı ile tamamlandığını ve sayfanın oluşturularak yayınlanıp kullanılmaya hazır olduğu bilgisini vererek uygulamamızı sonlandırıyoruz.
1 2 3 |
Console.WriteLine("All Process Complete Success"); Console.ReadLine(); Environment.Exit(0); |
Kodun tamamını ve projenin çalışır halini aşağıdan indirebilirsiniz.
İlk Yorumu Siz Yapın