详细介绍:iBizModel 实体主状态(PSDEMAINSTATE)及主状态逻辑(PSDELOGIC`MAINSTATELOGIC`)模型详解

news/2025/11/6 18:09:04/文章来源:https://www.cnblogs.com/gccbuaa/p/19197296

一、实体主状态(PSDEMAINSTATE)概述

iBizModel中用于定义和管理实体数据状态的核心控制模型。它通过最多三个实体属性值的组合(称为主状态标记)来标识数据的当前状态,并基于状态对实体行为(如增删改查)和数据管理标识(如权限控制)施加精细化控制。主状态控制逻辑超越传统的权限体系,例如,即使当前用户具备删除权限,若数据处于特定主状态(如“已锁定”状态),系统仍可拒绝删除操作,从而确保业务规则和材料的完整性。就是实体主状态

下图示例了主状态在开源产品iBizEHR在招聘流程中的应用。
表格设计界面
在这里插入图片描述
流程设计界面
在这里插入图片描述

1.1 PSDEMAINSTATE模型属性详解

PSDEMAINSTATE模型包含以下关键属性(基于Groovy DSL语法定义):

  • allowmode(必填):枚举类型,指定主状态行为的控制模式,可选值为ALLOW(允许模式)或DENY(拒绝模式)。例如,设置为DENY时,该状态下的指定行为将被强制拒绝。
  • codename(必填):主状态的代码标识,需在实体中唯一。
  • defaultmode:枚举类型,定义主状态类型,包括:
    • 0(常规):普通状态。
    • 1(实体默认):实体创建时的初始状态。
    • 2(锁定控制):用于数据锁定场景,禁止非授权操作。
    • 3(关闭控制):表示数据生命周期结束,如“已关闭”状态。
  • msvalue、msvalue2、msvalue3:分别对应主状态属性1、2、3的值,通过组合形成唯一状态标记(mstag)。
  • psdeid(必填):引用所属实体(PSDATAENTITY),建立父子关系。
  • name(必填):主状态名称,需在实体中唯一。
  • deactiondenymsgdeopprivdenymsg:自定义拒绝操作时的提示信息,提升用户体验。
  • colorpssysimageid:用于界面展示,如状态颜色和图标。

1.2 主状态控制机制

PSDEMAINSTATE通过嵌套成员模型实现细粒度控制:

例如,在订单实体中,可定义主状态“已审核”(msvalue=“REVIEWED”),并通过PSDEMSACTION拒绝“修改”行为,即使当前用户有修改权限,系统也会拦截处理。


二、主状态逻辑PSDELOGIC(MAINSTATELOGIC)详解

主状态逻辑是PSDELOGIC的一种特殊类型(logictype: “MAINSTATELOGIC”),专门处理主状态之间的迁移路由和业务流转。它利用逻辑节点(PSDELOGICNODE)和连接(PSDELOGICLINK)定义状态切换规则,帮助动态条件判断和业务触发。

2.1 核心特性

2.2 应用场景

主状态逻辑广泛应用于业务状态机、工作流和数据生命周期管理:

  • 订单处理流程:状态从“草稿” → “已提交” → “已审核” → “已完成”,每个迁移可绑定条件(如金额阈值)或外部逻辑。
  • 项目任务管理:任务状态(如“未开始”、“进行中”、“已延期”)控制可管理行为(如“启动任务”仅允许在“未开始”状态)。
  • 数据审批流:结合PSDEACTION和PSDEOPPRIV,实现状态驱动的权限升降级,例如“驳回”操作将状态回退至“草稿”。

三、关系图例

以下应用Mermaid语法展示PSDEMAINSTATE及其相关模型的层级和引用关系:

图例说明


四、示例DSL代码

以下提供一个完整的DSL示例,展示如何定义订单实体(PSDATAENTITY)的主状态及主状态逻辑。示例包含:

  1. 定义订单实体和主状态(草稿、已提交、已审核)。
  2. 配置主状态逻辑,搭建状态迁移(草稿 → 已提交 → 已审核)。
  3. 集成行为控制和操作标识管理。
