流程引擎和流程应用程序的关系和常见的支撑场景

流程引擎和流程应用程序的关系和常见的支撑场景

流程引擎是为提供流程处理而开发设计的底层支撑平台。 流程引擎、流程应用、应用之间的关系如下图所示。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

常见的支持场景包括:工作流、BPM、流程编排等,本次分享主要从BPM流程引擎出发,介绍流程引擎的架构设计方法。

1.1 什么是流程

简单地说,流程是活动的组合。 例如,在企业办公的OA系统中,存在大量的申请和审批流程。 在制造业中程序开发,从销售订单,到生产制造,再到签约付款,有大量的生产销售流程。 在机器学习领域,有亚马逊AWS Sagemaker的大数据处理和机器学习应用。 总而言之,流程是一个概念。 结合具体实现,产生不同的流程产品,如DevOps、Spring Data Stream等。

从流程实现上来说,主要可以分为两种实现方式。 一是用代码来实现。 例如,如果您使用代码实现加班申请,则需要连接SSO进行单点登录,并通过接口获取发起者和审批者。 保存表单数据时的信息。 另一种方式是使用流程引擎来实现。 流程引擎连接应用场景所需的数据,例如加班应用。 流程引擎连接SSO、OU、审批者配置、权限等,实现这样的流程只需要关心流程配置和流程即可。 节点和流程形式就足够了。 流程流程和流程数据处理都是通过流程引擎完成的。

流程引擎能够快速的实现流程,这也是流程引擎的价值所在。

1.2 什么是发动机?

一般来说,引擎是程序或系统的支撑部分。 常见的程序引擎包括游戏引擎、搜索引擎、杀毒引擎等。引擎是脱离具体业务场景的对某类业务场景的高度抽象和封装。

例如,某OA公司封装了一套审批流程。 实施者只需配置流程和表单即可交付项目。 再比如ai游戏引擎程序设计 pdf,美国一家公司打造了一个AI引擎来进行NBA(Next Best Action)推荐。 它封装了推荐领域的常用算法,自动选择并组合不同场景下的多种算法,进行智能推荐。

1.3 流程设计器

流程设计者是流程和引擎之间的连接者。 用户通过流程设计器将一定的布局和规则固化为一定的流程,然后利用流程引擎通过数据和数据上下文自动执行一定的固化流程。

我把目前所见到的流程设计师的理论基础分为以下三类: 1. 定制系统; 2、UML中的活动图系统; 3.BPMN系统。

1.3.1 定制系统

适用于 Sagemaker 和其他场景的 AWS Step Function(自定义流程节点)

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

1.3.2 UML活动图

Flowportal BPM 流程设计器

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

1.3.3 BPMN系统

activiti的流程设计师

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

炎黄英东的工艺设计师

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

题外话:炎黄英东的流程设计器和processon中的流程设计器界面几乎一样,因为他们本质上来自同一家公司。

2 流程引擎的应用 2.1 工作流程

工作流管理联盟(WfMC)是作为工作流管理的标准化组织而成立的。

WfMC将工作流定义为:工作流是指一种可以完全自动执行的业务流程。 根据一系列的流程规则,文档、信息或任务在不同的执行者之间传递和执行。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

在工作流中,流程引擎主要用于支持流程审批和数据流转,应用场景广泛。

国外的产品(开源的或者商业的)通常要求和操作都比较简单,不像国内要求那么复杂。 国内的产品经过很多客户的锤炼,目前功能比较强大。

一般来说,OA产品的工作流程使用场景最多。 OA办公包含了企业办公中的大量要素,足以形成具体的产品ai游戏引擎程序设计 pdf,如门户系统、移动办公等。 OA项目实施过程中,结合行业和业务重点,形成行业解决方案和专项计划。

以下是某OA公司的产品和解决方案。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

2.2 BPM(业务流程管理)

工作流主要解决审批和数据流转,而BPM主要是为了解决端到端、信息孤岛等问题而存在。 大多数使用BPM产品的客户都是基于BPM构建系统的,比如在BPM之上构建OA、CRM、HR等系统。

