找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

通达OA官网网站
搜索
查看: 5023|回复: 9

【二开插件】一个独辟蹊径的修改工作名称文号通用插件

  [复制链接]

257

主题

1154

回帖

1万

牛毛

游客

积分
18851
QQ
发表于 2017-4-3 18:58:12 | 显示全部楼层 |阅读模式
本帖最后由 cgft 于 2017-4-3 19:41 编辑

独辟蹊径的修改工作名称文号通用插件

一、问题提出

  通达OA的工作流设计器,提供了“工作名称/文号”的修改功能。如图1所示的发文单,当“工作名称/文号”被定义为允许修改,且该流程步骤将“工作名称/文号”设计为可写字段(如图1所示)时,即可在下图中的箭头1所指之处允许人工输入“工作名称/文号”。还可单击“选择”按钮,人工选择表单的某控件,令其在“工作名称/文号”中自动填入该控件的值。
                                
图1


  通达OA所提供的功能,能满足“工作名称/文号”修改的基本需要,但如果工作流是图1所示的政务等类的工作流,为之后的管理方便计,其“工作名称/文号”一般都有固定(如以发文的文件标题作为工作流流程的“工作名称/文号”)的统一要求,此时通达OA所提供的功能在使用中就似存在不便之处:
  1. 无法保证操作者在箭头1处输入的内容或使用“选择”按钮所自动填入的内容,符合用户单位的统一硬性规定的要求;
  2. “工作名称/文号”的每次修改,都需人工操作,效率低、易出错。


二、需求分析
(一)设计环境
  仍以图1为例,设定如下环境:
  1. 工作流设计器中的文号表达式定义为:发文[{Y}-{N}],则自动生成的内容就是箭头1处的文字“发文[2017-74]”。
  2. 文件标题,即表单中箭头2所指的单行输入框控件(为便于叙述起见,以下将其称为“目标控件”),name="DATA_4",其完整源代码如图2所示。


                                
图2

  3. 工作流设计器中的文号表达式定义为:发文[{Y}-{N}],其自动生成的内容则是箭头1处的文字“发文[2017-74]”。

(二)设计要求
  编写一个通用型的插件,在任意的工作流中,插件都应做到:
  1. 可指定“工作名称/文号”的内容,自动与目标控件里的值同步。见图3,“工作名称/文号”的内容为“关于清明节放假安排的通知”。


     
图3

  2. 可指定工作流设计器中的文号表达式所定义里的值与目标控件里的值组合后,作为“工作名称/文号”的内容。见图4,“工作名称/文号”的内容为“发文[2017-74] 关于清明节放假安排的通知”。


     
图4
(待续)

bt1.png
bt2.png
bt3.png
bt4.png

8

主题

81

回帖

574

牛毛

游客

积分
663
发表于 2017-4-5 12:07:33 | 显示全部楼层
介绍一下怎么使用?

点评

别急啊  详情 回复 发表于 2017-4-7 11:07

257

主题

1154

回帖

1万

牛毛

游客

积分
18851
QQ
 楼主| 发表于 2017-4-7 11:14:48 | 显示全部楼层
本帖最后由 cgft 于 2017-4-7 11:24 编辑

三、解决方案

  插件由运行在客户端的前台程序和运行于服务器端的后台程序两部分组成。


(一)前台程序
  采用JavaScript语言编写插件的前台程序:
  1. 充分利用OA系统提供的函数、表单对象和js变量,与工作流程序实现无缝衔接(参见图1的下半段,工作流运行代码)。
  2. 使用jQuery元素选择器,依据id识别源动控件,确保插件的通用性。
  见图2,源动控件在表单的源代码中,其name被指定为“DATA_4”。由于每个表单,源动控件的name值会依据设计顺序的不同而不同,为了插件的通用性,应该为控件指定一个特定的元素加以标记。本插件要求人为地对源动控件增加一个id元素,并约定如下:
  ⑴ “工作名称/文号”的内容仅与源动控件里的值同步,则源动控件的id="Edit_RunName0"。表单源代码形如图5


                              
5

  ⑵ “工作名称/文号”的内容等于文号表达式生成的值+源动控件里的值,则源动控件的id="Edit_RunName"。表单源代码形如图6

     
6

  3. 绑定事件。无论源动控件为何种类型,如要修改则先需获得焦点,因此选用绑定blur事件是较为合理的。
  4. 文号表达式生成的原始值的读取。工作流的文号表达式生成的原始值(本例中即“发文[2017-74]”),保存在系统的MySQL数据库的工作流实例表的run_name字段中。表名可通过对系统运行时的js变量g_flow_id进行组合而获得;数据则通过系统运行时的js变量g_run_id关联实例表的run_id 字段,采用jQueryAjax方法,向服务器发送加载远程数据的异步请求而获得。代码如下:
