SharePoint性能總結和一些開發經驗(4)
21. SPViewScope介紹
Default :僅顯示指定文件夾下的文件和子文件夾
FilesOnly:僅顯示指定文件夾下的文件
Recursive:顯示所有文件夾下的文件
RecursiveAll:顯示所有文件夾下的所有文件和子文件夾
以上這個屬性使用在CAML中,用於控制在哪些範圍內進行查找,我們可以根據實際的查找需求,對這個ViewAttribute屬性進行設置,來完成我們的操作。
22. SPGridView介紹
SPGridView在GridView的基礎上,進行了一些擴展,也就是說他擁有GridView的所有功能,並且在其基礎上有所改進。改進的主要是分組、分頁、下拉菜單和filter功能。但是SPGridView不支持自動生成列,所以在使用的時候一定要將AutoGenerateColums屬性設置成false。
23. JavaScript的replace方法介紹
使用JaveScript的Replace方法,這個方法支持使用正則表達式,如果不使用正則表達式的話,默認只是會替換第一個匹配的字符。所以我們採用strM.replace(/&/g,"//")來將字符串中的所有目標字符。所以將這個方法和相應的正則表達式進行配合使用,功能將是非常強大的。
24. 在使用
SPFolder folder = web.GetFolder(url);
這樣是通過url直接得到folder對象,沒有經過list那個級別,對List的數據還可能沒有進行初始化,所以使用folder.ParentListId可能是空,從而取不到List對象。也就是說不能取這個Folder對象的對應的Parent List的對象的屬性。
25. 當我們對Web下的某些對象進行更新的時候,我們雖然調用了Web.Update()方法,但是SharePoint中的API不會將Web對象重新加載,也就是不會將一些新的MetaData從數據庫中重新加載到Web對象中,這樣就有可能造成對象不一致的現象。我們解決這個問題的方法是在我們使用Web的時候,要重新獲取一下Web對象就可以了。
26. 使用Checkout和Checkin方法的時候,首先要判斷進行操作的文件的狀態,如果沒有被Checkout,那就不能夠被Checkin,如果是Checkout狀態,就不能夠再被Checkout了。同時對文件的CheckOut也就是相當於將文件添加了一個鎖,標識一下這個文件的狀態。如果這個文件被Checkout出去之後,其他人就不能夠對其進行Checkout了,除非將其強制的Discard Checkout。
27. 使用AllowUnSafeUpdate屬性的一些需要注意的地方,這個屬性是爲了阻止不安全更新的屬性,如果我們要對Web中的一些對象進行更新的時候,如果沒有將這個屬性設置成true將會出現一個驗證異常。如果HttpContext.Current這個對象是Null的話,那麼這個屬性將永遠是true。在使用這個屬性的時候,一定要確定設置的是我們要進行更新的Web對象,如果不是,在更新的時候將會出現異常,因爲以前我們對Web進行了一些操作,這樣這個Web對象就發生了變化,不再是我們現在這個Web對象了,也就是導致了對象不一致,所以我們需要重新取得這個Web對象,然後再設置這個屬性即可。
28. 一般在SharePoint部署的時候,我們使用WSP對一些文件進行部署,同時更新web.config,但是有些時候需要對web.config添加一些自定義的節點,並且可能修改原來的節點,所以使用WSP不能夠完全滿足我們的需求,應該使用WebConfigurationModification類對web.config文件進行修改。如下所示:
using (SPSite siteCollection = new SPSite("http://chris:11111/sites/testconfig"))
{
using (SPWeb site = siteCollection.OpenWeb())
{
site.AllowUnsafeUpdates = true;
SPWebApplication app = siteCollection.WebApplication;
SPWebConfigModification modification1 = new SPWebConfigModification();
modification1.Path = "configuration";
modification1.Name = "connectionStrings";
modification1.Value = " <connectionStrings></connectionStrings> ";
modification1.Owner = Assembly.GetExecutingAssembly().FullName;
modification1.Sequence = 100;
modification1.Type
=SPWebConfigModification.SPWebConfigModificationType.EnsureSection;
app.WebConfigModifications.Add(modification1);
SPWebService service = SPFarm.Local.Services.GetValue < SPWebService >
();
service.ApplyWebConfigModifications();
}
}