【RPA前置知识】 整理并总结ForEach Activity类

news2024/9/21 5:41:38

🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。
🐬个人主页:会敲键盘的肘子
🐰系列专栏:.Net实用方法总结
🦀专栏简介:本专栏介绍如何编写 Windows Workflow Foundation (WWF) 应用程序。 WWF是RPA开发的前置知识。按照本专栏的过程操作,将生成一个猜数游戏应用程序。 本教程中的第一个主题将逐步引导您创建工作流所需的自定义Activity。 在第二个主题中,将这些Activity与内置的工作流Activity组合成一个Flowchart。 在第三个主题中,配置主机应用程序以运行工作流,并在最后的主题中介绍持久性。


在这里插入图片描述

🌈写在前面:

ActivityWWF 中的核心行为单元。 Activity的执行逻辑可以使用托管代码实现,也可以使用其他Activity实现。 本文介绍System.Activities.Statements命名空间**ForEach**类。


👉本文关键字:RPA、WWF、Activity、ForEach类

文章目录

      • 1️⃣ 概述
        • ♈ 工作流运行时引擎
      • 2️⃣ ForEach<T>类
        • ♈ 定义
        • ♉ 构造函数
          • ForEach<T>()
        • ♊ 属性
          • Body
          • CacheId
          • Constraints
          • DisplayName
          • Id
          • Variables
        • ♌ 方法
          • Execute(CodeActivityContext)
          • ShouldSerializeDisplayName()

1️⃣ 概述

工作流是一组存储为模型的名为活动的基本单元,该模型用于描述实际进程。 工作流提供了一种方法,用于描述多项短期运行或长期运行的工作之间的执行顺序和依赖关系。 此工作从头到尾地贯穿模型,并且活动可以人工执行或由系统功能执行。

♈ 工作流运行时引擎

每个正在运行的工作流实例都是由进程内运行时引擎创建和维护的,托管进程通过以下类之一与其交互:

  • WorkflowInvoker,它像调用方法一样调用工作流。
  • WorkflowApplication,用于对单个工作流实例的执行进行显式控制。
  • WorkflowServiceHost,用于多实例方案中基于消息的交互。

上述每个类对表示为负责活动执行的 ActivityInstance 的核心活动运行时进行包装。 在一个应用程序域中可以并发运行多个 ActivityInstance 对象。

上述三个主机交互对象中的每一个都是从称为工作流程序的活动树中创建的。 使用这些类型或对 ActivityInstance 进行包装的自定义宿主,可以在包括控制台应用程序、基于窗体的应用程序、Windows 服务、ASP.NET Web 网站和 Windows Communication Foundation (WCF) 服务在内的任何 Windows 进程内执行工作流。

在这里插入图片描述

在上图中,Invoke 类的 WorkflowInvoker 方法用于调用多个工作流实例。 WorkflowInvoker 用于不需要由宿主管理的轻型工作流;需要由宿主管理的工作流(如 Bookmark 恢复)必须改用 Run 来执行。 无需等待一个工作流实例完成即可调用下一个工作流实例;运行时引擎支持同时运行多个工作流实例。 调用的工作流如下:

  • 一个包含 Sequence 子活动的 WriteLine 活动。 父活动的 Variable 绑定到子活动的 InArgument。 有关变量、参数和绑定的详细信息,请参阅变量和参数。
  • 一个调用 ReadLine 的自定义活动。 将 OutArgument 活动的 ReadLine 返回给调用 Invoke 方法。
  • 一个派生自 CodeActivity 抽象类的自定义活动。 CodeActivity 可以使用作为 CodeActivityContext 方法的参数提供的 Execute 访问运行时功能(如跟踪和属性)。 有关这些运行时功能的详细信息,请参阅工作流跟踪和工作流执行属性。

2️⃣ ForEach类

♈ 定义

为 Values 集合中提供的每个值执行活动操作一次。

[System.Windows.Markup.ContentProperty("Body")]
public sealed class ForEach<T> : System.Activities.NativeActivity

类型参数
T
Values 集合中提供的值的类型。

♉ 构造函数

ForEach()

创建 ForEach 类的新实例。

public ForEach ();

示例

下面的代码示例演示如何创建 ForEach 活动。 此示例摘自 DynamicActivity 创建 示例。

new ForEach<int>
{
    Values =  new ArgumentValue<IEnumerable<int>> { ArgumentName = "Numbers" },
    Body = new ActivityAction<int>
    {
        Argument = iterationVariable,
        Handler = new Assign<int>
        {
            To = accumulator,
            Value = new InArgument<int>(env => iterationVariable.Get(env) +  accumulator.Get(env))
        }
    }
},