BPM的使用场景比Workflow更广泛。 BPM 产品包含大量与第三方系统交互的组件以及自定义 SQL 和代码组件。 例如,BPM系统中的文件触发器可以在海关等交互场景中通过监控FTP服务器中的文件来自动触发流程实例; 可以利用定时器每天自动进行数据同步,同步可以通过Mail节点进行。 将结果通知相关运营会员等。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

BPM的应用可以分为执行前、执行中和执行后。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

2.3 流程编排

流程编排是与流程业务域分离的更高级别的抽象。 用户可以根据自己的业务场景,使用流程编排系统来定制自己的业务。 例如,可以将相关业务代码封装成函数,然后通过云厂商平台的FAAS平台将不同业务的函数进行关联和调度,完成某项任务。

3 流程引擎的架构设计

鉴于有些朋友可能没有使用过或没有接触过流程引擎,我先介绍流程引擎的组件,然后介绍基于某款BPM产品的项目是如何开发的。 通过BPM项目开发,我们初步了解了流程引擎的作用。 另外,搜索公众号Internet Architect后台回复“9”即可获得惊喜大礼包。

3.1 BPM流程引擎的组成

组织、角色、用户和成员的组织结构托管;

对于流程资源文件的配置、验证、存储和执行,对于不同的流程节点,流程引擎自动将配置和数据处理与其对应的业务逻辑结合起来,对流程数据进行自动处理;

表单配置、数据绑定、表单数据根据流程配置自动处理;

通用数据接口;

3.1.1 组织架构设计

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

3.1.2 流程设计器

流程设计器在左侧包含分组节点列表,在右侧包含画布。 左边的节点可以设计如下。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

问题:如何解析XML或JSON格式的流程图?

不同的节点根据不同的业务场景配置不同的配置项。 例如,对于人力节点,需要配置审批人、配置审批流程的展示形式、审批流程中哪些字段可以修改、哪些字段需要修改才能留下痕迹等。

3.1.3 表单设计器

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

该方法根据表单相关数据表生成表单,然后对表单字段进行配置和数据绑定。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

这是一个拖放控件游戏开发素材,然后配置该控件的属性,比如绑定字段等。另外,搜索公众号Internet Architect后台回复“9”即可获得惊喜大礼包。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

这是一个拖放控件,不需要与数据库表字段关联的表单。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

数据表生成表单的汇总流程如下图所示。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

拖拽控件绑定数据表字段的流程总结如下。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

拖放控件不需要绑定数据表字段的汇总过程。 使用NoSQL Document记录或者使用RDS提供的JSON类型保存会更方便。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

3.1.4 界面设计

结合Activity的界面设计,如下图

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

有些系统创建流程任务时,首先要根据流程模板创建应用实例,然后关联发起者和备注,调用RuntimeService,执行到StartNode。 这种设计因人而异,这样就有点麻烦了。

3.2 基于流程引擎的项目开发实践

3.2.1 流程项目实践流程

确定组织架构

确定流程,包括流程布局、审批者设置和权限

确定表单信息(字段、类型、数据源、验证规则)和表单样式

确定页面布局、样式、数据字段、搜索、导入、导出

报告

3.2.2 组织架构

组织结构的实现方式有两种,一种是按照维度来管理数据,另一种是在同一组织结构树下进行管理。

按照集团、公司、部门、用户等不同维度进行数据管理是比较常见的,这里不再讨论。 下图展示了按维度维护数据的示例。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

数据维护按照同一组织结构树进行,界面一般显示为左树右表。 大多数商业产品都会在内存中缓存这个组织结构树,以方便审批者对OrgUnit、Role、User、Member等场景的搜索和窗口选择。 引入Member是为了解决一人多职的场景。 一般情况下,发起流程时,需要调出发起者拥有的Member列表,以便后续节点选择合适的审批者。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

关于组织结构,需要考虑系统本身必须具备存储OU的能力。 对于没有组织结构的用户,可以直接在系统的组织结构中创建新的组织结构。 同时,对于已有系统的客户,可以通过组织结构数据同步进行数据自动维护。 对于使用AD域内部管控的客户,需要具备AD域身份认证的能力。 对于复杂的场景,比如基于SaaS的用户,系统内部还需要有组织结构,支持使用API​​获取组织信息。

