请选择 进入手机版 | 继续访问电脑版

通达用户社区[OA论坛]

 找回密码
 立即注册
搜索
查看: 1360|回复: 14

流程中心-定义字段-使用体验优化

[复制链接]
发表于 2019-9-27 12:06:58 | 显示全部楼层 |阅读模式
流程中心从通达2017版开始就有了,增加了自定义字段来管理和存储数据,但是字段和表单之间的关系真的好微妙,流程中心表单可以用自动排版,但是自动排版显示真的太难看,细节处理不到位,从2018年到现在,公司新上的流程都用了流程中心,但是表单没有一个用自动排版,全部是自定义表单。

每当要做新流程,都要加字段,一提到加字段就让人头疼。
用一次流程中心,头疼一次;一直用,一直疼啊

为何呢,请听我给您慢慢道来:
  • 流程中心【定义字段】中可以将字段【分组】,【分组】下才是真正的【字段】。
  • 在【字段分组设置】页面点击【添加】按钮,会弹出【添加变量分组】页面,里边内容不多,需要加的有【标识符】、【描述】、【类型】、【排序号】和【停用】,前俩为必填。
  • 【标识符】是用来标识字段的,一般我们都是用【描述】字段的简拼来标识,比如jbxx-基本信息,bmldsp-部门领导审批,这样出现重复的几率小,而且也方便查看。(相信很多管理员也是这样实现的)分组基本也都是按照步骤来设定,这样添加表单、导出数据都能看得更清楚,如此算下来一个表单至少得2到3个分组,多的十来个那也算正常,在此我就先设定(type = 5)(取个平均吧)。【类型】就不用说了,分组就两种,很好选择,这没啥吐槽的。接下来就说说【排序号】的问题,排序号主要就是影响显示顺序,当然你也可以不填,那系统就默认0,这样都按0排,去修改时候就乱了。所以我的一个原则就是,从前到后加,每次增加2(sort_no = 2n),这样呢排序没问题,就算以后你有新的分组要加也可以插入进去,顺序基本不会乱。头疼的是我每次增加都要去看我已经增加多少了,还要乘以2算算。
  • 说完分组,建完分组那就需要深入分组,进行【字段设置】,这部分和分组操作基本一样,【标识符】和【描述】比不可少,【排序号】嘛那也少不了。至于分组里边一般多少字段,这就视步骤而定了,比如申请流程基本信息中少不了的申请人、申请部门、申请日期,申请信息那就看是要申请啥了,领导审批一般都是审批结果、审批意见和签名,这样一看一个分组至少得3个字段,不说多,我就暂定(variable = 3)。
  • 等你把分组和字段都添加完,你会发现,这个流程已经建完成了至少50%的工作,剩下的就是建表单和设计流程步骤。开始我已经说了,流程中心自动排版真的不好看,所以我都用自定义表单。所以每次都少不了建表单,为了表单统一,本人专人设定了表单模版,并添加了自定义样式,做了表单框架,每次主要就是导入模块,然后按照字段添加基本就可以了。下图就是一个模板,此模板框架用了custom.css,某些控件也做了样式适配。本次主题不是来说表单的,二十要说表单里边的控件,控件是和字段一一对应的,每个控件都有【控件名称】和【映射变量】这两个内容,所以在添加控件时候就要选择你添加的字段,但是往往我们添加过字段的描述和控件的名称是对应的,到此我们还要将所有字段名称再输入一次,这个次数要怎么算呢,当时是所有字段总数喽(count = type * variable)。
表单模板.png

表单模板

表单做完,你会发现我离目标只查不到20%的工作了。后期的流程步骤、流程属性还有管理权限工作我就不再赘述。(此处排除各步骤表单区别很大,要单独做步骤表单情况;如果只是少了某些字段,完成可以复制表单,做删除操作即可)

到此我们来算一下加一个表单,我要输入多少次数据,本次主要计算重复输入的工作(【标识符】、【描述】和【控件名称】重复输入,【排序号】也要重复录入):
sum = (type + type * variable) + (type + type * variable) + (type * variable) + (type + type * variable) = 3 * type + 4 * type * variable
这样看也不能估计有多少,我们带入数值计算下:
sum = 3 * 5 + 4 * 5 * 3 = 75
我这还都是保守估计的数据,如果有的分组多,字段多了,那这结果轻松就过百了。

