zoukankan      html  css  js  c++  java
  • 使用C#为Uipath封装控件

    一、需要了解的一些情况

    1、据肉眼观察Uipath的实现基于微软的Windows Workflow Foundation

    2、Windows Workflow Foundation 支持用户自定义控件, Uipath同理

    3、Uipath官方支持Nuget格式的自定义控件包

     

    二、开发需要的工具

    1、Visual Studio: 开发工具

    2、NuGet Package Manager: 打包工具

    3、UiPath Studio: 实际运行环境

     

    三、动动手

    Uipath支持CodeActivity和NativeActivity两种类型的控件。

    简单的区别:

      • CodeActivity: 没有交互界面,适用简单的逻辑。
      • Native Activity: 包含 Code Activity 一切功能并且有交互界面,适用复杂逻辑。

    1、创建一个CodeActivity

     使用 VS 创建一个 Class Library (.NET Framework)项目, 命名为: XXXXX.Exception

         创建项目

        
        Uipath 根据项目名称解析成展示名称, 名称中包含 ’.’ 会被解析成子级目录。

        Uipath控件列表

         Uipath控件列表

         

        项目需要添加的引用: System.Activities, System.ComponentModel.Composition

    以下为控件代码实现,示例逻辑为返回一段自定义内容格式的异常  

    using System;
    using System.Activities;
    using System.Activities.Hosting;
    using System.ComponentModel;
    using System.Reflection;
    using System.Text;
    
    namespace YourNamespace
    {
        //描述在Uipath中显示的控件名称
        [DisplayName("Throw Business Exception")]
        public class ThrowBusinessException : CodeActivity
        {
            //Category("*") 描述当前变量出现在属性栏的位置
            [Category("Input")]
            //添加RequiredArgument注解意味是必填项,缺失参数会在页面提示错误
            [RequiredArgument]
            //InArgument<T> 为入参类型
            public InArgument<string> Message { get; set; }
    
    
            [Category("Output")]
            //OutArgument<T> 为出参类型
            public OutArgument<string> OutMessage { get; set; }
    
            protected override void Execute(CodeActivityContext context)
            {
                //通过反射获取调用控件的父级控件
                PropertyInfo parentObj = this.GetType().GetProperty("Parent",
                        System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                string parentName = parentObj.GetValue(this, null).ToString();
                Console.WriteLine("Parent name:" + parentName);
    
                #region 不必要的代码
                //获取执行控件的文件名
                WorkflowInstanceProxy proxy = context.GetExtension<WorkflowInstanceInfo>().GetProxy();
                Activity workflowDefinition = proxy.WorkflowDefinition;
                string workflowName = workflowDefinition.DisplayName;
                Console.WriteLine(workflowName);
                #endregion
    
                //Make Error Information
                StringBuilder throwStr = new StringBuilder();
                throwStr.Append("{");
                throwStr.Append(string.Format("'DateTime':'{0}',", DateTime.Now.ToString()));
                throwStr.Append(string.Format("'FileName':'{0}',", workflowName));
                throwStr.Append(string.Format("'ParentActivity':'{0}',", parentName));
                throwStr.Append(string.Format("'Message':'{0}'", Message.Get(context)));
                throwStr.Append("}");            
                //IL_000d: Unknown result type (might be due to invalid IL or missing references)
                //throw new BusinessRuleException(throwStr.ToString());
                throw new System.Exception(throwStr.ToString());
            }
    
            protected override void CacheMetadata(CodeActivityMetadata metadata)
            {
                base.CacheMetadata(metadata);
                //不必要的代码,这里的作用是为了获取当前文件名
                metadata.AddDefaultExtensionProvider(() => new WorkflowInstanceInfo());
            }
        }
    }

      2、使用 NuGet Package Explore 打包:

        打开 NuGet Package Explore,选择 Create a new package

        

         右键Package contents 空白处, 选择Add Lib Folder

        

         右键Lib文件夹, 选择Add Existing File, 添加编译好的 .dll文件

        

         编辑Package metadata信息

          --- Id: 包名, Uipath规则规定, 包名中一定要包含Activities字样否则不做控件包识别

          ---Version: 版本号, 每次更新打包必须更新版本号, 否则Uipath不会重新加载也不会更新该包

         

         选择 File => Save as, 保存包, 完成。

      3、Uipath如何添加自定义包

        方式一:Uipath默认会映射一个本地包文件夹,路径为Uipath的安装目录下的Packages,手动Copy包到本地文件包路径。

        方式二:手动映射一个本地包文件夹,通过Uipath Studio提供的Manage Packages=> Settings功能设置,将包Copy到该路径下即可。

        方式三:上传到Uipath Go 或者其它包管理平台(可在Manage Packages中配置),然后在Manage Packages中搜索即可。

    四、 补充说明

      1、Native Activity稍微复杂另起一篇再叙。

      2、自定义控件是封闭空间中的一扇门,打开这扇门便可以自由的飞翔。

  • 相关阅读:
    P3531 [POI2012]LIT-Letters
    CF1338B Edge Weight Assignment
    CF118C Fancy Number
    New Year Contest
    P2587 [ZJOI2008]泡泡堂
    2021拓维游记
    CF1338C Perfect Triples
    gcc、g++、gdb安装
    vim教程之背键盘使我快乐
    Python起个头
  • 原文地址:https://www.cnblogs.com/kaili/p/12035524.html
Copyright © 2011-2022 走看看