ForEach 类似于 关键字 foreach ,但实现为活动而不是语言语句。 请注意,与 C# 不同foreach,活动使用 GetEnumerator,而不是 IEnumeratorForEach 。

♊ 属性

Body

要在每次迭代中执行的子活动。

[System.Windows.Markup.DependsOn("Condition")]
public System.Activities.Activity Body { get; set; }
CacheId

获取缓存的标识符,该标识符在工作流定义的作用域内是唯一的。

protected internal int CacheId { get; }
Constraints

获取可配置的 Constraint 活动的集合,用于为 Activity 提供验证。

protected System.Collections.ObjectModel.Collection<System.Activities.Validation.Constraint> Constraints { get; }
DisplayName

获取或设置用于调试、验证、异常处理和跟踪的可选友好名称。

public string DisplayName { get; set; }
Id

获取一个标识符,该标识符在工作流定义的作用域内是唯一的。

public string Id { get; }
Variables

与 Variable 活动关联的 DoWhile 对象的集合。

public System.Collections.ObjectModel.Collection<System.Activities.Variable> Variables { get; }

♌ 方法

Execute(CodeActivityContext)

在派生类中实现时,执行该活动。

protected abstract void Execute (System.Activities.CodeActivityContext context);

参数

context

CodeActivityContext

执行活动时所处的执行上下文。

ShouldSerializeDisplayName()

指示是否应序列化 DisplayName 属性。

public bool ShouldSerializeDisplayName ();

返回

Boolean

如果应当将 DisplayName 属性值序列化,则为 true;否则为 false


⭐写在结尾:

文章中出现的任何错误请大家批评指出,一定及时修改。

希望写在这里的小伙伴能给个三连支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Biopython教程

Biopython教程 参考&#xff1a; https://biopython-cn.readthedocs.io/zh_CN/latest/index.html 蛋白质文件获取 Entrez方法 from Bio import Entrez Entrez.email邮箱名 #如123456789qq.com handleEntrez.esearch(dbprotein,term2rbg) recordEntrez.read(handle) idrecor…

C++PrimerPlus 第八章 函数探幽-8.2 引用变量

目录 8.2 引用变量 8.2.1 创建引用变量 8.2.2 将引用用作函数参数 8.2.3 引用的属性和特别之处 8.2.3.1 临时变量、引用参数和const 8.2.4 将引用用于结构 8.2.4.1 程序说明 8.2.4.2 为何要返回引用 8.2.4.3 返回引用时需要注意的问题 8.2.4.4 为何将const用于引用返…

纳米柱阵列超颖表面构建模块的严格分析

摘要 利用先进的制造技术&#xff0c;人们成功实现了具有高数值孔径的可见波长的超透镜。通常使用空间变化的纳米结构作为模块来构建超透镜。在这个例子中分析了用于组成偏振不敏感超透镜的纳米柱状结构。利用傅立叶模态方法&#xff08;FMM&#xff0c;也称为RCWA&#xff09;…

Windows配置开机自启jar包,不显示黑窗口,并输出日志

背景 如果是在 Linux 下开机自启一个服务相对比较简单&#xff0c;这次遇到一个需求是关于 Windows 开机自启的&#xff1a; 在 Windows 环境下开机自动运行一个 SpringBoot 服务&#xff1b;而且由于是一个后台服务&#xff0c;要求对终端用户无感知&#xff1b;为后期维护方…

AC自动机的实现思想与原理

1. 基本介绍 本文最先发布于博客园&#xff0c;原地址&#xff1a;AC自动机的实现与思想原理 - yelanyanyu - 博客园 (cnblogs.com) 1.1案例引入 有一个字典有若干的敏感词 String[] str;&#xff0c;有一个大文章 string&#xff0c;我们要找到大文章中出现的所有的敏感词&…

物联网ARM开发- 6协议 FSMC模拟8080时序驱动LCD(上)

目录 一、常见显示器介绍 1、显示器分类 2、显示器的基本参数 二、TFT-LCD控制原理 1、TFT-LCD结构 2、TFT-LCD控制框图 3、控制原理 LCD数据传输时序 LCD数据传输时序参数 三、SSD1963液晶控制器 1、SSD1963液晶控制器 2、SSD1963内部框图分析 3、8080写时序…

RK3568平台开发系列讲解(音视频篇)FFmpeg公共基础参数

