在SharePoint 2013的文件庫或是清單中,有一些比較常見的限制,例如:Item : 30,000,000 per list…等等,但是說明中並沒有列出文件庫的資料夾或是檔案的長度限制,而這邊實際測試的結果,當資料夾(包含巢狀式結構)的長度大於260的話,就無法繼續新增下去!
檔案同樣也是,在巢狀式結構中,檔案名稱所對應的路徑假設大於260的話
參考資料:
寬廣無際的技術翰海中,能遺忘的就把它遺忘掉吧~ 無法遺忘的,總會有個角落,靜靜地等候著~
在SharePoint 2013的文件庫或是清單中,有一些比較常見的限制,例如:Item : 30,000,000 per list…等等,但是說明中並沒有列出文件庫的資料夾或是檔案的長度限制,而這邊實際測試的結果,當資料夾(包含巢狀式結構)的長度大於260的話,就無法繼續新增下去!
檔案同樣也是,在巢狀式結構中,檔案名稱所對應的路徑假設大於260的話
參考資料:
當使用Office文件,嘗試使用Word 然後想要去使用RMS執行限制存取,可以在檔案-->資訊-->保護文件—>限制存取—>連線至數位版權管理伺服器
但發生了以下的錯誤訊息:The operation being requested was not performed because the user has not been authenticated.
解決問題的方式為將此RMS的授權和驗證的WS路徑,加入到瀏覽器的Local Intranet Zone中即可!
開發好的SP客製化專案(以WebPart為例來說),封裝完成為WSP,在SharePoint部署上去之後,假設需要更新的話,可以使用Update-SPSolution 指令來進行WebPart的更新,指令參考如下:
Update-SPSolution -Identity MyWP.wsp -LiteralPath D:\MyWP.wsp –GACDeployment
但是此時會遇到一個問題,假設我們一開始是把此WebPart部署到SharePoint-80這一個WebApplication,但是當執行Update-SPSolution時,系統並不會只是單純的SharePoint-80單一Web Application Restart,而是會預設將此Server上所有的Application Pool全部進行:停止—>啟用,如下圖所示:
原因是因為所有預設開發專案並且封裝WSP時,有一個封裝屬性:ResetWebServerModeOnUpgrade預設值是:StartStop,此時將會影響所有此Server上的Web Application連帶影響其他的應用程式!
那麼該如何來解決執行Update-SPSolution時避免去重新啟動所有的Application Pool呢? 執行步驟如下:
1. 開啟客製化的專案,開啟專案中的Package.Template.xml
2. 設定以下三個屬性值:ResetWebServer="FALSE" 、ResetWebServerModeOnUpgrade="Recycle" 、DeploymentServerType="WebFrontEnd",如下圖所示:
3. 此時重新打包封裝,並且針對更新後的WSP進行部署!
Update-SPSolution -Identity MyWP.wsp -LiteralPath D:\MyWP.wsp –GACDeployment
此時就可以IIS檢視,可以發現執行Update-SPSolution並不會將Application Pool停止了! Good!
參考資料:
https://msdn.microsoft.com/en-us/library/ms412929.aspx
http://blog.mastykarz.nl/optimizing-deploying-sharepoint-packages-minimize-impact-farm-availability/
這兩天在寫客製化Custom Search API,需求是去搜尋MySite的People資料,且Profile資料中有自訂的欄位,不過一直遇到一個問題就是:明明Profile欄位建立,也設定了Search的Metadata,但是結果就是搜尋不到!
因此去查詢Search的編目紀錄檔,發現有一個Warning,點進去一看
咦! MySite不在編目範圍中?? (註:開發環境是朋友建立的,因此一開始並不清楚預先的設定)
也就是說,MySite的SiteCollection下目前不在編目範圍中,因此回到MySite的網站設定—>搜尋—>搜尋與離線可用性
將"是否允許此網站顯示在搜尋結果中"改設定為:是!!
再回到Search重新Craw一次,上述的警示訊息就不見了,且搜尋的項目結果,也抓到了,雖然是一個小小的設定,但是因為是在MySite的網站中,所以大概稍微紀錄一下這次的Issue。
這一篇的內容主要是介紹在SharePoint的webpart專案中,在其Feature中加入事件接收器,並在這些事件中去撰寫程式去改變網站中的一些資訊,例如:title、logo之類的做法。
另外,也介紹的如何針對SharePoint客製化專案進行程式碼的偵錯,就讓咱們的一起來複習一下囉!!!
基本上亞當斯教了這麼多年的SharePoint開發課程,從SharePoint 2003客製化開發,一直到現今的SharePoint 2013客製化開發,算一算玩微軟SharePoint這產品,已經正式邁入第十個年頭了。
這麼多年來,幾乎每一年都有進行SharePoint客製化開發教學,事實上現在的網路資訊很發達,隨處可找到相關的資料,不過,如果是自學者可能會想說:是否有step by step的教學? 這樣學習是否更方便呢?
沒錯,基於此想法,亞當斯將以往一些基礎的教學過程,曾經有部分錄製下來,接下來就在這個blog分享給有興趣的朋友,內容的話都是一些我曾經上課教過的東西,如果有曾經上過課的學員有看到這幾篇影片,也可以算是複習一下囉!!
使用VS.NET 建立 sharepoint 開發專案:
OWASP Top 10 主要目的,是將最常見的網路應用系統安全弱點列出,並提供基本的方法保護防止這些弱點,是軟體開發安全計劃最好的開始。
以下針對第十點的弱點,做一些簡單的說明和示範:
10. Failure to Restrict URL Access:應用程式敏感地區是被保護的Links或是URLs,而這些是不會提供給未被授權的使用者。這也容易讓攻擊者利用這項弱點進入,並進行未被授權的行為。
通常在實際的專案需求上,SharePoint Ribbon上的功能並不是全部都開放給全部的使用者可以操作,有時候因為不同權限的關係,或是公司內部ERP上的整合,甚至企業HR人事的架構不同,都希望可以每個不同的使用者進來瀏覽SharePoint 之後,可以有不同的Ribbon可以操作。
但是預設SharePoint Ribbon是統一開放給使用者,因此若是想要根據不同的使用者權限檢視不同的Ribbon功能項的話,那麼該如何來設計了?以下為實作:
1. 因為每一個Page的Ribbon控管可能都不同,因此這邊使用WebPart放置到頁面來啟用此效果,先建立一個視覺化的網頁組件:
2. 先來看一下http://sharepoint/default.aspx瀏覽的畫面,在Ribbon的部分如下圖所示,一般的使用者若是沒有特別的控管,那麼可以檢視以下的「編輯」和「管理」的功能:
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可得到以下的畫面:
5. 使用NETDB\Adams登入http://sharepoint/default.aspx,點選頁面的Ribbon可得到以下的畫面:
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結構如下(這邊只擷取部分畫面):
我們在前一篇文章中:http://ms-net.blogspot.tw/2015/04/aspnet-using-reportviewer-control-to.html 有介紹到使用ReportViewer控制項設計報表的基本入門方式,剛好就有朋友另外問我有關頁首和頁尾的使用方式,因此我在這列出其中有兩項的解決方式:
1. 報表中加頁首和頁尾
2. 讓報表Table的欄位可以出現在每一頁的最上方
請參考以下的做法:
OWASP Top 10 主要目的,是將最常見的網路應用系統安全弱點列出,並提供基本的方法保護防止這些弱點,是軟體開發安全計劃最好的開始。
以下針對第八點的弱點,做一些簡單的說明和示範:
8. Insecure Cryptographic Storage:網路應用程式很少正常使用cryptographic functions來保護資料,使得攻擊者有機可乘並冒用其他使用者身份,進行其他犯罪行為,如盜刷信用卡等。
之前有朋友問我,要在asp.net上使用類似報表的方式在網頁上呈現料資料結果,到底是使用Crystal Report 或是自己寫程式使用GridView比較好? 事實上,端看需求而言,假設要做到像Crystal Report 這樣的功能,那麼自己刻UI畫面一定是比要累的,其實在ASP.NET中有一個ReportViewer控制項還蠻好用的。
以下我將ReportViewer控制項有關Print的做法,寫成一個sample code範例,有興趣的朋友可以參考一下範例程式碼檔案,我放在以下網址:
https://www.dropbox.com/s/duonhayz0gz6xd9/PrintWeb.7z?dl=0
另外,我也把簡單的教學開發方式,錄製成步驟放在以下的URL:
OWASP Top 10 主要目的,是將最常見的網路應用系統安全弱點列出,並提供基本的方法保護防止這些弱點,是軟體開發安全計劃最好的開始。
以下針對第七點的弱點,做一些簡單的說明和示範,這一個範例是亞當斯的前輩miles所提供的,所使用的方式就是使用c#自己寫HttpRequest去存取指定的網頁,並將利用程式取回的網頁內容HTML進行解譯,並取得一些特殊格式資料:
OWASP Top 10 主要目的,是將最常見的網路應用系統安全弱點列出,並提供基本的方法保護防止這些弱點,是軟體開發安全計劃最好的開始。
以下針對第六點的弱點,做一些簡單的說明和示範:
6. Information Leakage and Improper Error Handling:應用程式可能洩漏關於程式的configuration訊息,程式內部的運轉模式,或者透過多種應用問題違犯隱私。攻擊者利用這個程式弱點侵犯隱私,或者更進一步的攻擊。
OWASP Top 10 主要目的,是將最常見的網路應用系統安全弱點列出,並提供基本的方法保護防止這些弱點,是軟體開發安全計劃最好的開始。
以下針對第五點的弱點,做一些簡單的說明和示範:
5. Cross Site Request Forgery(CSRF):CSRF攻擊強迫受害者登入的瀏覽器傳輸pre-authenticated request 給有弱點的網路應用程式,接著強迫受害者瀏覽器執行對攻擊者有好處的的行為。
在SharePoint 的討論區清單中,當使用者新增一個討論主題的時候,可以在編輯內容時,使用Ribbon上的插入選項,新增欲上傳的檔案:
以下是按下上傳功能時的畫面,但是因為同一個網站中的所有討論區都可以讓使用者上傳文件至指定的清單,這時候會產生一個問題,當不同的討論區上傳檔案時,檔名為相同時就會預設將前一個使用者上傳的文件覆蓋掉。
舉個例子:不同的討論區中發表主題時,上傳同一個檔名至:網站資產,此時勾選「複寫現有的檔案」,就會將之前的檔案直接覆寫掉,並且在本文中持續加入新檔案參考:
那麼如果不勾選「複寫現有的檔案」,就會有以下的訊息提示使用者。
有些情境因為考量到不讓使用者可以自行勾選「複寫現有的檔案」,因此必須將「複寫現有的檔案」選項設定為不顯示,並且預設是不勾選,該如何完成此需求呢? 執行步驟如下:
1. 找到C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS下的RteUploadDialog.aspx
2. 進入編輯模式,找到
<asp:CheckBox id="OverwriteFile" Checked="true" Text="<%$Resources:wss,upload_document_overwrite_file%>" runat="server" />
3. 修改為以下的設定:
<asp:CheckBox id="OverwriteFile" Checked="false" Visible="false" Text="<%$Resources:wss,upload_document_overwrite_file%>" runat="server" />
4. 重新新增討論主題並上傳文件,可以檢視畫面已被修改:
5. 針對相同的清單上傳已存在名稱的文件時,將預設會判斷已存在,不得重複上傳,如下圖所示:
OWASP Top 10 主要目的,是將最常見的網路應用系統安全弱點列出,並提供基本的方法保護防止這些弱點,是軟體開發安全計劃最好的開始。
以下針對第四點的弱點,做一些簡單的說明和示範:
4. Insecure Direct Object Reference:Direct object reference發生的原因是因為開發者暴露了reference to an internal implementation object,像是檔案、檔案夾、或資料庫的record,或是key,來作為URL或是Form的參數。攻擊者可藉由操作這些references擅自進入其他objects中。
OWASP Top 10 主要目的,是將最常見的網路應用系統安全弱點列出,並提供基本的方法保護防止這些弱點,是軟體開發安全計劃最好的開始。
以下針對各種不同的弱點,做一些簡單的說明和示範:
3. Insecure Remote File Include:有弱點的程式碼讓攻擊者可附加惡意程式及資料,甚至導致毀滅性的攻擊,例如整個伺服器被入侵。
OWASP Top 10 主要目的,是將最常見的網路應用系統安全弱點列出,並提供基本的方法保護防止這些弱點,是軟體開發安全計劃最好的開始。
以下針對各種不同的弱點,做一些簡單的說明和示範:
2. Injection Flaws :在網路應用程式,SQL Injection裡很常見。Injection之所以會發生,是因為使用者提供的資料傳輸到一個interpreter,此被當成指令(Command)或是查詢(Query)。攻擊者就能用惡意的資料欺騙interpreter,而達到執行指令或是竄改資料的目的。
OWASP Top 10 主要目的,是將最常見的網路應用系統安全弱點列出,並提供基本的方法保護防止這些弱點,是軟體開發安全計劃最好的開始。
以下針對各種不同的弱點,做一些簡單的說明和示範:
1. Cross Site Scripting(XSS):當應用程式未將使用者提供的資料先審核或進行內容編碼,就直接將資料傳輸到網路瀏覽器,即可能發生XSS問題。XSS能讓攻擊者直接在受害者的網路瀏覽器上執行Script,攻擊者便可以hijack user sessions、或竄改網站內容等。
多年前寫了一篇文章: .NET Call SAP/RFC by Visual Basic & VS2010 ,使用.net code去跟sap連結
因為當初寫完並沒有提供sample code,因此在留言的地方有很多朋友可能都會遇到一些問題,剛好最近在整理NB裡面的資料,因此就把當初所寫的範例程式碼分享出來,希望對需要的朋友有所幫助,當初是使用VS2010開發的,但目前來說應該是沒啥影響!!
以下是sample code download的超連結,分別有c#版和vb版!
https://www.dropbox.com/s/jwe4oeue6gd8x8m/DemoSAP.7z?dl=0
檔案解壓縮密碼是:sap