`
xxp3369
  • 浏览: 151386 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
oa_18:

实现WorkflowManager接口,以及流程管理的界面

需注意几个编程技巧:

1、如果页面上显示的图片数据并非磁盘上的一个图片文件,如何显示?
- 定义一个Action来读取图片,并直接写入HttpResponse对象
2、如果不知道XML文件的编码格式,如何正确读取这些XML文件,并转换为字符串?
- 利用DOM4J
3、如何在页面上显示格式良好的XML文件?
- <c:out/>标签的使用
- <pre></pre>标签的使用


package com.bjsxt.oa.manager.impl;

import java.util.List;

import com.bjsxt.oa.manager.JbpmFacade;
import com.bjsxt.oa.manager.WorkflowManager;
import com.bjsxt.oa.model.Workflow;

public class WorkflowManagerImpl extends AbstractManager implements
		WorkflowManager {

	private JbpmFacade jbpmFacade;
	
	public void addOrUpdateWorkflow(byte[] processDef, byte[] processImage) {
		String workflowName = jbpmFacade.deployProcessDefinition(processDef);
		
		//首先根据流程名称,查询是否已有Workflow对象
		Workflow wf = (Workflow)getSession().createQuery("select w from Workflow w where w.name = ?")
			.setParameter(0, workflowName)
			.uniqueResult();
		if(wf == null){
			wf = new Workflow();
			wf.setName(workflowName);
			wf.setProcessDef(processDef);
			wf.setProcessImage(processImage);
			getHibernateTemplate().save(wf);
		}else{
			wf.setProcessDef(processDef);
			wf.setProcessImage(processImage);
			getHibernateTemplate().update(wf);
		}
	}

	public void delWorkflow(int workflowId) {
		Workflow wf = findWorkflow(workflowId);
		jbpmFacade.delProcessDefinition(wf.getName());
		getHibernateTemplate().delete(wf);
	}

	public Workflow findWorkflow(int workflowId) {
		return (Workflow)getHibernateTemplate().load(Workflow.class, workflowId);
	}

	public List searchAllWorkflows() {
		return getHibernateTemplate().find("from Workflow");
	}

	public void setJbpmFacade(JbpmFacade jbpmFacade) {
		this.jbpmFacade = jbpmFacade;
	}



}



package com.bjsxt.oa.web.actions;

import java.io.ByteArrayInputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.dom4j.io.SAXReader;

import com.bjsxt.oa.manager.WorkflowManager;
import com.bjsxt.oa.model.Workflow;
import com.bjsxt.oa.web.forms.WorkflowActionForm;

public class WorkflowAction extends BaseAction {

	private WorkflowManager workflowManager;
	
	//打开主界面
	@Override
	protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		//获取所有流程信息进行显示
		request.setAttribute("workflows", workflowManager.searchAllWorkflows());
		
		return mapping.findForward("index");
	}
	
	//上传流程定义和流程图片的信息
	public ActionForward add(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		WorkflowActionForm waf = (WorkflowActionForm)form;
		
		if(waf.getProcessDef() != null && waf.getProcessImage() != null){
			workflowManager.addOrUpdateWorkflow(
					waf.getProcessDef().getFileData(), 
					waf.getProcessImage().getFileData());
			
		}
		return mapping.findForward("add_success");
	}
	
	public ActionForward del(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		WorkflowActionForm waf = (WorkflowActionForm)form;
		workflowManager.delWorkflow(waf.getId());
		return mapping.findForward("pub_del_success");
	}
	
	//打开查看流程图片的界面
	public ActionForward viewImage(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		WorkflowActionForm waf = (WorkflowActionForm)form;
		Workflow workflow = workflowManager.findWorkflow(waf.getId());
		request.setAttribute("workflow", workflow);
		return mapping.findForward("view_image");
	}
	
	//获取流程图片信息进行显示
	public ActionForward image(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		WorkflowActionForm waf = (WorkflowActionForm)form;
		Workflow workflow = workflowManager.findWorkflow(waf.getId());
		
		byte[] processImage = workflow.getProcessImage();
		
		response.setContentType("image/jpeg");
		response.getOutputStream().write(processImage);
		
		return null;
	}
	
	//查看流程定义界面
	public ActionForward viewDef(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		WorkflowActionForm waf = (WorkflowActionForm)form;
		Workflow workflow = workflowManager.findWorkflow(waf.getId());
		request.setAttribute("workflow", workflow);
		byte[] processDef = workflow.getProcessDef();
		
		String def = new SAXReader().read(new ByteArrayInputStream(processDef)).asXML();
		
		request.setAttribute("def", def);
		
		return mapping.findForward("view_def");
	}

	public void setWorkflowManager(WorkflowManager workflowManager) {
		this.workflowManager = workflowManager;
	}
	
}
分享到:
评论

相关推荐

    OA工作流配套课程代码

    "oa_20"和"oa_18"可能涉及到数据库操作,这是为了存储和检索工作流实例和任务的相关信息,确保数据的安全性和一致性。 7. **异常处理与日志** "oa_4"和"oa_3"可能包含了错误处理和日志记录的代码,这些对于系统的...

    abon_oa_代码需求1

    18. **学习借鉴**:开发人员应从其他CMS或程序中汲取灵感,优化代码质量。 19. **严谨的逻辑判断**:在编写业务逻辑时,要预设所有可能的情况,添加必要的判断,确保逻辑无遗漏。 20. **代码质量**:代码要求清晰...

    OA_ICESat2_guide.pdf

    《OA_ICESat2_guide.pdf》使用说明详细解读 该文档是关于如何使用开放测高系统(OpenAltimetry)的指南,特别是针对ICESat-2(冰川卫星2号)的数据处理和分析。ICESat-2是美国国家航空航天局(NASA)发射的一颗卫星...

    java开发oa办公系统源码-oa_system:oa_system

    1.下载项目、把oasys.sql(原tr18lx.sql)导入本地数据库 2. 修改application.properties, 3. 修改数据源,oasys——&gt;自己本地的库名,用户名和密码修改成自己的 4. 修改相关路径,配置图片路径、文件路径、附件...

    OA_struts2_hibernate3_spring2.5.rar

    &lt;constant name="struts.i18n.encoding" value="gbk"&gt;&lt;/constant&gt; &lt;result name="add_success" type="redirect"&gt;/common/pub_add_success.jsp &lt;result name="del_success" type="redirect"&gt;/...

    Using Origin from LabVIEW.pdf

    18. **OA_OpenNewOrigin**:启动新的Origin实例。 19. **OA_PE_mkdir**:在Origin项目目录下创建新目录。 20. **OA_PlotWksCols**:根据工作表中的列绘制图形。 21. **OA_Save**:保存Origin项目或工作簿。 22. **OA...

    OA-100BASE-T1-Interoperability-Test-Suite-V1.0-18

    OA-100BASE-T1-Interoperability-Test-Suite-V1.0-18

    simc18mmrf.rar_smic_smic18mmrf_smic18mmrf-1233_smic18rf_工艺库smic1

    SMIC18MMRF 模拟库,包含工艺、仿真和验证(DRC/LVS)

    SMIC_018_MMRF OA 格式, 可以直接用到IC617上

    标题中的“SMIC_018_MMRF OA 格式”指的是SMIC(中芯国际)的018纳米工艺节点下的MMRF(Multi-Metal Reference Frame)开放访问(Open Access,OA)格式。在集成电路设计(ICDESIGN)领域,这种格式是用于电路布局与...

    smic18mmrf-oa版(工艺库)

    本资源“smic18mmrf-oa版(工艺库)”是针对SMIC(中芯国际)18纳米射频(RF)工艺的一个开放访问(OA)版本工艺库,主要用于IC版图设计。这个工艺库的独特之处在于,用户无需经过通常的CDB(Cadence Design Base)...

    TSMC18台积电工艺库带安装教程与CDB转OA的转库说明

    本教程主要关注的是TSMC(台湾半导体制造公司)18纳米工艺库的安装及CDB(Common Data Base)到OA(OpenAccess)的转换过程。TSMC18工艺库适用于CMOS(互补金属氧化物半导体)技术,广泛应用于高性能、低功耗的集成...

    smic18mmrf

    标题“smic18mmrf”暗示我们正在讨论与SMIC(中芯国际)相关的18毫米射频(RF)技术。"SPDK18MMRF_1833_CDS"可能是该技术的一个特定版本或开发套件,其中“SPDK”可能代表“System-on-Chip Physical Design Kit”,...

    Cadence virtuoso smic 180工艺库 标准库 OA库 BCD库 直接使用 含PDK文件 IC617IC618

    "SPDK018MS_and_BCD_1850100120200350400_OA_CDS_V1.14_REV2_0_CCIQRC"是压缩包内的一个具体文件名,可能是SMIC的180纳米BCD工艺的某个版本的PDK文件,可能包含了OpenAccess数据库、电路模型和其他相关资料。...

    tsmc18rf_model_ADS_tsmc18rfADS库_tsmc_tsmc18rf_ADSRF_tsmc0.18umRF

    1. 导入模型:将TSMC提供的tsmc18rf_model_ADS模型文件导入到ADS环境中,确保模型库设置正确,以便在设计电路时调用。 2. 设计电路:利用ADS的电路编辑器,基于0.18um RF模型构建电路拓扑,包括晶体管、电容、电阻...

    VUE架构OA系统模板.rar

    这个模板可以帮助开发者快速搭建一个功能完备、界面友好的OA系统,减少从零开始编写代码的工作量。 OA系统,全称为Office Automation System,即办公自动化系统,是现代企业信息化管理的重要工具,主要用于提高办公...

    CDB转OA.docx

    7. 为了使新版本的 Virtuoso 使用转换后的 OA 格式库,需要将生成的 "smic18mmrf" 库替换原有库中的同名库文件。至此,工艺库的 CDB 转换至 OA 格式完成。 8. 最后,通过 Virtuoso 的库导入功能,导入已转换的 OA ...

    通达OAV11办公系统与致远OA 8.1功能对比测试资料

    在修改WEB服务端口这一环节,致远OA的修改流程在第18页,通达OA在第21页。这可能暗示通达OA对于端口配置的设置相对复杂,需要更多步骤。对于企业来说,灵活的端口配置能够满足不同的网络环境需求,因此这一点在选择...

    泛微OA 8.0 数据字典

    泛微OA 8.0 数据字典,仅供参考 号 表名 中文名称 表类型 说明 1 outerdatawfdetail 输出数据流程详情表 2 outerdatawfperiodset 外部数据触发周期设置表 3 outerdatawfset 外部数据触发设置表 4 ...

    Cadence Virtuoso IC618 下的SMIC-0.18BCD-18501001202003504-OA(高压器件)

    SMIC 0.18BCD工艺库的文件“smic18msbcd_1850100120200350400_oa_cds_v1.14_rev0_0_cciqrc”可能是一个包含所有必需信息的压缩包,如模型参数、版图形状和寄生参数等。"cciqrc"可能是表示这个库包含了Cadence的电路...

    2011-6-18更新的通达OA2010最新破解补丁-纯净版

    通达OA2010 3.6 110610 补丁自动升级-纯净版(含全套热门组件破解版本)——通达OA2010完美平台版最新OA补丁集成“OA破解补丁、通达即时通讯服务器版本IM、OA精灵 去官方链接及去除通达官方相关信息版(通达OA精灵去...

Global site tag (gtag.js) - Google Analytics