SharePoint SmallSearchInputBox Kontrolünü Özelleştirmek

SharePoint arayüzünde bulunan bu küçük arama kutusunu, belirlediğimiz farklı bir arama sayfasını kullanması veya arama yapmadan önce scope seçimi yapılabilmesi için özelleştirmek isteyebiliyoruz. Bunu yapmak için Visual Studio ile SmallSearchInputBox kontrolünü override etmemiz mümkün. Yapmamız gereken SharePoint projemize, adı SmallSearchInputBox olan yeni bir Empty Element ekleyip, Elements.xml dosyasının içeriğini aşağıdakilerle değiştirmek:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Control Id="SmallSearchInputBox"
       Sequence="25"
       ControlAssembly="Microsoft.SharePoint.Portal, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
       ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx">
    <Property Name="DropDownMode">ShowDD</Property>
    <Property Name="SearchResultPageURL">/Arama/Sayfasi.aspx</Property>
    <Property Name="FrameType">None</Property>
    <Property Name="DropDownWidth">140</Property>
    <Property Name="TextBoxWidth">140</Property>
    <Property Name="ShowAdvancedSearch">true</Property>
    <Property Name="TextBeforeDropDown">Arama:</Property>
    <Property Name="AdvancedSearchPageURL">/Arama/Sayfasi.aspx</Property>
    <Property Name="QueryPromptString">Ara...</Property>
  </Control>
</Elements>

Oluşturduğumuz bu kontrolü içerisine koyduğumuz özelliğin (feature) mutlaka Site scope’unda deploy edilmesi gerekiyor. Deploy ettikten sonra arama kutunuz değişmiyorsa, daha küçük Sequence değerleriyle tekrar deploy edip deneyebilirsiniz. İyi çalışmalar…

SharePoint Doküman Kütüphanesine Çoklu Dosya Yükleme

Son birkaç günümü bu konu üzerinde araştırmalarla geçirdim. İlk başta FileUpload kontrolü ile bu isteği gerçekleştirmiş olsam da daha kolay, daha hızlı ve daha sorunsuz bir yöntem olmasından dolayı UploadCtl adlı ActiveX bişelenini kullanmaya karar verdim. Oluşturduğunuz bir Visual Web Part‘ın ASCX dosyasına aşağıdaki kodları eklemeniz, belirttiğiniz kütüphaneye dosya yüklemenize olanak sağlıyor:

<script type="text/jscript">
    function DocumentUpload() {
        var uploadCtl = document.getElementById("idUploadCtl");
        uploadCtl.MultipleUpload();
    }
</script>

<input type="hidden" name="Cmd" value="Save" />
<input type="hidden" name="putopts" value="true" />
<input type="hidden" name="Confirmation-URL" value="web/url/lists/listname" />
<input type="hidden" name="PostURL" value="" />
<input type="hidden" name="VTI-GROUP" value="0" />
<input type="hidden" name="destination" id="destination" value="/web/url/lists/listname">

<asp:Panel runat="server" Width="100%">
    <script>
        try {
            if (new ActiveXObject("STSUpld.UploadCtl"))
                document.write("<OBJECT id=\"idUploadCtl\" name=\"idUploadCtl\" CLASSID=\"CLSID:07B06095-5687-4d13-9E32-12B4259C9813\" WIDTH=\"100%\" HEIGHT=\"350px\"></OBJECT>");
        }
        catch (error) {
        }
    </script>
    <asp:Button runat="server" accesskey="O" id="btnTamam" CssClass="ms-ButtonHeightWidth" Text="Dosyaları Yükle" UseSubmitBehavior="False" OnClientClick="DocumentUpload(); return false;"/>
    <asp:Button runat="server" accesskey="C" id="btnIptal" CssClass="ms-ButtonHeightWidth" Text="İptal" UseSubmitBehavior="False" style="display: none;"/>
</asp:Panel>

Yukarıda gördüğünüz gizlenmiş input’lar kontrolümüzün nasıl çalışacağını ayarlamış oluyoruz. putopts ile varolan dosyaların üzerine yazıp yazmayacağımızı, destionation ile yükleme yapacağımız doküman kütüphanesi veya klasörün yolunu belirleyebiliriz. Tarayıcımızda ActiveX‘in devre dışı olmaması gerektiğini de unutmayın. İyi çalışmalar…

