摘要: 项目使用ABP框架,最近有需求数据量会持续变大,需要分表存储。 发现ShardinfCore可以快速实现EF分表操作,并且作者@薛家明还特别为ABP集成写了教程,完美的选择。 ShardinfCore作者教程很齐全,这次以ABP 8.*的用户视角进行集成记录,希望帮到需要的人。 开发环境: ABP 阅读全文
posted @ 2024-08-07 13:57 Porbonan 阅读(403) 评论(2) 推荐(0) 编辑

一、需要了解的一些情况

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、自定义控件是封闭空间中的一扇门,打开这扇门便可以自由的飞翔。

 

posted @ 2019-12-16 11:23 Porbonan 阅读(4186) 评论(1) 推荐(0) 编辑
摘要: 使用java操作时间感觉真真蛋疼,还是我大C#舒服,一个DateTime全部搞定这里的Date指的是java.util.Date获取当前时间: // 创建一个当前时间的Date对象 Date time = new Date();蛋疼的地方,对时间增、减操作: ... 阅读全文
posted @ 2015-01-08 21:23 Porbonan 阅读(408) 评论(2) 推荐(0) 编辑
摘要: $("input[name='searchBean.con1']").keyup(function(){//keyup事件处理$(this).val($(this).val().replace(/\D|^0/g,''));}).bind("paste",function(){//CTR+V事件处理$(this).val($(this).val().replace(/\D|^0/g,''));}).css("ime-mode","disabled");//CSS设置输入 阅读全文
posted @ 2013-11-26 11:06 Porbonan 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式示例表达式匹配/^\s*$/匹配空行。/\d{2}-\d{5}/验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。/]*)?>[\s\S]*/匹配 HTML 标记。下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为:字符说明\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n”匹配换行符。序列“\\”匹配“\”,“\(”匹配“(”。^匹配输入字符串开始的位置。如果设置了Reg 阅读全文
posted @ 2013-10-30 11:55 Porbonan 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 写了一个WCF的服务,想将它部署到IIS上,遇到了一些常见问题,在此总结一下。部署WCF与部署一个WEB网页基本是一样的操作,直接在IIS上新建一个网站,给网站起个名字,配置一下端口号,指定一下物理路径,可以是发布后的,也可以是未发布的。问题一出在,部署成功之后浏览时报错。解决的办法是,选中你的网站,然后双击功能视图中的“目录浏览”,将操作下面的“禁用”改成“启用”问题二在于本地浏览成功之后,其他计算机无发访问。最直接的解决办法是关闭放火墙,粗暴有效。如果不想关闭放火墙,可以在放火墙中的“高级设置”,右键“本地计算机上的高级安全 Windows 防火墙” 属性中将“专用配置文件”和“公用配置文 阅读全文
posted @ 2013-06-07 10:28 Porbonan 阅读(236) 评论(0) 推荐(0) 编辑
摘要: Math.random(); 取0到1的随机数JS中获取日期中的天是:time.getDte();time.getDay();是获取星期数获取全局的错误信息: <script type="text/javascript"> function cuo(emg, ul, line) { alert("错误:" + emg + " 地址:" + ul + " 行数:" + line); } window.onerror = cuo; </script>JS中正则验证的几个函数:<script 阅读全文
posted @ 2013-02-23 11:42 Porbonan 阅读(134) 评论(0) 推荐(0) 编辑
摘要: using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Xml;public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { XmlDocument doc = new Xml... 阅读全文
posted @ 2013-02-22 16:19 Porbonan 阅读(322) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示