因此,在设计组织结构时,应该使用插件。 具体使用的插件可以在配置文件中配置。 下面是一个商业产品的组织结构示例。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

常见的组织架构操作包括组织架构同步,例如微信企业号、钉钉等流程系统同步,这里不再讨论。

3.2.3 工艺设计

我们想象的过程可能就像下面这样简单。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

在实际项目中,遇到的流程通常如下图所示。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

我们先初步看一下几个流程的模型文件长啥样,有个印象。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

<definitions id="definitions"targetNamespace="http://activiti.org/bpmn20"xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:activiti="http://activiti.org/bpmn">
<process id="vacationRequest" name="Vacation request"><startEvent id="request" activiti:initiator="employeeName"><extensionElements><activiti:formProperty id="numberOfDays" name="Number of days" type="long" value="1" required="true"/><activiti:formProperty id="startDate" name="First day of holiday (dd-MM-yyy)" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" /><activiti:formProperty id="vacationMotivation" name="Motivation" type="string" />extensionElements>startEvent><sequenceFlow id="flow1" sourceRef="request" targetRef="handleRequest" /><userTask id="handleRequest" name="Handle vacation request" ><documentation>${employeeName} would like to take ${numberOfDays} day(s) of vacation (Motivation: ${vacationMotivation}).documentation><extensionElements><activiti:formProperty id="vacationApproved" name="Do you approve this vacation" type="enum" required="true"><activiti:value id="true" name="Approve" /><activiti:value id="false" name="Reject" />activiti:formProperty><activiti:formProperty id="managerMotivation" name="Motivation" type="string" />extensionElements><potentialOwner><resourceAssignmentExpression><formalExpression>managementformalExpression>resourceAssignmentExpression>potentialOwner>userTask><sequenceFlow id="flow2" sourceRef="handleRequest" targetRef="requestApprovedDecision" /><exclusiveGateway id="requestApprovedDecision" name="Request approved?" /><sequenceFlow id="flow3" sourceRef="requestApprovedDecision" targetRef="sendApprovalMail"><conditionExpression xsi:type="tFormalExpression">${vacationApproved == 'true'}conditionExpression>sequenceFlow><task id="sendApprovalMail" name="Send confirmation e-mail" /><sequenceFlow id="flow4" sourceRef="sendApprovalMail" targetRef="theEnd1" /><endEvent id="theEnd1" /><sequenceFlow id="flow5" sourceRef="requestApprovedDecision" targetRef="adjustVacationRequestTask"><conditionExpression xsi:type="tFormalExpression">${vacationApproved == 'false'}conditionExpression>sequenceFlow><userTask id="adjustVacationRequestTask" name="Adjust vacation request"><documentation>Your manager has disapproved your vacation request for ${numberOfDays} days.Reason: ${managerMotivation}documentation><extensionElements><activiti:formProperty id="numberOfDays" name="Number of days" value="${numberOfDays}" type="long" required="true"/><activiti:formProperty id="startDate" name="First day of holiday (dd-MM-yyy)" value="${startDate}" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" /><activiti:formProperty id="vacationMotivation" name="Motivation" value="${vacationMotivation}" type="string" /><activiti:formProperty id="resendRequest" name="Resend vacation request to manager?" type="enum" required="true"><activiti:value id="true" name="Yes" /><activiti:value id="false" name="No" />activiti:formProperty>extensionElements><humanPerformer><resourceAssignmentExpression><formalExpression>${employeeName}formalExpression>resourceAssignmentExpression>humanPerformer>userTask><sequenceFlow id="flow6" sourceRef="adjustVacationRequestTask" targetRef="resendRequestDecision" /><exclusiveGateway id="resendRequestDecision" name="Resend request?" /><sequenceFlow id="flow7" sourceRef="resendRequestDecision" targetRef="handleRequest"><conditionExpression xsi:type="tFormalExpression">${resendRequest == 'true'}conditionExpression>sequenceFlow><sequenceFlow id="flow8" sourceRef="resendRequestDecision" targetRef="theEnd2"><conditionExpression xsi:type="tFormalExpression">${resendRequest == 'false'}conditionExpression>sequenceFlow><endEvent id="theEnd2" />process>definitions>

