2015年8月13日 星期四

SharePoint 2013 Custom Search MySite Note (在SharePoint中搜尋MySite注意事項)

這兩天在寫客製化Custom Search API,需求是去搜尋MySite的People資料,且Profile資料中有自訂的欄位,不過一直遇到一個問題就是:明明Profile欄位建立,也設定了Search的Metadata,但是結果就是搜尋不到!

因此去查詢Search的編目紀錄檔,發現有一個Warning,點進去一看

咦! MySite不在編目範圍中?? (註:開發環境是朋友建立的,因此一開始並不清楚預先的設定)

image

也就是說,MySite的SiteCollection下目前不在編目範圍中,因此回到MySite的網站設定—>搜尋—>搜尋與離線可用性

image

將"是否允許此網站顯示在搜尋結果中"改設定為:是!!

image

再回到Search重新Craw一次,上述的警示訊息就不見了,且搜尋的項目結果,也抓到了,雖然是一個小小的設定,但是因為是在MySite的網站中,所以大概稍微紀錄一下這次的Issue。

imageimage

2015年6月17日 星期三

Adding a Feature Event Receiver and Deploying Debugging SP Projects(SharePoint新增Feature事件接收器以及進行專案偵錯)

這一篇的內容主要是介紹在SharePoint的webpart專案中,在其Feature中加入事件接收器,並在這些事件中去撰寫程式去改變網站中的一些資訊,例如:title、logo之類的做法。

另外,也介紹的如何針對SharePoint客製化專案進行程式碼的偵錯,就讓咱們的一起來複習一下囉!!!

2015年6月3日 星期三

Using Visual Studio to creating a SharePoint Project(使用vs.net建立sharepoint專案)

基本上亞當斯教了這麼多年的SharePoint開發課程,從SharePoint 2003客製化開發,一直到現今的SharePoint 2013客製化開發,算一算玩微軟SharePoint這產品,已經正式邁入第十個年頭了。

這麼多年來,幾乎每一年都有進行SharePoint客製化開發教學,事實上現在的網路資訊很發達,隨處可找到相關的資料,不過,如果是自學者可能會想說:是否有step by step的教學? 這樣學習是否更方便呢?

沒錯,基於此想法,亞當斯將以往一些基礎的教學過程,曾經有部分錄製下來,接下來就在這個blog分享給有興趣的朋友,內容的話都是一些我曾經上課教過的東西,如果有曾經上過課的學員有看到這幾篇影片,也可以算是複習一下囉!!

使用VS.NET 建立 sharepoint 開發專案:

2015年5月20日 星期三

OWASP TOP 10 十大網路應用系統安全弱點 Demo 10

OWASP Top 10 主要目的,是將最常見的網路應用系統安全弱點列出,並提供基本的方法保護防止這些弱點,是軟體開發安全計劃最好的開始。

以下針對第十點的弱點,做一些簡單的說明和示範:

10. Failure to Restrict URL Access:應用程式敏感地區是被保護的Links或是URLs,而這些是不會提供給未被授權的使用者。這也容易讓攻擊者利用這項弱點進入,並進行未被授權的行為。

Different User Can View Different Ribbon in SharePoint(SharePoint 根據不同的使用者權限檢視不同的Ribbon功能項)

通常在實際的專案需求上,SharePoint Ribbon上的功能並不是全部都開放給全部的使用者可以操作,有時候因為不同權限的關係,或是公司內部ERP上的整合,甚至企業HR人事的架構不同,都希望可以每個不同的使用者進來瀏覽SharePoint 之後,可以有不同的Ribbon可以操作。

但是預設SharePoint Ribbon是統一開放給使用者,因此若是想要根據不同的使用者權限檢視不同的Ribbon功能項的話,那麼該如何來設計了?以下為實作:

1. 因為每一個Page的Ribbon控管可能都不同,因此這邊使用WebPart放置到頁面來啟用此效果,先建立一個視覺化的網頁組件:

clip_image001

2. 先來看一下http://sharepoint/default.aspx瀏覽的畫面,在Ribbon的部分如下圖所示,一般的使用者若是沒有特別的控管,那麼可以檢視以下的「編輯」和「管理」的功能:

clip_image003

3. 在RibbonWebPartUserControl.ascx.cs的Page_Load加入以下程式碼,透過SPRibbon取得目前的Ribbon物件之後,再透過叫用TrimById的方法將某些Ribbon控制項隱藏:

protected void Page_Load(object sender, EventArgs e)
{
    SPRibbon currentRibbon = SPRibbon.GetCurrent(this.Page);
    if (currentRibbon != null)
    {
      
        if (SPContext.Current.Web.CurrentUser.Name.ToLower() ==
          "netdb\\administrator")
        {
            currentRibbon.TrimById("Ribbon.WebPartPage.Edit");
        }
        else if (SPContext.Current.Web.CurrentUser.Name.ToLower() ==
         "netdb\\adams")
        {
            currentRibbon.TrimById("Ribbon.WebPartPage.Manage");
        }
    }
}

4. 使用NETDB\Administrator登入http://sharepoint/default.aspx,點選頁面的Ribbon可得到以下的畫面:

clip_image004

5. 使用NETDB\Adams登入http://sharepoint/default.aspx,點選頁面的Ribbon可得到以下的畫面:

clip_image005

6. 比較第2步驟、第4步驟和第5步驟的畫面,可以得知根據不同的使用者在Ribbon控制項的功能會跟隨著異動,而有不同的顯示。

最後,那麼在程式碼中SPRibbon的TrimById(“xxx”)方法中的參數到底要放哪一個值?這個才是重點,其實要放的值為Ribbon上那個控制項的ClientID,這些ID有非常的多,主要的依據要參考以下文件:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\GLOBAL\XML\CMDUI.XML中的定義,大概的XML結構如下(這邊只擷取部分畫面):

clip_image007