[转]自定义UiPath Activity实践
本文转自:https://segmentfault.com/a/1190000017440647
为了对UiPath Activity的实现方式一探究竟,自己尝试实践编写了一个简单的Activity,取名叫SelectRandomItem。
1. 开发环境准备:
- Microsoft Visual Studio with the .NET C# desktop development workload installed.
- NuGet Package Explorer.
- UiPath
2. Activity概述
自定义Activity分两种,CodeActivity和NativeActivity。简单的区分就是CodeActivity只是执行一段代码,NativeActivity的效果就像内置Activities一样,它们实际上就是不同Activity的父类,实现的时候选择继承哪个类,你的Activity就是属于哪个分类。
我们这里是实现CodeActivity,NativeActivity请看开源代码的实现。
功能是把特定分隔符连接的字符串分割开,然后随机返回其中的某一个。应用在给选择框一个随机的值。因为主要是学习的目的,所以实际上并没有跟选择框有太大的关联,只是对字符做了处理而已。
自定义Activity分两步,首先通过C#语言来编写你的Activity逻辑,编译生成.dll文件,然后通过NuGet Package Explorer打包。
3.创建C#项目,编写实现代码
下面跟着提示一步一步创建C#项目:
- Launch Microsoft Visual Studio.
- Click 文件 > 创建 > 项目 (shortcut: Ctrl + Shift + N). The New Project window is displayed.
- Click Visual C#. The list of all dependencies using C# is displayed.
- 给你的Activity取个名字, 这里是 “SelectRandomItem”。
- 选择类库(.NET Framework) and click OK. 这样才能把项目导出为 .dll文件。
- Click 项目 > 添加引用….
- 分别搜索
System.Activities
和System.ComponentModel.Composition
引用,并勾选。 - Click the OK button.这样就可以在代码中使用
System.Activities
和System.ComponentModel.Composition
这两个基础组件了。
下面是已添加注释的实现代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Text.RegularExpressions;
- using System.Activities;
- using System.ComponentModel;
- namespace SelectRandomItem
- {
- public class SelectRandomItem : CodeActivity
- {
- //参数类型,输入或者输出,或者两者都是
- [Category("Input")]
- //必须参数
- [RequiredArgument]
- public InArgument<String> FullText { get; set; }
- [Category("Input")]
- //参数默认值
- [DefaultValue("\r\n")]
- public InArgument<String> Separator { get; set; }
- [Category("Output")]
- public OutArgument<String> ChoiceResult { get; set; }
- /**
- * Execute是CodeActivity必须重载的方法
- * 处理逻辑根据Separator指定的分割符分割FullText
- * 然后随机返回其中一个
- *
- **/
- protected override void Execute(CodeActivityContext context)
- {
- //所有的参数取值、赋值都是通过context
- var fullText = FullText.Get(context);
- var separator = Separator.Get(context);
- string[] items = Regex.Split(fullText, separator, RegexOptions.IgnoreCase);
- Random ran = new Random();
- var result = items[ran.Next(items.Length)];
- ChoiceResult.Set(context, result);
- }
- }
- }
然后点击 生成 > 生成 SelectRandomItem。在输出栏找到SelectRandomItem.dll文件所在位置,准备下一步打包使用。
4. 使用NuGet Package Explorer打包
- 打开NuGet Package Explorer。点击Create a new package (Ctrl + N),你会看到左右分割的两栏Package metadata和Package contents。
- 在右边Package contents栏的右键菜单单击 Add lib folder。
- 在lib文件夹上右键,点击 Add Existing File… 添加 SelectRandomItem.dll 文件。
- 点击顶部菜单栏 Edit > Edit Metadata,填写你的包信息。需要注意的是Id字段必须包含 “
Activities
”,不然UiPath会无法识别。 - 点击 File > Save ,保存你的包,文件名应该是类似这样:
ActivitiesSelectRandomItem.1.0.0.nupkg
。
至此你的Activity就创建完成了。
添加到UiPath和你的项目当中实际使用
- 首先确定你的UiPath本地包的目录,打开Manage Packages,点击左上方的Settings,在Default packages sources栏中查看Local标签对应的路径。把你创建的包放到这个文件夹内。
- 在Manage Packages左侧点击All Packages > Local ,你或者应该可以直接看到你的包了或者通过搜索来找到你的包。
- 点击你的包,在右侧信息栏点击install,然后Save,至此你的包已经安装到你的UiPath Studio的Activities面板中了。
- 拖到你项目中体验一下吧:)
5. 代码文件下载
该Activity的源文件都发布在个人github仓库,有需要请点击这里查看和下载。
同时该Activity在记事本自动录入项目中使用到两次,分别是随机选择字体和随机字体大小。对比我通过Python模块实现同样的功能来看,自定义Activity的执行速度比调用Python模块要稳定要快很多。
最后,谢谢你能看完!有不完善的地方还希望与大家多交流。
[转]自定义UiPath Activity实践的更多相关文章
- CAS4.0.4 之自定义登录页实践
因最近公司要用到cas登陆而且要使用自定登陆页面,网络上搜索了一下cas自定义登陆,比较好的两篇文章CAS 之自定义登录页实践和CAS 之 跨域 Ajax 登录实践,感觉写的不错,但是发现改动的地方很 ...
- Android 开发学习进程0.12 自定义view activity的属性
设置类似钉钉或tel的圆形用户名首字母头像 设置有两种方法,一是使用已有的库或自定义的view组件,但如果确定只是文字头像,也可使用textview的backgrou属性,调整资源文件使textvie ...
- 【Cesium 颜狗初步】fabric 材质定义与自定义着色器实践
fabric 材质定义:着色器实践 1. 示例代码 贴到沙盒里就可以运行: var viewer = new Cesium.Viewer("cesiumContainer"); v ...
- 如何切换到自定义的Activity
一. 新建一个空的工程,并添加一个按钮 二.新建一个布局文件,命名为my_aty, 并添加一个文本 三.新建一个类,命名为MyAty,并重写onCreate函数 public void onCreat ...
- 自定义策略-简单实践 <一>
1.建立 netcore mvc 项目. 2.startup.cs 中添加服务 services.AddAuthorization(option=> { var requirements ...
- 【UiPath 中文教程】02 - 创建自定义 Activity
在 UiPath Studio 中,活动 (Activity) 是流程自动化的基石,是构成自动化程序的最小模块.它们被包含在一个个 NuGet 包中. UiPath Studio 中有 3 类包: 官 ...
- android自定义view系列:认识activity结构
标签: android 自定义view activity 开发中虽然我们调用Activity的setContentView(R.layout.activity_main)方法显示View视图,但是vi ...
- 爱奇艺技术分享:爱奇艺Android客户端启动速度优化实践总结
本文由爱奇艺技术团队原创分享,原题<爱奇艺Android客户端启动优化与分析>. 1.引言 互联网领域里有个八秒定律,如果网页打开时间超过8秒,便会有超过70%的用户放弃等待,对Andro ...
- 【Android - 自定义View】之不同事件的处理
在Android的自定义View中,往往需要处理一系列的事件,如触摸事件.双击事件.缩放事件等.本文将这些事件及其处理进行总结.本文将持续更新,将我在自定义View的实践中用到的事件及其处理进行总结. ...
随机推荐
- 曹工杂谈:Spring boot应用,自己动手用Netty替换底层Tomcat容器
前言 问:标题说的什么意思? 答:简单说,一个spring boot应用(我这里,版本升到2.1.7.Release了,没什么问题),默认使用了tomcat作为底层容器来接收和处理连接. 我这里,在依 ...
- 第4节:Java基础 - 必知必会(中)
第4节:Java基础 - 必知必会(中) 本小节是Java基础篇章的第二小节,主要讲述抽象类与接口的区别,注解以及反射等知识点. 一.抽象类和接口有什么区别 抽象类和接口的主要区别可以总结如下: 抽象 ...
- 2019 湖南多校第一场(2018~2019NCPC) 题解
解题过程 开场shl过B,C,然后lfw写J,J WA了以后shl写A,但是因为OJ上空间开小WA了,而不是MLE?,J加了特判过了.之后一直在检查A错哪了,直到qt发现问题改了空间,浪费许多时间,但 ...
- 洛谷 题解 P5015 【标题统计】 NOIP2018 普及组 T1
没有人用 scanf("%c", &ch) != EOF 吗? scanf 和 EOF 会伤心的. 思路:逐个读入字符,遇到EOF中止,对于每个读入的字符进行判断. 附上考 ...
- Java多态之动态绑定
目录 Java多态之动态绑定 引用变量的类型 编译时类型 运行时类型 方法绑定 静态绑定 动态绑定 方法表 Java多态之动态绑定 上篇回顾:多态是面向对象程序设计非常重要的特性,它让程序拥有 更好的 ...
- Python3 模块基础
目录 模块 什么是模块 模块的四种形式 导入模块 import 模块 from 模块 import 方法 循环导入 模块搜索路径 Python文件的两种用途 包 什么是包 为什么要有包 包的使用 绝对 ...
- 解决Vue报错:TypeError: Cannot read property 'scrollHeight' of undefined
如图: 解决问题的根源: 这个DOM元素找不到,或者是初始化的时候没有初始化成功,总之就是这个DOM元素并没有创建成功就进行了操作.保证这个DOM元素创建成功了就不会存在这个问题了.判断当前DOM元素 ...
- TimePicker - NG-ZORRO设置
前言 依照官方例子,要给nz-time-picker组件设置某些时间范围不能选择. 正文 根据列表里设置的开始时间与结束时间,去限制弹框的时间组件选择范围.这里用到了组件的nzDisabledHour ...
- Java 复制Excel工作表
本文归纳了关于Java如何复制Excel工作表的方法,按不同复制需求,可分为: 1. 复制工作表 1.1 在同一个工作簿内复制工作表 1.2 在不同工作簿间复制工作表 2. 复制指定单元格数据 对于复 ...
- 关于eclipse码代码时光标自动消失要重新点击输入框的问题
前几天码代码时在两个电脑都出现了同样的问题,就是在输入的时候,输入法突然从程序框切换到某不可名状的位置,要重新点击输入框才能解决.(后发现不但是eclipse,任何带有输入框的都会出现此问题) 经排查 ...