// iBizModelDSL建模指令,目标:定义订单实体的主状态及状态迁移逻辑
def de_order = "Demo.ORDER" // 订单实体标识
// 1. 定义订单实体的主状态
psdemainstate(
allowmode: "DENY",        // 行为控制模式:拒绝
codename: "DRAFT",        // 状态代码
defaultmode: 1,           // 实体默认状态
msvalue: "DRAFT",         // 状态值1
name: "草稿",             // 状态名称
psdeid: de_order,         // 所属实体
deactiondenymsg: "草稿状态下不允许执行此操作",
ordervalue: 10
) {
// 嵌套成员:定义主状态控制的属性(如订单金额字段只读)
psdemsfield(
name: "控制金额字段",
psdefid: de_order + ".AMOUNT", // 引用订单金额属性
defaultvalue: "READONLY"
)
// 嵌套成员:定义拒绝的操作标识(如删除权限)
psdemsoppriv(
psdemsactionname: "拒绝删除",
psdeopprivid: de_order + ".DELETE"
)
}
psdemainstate(
allowmode: "ALLOW",
codename: "SUBMITTED",
msvalue: "SUBMITTED",
name: "已提交",
psdeid: de_order,
ordervalue: 20
) {
psdemsaction(
psdemsactionname: "允许提交",
psdeactionid: de_order + ".SUBMIT"
)
}
psdemainstate(
allowmode: "ALLOW",
codename: "REVIEWED",
msvalue: "REVIEWED",
name: "已审核",
psdeid: de_order,
ordervalue: 30
) {
psdemsoppriv(
psdemsactionname: "允许编辑",
psdeopprivid: de_order + ".EDIT"
)
}
// 2. 定义主状态迁移逻辑(MAINSTATELOGIC)
psdelogic(
logictype: "MAINSTATELOGIC",
codename: "ORDER_STATE_FLOW",
name: "订单状态迁移逻辑",
psdeid: de_order,
logictag: "*",           // 匹配任意状态值1
logictag2: "*"           // 匹配任意状态值2
) {
// 状态节点:草稿(默认状态)
psdelogicnode(
id: "STATE_DRAFT",
codename: "STATE_DRAFT",
logicnodetype: "MAINSTATE",
param9: 1,           // 默认状态
psdemainstateid: de_order + ".DRAFT" // 引用主状态
)
// 状态节点:已提交(简单模式配置)
psdelogicnode(
id: "STATE_SUBMITTED",
codename: "STATE_SUBMITTED",
logicnodetype: "MAINSTATE",
param9: 0,
param1: "SUBMITTED", // 状态值1
param7: 1,           // 行为允许模式:允许
param4: "SUBMIT;UPDATE", // 允许的行为列表
param8: 1,           // 操作标识允许模式:允许
param5: "EDIT"       // 允许的操作标识
)
// 状态节点:已审核
psdelogicnode(
id: "STATE_REVIEWED",
codename: "STATE_REVIEWED",
logicnodetype: "MAINSTATE",
param9: 0,
psdemainstateid: de_order + ".REVIEWED"
)
// 状态迁移连接:草稿 → 已提交
psdelogiclink(
ordervalue: 10,
name: "草稿到已提交",
srcpsdelogicnodeid: "STATE_DRAFT",
dstpsdelogicnodeid: "STATE_SUBMITTED"
) {
// 迁移条件:订单金额大于0
psdellcond(
dstpsdlparamid: "Default",   // 默认参数
logictype: "SINGLE",
ordervalue: 10,
customdstparam: "AMOUNT",    // 订单金额属性
condvalue: "0",
psdbvalueopid: "GT",         // 大于
name: "金额大于0"
)
}
// 状态迁移连接:已提交 → 已审核
psdelogiclink(
ordervalue: 20,
name: "已提交到已审核",
srcpsdelogicnodeid: "STATE_SUBMITTED",
dstpsdelogicnodeid: "STATE_REVIEWED"
) {
// 组合条件:审核人非空且状态为已提交
psdellcond(
logictype: "GROUP",
ordervalue: 10,
groupop: "AND"
) {
psdellcond(
dstpsdlparamid: "Default",
logictype: "SINGLE",
ordervalue: 10,
customdstparam: "REVIEWER",
condvalue: "",
psdbvalueopid: "ISNOTNULL", // 非空
name: "审核人存在"
)
psdellcond(
dstpsdlparamid: "Default",
logictype: "SINGLE",
ordervalue: 20,
customdstparam: "STATE",
condvalue: "SUBMITTED",
psdbvalueopid: "EQ",      // 等于
name: "状态为已提交"
)
}
}
}

