找回密码
 注册成为天翎用户
楼主: Guotaian

[已解决] 控件权限控制的脚本完善。

[复制链接]
wade 发表于 2018-7-17 14:19:45 | 显示全部楼层
天气好热想不出
 楼主| Guotaian 发表于 2018-7-17 14:44:20 | 显示全部楼层
我重新贴一下脚本:
// 部门负责人姓名
(function() {
    var name = "";
    var curDoc = getCurrentDocument();
    var curDocName = curDoc.getItemValueAsString("系部负责人签字");
    if (curDocName != null && curDocName != "") {
        name = curDocName;
    } else {
        var statelabel = getStateLabel();
        if (statelabel == "部门审批") {
            name = getWebUser().getName();
        }
    }
    return name;
})()

脚本的意思是:当前文档如果系部负责人签了字(数据库该字段有值),则显示签字信息,否则就判断流程状态,当流程状态为部门审批时,自动将当前登录人的姓名填入到该控件中(这样就省得部门负责人自己填写自己的姓名了)。

流程其实很简单,就是一个串行业务。

问题在哪里呢?
首先:申请人填写了表单,由于权限的控制,他并不能填写系部那一栏的信息,所以系部负责人签字那里必然是空的。
然后:申请人提交后,流程走到了部门审批那里,此时流程状态为部门审批。
此时:部门审批人员还没做任何操作,申请人在自己的首页看经办事项,点到这条记录,发现部门负责人签字那里显示的是自己的名字,因为脚本的后半段确实是这么写的:“否则就判断流程状态,当流程状态为部门审批时,自动将当前登录人的姓名填入到该控件中。”,为什么会这样呢?因为流程状态确实为部门审批,而部门负责人签名控件没有值,所以按脚本后半段的意思就自动填入了当前登录人的姓名。

那么正确的效果应该什么样的呢?
能不能判断当前操作是不是查看经办,如果是的话,
if (statelabel == "部门审批") {
    name = getWebUser().getName();
}
这一段就不要执行了。
经办里,控件没有值就是没有值,不需要自动赋值。
QQ图片20180717143348.png
QQ图片20180717143531.png
 楼主| Guotaian 发表于 2018-7-17 14:45:04 | 显示全部楼层
wade 发表于 2018-7-17 14:19
天气好热想不出

吃根冰棒。
wade 发表于 2018-7-17 15:20:13 | 显示全部楼层
本帖最后由 wade 于 2018-7-17 15:22 编辑

你看看我的思路:我的思路就是"申请人"提交表单到"部门审批",在"部门审批"这个节点这里我没有用getWebUser().getName(),所以系部门签字这里是空的,当我从"系部门审批"提交到"教务处督导员"我就获取上一节点审批人(系部门审批)的姓名并且赋值到系部门签字这里,那段sql查询可以获取上一节点的流程处理人。


(function() {
    var curDoc = getCurrentDocument();
        var domainid = getDomainid();
    var curDocName = curDoc.getItemValueAsString("系部负责人签字");
    if (curDocName != null && curDocName != "") {
        return curDocName;
    }else {
        var statelabel = getStateLabel();
        if (statelabel == "教务处督导员") {
                        var nodeName="部门审批";  //流程节点名称
                        var sql="select id,actorid as item_actorid,name as item_name,'" + domainid + "' as domainid from T_ACTORHIS r where NODEHIS_ID in (select ID from t_relationhis where docid='"+curDoc.getId()+"' and startnodename='"+nodeName+"') ORDER BY r.PROCESSTIME DESC LIMIT 1";
                                println("sql----"+sql);
                                var datas = queryBySQL(sql);
                        for (var it = datas.iterator(); it.hasNext();) {
                        var d = it.next();
                        var userid = d.getItemValueAsString("actorid");
                        var userVO = getUserById(userid);
                        curDocName=userVO.getName();
                        }
                }
    }
    return curDocName;
})()
 楼主| Guotaian 发表于 2018-7-17 15:30:27 | 显示全部楼层
你这个脚本,当部门负责人进入表单页面时,部门负责人签名那里是空的,而我的需求是要默认填入自己的姓名。
 楼主| Guotaian 发表于 2018-7-17 15:32:15 | 显示全部楼层
部门负责人正在操作时,表单会默认填写自己的姓名。
部门负责人还没有审批时,申请人查看经办,部门负责人签字那里要为空。
wade 发表于 2018-7-17 17:44:28 | 显示全部楼层
你说的这两种情况的表单是同一个状态啊,同一个状态的表单字段,怎么可以显示两个不同的值呢,我感觉这本身就是有问题啊啊啊啊啊,你部门负责人还未提交的时候打开表单和你申请人查看经办是同一个状态啊,都是在部门负责人这里呢,要显示不同的值就矛盾了,你觉得呢
QQ截图20180717173801.png
 楼主| Guotaian 发表于 2018-7-18 08:58:40 | 显示全部楼层
我知道矛盾啊,描述了这么多就是希望有什么方案能解决这个矛盾,毕竟两者打开的形式不同,能不能判断当前是不是经办打开,或者当前是不是审批人。
wade 发表于 2018-7-18 14:42:22 | 显示全部楼层
本帖最后由 wade 于 2018-7-18 15:25 编辑

这个呢(function() {
    var curDoc = getCurrentDocument();
        var domainid = getDomainid();
    var curDocName = curDoc.getItemValueAsString("系部负责人签字");
    if (curDocName != null && curDocName.trim().length()>0) {
        return curDocName;
    }else {
        var statelabel = getStateLabel();
        if (statelabel == "部门主管") {
                        var nodeName="部门主管";  //流程节点名称
                        var sqllc="select id,actorid as item_actorid,name as item_name,'" + domainid + "' as domainid from T_ACTORHIS r where NODEHIS_ID in (select ID from t_relationhis where docid='"+curDoc.getId()+"' and startnodename='"+nodeName+"') ORDER BY r.PROCESSTIME DESC LIMIT 1";
                                println("sql----"+sqllc);
                                var datas = queryBySQL(sqllc);
                                println("数据集合:"+datas);
                        for (var it = datas.iterator(); it.hasNext();) {
                        var d = it.next();
                        var actorid= d.getItemValueAsString("actorid");
                        if(actorid==getWebUser().getId()){
                                curDocName=getWebUser().getName();
                                return curDocName;
                               
                        }else{               
                                return null;
                        }

                       
                        }
                }
    }
    return curDocName;
})()
 楼主| Guotaian 发表于 2018-7-18 16:14:47 | 显示全部楼层
这个脚本在申请人查看经办时确实不会显示部门审批人姓名了,但是部门审批人自己提交表单时也不会显示姓名了,因为自己没提交过,就不存在自己这步的流程历史,sql语句获得的userid必然为空。

本版积分规则

手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-9-28 09:10

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表