Coded UI非常好,我开始还在想,怎么样能让一个通过SharePoint Designer创建的Workflow publish三百五十次?想不到一个好的方法,也不知道SharePoint Designer里那个publish按钮调用的是什么方法,想来想去还是用Coded UI尝试了一下,发现也挺好,在资源允许的情况下,就这样完成了SPD Workflow的自动化创建:

1. 首先,你得有个SPD Workflow

2. 通过我第一次录制的脚本发现,SharePoint本身有个bug,就是如果你在Publish完这个Reusable Workflow之后如果不去SharePoint List的Workflow Settings页面刷新一下的话,这个Publish的版本根本就没有创建成功,于是我第二次录制的脚本中有多了一步,就是在Publish Workflow之后要去往Workflow Settings页面刷新一下,这样就能确保Workflow每次Publish都是成功的:

具体的脚本流程如下(Coded UI具体用法详见我之前发表的一篇文章里有介绍),其实和你操作SharePoint Designer Publish Workflow的步骤是一样的,只不过在最后两步——Publish Workflow和刷新Workflow Settings页面这里我加了一个循环,以达到自动化创建欲达到的次数,就是这样(过程详见我注释行括号中加的汉语):

public void RecordedMethod()
{
#region Variable Declarations
WinButton uIItem30828CI1Button = this.UIHttpmgluca10000sitesWindow.UIItem30828CI1ListItem.UIItem30828CI1Button;
WinButton uIWorkflowsButton = this.UIHttpmgluca10000sitesWindow.UIWorkflowsListItem.UIWorkflowsButton;
WinListItem uIRe10ListItem = this.UIHttpmgluca10000sitesWindow.UIItemWindow1.UIItemList.UIRe10ListItem;
WinButton uIPublishButton = this.UIHttpmgluca10000sitesWindow.UIItemWindow.UISaveToolBar.UIPublishButton;
WinEdit uIAddressEdit = this.UIMsnWindowsInternetExWindow.UIItemWindow.UIAddressBarClient.UIAddressEdit;
BrowserWindow uIMsnWindowsInternetExWindow = this.UIMsnWindowsInternetExWindow;
HtmlHyperlink uIShareHyperlink = this.UIMsnWindowsInternetExWindow.UIWorkflowSettingsDocument.UIShareHyperlink;
HtmlDocument uIWorkflowSettingsDocument = this.UIMsnWindowsInternetExWindow.UIWorkflowSettingsDocument;
#endregion // Launch '%ProgramW6432%\Microsoft Office\Office15\SPDESIGN.EXE'(打开SPD)
ApplicationUnderTest sPDESIGNApplication = ApplicationUnderTest.Launch(this.RecordedMethod4Params.ExePath, this.RecordedMethod4Params.AlternateExePath); // Click '30828CI1' button(点击相应的站点)
Mouse.Click(uIItem30828CI1Button, new Point(, )); // Click 'Workflows' button(点击Workflows)
Mouse.Click(uIWorkflowsButton, new Point(, )); // Click 're10' list item(点击相应的Workflow)
Mouse.Click(uIRe10ListItem, new Point(, )); // Click 'Publish' button(点击Publish按钮)
Mouse.Click(uIPublishButton, new Point(, )); // Go to web page 'http://go.microsoft.com/fwlink/p/?LinkId=255141' using new browser instance(打开浏览器)
this.UIMsnWindowsInternetExWindow.LaunchUrl(new System.Uri(this.RecordedMethod4Params.UIMsnWindowsInternetExWindowUrl)); // Click 'Address' text box(点击浏览器地址栏)
Mouse.Click(uIAddressEdit, new Point(, )); // Go to web page 'http://mglu-ca:10000/sites/30828CI1/_layouts/15/WrkSetng.aspx?List={C9B1EDD4-8B24-4115-9753-3113D02BE3C1}'(输入Workflow Settings页面的地址)
uIMsnWindowsInternetExWindow.NavigateToUrl(new System.Uri(this.RecordedMethod4Params.UIMsnWindowsInternetExWindowUrl1)); // Set flag to allow play back to continue if non-essential actions fail. (For example, if a mouse hover action fails.)
Playback.PlaybackSettings.ContinueOnError = true; // Mouse hover 'Share' link at (8, 3)
Mouse.Hover(uIShareHyperlink, new Point(, )); // Reset flag to ensure that play back stops if there is an error.
Playback.PlaybackSettings.ContinueOnError = false; int i=;
while (i < )
{
// Click 'Publish' button(点击Publish按钮)
Mouse.Click(uIPublishButton, new Point(, )); // Type '{F5}' in 'Workflow Settings' document(刷新Workflow Settings页面)
Keyboard.SendKeys(uIWorkflowSettingsDocument, this.RecordedMethod4Params.UIWorkflowSettingsDocumentSendKeys, ModifierKeys.None);
}
}