🚀返回专栏总目录 文章目录 一、公共操作部分二、每个文件主要操作部分三、视频操作部分四、音频操作部分沉淀、分享、成长,让自己和他人都能有所收获!😄 📢当我们使用 FFmpeg 时,有一些贯穿 FFmpeg 各个组件的核心参数,在我们查看帮助信息时就可以看到,help 不带参…

基于 Tensorflow 2.x 实现多层卷积神经网络,实践 Fashion MNIST 服装图像识别

一、 Fashion MNIST 服装数据集 Fashion MNIST 数据集&#xff0c;该数据集包含 10 个类别的 70000 个灰度图像。大小统一是 28x28的长宽&#xff0c;其中 60000 张作为训练数据&#xff0c;10000张作为测试数据&#xff0c;该数据集已被封装在了 tf.keras.datasets 工具包下&…

move functions with VS without noexcept

本文所讲对移动函数使用noexcept修饰时带来的效率提升只针对std::vector。而对std::deque来说没有功效。 1. 针对std::vector 1.1 move functions with noexcept 当移动构造函数有noexcept修饰时&#xff0c;在对std::vector进行push_back扩充致使vector的size等于capacity时…

26. GPU以及 没有gpu的情况下使用colab

在PyTorch中&#xff0c;CPU和GPU可以用torch.device(‘cpu’) 和torch.device(‘cuda’)表示。 应该注意的是&#xff0c;cpu设备意味着所有物理CPU和内存&#xff0c; 这意味着PyTorch的计算将尝试使用所有CPU核心。 然而&#xff0c;gpu设备只代表一个卡和相应的显存。 如果…

【大数据技术Hadoop+Spark】Spark SQL、DataFrame、Dataset的讲解及操作演示(图文解释)

一、Spark SQL简介 park SQL是spark的一个模块&#xff0c;主要用于进行结构化数据的SQL查询引擎&#xff0c;开发人员能够通过使用SQL语句&#xff0c;实现对结构化数据的处理&#xff0c;开发人员可以不了解Scala语言和Spark常用API&#xff0c;通过spark SQL&#xff0c;可…

数据挖掘Java——Kmeans算法的实现

一、K-means算法的前置知识 k-means算法&#xff0c;也被称为k-平均或k-均值&#xff0c;是一种得到最广泛使用的聚类算法。相似度的计算根据一个簇中对象的平均值来进行。算法首先随机地选择k个对象&#xff0c;每个对象初始地代表了一个簇的平均值或中心。对剩余的每个对象根…

给 VitePress 添加 algolia 搜索

大家好&#xff0c;我是 Chocolate。 最近在折腾 VitePress&#xff0c;搭建了一个文档项目&#xff1a;ChoDocs&#xff0c;不过文档还不支持搜索功能&#xff0c;虽然目前内容不多&#xff0c;但待我同步完之后&#xff0c;搜索就很有必要了。 之前看 VitePress 官网发现没有…

pikachu靶场暴力破解绕过token防护详解

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是pikachu靶场暴力破解绕过token防护详解。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#x…

基于改进的多目标粒子群算法的微电网多目标调度(三个目标函数)(matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

中央重磅文件明确互联网医疗服务可用医保支付!

文章目录中央重磅文件明确互联网医疗服务可用医保支付&#xff01;中央重磅文件明确互联网医疗服务可用医保支付&#xff01; 当下&#xff0c;互联网医疗机构已加入到新冠防治的“主战场”&#xff0c;在分流线下诊疗发挥了很大作用。国家层面也在进一步鼓励互联网医疗行业发…

基于多尺度形态学梯度进行边缘检测(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

C++中的继承

把握住自己能把握住的点滴&#xff0c;把它做到极致&#xff0c;加油&#xff01; 本节目标1.继承的概念及定义1.1继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承方式和访问限定符1.2.3 继承基类成员访问方式的变化2.继承中的作用域练习3.基类和派生类对象赋值转换4.派生类的…

Java+SSM网上订餐系统点餐餐厅系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下 后台框架&#xff1a;Spring、SpringMVC、MyBatis UI界面&#xff1a;BootStrap、H-ui 、JSP 数据库&#xff1a;MySQL 系统功能 系统分为前台订餐和后台管理&#xff1a; 1.前台订餐 用户注册、用户登录、我的购物车、我的订单 商品列…

Linux 常用的命令

前言 Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发&#xff0c;接触 Linux 机会相对较少&#xff0c;因此往往容易忽视它。但是学好它却是程序员必备修养之一。 作者使用的是阿里云服务器 ECS &#xff08;最便宜的那种&#xff09; CentOS 7.7 64…