24 Şubat 2009 Salı

Sharepoint Survey EditForm.aspx nasıl editlenir?

Uğrastığım proje kapsamında Sharepoint'in anket yapısını customize etmem gerektiğinden bahsetmiştim. Sharepoint'in yapısı gereği ankete başladıgınızda bulundugunuz Anketin New Form.aspx sayfası, ankette ilerleyip başka bir soru için sayfa atladığınızda EditForm.aspx sayfası yüklenir. Benden her sayfaya ankette soruların % kaçı cevaplandıgına dair bir progress bar koymam istendi. NewForm.aspx ilk soru için çalışacağı için ilk sayfada %0 yazmasında bir sakınca yoktu. Fakat ankette dallanma sonucu başka bir sayfaya yönlendiğimizde EditForm.aspx sayfası yükleniyor. Burdaki mantık aslında gayet basit.. Ilk soru için NewForm.aspx'in çalısmasının sebebi Sharepoint anketine yeni bir cevap giriyor olmamız. Yani listeye yeni bir item giriyoruz dolayısıyla diğer tüm listelerde oldugu gibi NewForm.aspx sayfasıyla item olusturuluyor. Daha sonraki her cevabımızda kendi olusturdugumuz list item'ı editlemiş oluyoruz. Neyse bu kısa ön bilgiden sonra konumuza dönelim...

Öncelikle EditForm.aspx sayfası yüklendiğinde FirstField parametresinin içi o sayfada görüntülenecek ilk soru bilgisiyle dolar(EditForm.aspx?FirstField=naber gibi).
Bütün bu sorular anketimizin fieldlarına 0 indexinden başlayarak ekleniyor.Standart bir anketin 43 tane field ı oldugunu bildiğimize göre mevcut anketin field sayısından 43 ü çıkararak kaç tane soru oldugunu bulabiliyoruz.
FirstField QueryString değerini okuyarak da Sayfada görüntülenecek ilk soru değerini(Bu da anketin bir fieldına tekabül ediyor) alabiliyoruz. Bu ilk sorunun yani anket fieldının, anket fieldlarında kaçıncı sırada oldugunu bulup bunu toplam soru adetine oranlayarak anketin % kaçına geldiğini bulabiliyoruz kullanıcımızın. Mevzu kısaca bu, pek kısa olmadı gerçi.. Neyse Kodumu da açıklayıcı olması açısından aşağıya koyuyorum.

using System;using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
namespace TTEIMWebControls.UserControls.AnketCustomization
{public partial class AnketProgressBar : System.Web.UI.UserControl
{protected void Page_Load(object sender, EventArgs e)
{if (!this.IsPostBack)
{string firstField=Request.QueryString["FirstField"].ToString();
if (!firstField.Equals(string.Empty)){
string anketName = GetAnketName();
SPWeb curWeb = SPContext.Current.Web;
SPField field = curWeb.Lists[anketName].Fields.GetFieldByInternalName(firstField);
bool fieldExists = CheckField(field, curWeb.Lists[anketName]);
if (!fieldExists){
SPList anketList = curWeb.Lists[anketName];
/*each Question created by the user is added as a field, that's why we get the number ofquestions by subtracting the number of already existing fields from the total field count*/

int totalSoru = anketList.Fields.Count - 43;
int index = 1;/*we get the current question's index by iterating over the list's fields from* the start and break the loop whenever we find that question field*/
foreach (SPField fieldI in anketList.Fields){
if (fieldI.InternalName.Equals(firstField))
break;
index++;
}
int mevcutSoruİndex = index;
double percentage = ((double)100 / totalSoru) * index;

}
}
}
}


Bu user controlümüzü C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES dizini altına kopyalıyıp ilgili dll'i GAC'a deploy ediyoruz. Sonrasında Sharepoint Designer yardımıyla sitemize bağlanıp istediğimiz Anket'in EditForm. aspx 'inin içerisine register edip yerleştiriyoruz. Bundan sonra yarattıgımız anketlerin bu EditForm.aspx'i kullanmasını istiyorsak mevcut Anketimizi şablon olarak kaydedip bundan sonraki anketlerimizi bu şablondan yaratabiliriz.
Hepinize iyi çalışmalar..

Hiç yorum yok:

Yorum Gönder