使用ConditionalScope进行高效的SharePoint CSOM编程

时间:2022-07-07 12:31:35

在上一篇文章中讲述了 ExceptionHandlingScope的使用后,本章主要讲述ConditionalScope的用法。

ConditionalScope在设计思路和解决问题上同ExceptionHandlingScope几乎是相同的,主要为了解决如何在一次请求中实现if else这样需求。

我们知道,在SharePoint API中,获取不到某些对象时,有的时候是出异常的,有的时候是返回空的,有的时候是能返回对象,但是只能使用某些属性。本文中使用的例子就是文件对象,使用过ServerAPI的人都知道,SPWeb.GetFile获取SPFile对象时,如果文件不存在,API也不会抛出异常,而是SPFile.Exsit=false,因此我们在获取file对象时会用到以下代码:

            using (ClientContext clientContext = new ClientContext("https://cnblogtest.sharepoint.com"))
{ var pasword = new SecureString(); "abc123!@#".ToCharArray().ToList().ForEach(pasword.AppendChar); clientContext.Credentials = new SharePointOnlineCredentials("test001@cnblogtest.onmicrosoft.com", pasword);//设置权限 var currentWeb = clientContext.Web; var file = currentWeb.GetFileByServerRelativeUrl("/Shared%20Documents/Sharepoint.png");
file.ListItemAllFields["Test"] = "StartIfTrue";
file.ListItemAllFields.Update(); clientContext.ExecuteQuery();//提交修改,如果文件不存在会出异常
}

这个地方我们在执行请求之前不知道文件是否存在,因此如何用一次请求来解决这个问题呢?这个就需要用ConditionalScope来实现:

            using (ClientContext clientContext = new ClientContext("https://cnblogtest.sharepoint.com"))
{
var pasword = new SecureString();
"abc123!@#".ToCharArray().ToList().ForEach(pasword.AppendChar); clientContext.Credentials = new SharePointOnlineCredentials("test001@cnblogtest.onmicrosoft.com", pasword);//设置权限 var currentWeb = clientContext.Web; var file = currentWeb.GetFileByServerRelativeUrl("/Shared%20Documents/Sharepoint1.png"); var conditionalScope = new ConditionalScope(clientContext, () => file.Exists, true); using (conditionalScope.StartScope())
{
file.ListItemAllFields["Test"] = "StartIfTrue";
file.ListItemAllFields.Update();
} clientContext.ExecuteQuery();//提交修改,如果文件不存在也不会出异常 if (conditionalScope.TestResult.HasValue)
{//显示ConditionalScope条件的值
Console.WriteLine("Condition Value:" + conditionalScope.TestResult.Value);
} }

这种方式很好的实现了一次请求中,实现条件判断。请求报文和ExceptionHandlingScope的构成基本类似,这里不再赘述。合理的使用这个类也能很好的提升和SharePoint进行交互时的效率。

使用ConditionalScope进行高效的SharePoint CSOM编程的更多相关文章

  1. 使用ExceptionHandlingScope进行高效的SharePoint CSOM编程

    异常处理 在我们使用SharePoint API的时候,获取某些对象的时候,可能会出异常,那么CSOM如何处理这种情况呢. 我们在获取某个List的时候,代码如下: using (ClientCont ...

  2. 使用SharePoint CSOM 编写高效的程序

    上一篇文章中简单的介绍了使用CSOM进行编程.今天主要讲一下CSOM使用中一些小技巧,可以让你的程序运行的更快. 单独加载某些属性 在上文中的例子,需要返回Web对象信息的时候,我们使用了如下的代码: ...

  3. 在设置代理的环境下使用SharePoint CSOM

    SharePoint 的CSOM都是通过HttpRequest来实现和SharePoint服务器的交互的,那么我们如何设置HttpWebRequest的一些特性呢,如Cookie,WebProxy? ...

  4. SharePoint 2013的REST编程基础

    1. SharePoint 2013对REST编程的支持 自从SharePoint2013开始, SharePoint开始了对REST 编程的支持,这样除了.NET , Silverlight, Po ...

  5. SharePoint 2013 开发——搜索架构及扩展

    博客地址:http://blog.csdn.net/FoxDave SharePoint 2013高度整合了搜索引擎,在一个场中只有一个搜索服务应用程序(SSA).它集成了FAST,只有一个代码库 ...

  6. SharePoint 入门书籍推荐 转载来源http://www.cnblogs.com/jianyus/p/3513238.html

    最近,总有人说刚入门SharePoint,没有好的资料或者电子书,资料推荐大家多看看博客园和CSDN的博客.对于看博客,我一般是两个思路,要么找一个人的从头到尾看一遍,觉得有意义的,就把地址加收藏:或 ...

  7. 什么是SharePoint?

    在聊SharePoint开发之前,有必要说下什么是SharePoint. 在我工作的过程中,经常遇到客户对SharePoint不太了解的情况.有客户说,SharePoint太烂了,DropBox能做到 ...

  8. SharePoint 入门书籍推荐

    最近,总有人说刚入门SharePoint,没有好的资料或者电子书,资料推荐大家多看看博客园和CSDN的博客.对于看博客,我一般是两个思路,要么找一个人的从头到尾看一遍,觉得有意义的,就把地址加收藏:或 ...

  9. 实现一个基于 SharePoint 2013 的 Timecard 应用(中)

    门户视图 随着 Timecard 列表的增多,如何查找和管理这许多的 Timecard 也就成了问题.尤其对于团队经理而言,他除了自己填写的 Timecard,还要审核团队成员的 Timecard 任 ...

随机推荐

  1. c# 技巧之 泛型方法

    泛型 指的是编译时不需要指定具体的参数类型,可以在运行时动态地赋予某一种数据类型的机制.  相信很多人对泛型类并不陌生,像Dictionary,List等结构都属于泛型类.有趣的是,一个函数/方法也可 ...

  2. uva10098 Generating Fast, Sorted Permutation

    #include"iostream"#include"stdio.h"#include"string.h"#include"alg ...

  3. php学习日志(1)-php介绍

    在学习Php之前,我们要搞懂php是什么.英文全称php: php hypertext preprocessor,即php超文本预处理器.php脚本在服务器上执行,故它是一种服务器编程语言. php文 ...

  4. 兼容 CommonJS 和 CommonJS-like规范(1~38)

    CommonJS是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他 ...

  5. Emojicon - 为你提供emoji表情的整套方案

    Github : https://github.com/rockerhieu/emojicon 事实上国内的<表情大全>也有提供类似整套表情解决方式,并且还支持gif表情:http://w ...

  6. 全球移动互联网大会gmic 2017为什么值得参加?

    长城会CEO郝义认为,"科学产业化将会推动科学复兴,"而本次GMIC 北京 2017也将首次引入了高规格科学家闭门峰会,专门设置G-Summit全球科学创新峰会,以"科学 ...

  7. Gradle part1 HelloWorld

    (https://spring.io/guides/gs/gradle/#scratch) ----gradle helloworld----- 1.下载后安装 Unzip the file to y ...

  8. NopCommerce源码架构详解

    NopCommerce源码架构详解--初识高性能的开源商城系统cms   很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从 ...

  9. 【转发】Cookie存储的值大小限制和个数问题

    Cookie以及LocalStorage.SessionStorage的区别 缓存机制对于用户访问网页来说是很方便的.如果将用户名,偏好设定或者其他一些数据存储到客户端,而不必每次访问网页都输入数据, ...

  10. ReactNative小笔记

    import React, { Component } from 'react'; import { AppRegistry, View } from 'react-native'; export d ...