18 Temmuz 2011 Pazartesi

Designing Site Pages by Using Controls

Consturcting Pages with Custom Controls

using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;

namespace CustomSitePages
{
  public class CustomControl1 : WebControl
  {
    protected override void RenderContents(HtmlTextWriter output)
    {
      SPWeb site = SPContext.Current.Web;
      output.Write("Current Site: " + site.Title);
      output.Write("<br/>");
      output.Write("Current Site ID: " + site.ID.ToString());
    }
  }
}

Yukarıdaki örnek RenderContents metodunu override ederek custom control sınıfını değiştirir.

Bir assembly DLL'ini deploy etmek için iki seçenek vardır. İlki DLL'i strong name ile compile ederek Global Assembly Cahce'e yüklemek. İkincisi DLL'i application'un root directory'sindeki bin klasörüne koymaktır.

Deploy işlemi tamamlandığında ASP.NET ile register edebilirsiniz.

<%@ Page MasterPageFile="~masterurl/default.master"
    meta:progid="SharePoint.WebPartPage.Document" %>

<%@ Register Assembly="CustomSitePages, ... "
    Namespace="CustomSitePages" TagPrefix="CustomSitePages" %>


<asp:Content ID="main"
     ContentPlaceHolderId="PlaceHolderMain"
     runat="server">

<h3>A custom control example</h3>

<CustomSitePages:CustomControl1 ID="cc1" runat="server" />

</asp:Content>

Eğer sayfa özelleştirilmiş ise, sayfa güvenli modda çalışacaktır. Bu durumda safe control olarak register edilmeyen kontroller hataya neden olacaktır. Bunu çözmek için web.config'e bir custom SafeControl eklememiz gerekmektedir.

<SafeControl
  Assembly="CustomSitePages, ..."
  Namespace="CustomSitePages"
  TypeName="CustomControl1"
/>

Consturcting Pages with User Controls

<%@ Control Language="C#" %>

<script runat="server">
  protected void cmdButton1_Click(object sender, EventArgs e) {
    lblStatus.Text = "Hello, World";
  }
</script>
<asp:Button ID="cmdAddCustomer" runat="server" Text="Add Customer"
            OnClick="cmdAddCustomer_Click" />
<br/>
<asp:Label ID="lblStatus" runat="server" Text="" />

Bu örnekte olduğu gibi user controllerine kolayca başlangıç yapabiliriz. Unutmamaız gereken bir ayrıntı olarak WSS user kontrollerinin kullanıcı özellleştirmesini destekleemz. User kontrolleri daima front-end Web serverın dosya sisteminden yüklenip assemblylere derlenir.

Ayrıca User Kontrollerine in-line kod da yazabilirsiniz.

<%@ Control Language="C#" %>
<%@ Assembly Name="Microsoft.SharePoint, ..." %>
<%@ Import Namespace="Microsoft.SharePoint" %>

<script runat="server">
  protected override void OnLoad(EventArgs e) {
    SPWeb site = SPContext.Current.Web;
    lblDisplay.Text = "Current Site: " + site.Url;
  }
</script>

<asp:Label ID="lblDisplay" runat="server" />

User Control ve Custom Control Templeate'leri C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\CONTROLTEMPLATES adlı klasörün içinde tutulur. Bu template'lerin virtual directory'si /_controltemplates'tir.

Custom Controls gibi User Controls'te de güvenli moda dikkat edilmelidir. Eğer bu kontrol özelleştirilmiş bir sayfaya uyarlanacaksa web.config'e SafeControl register edilmelidir.

<SafeControl
  Src="~/_controltemplates/*"
  IncludeSubFolders="True"
  Safe="True"
  AllowRemoteDesigner="True"
/>

Designing Web Part Pages

Web Part'ları özelleştirmek ve kişiselleştirmek site sayfalarında desteklenir fakat application sayfalarında desteklenmez. ASP.NET 2.0 application'ında web part oluşturmak için WebPartManager instance'ı ve bir veya birdefn fazla WebPartZone kontrolü içeren bir .aspx sayfası oluşturmamız gerekmektedir.

WSS 3.0'ın Web Part altyapısı standart WebPartManager kontrolünü kullanmaz. Bunun yerine WebPartManager'dan türeyen SPWebPartManager kullanılır. Bu kontrol standart WebPartManager'ı override eder.

Çoğu zaman SPWebPartManager ile uğraşmak gerekmez çünkü bu kontrol zaten default.master sayfasında tanımlanmıştır. Yani siz master'ı default.master olan bir sayfa oluşturduğunuzda SPWebPartmanager otomatik olarak eklenecektir. Yapmanız gereken tek şey gerekli WebPartZone kontrollerinin eklenmesidir.

Bir sayfa template'ine WebPartZone eklemek için Microsoft.SharePoint.dll assembly'sinden bütün kontrolleri getiren bir Register eklememiz gerekmeketir.

<%@ Page MasterPageFile="~masterurl/default.master"
    Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,
              Microsoft.SharePoint, [full 4-part assembly name]"
    meta:progid="SharePoint.WebPartPage.Document" %>

<%@ Register Tagprefix="WebPartPages"
    Namespace="Microsoft.SharePoint.WebPartPages"
    Assembly="Microsoft.SharePoint, ..." %>



Custom Web Part page






Rerefence: Inside Microsoft Windows SharePoint Services 3.0 by Ted Pattisonand, Daniel Larson

Hiç yorum yok:

Yorum Gönder