NETBPM如何指定下一流程处理人

本着“软件以应用为本”(潘加宇老师对我的影响在这一点上很深。)的原则,我为ERP搭建了一个用NETBPM作的支持网站,想着能够看着软件得以应用,自是非常高兴。

不过,这个工作流的缺点也是显然的,如何在流程中让上一操作者指定下一个操作者就是一个难点,因为根据预先的组织关系进行的分派很有可能出现流程无法进行下去的危险,这样就会限制软件的应用。想着netbpm脱胎于jbpm,我就想找找答案。当然有很多此类文章,不过,还是没有找到好使的。

于是,只好自己思考了。我觉得有三个解决办法:一是在流程中让用户指定一个actor,不过要增加一些处理的类;二是利用action来进行处理;三是采用decision的方式来判断。

对于第二种思路,我检查代码,发现行不通。原因是我想在事件before-activitystate-assignment触发对actor赋值,但是这两者是分开发生的,无法先行赋值给一个actor,造成了actor的Null值错误。开始还想直接通过数据库进行赋值,通过查询attribute的位置,将值赋好,不过这是绝对违背软件的原则的,而且也行不通。

第三种方法还来不及细想,只好回到第一种方法上来。我想的是直接让用户选择下一个actor。开始想在序列化的时候保存actor.id即可,谁知道总是报错,序列化行不通。只好改在htmlformatter上想办法,竟然成功!非常简单,又容易理解,嘿嘿,看来走了不少弯路。

代码如下:

public String ObjectToHtml(Object valueObject, String parameterName, System.Web.HttpRequest request)
{ System.String temp = "";
IList users=OrganisationUtil.Instance.FindAllUsers();
System.String text = "<select name=\"" + parameterName + "\" >";
foreach(IUser user in users)
{
temp="";
temp="<option value=\""+user.Id+"\">"+user.FirstName+user.LastName+"</option> ";
text+=temp;
}
text+="</select>";
return text;
} public Object ParseHttpParameter(String text, System.Web.HttpRequest request)
{
IUser user=OrganisationUtil.Instance.GetUser(text);
return user;
} 当然,如何取得所有的用户,需要增加一个方法即可。 解决此问题,耗时6个小时,觉得又增加了一些功力一般。挺高兴的。 注意:发现一个group下一个用户只能有一个role,不然无法查找group. 感谢网上许多的文章,让netbpm变得有点用了。

NetBpm如何指定下一流程处理人(8)的更多相关文章

  1. css border-bottom(指定下边线的样式、宽度及颜色)

    border-bottom(指定下边线的样式.宽度及颜色) border-bottom: 值: border-bottom-style:值; border-bottom-color: 值; borde ...

  2. 墨菲定律:当你觉得一个地方可能有bug,那么这个地方就会有bug----顺带了解下Tomcat那少有人注意的localhost.log

    一.问题概述 题目有点长,但应该值得后端java们了解下有点小坑的localhost.log,让我长话短说. 博主是搞java后端的.后台是很简单的spring mvc + spring框架. 今天测 ...

  3. N层电梯只停一层情况下,求所有人爬楼层数最少

    一.题目: 石家庄铁道大学基础教学楼一共有四部电梯,每层都有人上下,电梯在每一层都停.信1201-1班张一东每层都停有点儿不耐烦.如果在上下课高峰时刻电梯从一层上行,但只允许停留在某一层.每个人选择自 ...

  4. code -结合实例总结代码下拉流程

    1.查看手机需要的版本 1)如果手机本来就可以正常工作,可以使用指令 zhangshuli@zhangshuli-MS-:~/Desktop/day_note/plan$ adb shell getr ...

  5. 【Java面试】为什么引入偏向锁、轻量级锁,介绍下升级流程

    Hi,我是Mic 一个工作了7年的粉丝来找我,他说最近被各种锁搞晕了. 比如,共享锁.排它锁.偏向锁.轻量级锁.自旋锁.重量级锁. 间隙锁.临键锁.意向锁.读写锁.乐观锁.悲观锁.表锁.行锁. 然后前 ...

  6. imx6q uboot启动流程牛人的图片(转)

  7. DEBUG模式下屏蔽某些烦人的动态日志信息

    以上就是控制台循环打印的日志信息,总是会刷屏干扰到那些有用的日志信息,所以要把它们屏蔽掉,虽然如果将log级别调成info级别可以不显示了,但是那样的话,别的有用的日志信息就无法显示了. 要有针对性的 ...

  8. android下网络通信流程

    新版本android中进行socket编程有了新的要求和规定,在主线程中不能进行socket的创建和通信.所以一般都在线程中使用socket编程 这样在线程中使用就需要出现子线程与主线程交互的问题. ...

  9. Java学习日记基础篇(三-下)——流程控制之循环控制

    循环控制 for循环 语法: for(循环初值;循环条件;步长) { 语句; //循环体 } 例子: import java.io.*; public class Demo4 { public sta ...

随机推荐

  1. 【jquery】jquery 在 ie6 下无法设置 select 选中的解决方法

    本文主要解决在 ie6 下,jquery 无法设置 select 选中的问题.我们先看个例子: <!DOCTYPE HTML> <html lang="en-US" ...

  2. The SDK platform-tools version ((23)) is too old to check APIs compiled with API 26;

    好像是更新过啥SDK之后,项目一直在包名的那一行显示红线,不过是不报编译错误的,就是看着老扎心老扎心的,开始以为是指定的SDK版本的问题,修改后发现无效,最后找到方法解决: 打开SDK Manager ...

  3. [Intellij] Intellij IDEA 使用中遇见的问题

    问题集锦 [IntelliJ IDEA14 + tomcat 设置热部署] 点击deployment查看Deploy at the server startup 中tomcat每次所运行的包是 xxx ...

  4. 重点:QObject 的拷贝构造和赋值操作——私有

    QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承 ...

  5. 【C/C++】计时函数比较

    目前,存在着各种计时函数,一般的处理都是先调用计时函数,记下当前时间tstart,然后处理一段程序,再调用计时函数,记下处理后的时间tend,再tend和tstart做差,就可以得到程序的执行时间,但 ...

  6. python新模块:secrets模块(为账户密码)

    默认我们会使用random模块, 而secrets模块用来产生强加密的随机数, 例如账号认证 import secrets import string characters = string.asci ...

  7. SAP 产品条码WMS结合 以及ABAP script的集成 BarCode

    条码和RFID打印解决方案   1, 热转印条码标签打印 热转打印技术的原理是通过加温和加压将色带上的固体油墨熔化转印到介质上完成打印的.通过选择热转印色带与标签材料匹配,热转印打印方式可以产生耐高温 ...

  8. 【Html】div 加载 html页面的方法

    做网页的单页面应用时,需要在一个HTML的Div元素中加载另一个HTML页面,以前有一种方法就是用iframe,举例如下:(亲测可行) <div class="main-contain ...

  9. 原创:XXX公司-基于SAP的库存管理系统解决方案

    XXX公司-基于SAP的库存管理系统 解决方案 版本:V0.3.0 Excel_Cortan 文件状态: [ ] 草稿 [ ] 正式发布 [√] 正在修改 文件标识:   当前版本: V0.3 作 者 ...

  10. 通配符的匹配很全面, 但无法找到元素 'context:property-placeholder'

    解决方案就是如下: xmlns:context="http://www.springframework.org/schema/context" 同时在xsi:schemaLocat ...