一个连截图都无法完成的流程,其工作量和效率可想而知。 如果用代码来实现整个流程。 实际使用基于流程引擎的产品做项目时,只需要确定节点、节点配置、数据配置和权限即可。

问:一般流程都有邮件通知节点。 如何实现邮件通知节点? 考虑以下场景。

流程流程和执行过程中,可能会出现各种错误,比如找不到审批人等,此时流程引擎需要回滚数据,而邮件通知节点的业务逻辑已经执行完毕。

在权限方面,要对流程资源进行流程控制,哪些部门可以申请,哪些角色不能申请。 在流程执行过程中,流程数据和不参与流程的相关人员不应看到流程。 办理过流程的审批人不能再办理流程等等,这些都是需要从权限方面考虑的问题。

3.2.4 表单设计

如下图所示,可以对表格进行如下分析。 一个流程表单有多个主表信息和多个子表信息。 一般来说,如果通过流程引擎进行非流程数据处理,则通过主表ID关联子表。 如果通过流程引擎处理流程数据,则通过TaskId关联子表和主表。 以下是示例。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

流程系统需要表单设计师。 流程的不同节点可以连接不同的形式,方便不同角色的人关注不同维度的流程信息。

3.2.5 页面设计

一般来说,流程启动、审批、历史记录等都有通用的系统接口,有些业务场景需要单独的列表接口以方便使用。 对于已经拥有门户系统的客户,其界面风格需要整合。 以下是我们所从事的项目的示例。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

3.2.6 报告

由于并非所有客户都有报告系统,因此流程系统需要具有基本的报告功能。 下图显示了一个示例。

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

拥有报告系统的客户可以使用其商业报告系统来获取(直接检索和存储)数据以供显示。 常见的报表系统有FineReport、Tableau、PowerBI等。

3.3 BPM流程引擎架构设计

3.3.1 流程引擎架构设计

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

3.3.2 启动进程

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

流程引擎处理

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

执行节点处理

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

问题:流程引擎处理过程中,如果一个节点有多个连接,如何找到FromNodeId为某个Node的连接?

手动处理时,指定连接文本

3.4 流程引擎架构设计

ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf_ai游戏引擎程序设计 pdf

3.4.1 企业标识

识别业务场景中的配置项,并使用集合或组使业务可配置

支持业务流程流程的可配置性

支持业务场景数据并自动处理

3.4.2 流程引擎的实现

资源相关服务,资源加载、资源保存、资源加密等。

配置项相关服务

PVM虚拟机的实现,即以某个节点(启动时的起始节点)作为初始节点,并按照某种连接动作自动执行该节点的虚拟机。

数据配置、数据权限

流程数据和业务数据的自动处理

4个商机

Business Process Analysis (BPA)流程分析帮助企业调整和优化流程

Process Assets Library(PAL)流程资产库,积累企业流程的知识,将系统和流程与实施绑定,让审批者知道流程中相应的职责。

Process Simulate 流程模拟、自动化测试

流程预测 流程预测

低代码平台

更广泛的机会在于业务领域+流程引擎,例如:DevOps、RPA、应用和服务编排、数据编排、FaaS编排等。


最后关注公众号互联网架构师,后台回复:2T,即可获取我整理的Java系列面试题及答案,非常全。

正文结束

文章来源:http://mp.weixin.qq.com/s?src=11×tamp=1696994065&ver=4827&signature=*EQ9dXAkVFTjnzUYtDO0SLN0HGYgb8v88z784iNFKmt79SW*7RB-zjpiHuZQ6s*lQq1yR41nuOKyPlJLEVlfJfoHn4NJJyjfVgkgF5Z3KMk7HL-h5tqMZc-jPRrD0*Ht&new=1