SharePoint API测试系列——对Recorded Item进行OM Methods操作(委托的妙用)

对Recorded Item动态调用OM Methods进行测试,界面如下:

输入Site的URL,File在SharePoint中的相对URL,并选择OM操作类型,点击Test进行测试。代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.SharePoint;

namespace RecordsOMTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            OMMethods_comboBox.Items.Add("Rename");
            OMMethods_comboBox.Items.Add("File item delete");
            OMMethods_comboBox.Items.Add("File delete");
            OMMethods_comboBox.Items.Add("File item recycle");
            OMMethods_comboBox.Items.Add("File recycle");
            OMMethods_comboBox.Items.Add("File undo check out");
            OMMethods_comboBox.Items.Add("File check in");
            OMMethods_comboBox.Items.Add("File check out");
        }

        public delegate void CallOMMethod(SPFile file);

        private void test_button_Click(object sender, EventArgs e)
        {
            /*
                Block delete test.
            */
            //Rename test.
            CallOMMethod Rename = file => { file.Item["Name"] = "kkk.txt"; file.Item.Update(); };
            //Delete test 1.
            CallOMMethod delete1 = file => { file.Item.Delete(); };
            //Delete test 2.
            CallOMMethod delete2 = file => { file.Delete(); };
            //Delete test 3.
            CallOMMethod delete3 = file => { file.Item.Recycle(); };
            //Delete test 4.
            CallOMMethod delete4 = file => { file.Recycle(); };

            /*
                Block edit and delete test.
            */
            //UndoCheckOut test.
            CallOMMethod UndoCKOut = file => { file.UndoCheckOut(); };
            //CheckIn test.
            CallOMMethod CkIn = file => { file.CheckIn("Check in."); };
            //CheckOut test.
            CallOMMethod CkOut = file => { file.CheckOut(); };

            switch (OMMethods_comboBox.Text)
            {
                case "Rename":
                    //Rename test.
                    DoOMTest(Rename);
                    break;
                case "File item delete":
                    DoOMTest(delete1);
                    break;
                case "File delete":
                    DoOMTest(delete2);
                    break;
                case "File item recycle":
                    DoOMTest(delete3);
                    break;
                case "File recycle":
                    DoOMTest(delete4);
                    break;
                case "File undo check out":
                    DoOMTest(UndoCKOut);
                    break;
                case "File check in":
                    DoOMTest(CkIn);
                    break;
                case "File check out":
                    DoOMTest(CkOut);
                    break;
            }
        }
        private void DoOMTest(CallOMMethod cm)
        {
            using (SPSite site = new SPSite(siteUrl_textBox.Text))
            {
                SPWeb web = site.RootWeb;
                SPFile file = web.GetFile(filePath_textBox.Text);
                try
                {
                    cm.Invoke(file);
                    //Reach this step means test failed.
                    result_richTextBox.Text = "Test failed.\r\n";
                    result_richTextBox.SelectionColor = Color.Red;
                }
                catch (Exception ex)
                {
                    result_richTextBox.Text = "Test passed.\r\n";
                    result_richTextBox.Select(0, result_richTextBox.Text.Length);
                    result_richTextBox.SelectionColor = Color.Green;
                    result_richTextBox.Text += string.Concat(ex);
                }
            }
        }
    }
}

提取每个OM Methods单元测试中的公共部分写成DoOMTest(CallOMMethod cm)方法,对于每个测试中不同的部分通过调用一个委托方法(橙色字体)来代替。然后我们对委托方法的类型进行声明(委托方法需要传入一个SPFile类型的参数):

public delegate void CallOMMethod(SPFile file);

再根据每个测试中的不同部分内容对委托进行实例化:

//Rename test.
CallOMMethod Rename = file => { file.Item["Name"] = "kkk.txt"; file.Item.Update(); };
//Delete test 1.
CallOMMethod delete1 = file => { file.Item.Delete(); };
//Delete test 2.
CallOMMethod delete2 = file => { file.Delete(); };
//Delete test 3.
CallOMMethod delete3 = file => { file.Item.Recycle(); };
//Delete test 4.
CallOMMethod delete4 = file => { file.Recycle(); };
//UndoCheckOut test.
CallOMMethod UndoCKOut = file => { file.UndoCheckOut(); };
//CheckIn test.
CallOMMethod CkIn = file => { file.CheckIn("Check in."); };
//CheckOut test.
CallOMMethod CkOut = file => { file.CheckOut(); };

这就是委托在测试中的妙用,极大的减少了重复代码量。

时间: 2024-12-28 16:01:59

