照理说一个无人值守的机器人原本是不应该有人工操作介入的,也就不会提供暂停功能。但客户可能出于业务需要,或者风险管控的考虑,会需要机器人具备暂停功能。通常,会希望在机器人运行时,用户摁下快捷键,机器人就马上暂停,而暂停之后也能够恢复。

那么如何在机器人执行正常业务流程的同时,检测快捷键是否被摁下呢?这里可以使用Pick(System.Activities.Statements.Pick)来实现这个效果。如下图如示。左侧只是用来模拟通常的业务流程,各位可以将自己实际的workflow放进去。右侧分支在Trigger中放入一个Monitor Events(UiPath.Core.Activities.MonitorEvents)用来同时检测快捷键是否触发。实际运行的时候,Pick的逻辑是这样的,两个分支的Trigger部分会并行执行(但其实各个分支的启动还是有细微的时间差的,这个在此先不讨论),哪一个分支的Trigger先运行完毕,就会运行那一个分支的Action部分并且其它分支会停止执行。

既然我们已经能够在主流程运行的同时检测快捷键是否触发,那么我们接下来要解决的问题就是如何暂停(阻塞)主流程的运行。这里要注意的一点是,用户暂停后,应该也能够取消暂停状态继续执行,所以这里采用的方法一定要能够接收用户的输入。对此,我在Monitor Events中利用了Message Box,当然读者也可以根据实际情况选择其它具有类似作用的Activity。Monitor Events中的内容大致如下所示。我们可以看到,当用户摁下Ctrl+P时,机器人就会暂停并且弹出对话框提示机器人已暂停,一旦用户点击确定按钮,机器人就会继续运行下去。

我在主流程中做了一个无限循环打印时间的设计用来模拟实际的业务流程。机器人运行中摁下Ctrl+P在Output窗口中看起来的效果就是如下图所示这样。

要特别注意的一点是Monitor Events的属性中有一个RepeatForever一定要设为True,否则机器人只能暂停一次。。。

另外,当一个Workflow通过Invoke Workflow File去调用另一个Workflow时,调用方和被调用方(简称父子workflow)其实是运行在两个线程中的,而Message Box只能暂停自己所处线程的执行,因此要特别处理。一般来说,子Workflow未运行完毕时,父Workflow并不会继续运行下去,所以在子Workflow中实现暂停功能即可。

UiPath如何实现暂停功能?的更多相关文章

  1. 【Cocos游戏实战】功夫小子第七课之游戏主功能场景逻辑功能和暂停功能场景的分析和实现

    CSDN的markdown编辑器是吃屎了么! !.什么玩意.!写了一半写不了东西还全没了,搞个毛线! 本节课的视频教程地址是:第七课在此 假设本教程有帮助到您,希望您能点击进去观看一下,并且如今注冊成 ...

  2. Javascript中暂停功能的实现

    <script language="javascript"> /*Javascript中暂停功能的实现 Javascript本身没有暂停功能(sleep不能使用)同时 ...

  3. delphi真正实现延时暂停功能

    用delphi怎么实现延时功能?在delphi中有一个sleep()函数是用来暂停线程的,使用了它好像和死掉了似得,不好用,这么简单的延时动作用Timer控件有显得复杂了.下面给大家分享一个真正好用的 ...

  4. selenium-java,暂停功能

    暂停/开始应用程序 public class Common_method { public void kill_chromedriver(){ Runtime runtime=Runtime.getR ...

  5. selenium-java,解决一些加了显性等待和隐性等待都不好使的情况,以及给UI自动化加上暂停功能

    最近在UI自动化时遇到了,上一步成功操作后没有响应的情况(动画加载和浏览器加载导致实际没有问题),导致下一步无法成功操作,所有想在尝试2次操作后再次进行上一步操作解决这种情况导致的错误(其实是不想每一 ...

  6. 让C++控制台程序停下来,实现暂停功能

    一.针对Microsoft #include   <stdlib.h> (1)第一种方式system( "PAUSE "); --------------------  ...

  7. (17)Python读取摄像头并实现视频播放、暂停、指定目录保存、回放功能

    读取摄像头并播放.暂停功能 import sys #import scipy.io as sio from PyQt5 import QtGui, QtCore, QtWidgets #from wy ...

  8. Unity3D之游戏暂停制作方法记录

    在游戏开发中我们一般都需要涉及到一个功能:游戏暂停,但是这里指的暂停仅仅是核心模块的暂停,并不是整个游戏都暂停,比如一些UI和UI上的动画与特效是不能被暂停的,整个游戏都暂停了玩家该如何继续游戏呢. ...

  9. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》

    3.暂停游戏 暂停游戏概述: 在游戏进行时,玩家有可能会遇到多种突发事件.在跑酷游戏中突发状况的发生对游戏的影响更甚,游戏进行时玩家死亡,游戏只能从头开始,那么如果因为外界因素而影响游戏的进行,显然是 ...

随机推荐

  1. Python_marshal模块操作二进制文件

    import marshal #导入模块 x1=30 #待序列化的对象 x2=5.0 x3=[1,2,3] x4=(4,5,6) x5={'a':1,'b':2,'c':3} x6={7,8,9} x ...

  2. Java基础系列--桶排序

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/9045967.html 1.算法简介 桶排序可以算是最简单快速的排序算法了,只是限定条件要多 ...

  3. sql语句查询执行顺序

    http://blog.csdn.net/bitcarmanlee/article/details/51004767

  4. MySQL提示“too many connections”的解决办法

    今天生产服务器上的MySQL出现了一个不算太陌生的错误"Too many connections".平常碰到这个问题,我基本上是修改/etc/my.cnf的max_connecti ...

  5. mysql 中 character set 与 collation 的理解

    character set 和 collation 的是什么? character set, 即字符集. 我们常看到的 utf-8, GB2312, GB18030 都是相互独立的 character ...

  6. centos7搭建postfix邮件服务器

    在使用qq等邮件服务器厂商提供的邮件服务后,发现他们的邮件发送数量是有限制的,随着公司的业务的需求下,我们需要搭建一个邮件服务器,邮件服务器可以帮助我们在一些提醒方面和消息推送方面起到帮助. 理论性语 ...

  7. Sublime text使用快捷键

    作者:gyfnice链接:https://www.zhihu.com/question/24896283/answer/34327939来源:知乎著作权归作者所有,转载请联系作者获得授权. 代码片段 ...

  8. app后端设计(13)--IM4JAVA+GraphicsMagick实现中文水印

    在app的后台中,有时候为了标示版权,需要给图片加上水印. 在liunx中,IM4JAVA+GraphicsMagick是个高效处理图片的方案,图片的裁剪是使用了这个技术方案,为了减少不必要的开发成本 ...

  9. Java 学习笔记 (五) Java Compile\Build\Make的区别

    以下内容引自: http://blog.51cto.com/lavasoft/436216 Compile.Make和Build的区别 原创leizhimin2010-11-30 11:30:20评论 ...

  10. Reading Code Is Hard

    注: 以下内容引自: https://blogs.msdn.microsoft.com/ericlippert/2004/06/14/reading-code-is-hard/ Reading Cod ...