DSL代码说明

  • 主状态定义:通过psdemainstate定义三个状态(草稿、已提交、已审核),并嵌套成员模型控制属性和操作。
  • 状态逻辑配置:使用psdelogic(logictype: “MAINSTATELOGIC”)定义迁移路径,通过psdelogiclinkpsdellcond添加条件判断。
  • 业务规则:例如,从“草稿”迁移到“已提交”需满足金额大于0的条件;从“已提交”到“已审核”需审核人非空。

五、应用场景深度解析

5.1 工作流状态管理

在采购订单环境中,主状态逻辑可驱动完整的审批流程:

5.2 数据安全与权限增强

在客户管理系统中,主状态用于强化数据保护:

  • 锁定状态:定义“锁定控制”状态(defaultmode: 2),通过PSDEMSOPPRIV拒绝所有操作标识,防止误修改。
  • 审计追踪:结合PSDELOGICNODE记录状态变更日志,满足合规要求。

5.3 界面交互优化

通过主状态与界面部件(如PSDEFORM、PSDEGRID)集成:

5.4 异常处理与回退

主状态逻辑支持异常迁移路径:

  • 回退机制:从“已审核”状态回退至“草稿”,需附加条件(如管理员权限)。
  • 超时控制:借助PSDELOGIC集成定时任务,自动将“待处理”状态标记为“已过期”。

六、总结

实体主状态(PSDEMAINSTATE)和主状态逻辑(PSDELOGIC类型MAINSTATELOGIC)是iBizModel中构建精细化状态管理的核心组件。它们通过属性组合、行为控制、迁移路由和条件判断,为复杂业务环境提供灵活、可靠的状态机支持。应用场景覆盖工作流、权限管理、数据完整性及界面交互,显著提升架构的可维护性和业务适应性。凭借本文提供的DSL示例和关系图例,开发者可快速上手建模,实现高效的状态驱动业务逻辑。

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

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

相关文章

2025氮化硼陶瓷推荐榜:福维科(山东)五星领跑,氮化硼陶瓷高温绝缘体/坩埚/套管/基板/高温构件/耐腐蚀构件优质厂家赋能产业升级