SharePoint API测试系列——对Recorded Item进行OM Methods操作(委托的妙用)的相关文章

SharePoint API测试系列——Records.BypassLocks测试

对于SharePoint中已经是Record的Item,我们想要修改他的属性,这在UI界面是无法完成的: 这时需要通过Records.BypassLocks API来完成.设计一个tool,利用Records.BypassLocks API来修改Recorded Items的属性(这里拿Title举例),界面如下: 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using Sy

SharePoint API测试系列——Manage SharePoint Site Policy & Expiration Email with CSOM API

对CSOM(Not SSOM) Site Policy & Expiration Email的API的调用过程进行封装,做成tool,界面如下: 代码如下: using System; using System.Windows.Forms; using Microsoft.SharePoint.Client; using Microsoft.SharePoint.Client.InformationPolicy; namespace CSOMForm { public partial class

SharePoint API 中SPListItem的更新

使用SharePoint API来操作文件,列表对象时,都会用到更新的方法,SharePoint中在更新SPListItem有3个方法: Update Updates the database with changes that are made to the list item. (Overrides SPItem.Update().) SystemUpdate() Updates the database with changes made to the list item without

SharePoint 2013 Designer系列之自定义列表表单

在SharePoint的使用中,默认的样式过于单调经常困扰着我们,其实,SharePoint使用Designer工具,可以很轻松解决这一问题,制作出各式各样漂亮的页面.下面,让我们简单介绍下这一过程. 1.首先创建一个测试列表,里面的字段如下: 2.看一眼默认的Dispform.aspx页面,对于新闻来说,基本属于不能看: 3.使用SharePoint Designer 2013打开列表,找到Dispform.aspx页面,右键在高级模式下编辑该文件,如下图: 4.一般都是隐藏默认的td,然后新

SharePoint 2013 Designer系列之数据视图筛选

在SharePoint中,我们经常需要对列表进行简单的筛选,这时,数据视图就有作用了,我们可以定制对于字段的筛选,来进行展示:特别的,筛选不同于搜索,并没有对于附件或者文档的全文检索,如果需要全文检索,可以使用列表的垂直搜索功能. 1.新建一个测试页面,然后右键在高级模式下编辑,如下图: 2.在PlaceHolderMain节点里,加入webpartzone,用来添加数据视图: 3.数据视图选择News列表,如下图: 4.列表视图就选择第一个就可以了,如下图: 5.查看测试页面,如下图: 6.在

Hadoop MapReduce编程 API入门系列之挖掘气象数据版本2(九)

下面,是版本1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本1(一) 这篇博文,包括了,实际生产开发非常重要的,单元测试和调试代码.这里不多赘述,直接送上代码. MRUnit 框架 MRUnit是Cloudera公司专为Hadoop MapReduce写的单元测试框架,API非常简洁实用.MRUnit针对不同测试对象使用不同的Driver: MapDriver:针对单独的Map测试  ReduceDriver:针对单独的Reduce测试    MapReduceDri

SharePoint API如何处理时区问题

使用SharePoint API,我们经常会有时区转换的问题,SharePoint API 本身如何处理时区问题的呢? 本文主要以Modified字段为例测试相关API的行为. CSOM API测试: 输出代码: private static void ClientAPIOutputModified(ClientContext context, ListItem listItem) { context.Load(listItem); context.ExecuteQuery(); var mod

使用metaweblog API实现通用博客发布 之 API测试

使用metaweblog API实现通用博客发布 之 API测试 使用博客比较少,一则是文笔有限,怕写出的东西狗屁不通,有碍观瞻, 二则是懒,很讨厌要登录到网站上写东西,也没有那么多时间(借口).个人最喜欢用于记录的工具是Zim https://zim-wiki.org/ ,记录东西超级方便,可惜只支持PC版本, 记录的东西可以到处为MarkDown 格式,非常方便(你现在看到的这篇就是用Zim写的). 无意间看到Vs Code上有博客园的插件,作为程序员,顺手google/百度了一下,原来通用

淘宝API开发系列:淘宝api接口接入说明

为了进行淘宝API接口开发,正常会有以下几个步骤操作: 1)开发者注册一个账号. 2)然后为每个淘宝应用注册一个应用程序键(App Key) . 3)下载淘宝API的SDK并掌握基本的API基础知识和调用,具体可以参考博客的信息点击查看详细接口说明里面的技术分享区等.3)下载淘宝API的SDK并掌握基本的API基础知识和调用,具体可以参考博客的信息(淘宝商品详情介绍请添加链接描述)里面的技术分享区等. 4)利用SDK接口和对象,传入AppKey或者必要的时候获取并传入SessionKey来进行程