NetBPM工作流Q&A

4 篇文章 0 订阅
3 篇文章 0 订阅

NetBPM工作流Q&A(不断更新)

Made by LuBen:2007年8月12日


目录

写在前面

如何打包par包

流程定义是不是不支持中文?

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

动态委托类不能用么?

关于流程图形化设计的支持

action的参数不能超过3个

关于processinstance的endtime为空值

关于子流程向父流程传送属性

不断更新中...


前言

       在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)方法, 此方法用来在子流程结束时,收集子流程要向父流程传递的属性值,但是引擎对收集后的属性保存实现不完全,需要作出修改。

    更新.....

分类:  WorkFlow & NetBpm
0
0
(请您对文章做出评价)
« 上一篇: NetBPM工作流的一个示例-请假审批

posted on 2007-08-12 11:48 LuBen 阅读(8335) 评论(30编辑 收藏

评论

#1楼 2007-08-12 14:23 Ψιζσεα.  

NHibernate 跟NetBPM 的关系是什么? 
一定要用NHibernate么?
  

#2楼 2007-08-12 15:01 stillwater  

为什么都是从JAVA转过来的东西呢 
为什么.NET没有好一点开源的自己的东东呢
  

#3楼 2007-08-13 08:29 bluebirdzx[未注册用户]

我以前也关注过NETBPM,由于项目问题,一直没有使用,在一个在这方面成功的案例没有发现多少,不敢使用,能否谈谈一个他的可行性问题,还有有什么缺点,可以通过什么方式弥补它
  

#4楼[楼主2007-08-13 08:54 LuBen  

@iCaca 
在我前面帖子“NetBPM的架构实现浅析”中有提到,Castle是NetBPM的IOC容器,而NHibernate是作为Castle的一个facility存在的,它是NetBPM的数据持久层。如果您不用NHibernate,需要更改其数据持久层;-)
  

#5楼[楼主2007-08-13 08:56 LuBen  

@静水≈深流 
赫赫,Castle算不算。JAVA比.NET先行,从JAVA借鉴优秀的东西就很自然了。;-)
  

#6楼[楼主2007-08-13 08:57 LuBen  

@bluebirdzx 
是哈,NetBPM的中文资料实在是太少了,其获取的支持也没有JBPM多。关于它的可行性问题,缺点等,有时间我开个帖子,大家一起讨论;-)
  

#7楼[楼主2007-08-13 09:24 LuBen  

@iCaca 
关于NHibernate等组件的问题,我想下面这个对话(使用者Michael 和NetBPM作者Philipp之间的对话)可以给你答案: 
问: 
Hi Philipp, 
You mentioned in a previous post that Relations existed in order to ensure objects were created by nhibernate properly. Relations are a core part of your system does this mean that you envisage NHibernate being an essential element. I'm currently evaluating whether to use netBPM on a project but I'm not using NHibernate, or rails, or the Castle containers. Looking at the interfaces it looks like it is possible not to use these components.. would you agree? 

Kind Regards, 
Michael 
答: 
Hi Michael 

You are right. If you build our application you don’t need NHibernate. But internal netBPM uses NHibernate to translate the valueobjects into netBPM tables. 

Castle is used to configure netBPM for instance Database or a custom assembly loader. 

Monorail is only used for the web application. In my point of view the web application is only an example to see what is possible with the core API’s. 

But you can develop your application with the tools you like to choose. 
netBPM is facade to the other tools (NHibernate). 

Regards Philipp 

  

#8楼 2007-08-13 12:24 Ψιζσεα.  

@LuBen 
:) 谢谢 
  

#9楼[楼主2007-08-21 09:20 LuBen  

关于action参数不能大于3的问题已经更新;-)
  

#10楼 2007-08-31 09:58 飞翔[未注册用户]

请教个问题:NetBpm中用户权限是怎么实现的? 
谢谢!
  

#11楼[楼主2007-09-06 08:50 LuBen  

@飞翔 
真不好意思,现在才回复你,这些天有些事情没有上网络。 
NetBPM中对表单子元素的访问控制是通过流程定义时的field access限定,而对整个表单的访问控件、表单操作控制则是通过authorizationHandler检测
  

#12楼 2007-09-19 13:38 飞 翔[未注册用户]

NetBpm是否可以定义一个组用户发起一个流程?
  

#13楼[楼主2007-09-19 15:04 LuBen  

@飞 翔 
你好;-) 
一个组用户发起流程是什么样子的情形呢,让谁来提交表单? 
也许这个可能出现在子流程中,子流程的发起者为一个用户群组。 
其实实现是可以很灵活的,看我们如何定义流程执行者的表达式解析组件,NetBPM原来的组件比较简单,如果你要用自己的组织架构组件,肯定就会考虑自己的解析方式,那样子流程执行者是单个用户还是用户组或者其他就都在控制之中了。
  

#14楼 2007-09-19 17:09 飞 翔[未注册用户]

非常谢谢!:) 
在NetBpm中是否可以对一个状态点设定时间,如果在这个点超过一定时间没有处理,流程流转到相应的点进行处理。
  

#15楼[楼主2007-10-22 16:32 LuBen  

@飞 翔 
;-)
  

#16楼 2008-01-11 17:33 呆 呆[未注册用户]