随着工业制造向精密化、高温化推进,氮化硼陶瓷凭借耐高温、强绝缘、高导热的特性,成为电子、新能源、高温加工等领域的关键材料。2025 年优质企业推荐榜聚焦核心需求,精选 5 家实力企业,其中福维科新材料科技发展(…

Maui 实践:JavaScript 动态生成集合属性的 get/set 代理

Maui 实践:JavaScript 动态生成集合属性的 get/set 代理 原创 夏群林 2025.11.6 一、背景 在我的数独项目的 SudokuFound 类中,需要管理 8 个集合属性,每个集合都需要:「读」:返回副本(避免外部直接修改内部数据…

2025小王子亚麻籽薯片工厂推荐榜:小王子亚麻籽薯片厂家实力派承包休闲时光

追剧解馋、露营分享、办公加餐,一款口感出众又兼顾品质的薯片总能点亮日常。2025 年休闲食品市场更看重 “品质溯源、工艺创新、健康适配”,结合市场口碑、技术实力与品质认证,整理出这份高性价比薯片推荐榜,帮你轻…

2025大连养老院机构推荐榜:养老院中心、社区养老院守护舒心晚年

2随着养老需求的多元化发展,选择一家环境适宜、服务贴心的养老院成为许多人的关注重点。2025 年大连甘井子区养老机构推荐榜新鲜出炉,辛寨子社区养老服务中心凭借社区嵌入式优势登顶,另有两家机构凭借特色服务入选,…

Apache是干嘛用的?Apache服务器搭建教程

Apache 是一款开源的 HTTP 服务器软件。简而言之,它是一种帮助计算机向互联网上的其他计算机发送和接收网页的程序。试想一下,Apache 就像是一位餐厅的服务员,负责把菜单(网页)从厨房(服务器)端到桌子(用户的浏…

ewomail docker搭建

docker部署ewomail遇到的一个问题。使用docker部署ewomail,部署中途遇到了域不允许的问题。在网上搜索的到都是配置本地 hosts 就可以解决域不允许问题,但是我配置了无法解决,通过如下方式解决。 docker run -d \-h…

Playwright为什么老是跑不稳?12个坑踩完我终于懂了!

关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集 周五傍晚,理想的状态是测试报告全绿、CI顺利完成、泡杯咖啡享受下班时光。 如果你的 Playwright 测试套件老是慢、莫名失败、生成一堆无用…

阿里云微服务引擎 MSE 及 API 网关 2025 年 10 月产品动态

阿里云微服务引擎 MSE 及 API 网关 2025 年 10 月产品动态点击此处,了解微服务引擎 MSE 产品详情。

2025年厂房降温设备厂家新推荐排行榜白皮书,厂房降温设备哪个厂家好

2025年工业制造领域持续向绿色高效转型,厂房降温设备作为保障车间生产环境、提升员工效率的核心配套设施,已成为机械加工、物流仓储、食品加工等行业的刚需。然而当前市场中,厂房降温设备厂家数量繁杂且技术实力分化…

android音频低延时设计:Fast Mixer官方文档 - 详解

android音频低延时设计:Fast Mixer官方文档 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

华人数学家反击AI!一场关于和差集问题的突破接力赛

AI 刷新和差集 θ 值后,华人数学家 Fan Zheng 以新方法反超,彰显人机智慧互补。数学的世界里,总有一些难题如同璀璨星辰,华人数学家反击AI!一场关于和差集问题的突破接力赛着无数智者仰望与追逐。在今年5月,Deep…

raft 写请求源码走读

0. 概述 在上一篇文章中介绍了 raft 读请求源码走读,本文继续结合 etcd-raft 源码介绍 raft 写请求流程。 需要说明的是,本文使用的是单节点集群环境,后续会补充多节点集群环境加以介绍。 1. 写请求流程 1.1 客户端…

2025 年在线监测系统厂家最新推荐榜单:洁净环境、尘埃粒子、洁净室、无尘室等设备品牌技术与应用全面解析尘埃粒子在线监测系统/无尘室在线监测系统公司推荐

引言 当前洁净行业对在线监测系统的精度、稳定性需求持续攀升,为帮助企业精准筛选优质设备,本次榜单结合行业协会近一年测评数据编制而成。测评采用 “技术指标 + 场景适配 + 服务能力” 三维评估体系,技术指标方面…

07-WinCC VBS在WinCC中常用实例及函数的用法介绍一

07-WinCC VBS在WinCC中常用实例及函数的用法介绍<一> 1、访问图形编辑器中的对象——ScreenItems用法:dim objset obj=Screenitems([图形对象名称])注意:图形对象名称即在图形编辑器中的按钮、圆、矩形、…

2025年关于准分子气体订做厂家权威推荐榜单:激光气体/激光混合气/准分子激光气体源头厂家精选

在高端制造与科研领域,一瓶高纯度的准分子激光气体,是许多精密设备与工艺的“血液”,其质量直接关系到技术的成败。 准分子激光气体作为激光设备的核心耗材,其纯度、配比精度和稳定性直接决定激光器的工作性能和使…

2025年资质齐全的婚礼酒店排名,口碑好的婚礼酒店机构

2025年南京及周边婚庆市场持续升温,新人对婚宴场地的需求已从有地方办升级为办得省心、办得有面。而资质齐全、口碑过硬、实力雄厚的婚礼酒店,成为新人筹备婚礼的核心选择——它们不仅需具备合规经营资质,更要在场地…

评估工程正成为下一轮 Agent 演进的重点

在 AI 领域里经常提到一个词叫“品味”,这里讲的“品味”,其实就是如何设计评估工程,即对 Agent 的输出进行评价。如果没有评估,就很难理解不同的模型会如何影响我们的用例。作者:马云雷、望宸 导读 在传统软件工…

前端的同学,终于要起飞啦,Github 6.3k star + ,免费可商用的UI元素库!!!

嗨,我是小华同学,专注解锁高效工作与前沿AI工具!每日精选开源技术、实战技巧,助你省时50%、领先他人一步。👉免费订阅,与10万+技术人共享升级秘籍!一个由社区贡献、免费可商用的UI元素库,收录超过 3,000 个(…

基础查找算法(一)概述

基础查找算法(一)概述一 定义 查找算法是计算机科学中用于在数据集合中定位特定元素的重要工具。 1.1 分类及特性算法分类 核心思想 时间复杂度 空间复杂度 适用场景顺序查找 从头到尾逐个比较 O(n) O(1) 无序或小型数…