27 Ağustos 2012 Pazartesi

Data Form WebPart (XSLT) ile e-mail adresine link verme (mailto)

SharePoint Designer arayüzü aracılığıyla yazabildiğimiz ve performansı düzgün kullanıldığında gayet iyi olan Data Form Web Part'larda XSLT aracılığıyla bir çok işlemi yapabilmekteyiz.

Listede sütun oluştururken web sitesi yada fotoğrafa link vermek için field oluşturabiliyoruz. Ancak kişiye yada kurumun e-mail adreslerine link vermek için bir field mevcut değildir. Bunun için single line bir field  ekleyip buradaki değeri portalde gösterebiliriz.

Bu gibi durumlarda gösterilen e-mail adresine tıklandığında Outlook yada kullanılan herhnagi e-mail programının e-mail göndermek üzere yeni e-mail oluşturma penceresinin  açılması ve To: kısmında tıklanan e-mail adresinin yazılı olması istenmektedir.
Normal şartlarda HTML de bunu <a> etiketi içerisinde kullandığımız "href" atribute'nde "mailto" aracılığıyla yapmaktayız.

 <a href="mailto:uzuncemil@gmail.com">
 uzuncemil@gmail.com  
 </a>  

Bunu Data Form Web Part ile yazmak için XSLT yi biraz düzenlememiz gerekecektir.

 <a>  
      <xsl:attribute name="href">  
      mailto:<xsl:value-of select="@EPostaAdresi"/>  
      </xsl:attribute>  
      <xsl:value-of select="@EPostaAdresi"/>  
 </a>  

xsl'de href atribute nü eklemeliyiz ve e-mail adresini burada yer alacak şekilde çekmeliyiz. Kod yaspısının örneği yukarıda mevcuttur.

Bu yöntem normal asp.net ile mailto linki vermektense daha hızlı ve deploy gerektirmeden kullanılabilinecek bir yöntemdir.

Saygılarımla
Cemil UZUN

Textbox içerisine sadece rakam (0-9) girilmesine izin vermek

Form tasarlarken ve kodlarken bazı form alanlarımız sadece sayısal veri içermek zorundadır; Telefon Numarası, Posta Kodu ve Yaşınız gibi alanlar olabilir. Bu alanlara sayısal verilerin dışında içerik girilmesi hem arka tarafta ekleme ve çekme işlemlerimizde sıkıntı yaşattığı gibi arayüz tarafında kullanıcı dostu olmamaktadır. Bu duruma benzer bir olayı hızlı bir şekilde nasıl çözeriz onu inceleyeceğiz:

Tabiki client tarafında çözülecek bir durum olduğundan başvuracağımız yer JavaScript oluyor ve bir kaç satır javascript ile textbox'a girilen değer rakam ise yazdıracağız değilse false dönülecek ve yazılmayacaktır. 

 <SCRIPT language="javascript" type="text/javascript">  
    <!--  
    function isNumber(evt)  
    {  
      var charCode = (evt.which) ? evt.which : event.keyCode  
      if (charCode > 31 && (charCode < 48 || charCode > 57))  
       return false;  
      return true;  
    }  
    //-->  
 </SCRIPT>  

Textbox kullanırken onkeypress attribute'nde isNumber fonksiyonumuzu çağırıyoruz ve rakam dışında bir karektere bastığımızda giriş yapılmayacak ama rakam girebilecek!

 <form id="form1" runat="server">                    
      <asp:TextBox ID="TextBox1" MaxLength="7" onkeypress="return isNumber(event)" runat="server">  
      </asp:TextBox>  
 </form>  

Bu çözüm sadece Asp.Net te Textbox için değil,  düz HTML input etiketi için de geçerlidir.

 <INPUT id="txtNumber" onkeypress="return isNumber(event)" type="text" name="txtNumber">  


İyi çalışmalar
Saygılarımla

10 Ağustos 2012 Cuma

SharePoint 2010’da _layouts, _vti_bin ve yerleşik (built in) sayfaları Anonim kullanıcı erişimine engellemek.


