本文转自:https://segmentfault.com/a/1190000017440647

为了对UiPath Activity的实现方式一探究竟,自己尝试实践编写了一个简单的Activity,取名叫SelectRandomItem。

1. 开发环境准备:

2. Activity概述

自定义Activity分两种,CodeActivity和NativeActivity。简单的区分就是CodeActivity只是执行一段代码,NativeActivity的效果就像内置Activities一样,它们实际上就是不同Activity的父类,实现的时候选择继承哪个类,你的Activity就是属于哪个分类。

我们这里是实现CodeActivity,NativeActivity请看开源代码的实现。
功能是把特定分隔符连接的字符串分割开,然后随机返回其中的某一个。应用在给选择框一个随机的值。因为主要是学习的目的,所以实际上并没有跟选择框有太大的关联,只是对字符做了处理而已。

自定义Activity分两步,首先通过C#语言来编写你的Activity逻辑,编译生成.dll文件,然后通过NuGet Package Explorer打包。

3.创建C#项目,编写实现代码

下面跟着提示一步一步创建C#项目:

  1. Launch Microsoft Visual Studio.
  2. Click 文件 > 创建 > 项目 (shortcut: Ctrl + Shift + N). The New Project window is displayed.
  3. Click Visual C#. The list of all dependencies using C# is displayed.
  4. 给你的Activity取个名字, 这里是 “SelectRandomItem”。
  5. 选择类库(.NET Framework) and click OK. 这样才能把项目导出为 .dll文件。
  6. Click 项目 > 添加引用….
  7. 分别搜索 System.ActivitiesSystem.ComponentModel.Composition 引用,并勾选。
  8. Click the OK button.这样就可以在代码中使用 System.ActivitiesSystem.ComponentModel.Composition 这两个基础组件了。

下面是已添加注释的实现代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Text.RegularExpressions;
  7.  
  8. using System.Activities;
  9. using System.ComponentModel;
  10.  
  11. namespace SelectRandomItem
  12. {
  13. public class SelectRandomItem : CodeActivity
  14. {
  15. //参数类型,输入或者输出,或者两者都是
  16. [Category("Input")]
  17. //必须参数
  18. [RequiredArgument]
  19. public InArgument<String> FullText { get; set; }
  20.  
  21. [Category("Input")]
  22. //参数默认值
  23. [DefaultValue("\r\n")]
  24. public InArgument<String> Separator { get; set; }
  25.  
  26. [Category("Output")]
  27. public OutArgument<String> ChoiceResult { get; set; }
  28.  
  29. /**
  30. * Execute是CodeActivity必须重载的方法
  31. * 处理逻辑根据Separator指定的分割符分割FullText
  32. * 然后随机返回其中一个
  33. *
  34. **/
  35. protected override void Execute(CodeActivityContext context)
  36. {
  37. //所有的参数取值、赋值都是通过context
  38. var fullText = FullText.Get(context);
  39. var separator = Separator.Get(context);
  40. string[] items = Regex.Split(fullText, separator, RegexOptions.IgnoreCase);
  41. Random ran = new Random();
  42. var result = items[ran.Next(items.Length)];
  43. ChoiceResult.Set(context, result);
  44. }
  45. }
  46.  
  47. }

然后点击 生成 > 生成 SelectRandomItem。在输出栏找到SelectRandomItem.dll文件所在位置,准备下一步打包使用。

4. 使用NuGet Package Explorer打包

  1. 打开NuGet Package Explorer。点击Create a new package (Ctrl + N),你会看到左右分割的两栏Package metadata和Package contents。
  2. 在右边Package contents栏的右键菜单单击 Add lib folder。
  3. 在lib文件夹上右键,点击 Add Existing File… 添加 SelectRandomItem.dll 文件。
  4. 点击顶部菜单栏 Edit > Edit Metadata,填写你的包信息。需要注意的是Id字段必须包含 “Activities”,不然UiPath会无法识别。
  5. 点击 File > Save ,保存你的包,文件名应该是类似这样:ActivitiesSelectRandomItem.1.0.0.nupkg

至此你的Activity就创建完成了。

添加到UiPath和你的项目当中实际使用

  1. 首先确定你的UiPath本地包的目录,打开Manage Packages,点击左上方的Settings,在Default packages sources栏中查看Local标签对应的路径。把你创建的包放到这个文件夹内。
  2. 在Manage Packages左侧点击All Packages > Local ,你或者应该可以直接看到你的包了或者通过搜索来找到你的包。
  3. 点击你的包,在右侧信息栏点击install,然后Save,至此你的包已经安装到你的UiPath Studio的Activities面板中了。

  4. 拖到你项目中体验一下吧:)

5. 代码文件下载

该Activity的源文件都发布在个人github仓库,有需要请点击这里查看和下载。
同时该Activity在记事本自动录入项目中使用到两次,分别是随机选择字体和随机字体大小。对比我通过Python模块实现同样的功能来看,自定义Activity的执行速度比调用Python模块要稳定要快很多。

