原文:NetBPM工作流的一个示例:请假审批

前言

       在NetBPM的实践与应用中,大家一定会遇到各种各样的问题,笔者特建此帖, 聚集了一些典型问题,并作了初步解答。本帖将不断更新,大家有什么问题,可以在目录中寻找,若没有类似问题答案,欢迎留言讨论,对某些问题有好的解决方法等也可以留言,我将更新到目录中;-) 原文地址:http://www.cnblogs.com/LuBen/archive/2007/08/12/852382.html,转载就保留。

如何打包par包

       流程定义组件接口能够识别的包是zip压缩包,rar压缩包不能识别。 .par只是让流程定义压缩包区分其他压缩包的后缀,其实是不是.par不重要,重要的是zip压缩格式,并且包内文件结构符合nPdl要求。 所以要打包.par包,用普通压缩软件winrar进行zip压缩即可;-)

流程定义不支持中文?

      作为中国用户,在流程定义文件中使用中文是难以避免的,比如把流程的 名称取为"请假流程"而不是"holiday"。大家一定想到了XML编码,没错,把processdefinition.xml和webinterface.xml保存 为unicode编码就可以了(注:光在文件中这样写<?xml version="1.0" encoding="unicode" ?>是不行的,因为XML文件本身的编码格式也需要为unicode;-))。我们可以使用记事本打开XML文件,然后把编码如图所示改为unicode,然后保存即可:

流程图片大小不能超过8k?

       如果您使用的SQL Server2000数据库(其他数据库没有验证;-)),那么就会遇到一个问题: 流程图片大小不能超过8000字节,在web显示上也只能显示8000字节的图片;-) 为什么呢?实际上,如果图片超过8000字节,在流程定义包解析保存时, 数据库中也只保存了8000字节,多余的字节被忽略掉了,这是由于Nhibernate配置文件映射引起的。 解决的办法如下:修改Nhibernate映射文件ProcessBlockImpl.hbm.xml文件: 