WMware Workstation Performans İyileştirici Notlar

wmware-workstation-logo

Neden yaptım bilmiyorum, VirtualBox‘tan vazgeçip WMWare Workstation kullanmaya başlayalı yüzüm gülmedi :) Ürünü tanımadığımdan olsa gerek, oluşturduğum sanal bilgisayara müthiş diyebileceğim donanım ayırsam da (i7 işlemciden 2 çekirdek, 12 GB RAM, SSD disk üzerinde harddisk alanı gibi) istediğim performansı bir türlü alamadım. Son olarak aşağıda sıraladığım birkaç değişiklikiği yapınca sanal bilgisayarımın performans düzeyi tahammül edilebilecek düzeye geldi. VirtualBox’a geri mi dönsem diye düşünürken bu notları sizlerle de paylaşmak istedim:

  1. “C:\ProgramData\VMware\VMware Workstation” dizini altında bulacağınız settings.ini dosyasına aşağıdaki satırı ekleyerek .vmem uzantılı swap dosyalarını devre dışı bırakabilirsiniz:
    mainMem.useNamedFile = "FALSE"
    
  2. Sanal bilgisayarlarınız için log dosyaları oluşturmaktan vazgeçin. Bunun için oluşturduğunuz sanal bilgisayarın .vmx uzantılı dosyasını düzenleyip aşağıdaki satırı ekleyebilirsiniz:
    logging = "FALSE"
    
  3. Unity modunu devre dışı bırakın. Bunun için yine .vmx dosyanızı açıp aşağıdaki satırları ekleyebilirsiniz:
    isolation.tools.unity.disable="TRUE"
    unity.allowCompositingInGuest="FALSE"
    unity.enableLaunchMenu = "FALSE"
    unity.showBadges = "FALSE"
    unity.showBorders = "FALSE"
    unity.wasCapable = "FALSE"
    
  4. Disk ve bellek I/O performanslarını iyileştirmek için aşağıdaki satırları ekleyebilirsiniz:
    MemTrimRate = "0"
    sched.mem.pshare.enable = "FALSE"
    snapshot.disabled = "TRUE"
    MemAllowAutoScaleDown = "FALSE"</pre>
    

Umarım bu düzenlemelerden sonra çalışılabilir bir ortam sahibi olursunuz. İyi çalışmalar…

SharePoint Farm'dan WSP Paketi Yedeği Almak

Arkadaşımız Selçuk‘un paylaştığı faydalı bilgiyi aktarmak istedim: Bazen canlı ortamda wsp paketini güncellemeden önce, mevcut çalışan wsp paketimizin yedeğini almak isteyebiliriz. Bu aşağıdaki bir kaç satırlık kodla bunu yapabiliriz.

$farm = Get-SPFarm
$file = $farm.Solutions.Item("SharePointSolution.wsp").SolutionFile
$file.SaveAs("c:\SharePointSolution.wsp")

İyi çalışmalar…

SharePoint 2010'da Dil Değişikliği

SharePoint 2010 ile hazırladığımız çok dilli bir portalda, kullanıcıların dil değişikliklerini yapabilecekleri linkler bulunması gerekebiliyor. Türk bayrağına tıklayınca Türkçe’ye, İngiliz bayrağına tıklayınca İngilizce’ye geçmek için aşağıdaki scripti kullanmamız ve ilgili linklerin click fonksiyonlarını aşağıdaki şekilde yazmamız yeterli:

function OnSelectionChange(value)
{ 
	var today = new Date();
	var oneYear = new Date(today.getTime() + 365 * 24 * 60 * 60 * 1000);
	var url = window.location.href;
	document.cookie = "lcid=" + value + ";path=/;expires=" + oneYear.toGMTString();
	window.location.href = url;
}
<a href="javascript:OnSelectionChange(1055)">Türkçe</a>
<a href="javascript:OnSelectionChange(1033)">English</a>

İyi çalışmalar.