楼主,首先感谢你写的你对NetBpm的理解.小弟初学,对我帮助很大.为了学习你的例子(你的是2.0的),我花了大半天时间,终于把NetBpm移植到2.0了,也成功把你的请假流程例子解析存进了数据库.可是当我点"Start"按钮的时候,报如下错误: 
can't instantiate delegate 'NetBpm.Example.LeaveOfAbsence.TextIntergerInput, NetBpm.Example.LeaveOfAbsence' : 未能加载文件或程序集“8000 bytes loaded from NetBpm, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。 

小弟认为这和你上面提到的<动态委托类>是同一个问题,但按照你说的方法修改后,问题还是不能解决.请大哥指点 
  

#17楼[楼主2008-01-11 17:46 LuBen  

@呆 呆 
是不是dll下载不完整? 
或者是文中"action的参数不能超过3个"类似原因: 
是因为加载的值比数据库字段设计的值要小, 在NBPM_DELEGATION表中cofiguration字段设计为255, 而加上第四个参数后, 加载的值已经超过了255,而在源码中并没有捕获ArgumentOutOfRangeException, 所以会报这个看似不相干的错误. 其他类似超过数据库字段设计都会报这个错误, 知道原因了, 修改即可.
  

#18楼 2008-02-26 14:04 micree[未注册用户]

您好,我刚开始使用netbpm,从cvs获得的源码,编译使用,但从NetBmp工程编译的NetBmp.dll放到NetBmp.Web下使用在登录后总是报错,如下,但是用原来的NetBmp.dll就没有问题。跟了一下是在NetBpm\Util\Db\DbSession.cs中的269行的_session.Find报出来的 
我是用vs2003编译的,没用nant,请帮助我,多谢了! 

2008-02-26 11:20:01,593 [2720] DEBUG NetBpm.Util.DB.DbSession [(null)] <(null)> - operation: find(from a in class NetBpm.Workflow.Organisation.Impl.ActorImpl where a.id = ?,value,type) 
NHibernate.QueryException: persister not found: NetBpm.Workflow.Organisation.Impl.ActorImpl [from a in class NetBpm.Workflow.Organisation.Impl.ActorImpl where a.id = ?] 

  

#19楼 2008-03-24 14:38 yunsi[未注册用户]

NetBpm现在是否支持.NET2.0???
  

#20楼 2008-03-29 21:28 caidehui123[未注册用户]

请问是否支持多语言,例如提示信息,能否同时支持英文、中文、日文
  

#21楼 2008-04-09 00:03 蓝奇高级验证码识别引擎QQ:631753663[未注册用户]

出售蓝奇高级验证码识别引擎,可准确识别新浪动网淘宝CSDN等多种复杂验证码。 

输出为一个标准DLL,可供VB,VC,Delphi,C#.NET,VB.NET,模拟精灵,按键精灵等多平台调用,调用方法简单,几行代码即可完成。独具特色的边缘检测字符分离、旋转倾斜纠正和通用字符匹配算法(无论字体和大小), 使得该引擎对于像新浪、动网、淘宝、CSDN等多种验证码均有不错的识别率,是一款效果较为理想的验证码识别引擎。附详细的调用实例和代码注释等相关技术文档。 

官方网站 -  http://***/yzm_advocr 
识别效果怎么样一试就知道 - DEMO下载  http://***/yzm_advocr/advocr.rar 
  

#22楼 2008-08-04 15:50 Bob&xiaobo.liu  

倒是挺想好好看看netbpm的代码,学习学习的,可是不晓得从何下手,楼主看来对netbpm特别熟悉,能不能给点儿建议啊 本人只会asp.net基本开发 也就熟悉开发平台而已 该怎么学习呢 
netbpm的安装和源码下载已经在网上找到相关资料完成啦 可不晓得去一步步的看懂代码(总想有个实现的例子去F11一步步走这看看)以及代码中使用的各种技术
  

#23楼 2008-09-03 15:47 zdq[未注册用户]

问大家一个问题,我下载的文件,怎么没有
intro/index.rails
这个.

  

#24楼 2008-10-31 14:52 舰长[未注册用户]

LZ,经过你一系列文章的学习,netbpm可以在vs2003下调试了,但是为什么移植到vs2005的时候,报错,出现一个没有任何提示的错误.不知道怎样下手了.我的代码是从CVS上下的.谢谢LZ是否提供下转换好的vs2005的代码呢.谢谢
  

#25楼 2008-11-12 11:08 123456abcd[未注册用户]

本来就没有intro/index.rails文件,后缀名对应到vm的
  

#26楼 2008-11-27 10:08 游客[未注册用户]

楼主好长时间没有更新NetBpm的文章了,你的Blog一直是我学习NetBpm的地方,关注中……
  

#27楼 2009-03-30 14:51 netbpm 新手[未注册用户]

我下载的源码中怎么没有 performLogin.rails 文件呀,各位大侠帮忙解决解决,谢谢先
  

#28楼 2009-07-28 16:01 Qingor[未注册用户]

@netbpm 新手
本来就没有.rails文件的,monorail机制根据请求会自己找相应的controller中找到相应的函数的,结合vm文件返回相应的html代码,比如intro/performLogin.rails,那么在introcontroller下必然会有一个performLogin函数的
  

#29楼 2011-05-12 14:41 我每天都在进步o(∩_∩)o...  

你好,你现在还在研究netbpm吗?我刚看了一下netbpm的官网,最近的更新日期还停留在2007年。是不是已经没人更新了?
  

#30楼 2013-07-25 16:34 吴东雷  

最近准备学学工作流,想重写NetBPM,当然重写的基础是要先把它搞明白。楼主好几年没有更新博客了,不知道是什么原因。
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值