昨天,我真是忍无可忍,要加一个新流程,步骤有12步,平均每步有5个字段,加了半截,真的不想再做了。于是我就拿起来手术刀,给通达做起手术。起始这个念想,这个槽点早都有了,只是碍于懒癌晚期,一直不肯动手。下面就说说具体手术细节:
1.先说【排序号】问题,这个最简单。前边已经说过思路,每次增加时候都用2n去设定,那我就给你加个默认值,每次新增都直接设定好,省的手动输入,真要改的话就自己再修改就行。涉及文件就两个add.php和add_variable.php代码如下:
  1. // add.php
  2. $count = TD::DB()->count('bpm_variable_sort', array('flow_id' => $flow_id));
  3. $sort['order_no'] = ($count + 1) * 2;
复制代码
  1. // add_variable.php
  2. $count = TD::DB()->count('bpm_variable', array('sort_id' => $sort_id));
  3. $variable['order_no'] = ($count + 1) * 2;
复制代码
很简单,从数据库获取当前流程分组或当前分组字段总数,之后加1,乘上2(这个根据需要可以修改,2已经够用)。这样再一算【标识符】字段每次的输入量几乎为0。
2.接下来就是【标识符】和【描述】的问题了,既然每次标识符取得都是描述字段的简拼,那么我们就用js实现填完描述自动回填标识符就行。代码如下:
  1. // add.php add_variable.php
  2. <script type="text/javascript" src="Convert_Pinyin.js<?=$GZIP_POSTFIX?>"></script>
  3. <script>
  4. $(document).ready(function () {
  5.         var name = $('#name');
  6.         var desc = $('#desc');
  7.         desc.on('blur', function () {
  8.                 var val = $(this).val();
  9.                 var nameVal = name.val();
  10.                 if (!nameVal) {
  11.                         var jp = pinyin.getCamelChars(val).toLowerCase();
  12.                         name.val(jp);
  13.                 }
  14.         });
  15. })
  16. </script>
复制代码

这里用到网上一个汉字转拼音的js插件,当描述字段失去焦点之后,判断标识符是否有值,无值则将描述内容简拼填写到标识符中,有值则不操作。
以上两个问题处理结果可以看下图:

流程中心-定义字段-快速回填.gif

流程中心-定义字段-自动回填

再一算我又可以少输入(type + type * variable)这么多次了。
3.表单控件中【控件名称】的问题处理办法起始也相对简单,类似上一步的操作。思路就是先选择【映射变量】之后将【映射变量】中的字段名称回填到【控件名称】中即可。因为业务比较忙,暂时未动此伤口。
如果这个步骤实现那么,控件中【控件名称】的输入量也可以按0来算了。

放到一起算算:
sum = 0 + (type + type * variable) + 0 + 0 = 1 * type + 1 * type * variable

这样做下来,指关节不疼了,腰椎间盘不突出了,脖子也不僵了,心情也好了很多,真乃神医啊


说了这么多,就是想提醒通达,用户体验真的不能忽略。
当然以上解决思路只是抛砖引玉,我还有更好思路去解决,希望通达能够坚持用户至上,做好(的)产品,做好产品。

最后,至此国庆70周年之际,预祝祖国昌盛,国家富强,人民安康。




回复

使用道具 举报

 楼主| 发表于 2019-9-27 16:42:34 | 显示全部楼层
表单控件中【控件名称】的问题也已通过代码解决
  1. // webroot/static/modules/approve_center/system/flow_form/js/cool_form_dialog.ue.js
  2. $('select#txtVariable').on('change', function () {
  3.         var val = $(this).val();
  4.         if (val) {
  5.             var text = $(this).find('option:selected').text().split('.')[1];
  6.             // var text = $(this).find('option:selected').text().replace('.', '');
  7.             console.log(text);
  8.             $('#txtName').val(text);
  9.             $('#ITEM_NAME').val(text); // 宏控件【控件名称】id为ITEM_NAME
  10.         }
  11.     });
