- 概述
- 自定义活动
- 将活动迁移到 .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
- 智能体 SDK

开发者指南
为自定义活动编写代码
为了更好地理解如何为自定义活动编写代码,我们将创建一个简单的活动,它要求用户输入两个数字,然后输出两个数字之和的平方。
-
启动 Microsoft Visual Studio。
-
选择“文件” >“新建” >“项目… (快捷键:
Ctrl + Shift + N”)。系统将显示“新建项目”窗口。 -
从“语言”下拉菜单中选择“C#” 。将显示所有使用 C# 的依赖项的列表。
-
选择“类库 (.NET Framework)” 。这有助于我们将自定义活动导出为
.dll文件。选择“下一步”以转到“配置新项目”窗口。
-
在“项目名称”字段中填写所需的活动名称。在本例中,我们可以使用“MathSquareOfSum”。
-
从“框架”下拉菜单中选择“.NET Framework 4.6.1” 。这可确保该库与 UiPath Studio 兼容。
重要提示:在 Windows - 旧版项目中,UiPath Studio 支持使用 .NET Framework 4.5.2 到 4.6.1 创建的活动。有关如何将活动迁移到 .NET,以便在与 Windows 兼容的项目中使用的信息,请参阅将活动迁移到 .NET 6 。

-
选择“创建” ,转到代码设计器,然后开始编写活动代码。
-
在“解决方案资源管理器”面板中,右键单击“引用”分支,然后选择“添加引用...” 。系统将显示“引用管理器”窗口。
-
搜索并添加
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 工作流基础” 组件。其位于“开发活动”部分下。
- 选中“Windows 工作流基础”组件前面的复选框,然后单击“修改” 。系统随即会安装所需的组件。

-
右键单击“属性”面板中的项目(在本例中,该项目为“MathSquareOfSum ”)。系统将显示上下文菜单。
-
从“添加项目”中,选择“新建项目...” 。系统将显示“添加新项目”窗口。
-
在左侧面板上的已安装类别下,选择工作流。系统将显示所有相关元素。
-
选择“活动设计器” ,然后单击“添加”以将该项目包含在项目中。

将添加“活动设计器”项目,并立即打开相应的
.xaml文件。它应如下所示:
-
将现有的活动设计器代码替换为以下内容:
<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="https://docs.uipath.com/zh-CN/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="https://docs.uipath.com/zh-CN/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>新定义的活动布局现在应如下所示:

-
右键单击活动(在本例中为 ActMathSquareOfSum ),然后从“添加”菜单中选择“类…” 。系统将显示“添加新项目”窗口。
-
已选择“课程”项目。现在只需将其重命名为DesignerMetadata.cs,然后选择“添加” 。新类现已添加到活动中,并在新选项卡中打开。

-
在新创建的“设计器元数据”类中添加以下内容:
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()); } } }