- 概述
- 自定义活动
- 将活动迁移到 .NET 6
- 发行说明
- 构建工作流分析器规则
- 构建活动项目设置
- 创建自定义向导
- 按范围划分活动的优先级
- UiPath.Activities.Api.Base
- UiPath.Studio.Activities.Api
- UiPath.Studio.Activities.Api.Activities
- UiPath.Studio.Activities.Api.BusyService
- UiPath.Studio.Activities.Api.ExpressionEditor
- UiPath.Studio.Activities.Api.Expressions
- UiPath.Studio.Activities.Api.Licensing
- UiPath.Studio.Activities.Api.Mocking
- UiPath.Studio.Activities.Api.ObjectLibrary
- UiPath.Studio.Activities.Api.PackageBindings
- UiPath.Studio.Activities.Api.ProjectProperties
- UiPath.Studio.Activities.Api.ScopedActivities
- UiPath.Studio.Activities.Api.Settings
- UiPath.Studio.Activities.Api.Wizards
- UiPath.Studio.Activities.Api.Workflow
- UiPath.Studio.Api.Controls
- UiPath.Studio.Api.Telemetry
- UiPath.Studio.Api.Theme
- Robot JavaScript SDK
- 触发器 SDK
使用代码创建活动(旧版)
创建自定义活动需要采取两个主要步骤:
- 编写自定义活动代码。
- 在 UiPath 中添加外部程序集 (.dll)。
为了更好地理解如何为自定义活动编写代码,我们将创建一个简单的活动,它要求用户输入两个数字,然后输出两个数字之和的平方。
- 启动 Microsoft Visual Studio。
- 单击 “文件”>“新建”>“项目…” (快捷键:Ctrl + Shift + N)。 系统将显示“ 新建项目” 窗口。
- 从“ 语言” 下拉菜单中选择“ C# ”。 系统将显示使用 C# 的所有依赖项的列表。
- 选择 “类库 (.NET Framework)”。 这有助于我们将自定义活动导出为
.dll
文件。 单击 “下一步” 转到“ 配置新项目 ” 窗口。 - 在“ 项目名称” 字段中填写所需的活动名称。 在本例中,我们可以使用“MathSquareOfSum”。
- 从“ 框架 ”下拉菜单中选择“ .NET Framework 4.6.1 ”。 这可确保该库与 UiPath Studio 兼容。
- 单击“ 创建 ”以转到代码设计器并开始编写活动代码。
- 在“ 解决方案资源管理器 ”面板中,右键单击“ 引用 ”分支,然后选择“ 添加引用…”。 系统将显示“ 引用管理器 ”窗口。
-
搜索
System.Activities
和System.ComponentModel.Composition
引用并添加它们。 请务必选中每个选项前面的复选框,然后单击“ 确定”。 这样做使我们能够使用上述参考中的类。 -
现在,我们需要确保代码使用新添加的引用。 这可以通过在代码设计器中添加以下行来完成:
using System.Activities; using System.ComponentModel;
using System.Activities; using System.ComponentModel;我们的项目现在应如下所示:
-
添加输入和输出参数。 在本例中,代码应如下所示:
//Note that these attributes are localized so you need to localize this attribute for Studio languages other than English //Dots allow for hierarchy. App Integration.Excel is where Excel activities are. [Category("Category.Where.Your.Activity.Appears.In.Toolbox")] [DisplayName("Human readable name instead of class name")] [Description("The text of the tooltip")] public class MathSqSum : CodeActivity { //Note that these attributes are localized so you need to localize this attribute for Studio languages other than English [Category("Input")] [DisplayName("First Number")] [Description("Enter the first number")] [RequiredArgument] public InArgument<int> FirstNumber { get; set; } [Category("Input")] [DisplayName("Second Number")] [Description("Enter the second number")] [RequiredArgument] public InArgument<int> SecondNumber { get; set; } [Category("Output")] public OutArgument<int> ResultNumber { get; set; } protected override void Execute(CodeActivityContext context) { }
//Note that these attributes are localized so you need to localize this attribute for Studio languages other than English //Dots allow for hierarchy. App Integration.Excel is where Excel activities are. [Category("Category.Where.Your.Activity.Appears.In.Toolbox")] [DisplayName("Human readable name instead of class name")] [Description("The text of the tooltip")] public class MathSqSum : CodeActivity { //Note that these attributes are localized so you need to localize this attribute for Studio languages other than English [Category("Input")] [DisplayName("First Number")] [Description("Enter the first number")] [RequiredArgument] public InArgument<int> FirstNumber { get; set; } [Category("Input")] [DisplayName("Second Number")] [Description("Enter the second number")] [RequiredArgument] public InArgument<int> SecondNumber { get; set; } [Category("Output")] public OutArgument<int> ResultNumber { get; set; } protected override void Execute(CodeActivityContext context) { }
<DisplayName(" ")>
属性是 Studio 中“ 属性 ”面板中输入字段之前显示的标签。 <Description(" ")>
属性是鼠标悬停时显示的工具提示文本。
<ReguiredArgument>
属性。 如果未填写,则活动的标题栏中将显示蓝色警告图标。
<Execute( )>
函数中添加功能。 在本例中,如下所示:
protected override void Execute(CodeActivityContext context)
{
var firstNumber = FirstNumber.Get(context);
var secondNumber = SecondNumber.Get(context);
var result = (int)Math.Pow(firstNumber + secondNumber, 2);
ResultNumber.Set(context, result);
}
protected override void Execute(CodeActivityContext context)
{
var firstNumber = FirstNumber.Get(context);
var secondNumber = SecondNumber.Get(context);
var result = (int)Math.Pow(firstNumber + secondNumber, 2);
ResultNumber.Set(context, result);
}
如果您不希望活动具有设计器界面,则可以跳至构建库部分。
为了构建设计器界面,您需要在 Visual Studio 中安装 Windows 工作流基础 组件。 如果尚未从 Visual Studio 安装程序中选择组件,则可以按如下方式添加:
- 在 Visual Studio 中,单击“ 工具 ” 菜单,然后选择 “获取工具和功能…”。 系统将显示“Visual Studio 安装程序”窗口。
- 切换到“ 单个组件 ”选项卡,然后搜索 Windows Workflow Foundation 组件。 它位于“ 开发活动 ”部分下。
- 选中 Windows Workflow Foundation 组件前面的复选框,然后单击“ 修改”。 所需组件已安装。
13. 在“ 属性 ”面板中右键单击项目(在本例中,项目为 MathSquareOfSum)。 系统将显示上下文菜单。
14. 从“ 添加 项目”中,选择 “新建项目...”。 系统将显示“ 添加新项目” 窗口。
15. 单击左侧面板上“ 已安装 ” 类别下的“工作流”。 系统将显示所有相关元素。
16. 选择“ 活动设计器 ”,然后单击“ 添加 ”以将该项目添加到项目中。
.xaml
文件。 它应该如下所示:
17. 将现有的 活动设计器 代码替换为以下内容:
<sap:ActivityDesigner x:Class="MathSquareOfSum.MathSqSumDesigner"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
xmlns:sapc="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation">
<a href="sap:ActivityDesigner.Resources">sap:ActivityDesigner.Resources</a>
<ResourceDictionary>
<sapc:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />
</ResourceDictionary>
</sap:ActivityDesigner.Resources>
<DockPanel Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="90"></ColumnDefinition>
<ColumnDefinition Width="210"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="First Number"></TextBlock>
<sapv:ExpressionTextBox Grid.Row="0" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="Enter first number" Expression="{Binding Path=ModelItem.FirstNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}" />
<TextBlock Grid.Row="1" Grid.Column="0" Text="Second Number"></TextBlock>
<sapv:ExpressionTextBox Grid.Row="1" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="Enter second number" Expression="{Binding Path=ModelItem.SecondNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}" />
<TextBlock Grid.Row="2" Grid.Column="0" Text="Result"></TextBlock>
<sapv:ExpressionTextBox Grid.Row="2" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="The sum of the numbers" UseLocationExpression="True" Expression="{Binding Path=ModelItem.ResultNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=Out, Mode=TwoWay}" />
</Grid>
</DockPanel>
</sap:ActivityDesigner>
<sap:ActivityDesigner x:Class="MathSquareOfSum.MathSqSumDesigner"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
xmlns:sapc="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation">
<a href="sap:ActivityDesigner.Resources">sap:ActivityDesigner.Resources</a>
<ResourceDictionary>
<sapc:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />
</ResourceDictionary>
</sap:ActivityDesigner.Resources>
<DockPanel Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="90"></ColumnDefinition>
<ColumnDefinition Width="210"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="First Number"></TextBlock>
<sapv:ExpressionTextBox Grid.Row="0" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="Enter first number" Expression="{Binding Path=ModelItem.FirstNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}" />
<TextBlock Grid.Row="1" Grid.Column="0" Text="Second Number"></TextBlock>
<sapv:ExpressionTextBox Grid.Row="1" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="Enter second number" Expression="{Binding Path=ModelItem.SecondNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}" />
<TextBlock Grid.Row="2" Grid.Column="0" Text="Result"></TextBlock>
<sapv:ExpressionTextBox Grid.Row="2" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="The sum of the numbers" UseLocationExpression="True" Expression="{Binding Path=ModelItem.ResultNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=Out, Mode=TwoWay}" />
</Grid>
</DockPanel>
</sap:ActivityDesigner>
新定义的活动布局现在应如下所示:
18. 右键单击活动(在本例中 为 ActMathSquareOfSum),然后从“ 添加 ” 菜单中选择 “类...”。 系统将显示“ 添加新项目” 窗口。
20. 在新创建的“ 设计器 元数据”类中添加以下内容:
using MathSquareOfSum;
using System.Activities.Presentation.Metadata;
using System.ComponentModel;
namespace ActMathSquareOfSum
{
public class DesignerMetadata : IRegisterMetadata
{
public void Register()
{
AttributeTableBuilder attributeTableBuilder = new AttributeTableBuilder();
attributeTableBuilder.AddCustomAttributes(typeof(MathSqSum), new DesignerAttribute(typeof(MathSqSumDesigner)));
MetadataStore.AddAttributeTable(attributeTableBuilder.CreateTable());
}
}
}
using MathSquareOfSum;
using System.Activities.Presentation.Metadata;
using System.ComponentModel;
namespace ActMathSquareOfSum
{
public class DesignerMetadata : IRegisterMetadata
{
public void Register()
{
AttributeTableBuilder attributeTableBuilder = new AttributeTableBuilder();
attributeTableBuilder.AddCustomAttributes(typeof(MathSqSum), new DesignerAttribute(typeof(MathSqSumDesigner)));
MetadataStore.AddAttributeTable(attributeTableBuilder.CreateTable());
}
}
}
请务必在尝试构建项目之前测试项目是否存在错误。
MathSquareOfSum.dll
库现已构建并保存在以下位置:
%UserProfile%\source\repos\MathSquareOfSum\MathSquareOfSum\bin\Debug
构建库后,“ 输出 ”面板应显示如下所示的消息:
- 启动 NuGet 包资源管理器,然后单击 “新建包 (Ctrl + N)”。 系统将显示一个拆分窗口,其中显示 包元数据 和 包内容。 我们需要在后一部分中添加所有依赖项。
- 在“ 包内容 ” 部分中右键单击。 系统将显示上下文菜单。
- 单击 “添加库文件夹”。 请注意,系统会在“ 包内容 ”部分中创建一个新的库项目。
-
右键单击“ 库 ”,然后选择“ 添加现有文件…”。
- 加载上面创建的外部程序集 (
.dll
)。 在本例中,MathSquareOfSum.dll
文件位于%UserProfile%\source\repos\MathSquareOfSum\MathSquareOfSum\bin\Debug
文件夹中。 - 选择文件后,访问“ 编辑 ”菜单,然后选择“ 编辑元数据”。 左侧面板现在配备了可编辑的元数据字段。
- 根据需要填写字段,以更好地描述自定义活动。
-
填写“ ID ” 字段。 在本例中,它可以是 UiPath.MathSquare.Activities,其中第一个值 UiPath代表创建包的团队。 如果未涉及特定团队,则可以将第一个值留空。
- 单击“ 包元数据 ”部分左上角的绿色复选标记按钮,以保存所有更改。
- 从“ 文件 ” 菜单中,选择“ 另存为...”。 系统将显示一个资源管理器窗口,允许您选择新文件的位置。
- 将文件保存在 UiPath 存储本地包的文件夹中(在 2021.4 之前的版本中为
C:\Program Files (x86)\UiPath\Studio\Packages
,在版本 2021.4 及更高版本中为C:\Program Files\UiPath\Studio\Packages
)。UiPath.MathSquare.Activities.1.0.0.nupkg
文件现已在包文件夹内的UiPath.MathSquare.Activities
文件夹中创建。