复制代码
经过分析,每次新建及修改控件,都会调用此js文件,在此文件中添加以上代码,绑定映射变量下拉菜单变化,然后将结果处理回填到控件名称中。

回复 支持 反对

使用道具 举报

发表于 2019-9-27 15:48:19 | 显示全部楼层
技术好帖,提问题,还有解决方法,就不知道通达是否知道用户的苦衷了,把流程中心的痛点都全面解决下,用户之福也
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-27 16:45:21 | 显示全部楼层
ispro 发表于 2019-9-27 15:48
技术好帖,提问题,还有解决方法,就不知道通达是否知道用户的苦衷了,把流程中心的痛点都全面解决下,用户 ...

谢谢,现在懒了,懒得去写文章提意见了,这次是是在受不了才来吐槽吐槽。
回复 支持 反对

使用道具 举报

发表于 2019-9-27 17:51:08 | 显示全部楼层
您好,感谢您对OA提出的宝贵意见,新建表单添加控件时,不需手动映射变量的,变量会自动创建的,在定义字段里手动添加的字段,手动修改之后,新建工作时,位置也不会进行更变的,对于您提出的问题,麻烦您留一下联系方式,我这边在排查一下。对于您提的意见,我这边再进一步进行反馈。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-29 09:36:34 | 显示全部楼层
通达邝金霞 发表于 2019-9-27 17:51
您好,感谢您对OA提出的宝贵意见,新建表单添加控件时,不需手动映射变量的,变量会自动创建的,在定义字段 ...

我知道你说的,直接新建表单,让系统自己建变量,你看看系统怎么建的,单记录全放一个分组,没有区分。

其实我再文章最后也说了有更好的方法去解决,一种就是通过这种让系统建增加变量的方法,确实可以省不少事,但是能够在建变量时候,选择建到哪个分组,这样就不需要字段和控件都要建,减少重复工作了。

回复 支持 反对

使用道具 举报

发表于 2019-9-29 18:00:43 | 显示全部楼层
lyz7805 发表于 2019-9-29 09:36
我知道你说的,直接新建表单,让系统自己建变量,你看看系统怎么建的,单记录全放一个分组,没有区分。

...

您好,关于您的建议我们会认真细致的进行分析,也非常感谢您提出的宝贵意见,通达的每一次产品优化和进步都建立在用户的需求之上,如果您方便,可以留一下详细联系方式我们会根据您提供的信息,给您处理下您的需求;最后祝您节日快乐,假期愉快
回复 支持 反对

使用道具 举报

发表于 2019-10-10 14:07:55 | 显示全部楼层
高手。有没有办法处理复选控件,选中或者不选中来disply:none; 或者显示列表控件表单?
回复 支持 反对

使用道具 举报

发表于 2019-10-10 16:38:39 | 显示全部楼层
      好技术帐,楼主牛人,表单做的也很好看
      不用系统自动排版的话,分组其实只是为了区分单记录和多记录,没必要建那么多,直接表单设计器建个表单,让他自己建去得了,
      主要问题是修改表单控件的时候,需要先去把流程字段停用改名,然后才能修改比较麻烦,每次修改都头痛。
     建议优化自动排版的体验,推荐类似应用中心的那种方式,需要就往上拖,名字系统自己添加。不用的字段就停用就可以了。美观还是要调整一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-11 08:57:11 | 显示全部楼层
e_yxc 发表于 2019-10-10 14:07
高手。有没有办法处理复选控件,选中或者不选中来disply:none; 或者显示列表控件表单? ...

你说的处理复选框,选中不选中来显示/隐藏其他元素的操作其实和单选框差不多,都可以通过添加js监听事件来实现,前一段我做了一个单选框的。
回复 支持 反对

使用道具 举报

小黑屋|手机版|Archiver|通达用户社区[OA论坛] ( 京ICP备14032129号

GMT+8, 2019-11-14 04:49 , Processed in 0.147635 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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