就这样,一个自动化创建SPD Workflow的任务就完成了,还挺快的,一分钟差不多创建10个SPD Workflow左右,半个小时左右弄完。

不过这是通过最接近用户操作的方法实现的,却不是通过直接调用相关API实现的。

还希望有大神能给出直接调用相关API实现Publish SPD Workflow的方法,共同学习,共同进步。

SharePoint自动化系列——通过Coded UI录制脚本自动化创建SharePoint Designer Reusable Workflow的更多相关文章

  1. JMeter专题系列(二)录制脚本

    环境 Badboy  version 2.1.1 JDK: 1.7.0_67 Apache  JMeter-2.11 ----------------------------------------- ...

  2. SharePoint自动化系列——Create a local user and add to SharePoint

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 实现过程:在本地创建一个local user并将该user添加到Administrators组中, ...

  3. 利用脚本一键执行脚本,创建SharePoint文档库列表

    SharePoint基于文档库和列表上进行二次开发,生成新的文档库和新的列表模板 通过新的模板,创建新的文档库与列表 --定义site对象$site = SPSite http://dvt176/si ...

  4. 如何使用Coded UI Test对Webpage进行自动化测试

    在Visual Studio中,Coded UI Test已经不是什么新特性了,较早版本的Visual Studio中就已经有这个东东了.它主要用来帮助自动化测试工程师和开发人员确保程序在UI方面没有 ...

  5. Coded UI Test对Webpage进行自动化测试

    如何使用Coded UI Test对Webpage进行自动化测试   在Visual Studio中,Coded UI Test已经不是什么新特性了,较早版本的Visual Studio中就已经有这个 ...

  6. Jmeter(二十九) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy2(详解教程)

    1.简介 上一篇文中已经对Badboy做了一个基本上详细完整的介绍,这一篇宏哥带你们实战一下,这一篇主要讲解和分享:录制和运行脚本.参数化 首先让我们使用N模式录制一个脚本,测试用例编号为:1.1.1 ...

  7. appium-desktop录制脚本二次开发,生成我司自动化脚本

    目的 通过对appium-desktop脚本录制功能进行二次开发,使录制的java脚本符合我司自动化框架要求. 实现步骤 1.增加元素名称的输入框 由于ATK(我司自动化测试框架)脚本中元素是以“ap ...

  8. Jmeter学习系列----2 录制脚本

    虽然专业的自动化测试人员都不会选择录制脚本的方式来进行自动化脚本的编写,但是,我们作为初学者还是可以学习一下怎么利用工具来进行脚本的录制,体验一下自动化工具的效率,下面,具体讲下如何使用jmeter自 ...

  9. 运维与自动化系列③自动化部署基础与shell脚本实现

    自动化部署基础与shell脚本实现 关于自动化的基础知识: 1.1:当前代码部署的实现方式: 运维纯手工scp到web服务器纯手工登录git服务器执行git pull或svn服务器执行svn upda ...

随机推荐

  1. Java内存泄露原因详解

    一.Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址.Java中对象是采用new或者反射的方法创建的, 这些对象的创建都是在堆(He ...

  2. Java菜鸟入坑学习要点

    一.掌握静态方法和属性 静态方法和属性用于描述某一类对象群体的特征,而不是单个对象的特征.Java中大量应用了静态方法和属性,这是一个通常的技巧.但是这种技巧在很多语言中不被频繁地使用.理解静态方法和 ...

  3. 用curl去探测接口是否正常返回结果,若没有正常返回则触发报警

    现有一需求去curl 在香港的一个接口, 返回值有时正常有时报错 connection reset by peer . 思路: 若 执行成功 $?返回 0  , 不成功则返回其他数字 #!/bin/b ...

  4. HDUOJ----4006The kth great number(最小堆...)

    The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

  5. InteliJ Idea通过maven创建webapp

    facet是IDE给工程添加的属性,在使用maven时一定不能使用facet 一.创建maven项目,选定webapp作为archtype,这样就会自动生成webapp目录 如果没有给maven设置代 ...

  6. mac下安装mysql 1820 重置默认密码

    mac安装mysql时会给出一个临时密码 记录下来 2018-03-17T02:14:10.809431Z 1 [Note] A temporary password is generated for ...

  7. PO_员工主管审批模式详解(设定)

    2014-06-03 Created By BaoXinjian

  8. OAF_OAF组件系列1 - Item Style汇总(概念)

    20150506 Created By BaoXinjian

  9. Python 列表 remove() 方法

    描述 Python 列表 remove() 方法通过指定元素的值来移除列表中某个元素的第一个匹配项,如果这个元素不在列表中会报一个异常. 语法 remove() 方法语法: L.remove(obj) ...

  10. Python atan() 函数

    描述 atan() 返回x的反正切弧度值. 语法 以下是 atan() 方法的语法: import math math.atan(x) 注意:atan()是不能直接访问的,需要导入 math 模块,然 ...