$.ajax({
         url:"/general/workflow/plugin/aerosun/getRunName.php",
         data:{"RUN_ID":g_run_id,"FLOW_ID":g_flow_id},  
         type:"POST",
         async:true,
         success:function(data){
                   $("#Symbol",window.parent.document).val(data+MyRunName);
                   $("#run_id_block",window.parent.document).html(g_run_id+""+data+MyRunName);
}        });
  5.  前台程序还负责识别当前步骤是否允许修改“工作名称/文号”并保证图2的箭头1所指之处的控件为只读状态。
  6.  前台程序的调用,通过在表单的源代码中用JavaScript代码添写一条引入外部js文件的语句来实现。见图7.
     
7

(二)后台程序
  采用PHP语言编写插件的后台程序,负责接收Ajax发出的查询请求,并将查询结果返回jQuery处理。如图3或图4所示,由前台的jQuery在图2的箭头1所指之处即时显示。
bt5.png
bt6.png
bt7.png

8

主题

81

回帖

574

牛毛

游客

积分
663
发表于 2017-4-7 13:06:32 | 显示全部楼层
cgft 发表于 2017-4-7 11:14
三、解决方案
  插件由运行在客户端的前台程序和运行于服务器端的后台程序两部分组成。

可以给一份完整代码吗?QQ见私信。

点评

谢谢,在QQ群627590148,把代码我都已经下载了。  详情 回复 发表于 2017-4-7 17:10

257

主题

1154

回帖

1万

牛毛

游客

积分
18851
QQ
 楼主| 发表于 2017-4-8 09:49:38 | 显示全部楼层
本帖最后由 cgft 于 2017-4-8 09:53 编辑

四、操作说明


  现结合本实例,将操作顺序及要点叙述如下:
  1. 用系统的表单设计器打开表单,在表单的源代码里,添加一条引入外部js文件的语句,如图7所示。(PS:所有的表单都可写上这条语句,是否起作用,由id决定)
<scripttype="text/javascript"src="/general/workflow/plugin/aerosun/DispHelpFrm.js"></script>
  2. 找出源动控件的源代码,即
<input type="text"name="DATA_4" align="left" hidden="0"title="文件标题"style="font-size:14px;width:532px;text-align:left;"/>
然后,为其添加id元素,即如图6所示
<input type="text"name="DATA_4" id="Edit_RunName" align="left"hidden="0" title="文件标题"style="font-size:14px;width:532px;text-align:left;"/>
  3. 在流程设计器中定义流程属性,允许修改工作名称/文号,如图8所示。
                                

8

  需要在哪个步骤允许修改工作名称/文号,就在设计流程步骤时,将备选字段列表的[工作名称/文号加入到本步骤的可写字段列表中,如图9所示。
     

9

  全部设置工作,即告结束。

  实际运行办理工作流时,操作者只要在源动控件中输入或更新了内容,即可如图3、图4所示那样,在窗口头部就会马上跟着显现“工作名称/文号的最新内容。这样,就完全实现了设计初衷。


(-- END  需要完整代码的,请到QQ群 627590148即可下载。)
bt8.png
bt9.png

141

主题

613

回帖

4099

牛毛

游客

积分
4856
QQ
发表于 2017-4-10 09:19:30 | 显示全部楼层
学习了。大神!通达如果能把这个需求做成通用的功能就好了!

点评

多交流。 唯一缺陷,是手机端不认控件绑定的事件,所以无法在手机上运行。  详情 回复 发表于 2017-4-10 09:39

257

主题

1154

回帖

1万

牛毛

游客

积分
18851
QQ
 楼主| 发表于 2017-4-10 09:39:48 | 显示全部楼层
湖北通达OA总代 发表于 2017-4-10 09:19
学习了。大神!通达如果能把这个需求做成通用的功能就好了!

多交流。
唯一缺陷,是手机端不认控件绑定的事件,所以无法在手机上运行。

点评

手机网页端也不认吗?  详情 回复 发表于 2018-1-19 07:51

7

主题

8

回帖

41

牛毛

游客

积分
53
发表于 2018-1-19 07:51:34 | 显示全部楼层
cgft 发表于 2017-4-10 09:39
多交流。
唯一缺陷,是手机端不认控件绑定的事件,所以无法在手机上运行。 ...

手机网页端也不认吗?

0

主题

1

回帖

23

牛毛

二级牛人

积分
24
发表于 2018-8-22 09:44:59 | 显示全部楼层 来自 浙江省温州市
这个插件现在不能用了吗
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

咨询电话:400 818 0505 通达OA,国内协同管理软件行业内唯一的央企单位,中国协同OA软件的领跑者,优秀协同办公解决方案供应商

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|由NB5牛论坛提供技术支持NB5用户社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2024-12-21 23:46 , Processed in 0.156764 second(s), 55 queries , Yac On.

Powered by Discuz

Copyright © 2001-2024, 北京通达信科科技有限公司.

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