SharePoint开发中的最佳实践
20.SPViewScope介绍
Default :仅显示指定文件夹下的文件和子文件夹
FilesOnly:仅显示指定文件夹下的文件
Recursive:显示所有文件夹下的文件
RecursiveAll:显示所有文件夹下的所有文件和子文件夹
以上这个属性使用在CAML中,用于控制在哪些范围内进行查找,我们可以根据实际的查找需求,对这个ViewAttribute属性进行设置,来完成我们的操作。
21.SPGridView介绍
SPGridView在GridView的基础上,进行了一些扩展,也就是说他拥有GridView的所有功能,并且在其基础上有所改进。改进的主要是分组、分页、下拉菜单和filter功能。但是SPGridView不支持自动生成列,所以在使用的时候一定要将AutoGenerateColums属性设置成false。
22.JavaScript的replace方法介绍
使用JaveScript的Replace方法,这个方法支持使用正则表达式,如果不使用正则表达式的话,默认只是会替换第一个匹配的字符。所以我们采用strM.replace(/&/g,"//")来将字符串中的所有目标字符。所以将这个方法和相应的正则表达式进行配合使用,功能将是非常强大的。
23.使用SPFolder folder = web.GetFolder(url);
这样是通过url直接得到folder对象,没有经过list那个级别,对List的数据还可能没有进行初始化,所以使用folder.ParentListId可能是空,从而取不到List对象。也就是说不能取这个Folder对象的对应的Parent List的对象的属性。
24.当我们对Web下的某些对象进行更新的时候,我们虽然调用了Web.Update()方法,但是SharePoint中的API不会将Web对象重新加载,也就是不会将一些新的MetaData从数据库中重新加载到Web对象中,这样就有可能造成对象不一致的现象。我们解决这个问题的方法是在我们使用Web的时候,要重新获取一下Web对象就可以了。
25.使用Checkout和Checkin方法的时候,首先要判断进行操作的文件的状态,如果没有被Checkout,那就不能够被Checkin,如果是Checkout状态,就不能够再被Checkout了。同时对文件的CheckOut也就是相当于将文件添加了一个锁,标识一下这个文件的状态。如果这个文件被Checkout出去之后,其他人就不能够对其进行Checkout了,除非将其强制的Discard Checkout。
26.使用AllowUnSafeUpdate属性的一些需要注意的地方,这个属性是为了阻止不安全更新的属性,如果我们要对Web中的一些对象进行更新的时候,如果没有将这个属性设置成true将会出现一个验证异常。如果HttpContext.Current这个对象是Null的话,那么这个属性将永远是true。在使用这个属性的时候,一定要确定设置的是我们要进行更新的Web对象,如果不是,在更新的时候将会出现异常,因为以前我们对Web进行了一些操作,这样这个Web对象就发生了变化,不再是我们现在这个Web对象了,也就是导致了对象不一致,所以我们需要重新取得这个Web对象,然后再设置这个属性即可。
27. 一般在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();
}
}