最后,谢谢你能看完!有不完善的地方还希望与大家多交流。

[转]自定义UiPath Activity实践的更多相关文章

  1. CAS4.0.4 之自定义登录页实践

    因最近公司要用到cas登陆而且要使用自定登陆页面,网络上搜索了一下cas自定义登陆,比较好的两篇文章CAS 之自定义登录页实践和CAS 之 跨域 Ajax 登录实践,感觉写的不错,但是发现改动的地方很 ...

  2. Android 开发学习进程0.12 自定义view activity的属性

    设置类似钉钉或tel的圆形用户名首字母头像 设置有两种方法,一是使用已有的库或自定义的view组件,但如果确定只是文字头像,也可使用textview的backgrou属性,调整资源文件使textvie ...

  3. 【Cesium 颜狗初步】fabric 材质定义与自定义着色器实践

    fabric 材质定义:着色器实践 1. 示例代码 贴到沙盒里就可以运行: var viewer = new Cesium.Viewer("cesiumContainer"); v ...

  4. 如何切换到自定义的Activity

    一. 新建一个空的工程,并添加一个按钮 二.新建一个布局文件,命名为my_aty, 并添加一个文本 三.新建一个类,命名为MyAty,并重写onCreate函数 public void onCreat ...

  5. 自定义策略-简单实践 <一>

    1.建立   netcore  mvc 项目. 2.startup.cs 中添加服务 services.AddAuthorization(option=> { var requirements ...

  6. 【UiPath 中文教程】02 - 创建自定义 Activity

    在 UiPath Studio 中,活动 (Activity) 是流程自动化的基石,是构成自动化程序的最小模块.它们被包含在一个个 NuGet 包中. UiPath Studio 中有 3 类包: 官 ...

  7. android自定义view系列:认识activity结构

    标签: android 自定义view activity 开发中虽然我们调用Activity的setContentView(R.layout.activity_main)方法显示View视图,但是vi ...

  8. 爱奇艺技术分享:爱奇艺Android客户端启动速度优化实践总结

    本文由爱奇艺技术团队原创分享,原题<爱奇艺Android客户端启动优化与分析>. 1.引言 互联网领域里有个八秒定律,如果网页打开时间超过8秒,便会有超过70%的用户放弃等待,对Andro ...

  9. 【Android - 自定义View】之不同事件的处理

    在Android的自定义View中,往往需要处理一系列的事件,如触摸事件.双击事件.缩放事件等.本文将这些事件及其处理进行总结.本文将持续更新,将我在自定义View的实践中用到的事件及其处理进行总结. ...

随机推荐

  1. 一个普通程序员眼中的AQS

    AQS是JUC包中许多类的实现根基,这篇文章只是个人理解的产物,不免有误,若阅读过程中有发现不对的,希望帮忙指出[赞]! 1 AQS内脏图 ​  在开始了解AQS之前,我们先从上帝视角看看AQS是由几 ...

  2. luogu P1168 中位数 |树状数组+二分

    题目描述 给出一个长度为NN的非负整数序列A_i,对于所有1 ≤ k ≤ (N + 1) / 21≤k≤(N+1)/2,输出A_1, A_3, -, A_2k - 1的中位数.即前1,3,5,-个数的 ...

  3. luogu P3830 [SHOI2012]随机树

    输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结点平均 ...

  4. Vue.js命名风格指南

    前言 本命名风格指南推荐了一种统一的命名规范来编写 Vue.js 代码.这使得代码具有如下的特性: 统一团队的命名规范,其它开发者或是团队成员更容易上手阅读和理解. IDEs 更容易理解代码,从而提供 ...

  5. UIScrollView,UICollectionView 和UITableView的属性和方法

    UIScrollView,UICollectionView 和UITableView 三者之间的关系:UIScrollView是 UICollectionView 和 UITableView 的父类. ...

  6. DataFrame 链式赋值

    在运行以下Python代码时,Pandas抛出SettingWithCopyWarning警告: row_data = df_pred.loc[key] row_data['col'] = new_v ...

  7. [TimLinux] JavaScript 如何在AJAX中替换元素的图片

    1. 示例代码 /* * <img id="idTestImg" src="/static/test.png" /> */ var idTestIm ...

  8. hdu3791二叉搜索树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3791 题意:给定一个n(多组,n为0时结束),给一个串和n个串,分别判断n个串按序列构建的二叉搜索树和 ...

  9. CF296C Greg and Array 查分数组

    题目链接:http://codeforces.com/problemset/problem/296/C 题意:给你n.m.k,表示n个数a[i],m个对数的操作,k个对操作的操作.m个操作:数a[l] ...

  10. 一份详细的 Matplotlib入门指导

    hMatplotlib是最受欢迎的二维图形库,但有时我们很难做到得心应手的去使用. 如何更改图例上的标签名称? 如何设置刻度线? 如何将比例更改为对数? 如何在我的情节中添加注释和箭头? 如何在我的图 ...