İnternet Portallerinde tahmin edebileceğimiz üzere çoğunda public kullanıcıların kısıtlı miktarda erişimleri vardır. Diğer bir deyişle anonim kullanıcıların okuma haklarının olması durumudur. Bu durum SharePoint 2007 ve 2010’da yanında bir sorunu da karşımıza çıkarmaktadır.
Anonim kullanıcılara siteye erişim hakkı (Okuma vb.) verdiğimiz durumda sadece genel arayüzdeki içerikleri görmekle kalmayıp sharepoint ile yerleşik (built in) gelen birçok SharePoint Form sayfları ve SharePoint sistem ayar sayfalarını görebilecektir. Bu durumda tasarımsal açıdan sorun olduğu kadar güvrnlik açığı olarak da nitelendirebileceğimiz bir sorun teşkil etmektedir.

A. SharePoint Form sayfasından kasıt http://sp10/Sayfalar/Forms/AllItems.aspx gibi her liste ve kütüphane için oluşturulan form sayfalarıdır. Bu sayfalara erişimi engellemek için (erişilmek istendiğinde login olunmasını sorma) için aşağıdaki komut bloğunu çalıştırmak gerekmektedir.

stsadm.exe –o activatefeature –url -filename ViewFormPagesLockdown\feature.xml
Yapacağımız işlemler sırasıyla;
  •  Yukarıda yer alan komut bloğunu –filename kısmında işleme yapacağımız portal adresi yer alacak şekilde SharePoint 2010 PowerShell aracılığıyla çalıştırıyoruz.
  • Eğer mevcut durumda anonim erişim varsa öncelikle onu kapatmalısınız ve yeniden açmalısınız

Her ihtimale karşı sisteminizce sakıncası yoksa iisreset atmak yaptığımız işlemin sonucunu daha net görmemizde fayda sağlayacaktır.
Artık herhangi bir listenin formlarına girmeyi denediğimizde bizden yetkili kullanıcı hesaplarındna biri ile giriş yamamızı isteyecektir.

B. Form sayfaları dışında yukarda bahsettiğimiz üzere SharePoint sistem ayar sayfalarını anonim erişimi istenmeyen bir durumdur. _layouts ve _vti_bin dizininde yer alan sayfalardan erişimini kapatmak istediğimiz sayfalar için aşağıdaki örenekteki konfigürasyon ayarlarını web.config içerisinde yapmalıyız.

<add path="configuration">
    <
location path="_layouts">
      <
system.web>
        <
authorization>
          <
deny users="?" />
        </
authorization>
      </
system.web>
    </
location>
    <location path="_vti_bin">
      <
system.web>
        <
authorization>
          <
deny users="?" />
        </
authorization>
      </
system.web>
    </
location>
    <location path="_layouts/login.aspx">
      <
system.web>
        <
authorization>
          <
allow users="?" />
        </
authorization>
      </
system.web>
    </
location>
    <
location path="_layouts/error.aspx">
      <
system.web>
        <
authorization>
          <
allow users="?" />
        </
authorization>
      </
system.web>
    </
location>
    <location path="_layouts/accessdenied.aspx">
      <
system.web>
        <
authorization>
          <
allow users="?" />
        </
authorization>
      </
system.web>
    </
location>

Örnekte olduğu gibi izin verilen
_layouts/login.aspx
_layouts/accessdenied.aspx
_layouts/error.aspx
dışındaki sistem sayfalarının hiç birine anonim kullanıcılar erişemeyecektir. Erişmek istediklerinden sisteme yetkili bir hesap ile login olmaları istenecektir.



Uyarılar:
  • Portaldaki yetkilerden farklı olarak anonim kullanıcılara bir listeye öğe ekleme yetkisi verecek iseniz (örneğin yorumlar, sayaçlar gibi listeler olabilir), öncelike siteyi tekrar anonim erişime açıp ilgili izinleri verip tekrar erişime kapamamız gerek. Bu süreçte anonim kullanıcıların form sayfalarına erişimlerini tekrar açmamız gerekecektir.
Actifleştirdiğimiz feature’ı deactive etmek için aşağıdaki kod bloğunu kullanabiliriz.
stsadm -o deactivatefeature -url -filename ViewFormPagesLockDown\feature.xml
  • Erişime  açmak istediğimiz sistem sayfaları için örneğin _layouts/login.aspx için web.config de aşağıda yer alan izin verme kod parçacığı  web.configde ilgili alana eklenmelidir.

<location path="_layouts/login.aspx">
      <
system.web>
        <
authorization>
          <
allow users="?" />
        </
authorization>
      </
system.web>
    </
location>

Kolaylıklar dilerim