泛微OA.E9--01--限制发起人每个月发起流程的次数

泛微OA.E9–01–限制发起人每个月发起流程的次数

功能描述:
现有一个流程叫补卡申请流程,每个人忘记打卡了都可以发起补卡申请流程进行补卡。but 每个人每个月只可以发起两次该流程,当每月发起流程超过2次时,提示“每个人每个月至多可以补卡两次”并且禁止提交该流程。

实现过程:

1. 创建字段
新建两个字段,一个用来存储这个月发起的次数,一个用来存当前发起申请的年月时间。年月的字段是为了sql语句查找本月发起的次数,因为在泛微e9里使用相关的函数数,比如getDate(),year()等函数会不生效,所以才出此下策。最后,把两个字段放到表单模板里。
在这里插入图片描述
2. js获取年月信息,并赋值给年月字段。年月信息的格式为:年-月-%(这里是为了做sql的模糊查询)

年月字段信息如图:
在这里插入图片描述
插入js代码块,内容如下:

<script>
var myDate = new Date();
var tYear = myDate.getFullYear();
var tMonth = myDate.getMonth();

var m = tMonth + 1;
if (m.toString().length == 1) {
m = "0" + m;
}
WfForm.changeFieldValue("field63990", {value:tYear+"-"+m+"-%"});
</script>

3. 使用sql语句统计当月发起流程的次数
在这里插入图片描述
对应sql语句如下:

select count(1) from formtable_main_187 where sqr= $main.sqr$ and sqrq like '$main.dqyf$