1        <property
2 name="Image"
3 type="binary"
4 update="true"
5 insert="true"
6 column="image"
7 />
为: 1 <property
2 name="Image"
3 type="BinaryBlob"
4 update="true"
5 insert="true"
6 column="image"
7 /> 动态委托类不能用么? 动态委托类不能用,也是如上小节中流程图片大小一样原因 引起的,在库中只加载了8000字节的程序集,导致动态加载委托类不可用。解决办法如下:修改NHibernate映射文件AssemblyFileImpl.hbm.xml: 1 <property
2 name="Bytes"
3 type="binary"
4 update="true"
5 insert="true"
6 column="bytes"
7 />
为: 1 <property
2 name="Bytes"
3 type="BinaryBlob"
4 update="true"
5 insert="true"
6 column="bytes"
7 />
关于流程图形化设计的支持 NetBPM支持图形化设计,源码在CVS GPD模块中。流程设计器由JAVA写成,若您对JAVA比较熟悉,可以对它进行扩充;-)
注意:GPD源码,NetBPM作者不进行维护支持工作。 action的参数不能超过3个 经过测试,流程定义时,action参数定义数目不能超过3个,如果超过3个,则在加载流程压缩包时将出错。如: 1 <action event="process-instance-end"
2 handler="NetBpm.Workflow.Delegation.Impl.Action.EmailAction, NetBpm" on-exception="log">
3 <!--
4 <parameter name="four">previousActor</parameter>
5 -->
6 <parameter name="one">previousActor</parameter>
7 <parameter name="two">您提交了请假申请</parameter>
8 <parameter name="three">you requested a holiday from ${start date} to ${end date} with comment ${comment}</parameter>
9 </action>
10
去掉注释,则action参数达到4个,此时加载报错。 此BUG还没有修复,暂时的解决方法为:用类似${start date}的语法定义要用到的属性,然后定义解析该语法的工具类,以替代达到目的。
修改by LuBen 20070821:
并不是action的参数个数问题;-) 加载出现如下错误 NetBpm.Util.DB.DbException : NHibernate.ADOException while performing database operation 'iterate(select max( pd.Version ) from pd in class NetBpm.Workflow.Definition.Impl.ProcessDefinitionImpl where pd.Name = ? ,请假流程Holiday,type)' : could not insert: [NetBpm.Workflow.Delegation.Impl.DelegationImpl#246]
couldn't continue to parse the process archive
是因为加载的值比数据库字段设计的值要小, 在NBPM_DELEGATION表中cofiguration字段设计为255, 而加上第四个参数后, 加载的值已经超过了255,而在源码中并没有捕获ArgumentOutOfRangeException, 所以会报这个看似不相干的错误. 其他类似超过数据库字段设计都会报这个错误, 知道原因了, 修改即可. 关于processinstance的endtime为空值 流程结束时源码中存在一个小BUG,流程结束后processinstance的endtime一直为空值,不会在流程结束时赋值。 解决方法为,在NetBpm.Workflow.Execution.Impl命名空间下,修改ExecutionEngineImpl类中ProcessEndState方法部分如下: .........
1 FlowImpl rootFlow = (FlowImpl) executionContext.GetFlow();
2 rootFlow.ActorId = null;
3 rootFlow.End = DateTime.Now;
// 添加红色该句
4 ((ProcessInstanceImpl)executionContext.GetProcessInstance()).End = DateTime.Now;
5 rootFlow.Node = endState; // setting the node is not necessary if this method is called
6 // from processTransition, but it is necessary if this method is
7 // called from cancelProcessInstance in the component-impl.
..............
关于子流程向父流程传送属性 在IProcessInvocationHandler接口定义了CollectResults(IProcessInvocationContext processInvocationContext)方法, 此方法用来在子流程结束时,收集子流程要向父流程传递的属性值,但是引擎对收集后的属性保存实现不完全,需要作出修改。 更新.....

NetBpm Q&A(7)的更多相关文章

  1. GMF Q&A(1): 如何让palette支持拖拽(DnD)等10则

    1,如何让palette支持拖拽(DnD) 在*PaletteFactory类中,把私有类NodeToolEntry 和LinkToolEntry的基类修改为PaletteToolEntry.并在构造 ...

  2. NetBpm XML解读(5)

    原文: nPdl的翻译 在看NetBPM的nPdl文档时做了个翻译,一来是让自己能更好的理解nPdl,二来是希望能得到关心NetBPM的同志的指导.    由于对工作流不熟悉,所以有不少术语翻译没有把 ...

  3. NetBpm 组织架构(4)

    大牛的杰作,赞一个 转自:NetBPM工作流的架构设计及实现浅析 读前的话:由于本文涉及内容颇多,若有地方读来不很明白,建议先跳过,整体上有个认识后,再回过头来理解.作者认识有限,若有错误,欢迎斧正: ...

  4. NetBpm 安装篇(1)

    尊重别人劳动成果 转载注明出处:http://www.cnblogs.com/anbylau2130/p/3875718.html 官方主页 http://www.netbpm.org/docs/in ...

  5. 用户研究Q&A(1)

    近来,不少同事开始认同用户研究的价值,希望通过接触,理解和研究用户来获取提升产品的有效信息.这绝对是件好事,因为我一直抱持的理念是,研究并不是藏在实验室或者握在少部分人手中的稀罕货,更重要是一种理念和 ...

  6. VC Q&A (原创)

    Q1:External Dependencies有什么作用? A1:(网友答复:)External   Dependencies是说你没有把这个文件加入到这个工程中,但是需要这个文件的支持.当然有时是 ...

  7. NetBpm 测试篇(3)

    http://www.netbpm.org/movie/holiday/holiday.html

  8. NetBpm 配置篇(2)

    转载注明出处:http://www.cnblogs.com/anbylau2130/p/3877353.html 上一篇中介绍了Netbpm在IIS和CassiniWebServer服务器的安装 通过 ...

  9. XACT Q&A (转)

    XACT Q&A 传送门:http://blog.csdn.net/xoyojank/article/details/4098633

随机推荐

  1. 【基础练习】【区间DP】codevs1090 加分二叉树题解

    2003 NOIP TG 题目描写叙述 Description 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),当中数字1,2,3,-,n为节点编号.每一个节点都有一个分数(均为正整 ...

  2. log4写完日志不会自动释放

    今天想做个日志记录功能.网上查了下.决定使用log4net 来做. 但是最发现在写日志的时候.会一直占用当前的日志文件.当你想查看的时候会提示另一个进程占用了该文件. 只有到他创建下一个日志文件.然后 ...

  3. 微信小程序——引用阿里云字体

    阿里图标官网:http://www.iconfont.cn 使用阿里云图标大致的方法就是:选中你的图标——保存至你的项目——下载你的图标项目——在项目中引用字体文件. 具体方法可以参考:引用阿里云矢量 ...

  4. 3、QT分析之消息事件机制

    原文地址:http://blog.163.com/net_worm/blog/static/127702419201001432028526/ 上回我们分析到QPushButton的初始化,知道了Wi ...

  5. Everything:速度最快的文件名搜索工具(Linux版本) 转

    Everything是windows的一个快速搜索工具. 基本上转移到Linux上来后,没有怎么用过. 一直在用Gnome-Do,感觉还可以. 这个程序只是用来练习wxPython用的,目前还只是一个 ...

  6. thinkphp 伪静态 自定义后缀

    <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.we ...

  7. 实验一 ASP.NET应用环境配置 总结

    通过本次实验我学会了在Windows XP系统中安装IIS服务器,虽然我的电脑是Windows7系统,但是通过虚拟机软件,配置了一台Windows XP系统的虚拟机,在虚拟机内进行各项配置操作.这次实 ...

  8. Maven自动化部署

    在项目开发中,通常是部署过程包含以下步骤 检入代码在建项目全部进入SVN或源代码库中,并标记它. 从SVN下载完整的源代码. 构建应用程序. 生成输出要么WAR或EAR文件存储到一个共同的网络位置. ...

  9. Unity--------------------万向锁的概念

    万向锁 一直困惑我很久....原因出在这里,我以为欧拉角旋转是以模型坐标(齐次坐标系)为旋转轴.问题就来了,无论旋转那个轴,其它两个轴也会相应的变化,下面看图: 根据上面的说明两个旋转面(圆圈)怎么会 ...

  10. jQuery table td可编辑

    参考链接: http://www.freejs.net/ http://www.freejs.net/article_biaodan_34.html http://www.freejs.net/sea ...