sharepoint client 端检验List是否已经存在。
在SPLIst端,有个
<span style="font-family:Arial;font-size:18px;">Web.Lists.trygetList("ListName")</span>
可以来检验sharepoint端中是否存在名为listname的List。
那么client端呢?我用List.title==null的方法来检验,只是报了个未初始化的错误,开来该方法不可行。后来经过查询,发现如下方法可行:
<span style="font-family:Arial;font-size:18px;">internal static Boolean haveList(String listname) {
using (ClientContext ctx = new ClientContext(defaultSiteUrl))
{
ListCollection listCollection = ctx.Web.Lists;
ctx.Load(listCollection, lists => lists.Include(list => list.Title).Where(list => list.Title == listname));
ctx.ExecuteQuery();
if (listCollection.Count > 0)
{
return true;
}
else
{
return false;
}
}
}</span>
其实很简单,只是linq语句用的不熟练而不得其法。
改段时间有空要好好学习下linq语句了~
另:早上的时候有抛一个异常,结果解决方法却异常简单,特记录如下,希望帮到有缘人~
此异常出现于为Feature添加了eventReceiver之后Vs端自动激活feature时候报错。
异常信息:
Error occurred in deployment step 'Activate Features': Failed to load receiver assembly "ProjectName, Version=1.0.0.0,Culture=neutral,PublicKeyToken=0388dfd3622ea424" for feature "FeatureName" (ID: 8e5c1dd8-c618-438f-a01c-f9cf9d336d6f).: System.IO.FileNotFoundException: Could not load file or assembly 'FHSystem, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0388dfd3622ea424' or one of its dependencies. The system cannot find the file specified.
File name: 'ProjectName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0388dfd3622ea424'
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.Load(String assemblyString)
at Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
解决方法:
1.c:windows\assembly下面看一下是不是引用的相关dll没加进去。
2. Feature1.Template.xml这个文件下的内容是不是填写对了。主要是看一下publickeytoken是不是写对了。
下面的写法是我的一个示范写法,自己记得把projectname,namespace.classname 之类的按照字面意思自己替换。
<span style="font-family:Arial;font-size:18px;"><Feature AlwaysForceInstall="TRUE" xmlns="http://schemas.microsoft.com/sharepoint/" ReceiverAssembly="ProjectName, Version=1.0.0.0,Culture=neutral,PublicKeyToken=0388dfd3622ea424" ReceiverClass="NameSpace.ClassName">
</Feature></span>
3.当然还有其他错误的可能。但如果以上的你都检查了,那么此时你可以试试大招了:
<span style="font-family:Arial;font-size:18px;">1.删除已经创建的evevntReceiver
2.clean一下工程。
3.关闭VS。
4.删除sharepoint工程目录下的obj,bin文件
5.想重启电脑也可以重启下
6.打开vs
7.重新添加evevtreceiver
8.先别忙着加代码,试试看行不行
9.部署前把“部署后自动激活feature”的属性设置为none,即手动去打开这个feature。
10.到此步大部分情况下问题得解。还不行那就不知道了</span>