formtable_main_187为补卡流程对应的数据库表
在这里插入图片描述
sqr:数据库表里存放的申请人
$main.sqr$:当前发起的流程里的申请人
在这里插入图片描述
4. 通过本月的申请次数设置节点字段校验,当申请次数大于2时,禁止发起人提交流程
在这里插入图片描述
](https://img-blog.csdnimg.cn/82631c2cfc434a438134b652f7839f59.jpeg)

以上就是个人的工作方法总结,如果你有其他更好的方法或者文章有啥问题欢迎大家留言!!ヾ(◍°∇°◍)ノ゙

祝大家工作顺利,加了个油!!!在这里插入图片描述

<think>好的,我需要帮助用户在E9平台中实现通过主流程字段限制流程发起次数不超过3次的功能。首先,我需要理解用户的需求:主流程中的某个字段需要控制子流程发起次数,确保不超过3次。接下来,我需要结合提供的引用内容,思考如何利用现有的技术和方法来实现这个功能。 首先,根据引用[1],用户可以通过SQL查询用户使用流程次数,并在流程中建立一个文本字段来存储这个次数,然后使用JavaScript判断次数是否超过限制。这可能适用于主流程自身的限制,但用户现在需要主流程字段控制子流程发起次数,所以需要调整这个方法。 接下来,引用[3]提到使用虚拟表单和SQL语句来生成流程发起次数的报表。这提示我可以利用SQL查询来统计子流程发起次数,结合主流程的某个字段进行关联。例如,主流程可能有唯一的标识符,子流程的记录中可以存储这个标识符,从而统计该主流程下子流程发起次数。 然后,引用[2]讨论了使用JavaScript监听字段变化并动态显示内容。这可以应用到主流程的表单中,当用户尝试发起流程时,检查当前已发起次数,如果超过限制,则阻止提交。 现在,我需要设计具体的步骤: 1. **数据库设计**:确保子流程表中有一个字段记录关联的主流程ID,比如主流程的单号或唯一标识。这样可以通过SQL查询统计某个主流程对应的子流程数量。 2. **主流程表单添加字段**:在主流程表单中添加一个隐藏的文本字段,用于存储当前子流程发起次数。可能还需要另一个字段存储主流程的唯一标识,以便在SQL查询中使用。 3. **SQL查询设置**:参考引用[1]和[3],创建一个虚拟表单或直接在字段属性中插入SQL语句,查询该主流程对应的子流程数量。例如,SQL语句可能是`SELECT COUNT(*) FROM 子流程表 WHERE 主流程ID字段 = ?`,参数绑定到主流程的ID字段。 4. **字段自动更新**:设置主流程的表单字段属性,在每次打开表单或触发事件时,自动执行SQL查询并更新子流程次数字段的值。 5. **JavaScript校验**:在主流程的表单中添加JavaScript脚本,监听子流程发起动作。当用户尝试提交子流程时,检查存储的次数是否已经达到3次。如果超过限制,弹出提示并阻止提交。 需要注意的几点: - **时机问题**:子流程发起可能是在主流程的不同节点,需要确保每次发起流程时,主流程的字段能实时更新次数。可能需要使用流程事件触发器,如节点提交前的事件,触发SQL查询更新次数- **并发控制**:如果多个用户同时发起流程,可能存在并发导致次数统计不准确的问题。可能需要数据库的事务处理或锁机制,但平台可能对此有封装,需要查看文档。 - **虚拟表单的使用**:引用[3]提到使用虚拟表单来执行SQL查询,可能需要配置虚拟表单来获取子流程次数,并将其绑定到主流程的字段上。 另外,可能需要利用的API(如引用[2]提到的)来获取子流程的信息,但具体实现可能需要结合SQL查询和JavaScript。例如,在提交子流程时,通过API检查当前次数,或者在主流程的表单中动态显示剩余可发起次数。 总结步骤: -流程表单中添加存储子流程次数的字段和主流程ID。 - 配置SQL查询统计子流程次数,绑定到主流程字段。 - 使用JavaScript在校验时阻止超过次数的提交。 - 考虑并发和实时更新的问题,可能需要事件触发器或定时更新字段。 需要验证这些步骤在E9中的可行性,确保各部分的配置正确,尤其是SQL查询的正确性和字段的绑定。同时,测试在不同场景下的行为,如子流程发起、拒绝和并发提交。</think>在E9平台中,通过主流程字段控制子流程发起次数不超过3次,需结合**SQL查询、字段存储和JavaScript校验**实现。以下是具体步骤: --- ### **步骤1:主流程与子流程关联设计** - **主流程表单字段**: 1. 添加唯一标识字段(如`主流程编号`),用于关联子流程。 2. 添加文本字段`子流程发起次数`,存储当前已发起次数--- ### **步骤2:通过SQL统计子流程发起次数** - **创建虚拟表单**(引用[3]): 1. 进入【建模引擎】→【表单】,右键创建虚拟表单,类型为SQL。 2. 编写SQL查询当前主流程关联的子流程数量: ```sql SELECT COUNT(*) AS sub_count FROM 子流程表 WHERE 主流程编号 = &#39;${主流程编号}&#39; ``` 3. 将查询结果映射到主流程的`子流程发起次数`字段。 --- ### **步骤3:主流程字段自动更新** - **字段属性配置**(引用[1]): 1. 在`子流程发起次数`字段的属性中,插入上述SQL语句。 2. 设置字段为“只读”,确保每次打开主流程表单时自动刷新次数--- ### **步骤4:JavaScript校验发起条件** - **添加前端拦截逻辑**(引用[2]): 1. 在主流程表单中嵌入JavaScript,监听子流程发起动作: ```javascript function checkSubmit() { var count = parseInt(document.getElementById("子流程发起次数").value); if (count >= 3) { alert("子流程发起次数已达上限(3次)!"); return false; // 阻止提交 } return true; } ``` 2. 绑定校验函数到子流程发起按钮的`onclick`事件。 --- ### **步骤5:子流程关联主流程** - **子流程数据关联**: 1.流程表中需包含`主流程编号`字段,确保每次发起时记录关联。 2. 通过流程初始化脚本自动传递主流程编号到子流程--- ### **注意事项** 1. **并发控制**:若多人同时发起流程,需结合数据库事务或在服务端校验次数(推荐后端二次校验)[^1]。 2. **实时性**:SQL查询可能因缓存导致延迟,可通过强制刷新虚拟表单数据提升实时性[^3]。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值