`
man1900
  • 浏览: 429163 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JOffice中的自定义发文流程与运行模板设计

    博客分类:
  • JBPM
阅读更多

开发与设计公文流程在所有的政府oa项目上都少不了此需求,而能灵活定义一个在线的公文发文与收文流程尤其重要,J.Office通过过Velocity模板技术进行表单定义,同时结合WebOffice能非常容易实现在线公文的拟稿、保留修改痕迹、并且进行套红、套打功能。

 

在介绍本文之前,我们先看一下其中一个发文流程:

 

 

这是一个稍为复杂的发文流程,用jbpm工具发这个流程并不成问题,问题是这个流程设计好,其里面的每个任务如何跟公文系统的数据进行对应起来。

 

J.Office提供了流程的表单技术,通过Velocity,可以把表单里面对应的任务直接保存至公文系统,并且同时让流程跳转至下一步。

 

如其中一个任务表单的设计:

FlowPanel=Ext.extend(Ext.form.FormPanel,{
	constructor:function(cfg){
	    this.officePanel=new OfficePanel({
	    	height:490,
	    	filePath:'${doc_path}',
	    	showToolbar:true
	    });
		FlowPanel.superclass.constructor.call(this,{
			bodyStyle:'padding:5px',
			title:'办公室主任审核',
			height:600,
			width:800,
			layout:'form',
			items:[
				{
					fieldLabel:'审核意见',
					name:'zr_option',
					xtype:'textarea',
					width:400,
					allowBlank:false,
					anchor:'98%,98%'
				},this.officePanel.panel
			]
		});
	},
	save:function(){
			if(!this.getForm().isValid()) return;
			//TODO 保存我的流程表单至我的自定义表
			this.officePanel.saveDoc({
				fileCat : 'archIssue',
				docPath:this.officePanel.filePath
			});
			return true;
	}
})
  

对应的界面如下所示:

 

 

在以上可以比较容易在进行流程的跳转前,我们可以在这里处理我们的公文,如保存,套红,修改等操作,完成后再进行下一步的跳转处理。

 

注意,在VM模板中,我们也使用了${doc_path}这些变量,其值来自流程表单的提交,并且会在流程跳转过程中一直存在,以方便流程读取这些变量。

 

其他表单的设计也类似。

 

 

鉴于以前使用的WebOffice控件封装得不太好,现在附上一个封装较好的使用代码示例:

OfficePanel=function(conf){
	
	var officeObj = document.createElement('object');
	officeObj.width = "100%";
	officeObj.height = "100%";
	officeObj.classid= "clsid:E77E049B-23FC-4DB8-B756-60529A35FAD5"; 
	officeObj.codebase = __ctxPath+'/js/core/weboffice/weboffice_V6.0.4.6.cab#V6,0,4,6';
	
	var panelConf={border:false,layout:'fit'};
	
	if(conf.showToolbar){
		panelConf.tbar=new Ext.Toolbar({
			items:[
				{
					text : '保留修改痕迹',
					iconCls : 'btn-archive-save-trace',
					handler : function() {
						officeObj.SetTrackRevisions(1);
						officeObj.SetCurrUserName(curUserInfo.fullname);
					}
				}, '-', {
					text : '取消保留痕迹',
					iconCls : 'btn-archive-cancel-trace',
					handler : function() {
						officeObj.SetTrackRevisions(0);
					}
				}, '-',{
					text : '清除痕迹',
					iconCls : 'btn-archive-eraser',
					handler : function() {
						officeObj.SetTrackRevisions(4);
					}
				}, '-',{
					text:'加入套红模板',
					iconCls:'',
					handler:function(){
						new ArchTemplateSelector({
								callback : function(tempPath) {
									var filePath=conf.filePath?__fullPath+'/attachFiles/'+conf.filePath:'';
									officeObj.LoadOriginalFile(__fullPath+"/attachFiles/" + tempPath,'doc');
									officeObj.SetFieldValue("contents",filePath, "::FILE::");
									//officeObj.SetFieldValue("red_header","","::ADDMARK::");
									//officeObj.SetFieldValue("red_header",__fullPath+"/attachFiles/" + tempPath, "::FILE::");
								}
							}
						).show();
					}
				}
			]
		});
	}
	
	Ext.applyIf(panelConf,conf);

	var panel=new Ext.Panel(panelConf);
	panel.on('afterrender',function(){
			panel.body.appendChild(officeObj);
			panel.doLayout();
			var filePath=conf.filePath?__fullPath+'/attachFiles/'+conf.filePath:'';
			var docType=conf.docType?conf.docType:'doc';
			officeObj.LoadOriginalFile(filePath,docType);
			panel.doLayout();
			
	});
	panel.on('destroy',function(){
		try {
				officeObj.Close();
			} catch (ex) {}
	});
	
	window.onunload=function(){
		try {
				officeObj.Close();
			} catch (ex) {}
	};
	
	//对外公共方法
	return {
		panel:panel,
		officeObj:officeObj,
		filePath:conf.filePath,
		openDoc:function(path,type){
			var vType='doc';
			if(type){
				vType=type;
			}
			officeObj.LoadOriginalFile(path,type);
		},
		saveDoc:function(config){
				config=config||{};
				officeObj.HttpInit();
				officeObj.HttpAddPostString('file_cat', config.fileCat);
				//overwrite file path
				if(config.docPath!=null && config.docPath!=''){
					officeObj.HttpAddPostString('file_path', config.docPath);
				}
				officeObj.HttpAddPostCurrFile('AipFile','');	
				var url=config.url ? config.url: __fullPath + '/file-upload';
				// 提交上传文件
				returnValue = officeObj.HttpPost(url);
				var obj;
				eval('obj='+returnValue+";");
				return obj;
		}
	};
};

//Ext.reg('officepanel',OfficePanel);
  • 大小: 55 KB
  • 大小: 40 KB
分享到:
评论

相关推荐

    JOffice V1.2 beta

    这个JOffice V1.2 beta版,也就是官方说开源的版本之一。 说实话,这个公司很讨厌,打着开源的幌子来宣传自己的产品,里面的 东西根本没有开源,还很恶心的包留了一部分代码,htcore.jar。 对于这样的开源,我表示...

    JOffice1.3使用手册.

    关于 JOffice1.3使用手册,方便快捷,大家来下载

    JOffice2中的JBPM4的任务回退实现

    JOffice2中的JBPM4的任务回退实现

    joffice技术框架介绍

    joffice技术框架介绍。

    Joffice2.1操作手册

    提供流程定义、流程设置、流程版本更变,流程任务管理,流程实例管理,流程表单管理,流程表单在线义、模板表单,流程历史查询,查看我的任务,任务回退等丰富流程开发管理。 9 人力管理 10 报表管理 11 公文管理 ...

    joffice文档

    // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls;...

    joffice文档转pdf再转swf

    office文档转pdf后,再转swf,最终显示需要的一些工具及jar包,包括一个office转pdf转swf的java文件。因目前可上传的文件大小限制,OpenOffice安装文件未上传,工具目前最新版本为3.4.1,请另行下载

    权限实现实例(Ext+java)

    JOffice中的权限管理是基于角色的管理策略,采用Spring Security2的配置方式,同时能够结合EXT3来进行整个系统的权限管理,通过使用配置文件,进行整个系统的功能集中管理,包括系统左边的导航菜单,数据列表中的...

    JoPro:一个应用程序中的生产力和Office套件。-开源

    JoPro是一个生产力和办公套件,将文字处理器,电子表格设计器,演示设计器和svg查看器集成到一个应用程序中! 基于Netbeans平台。 图像和代码由Anthony Goubard设计。 最初称为Joffice。

    JOffVis:基于 Swing(Java)的工具,用于可视化 BIFF(二进制交换文件格式)文件

    JOffVis 一个基于 Java Swing 的工具,用于可视化 ...先决条件:1) Java SDK 72) Maven 3要编译应用程序,请运行以下命令mvn 干净编译要启动应用程序,请运行以下命令mvn exec:java -Dexec.mainClass="joffice.gui.App

    java打jar包方法

    用cmd命令打jar包 目标——将D:\myfile目录下的所有文件及文件夹打包到license.jar包中 步骤——1.用cd命令跳转至D:\myfile目录下 2.输入命令jar cvf license.jar *.* mysql->source F:/joffice131.sql

Global site tag (gtag.js) - Google Analytics