sdk
latest
false
重要 :
请注意,此内容已使用机器翻译进行了部分本地化。 新发布内容的本地化可能需要 1-2 周的时间才能完成。
UiPath logo, featuring letters U and I in white

开发者指南

上次更新日期 2025年10月30日

为自定义活动编写代码

为了更好地理解如何为自定义活动编写代码,我们将创建一个简单的活动,它要求用户输入两个数字,然后输出两个数字之和的平方。
  1. 启动 Microsoft Visual Studio。
  2. 选择“文件” >“新建” >“项目…” (快捷键: Ctrl + Shift + N )。系统将显示“新建项目”窗口。
  3. 从“ 语言” 下拉菜单中选择“ C# ”。 系统将显示使用 C# 的所有依赖项的列表。
  4. 选择“类库 (.NET Framework)” 。这有助于我们将自定义活动导出为.dll文件。选择“下一步”以转到“配置新项目”窗口。


  5. “项目名称”字段中填写所需的活动名称。在本例中,我们可以使用“MathSquareOfSum”。
  6. 从“ 框架 ”下拉菜单中选择“ .NET Framework 4.6.1 ”。 这可确保该库与 UiPath Studio 兼容。
    注意: 在 Windows - 旧版项目中,UiPath Studio 支持使用 .NET Framework 4.5.2 至 4.6.1 创建的活动。 有关如何将活动迁移到 .NET 以在具有 Windows 兼容性的项目中使用的信息,请参阅将 活动迁移到 .NET 6


  7. 选择“创建” ,转到代码设计器,然后开始编写活动代码。
  8. 在“ 解决方案资源管理器 ”面板中,右键单击“ 引用 ”分支,然后选择“ 添加引用…”。 系统将显示“ 引用管理器 ”窗口。
  9. 搜索 System.ActivitiesSystem.ComponentModel.Composition 引用并添加它们。 请务必选中每个选项前面的复选框,然后单击“ 确定”。 这样做使我们能够使用上述参考中的类。




  10. 现在,我们需要确保代码使用新添加的引用。 这可以通过在代码设计器中添加以下行来完成:
    using System.Activities;
    using System.ComponentModel;using System.Activities;
    using System.ComponentModel;
    我们的项目现在应如下所示:


  11. 添加输入和输出参数。 在本例中,代码应如下所示:
    //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>属性。如果未填写,则活动的标题栏中将显示一个警告图标。
  12. 在覆盖的<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 组件前面的复选框,然后单击“ 修改”。 所需组件已安装。


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


    系统随即会添加“ 活动设计器 ”项目,并会立即打开相应的 .xaml 文件。 它应该如下所示:


  5. 将现有的活动设计器代码替换为以下内容:
    <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>
    新定义的活动布局现在应如下所示:


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


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

此页面有帮助吗?

获取您需要的帮助
了解 RPA - 自动化课程
UiPath Community 论坛
Uipath Logo
信任与安全
© 2005-2025 UiPath。保留所有权利。