NetBpm 数据库(9)
原文:http://blog.csdn.net/adicovofer/article/details/1718592
关注NetBpm也很久了,可是一直没有静下心来研究,为了生活的琐事,太过浮躁……今天闲来无事,关注了一下NetBpm的组织结构,小记于此。
在NetBpm中,集成了组织结构,在数据库中体现在表NBPM_ACTOR和表NBPM_MEMBERSHIP上。NBPM_ACTOR存储了参与者的所有信息,包括User和Group,以及Group之间的关系(主要是Parent),NBPM_MEMBERSHIP保存了参与者的关系。
先看看实体之间的关系以及源码的组织结构


User,Group继承了Actor,与Membership是一对多的关系。
ActorImpl,GroupImpl,UserImpl分别是Atcor,Group,User的实体,与数据库的对应关系定义在配置文件ActorImpl.hbm.xml。MembershipImpl是Membership的实体,与数据库的对应关系定义在文件MembershipImpl.hbm.xml中。
NBPM_ACTOR的设计表如图:
ID:Actor的主码
SUBCLASS:这个是比较关键的字段,通过区分它,把这个表映射到相应的实体,即ActopImpl,UserImpl,GroupImpl。如果SUBCLASS等于User,NetBpm就将这条记录映射到UserImpl,作为User对待;如果SUBCLASS等于Group,NetBpm就将这条记录映射到GroupImpl,作为Group对待;如果SUBCLASS等于Actor,就映射到ActorImpl,ActorImpl是UserImpl和GroupImpl的基类,当然Actor也就包含了所有的UserImpl和GroupImpl。这里的映射是通过Nhibernate的配置文件来完成的,大家可以注意这个选项 discriminator-value。
NAME:Actor的名称,当前行为Group时有效,即Group的名称
TYPE_:Actor的类型,当前行为Group是有效,即Group的类型。
Parent:当前记录的父节点,只有当前记录为Group时有效
FIRSTNAME:
LASTNAME:
EMAIL:
现在应该明白了吧,其实这里分为两个表更加容易理解
|
User表 |
GROUP表 |
|
ID |
ID |
|
FIRSTNAME |
NAME |
|
LASTNAME |
TYPE_ |
|
|
NBPM_MEMEBERSHIP设计表如下:
ID:主码而已
ROLE:
TYPE_:Membership类型,几乎没有使用,我只在Test代码中看到过。
GROUP_:外码,Group的ID(NBPM_ACTOR.ID)
USER_:外码,User的ID(NBPM_ACTOR.ID)
NBPM_MEMEBERSHIP 表明了 User隶属于某个Group和 User的Role。其实也可以分为两个表来看:
|
User-Role对应表 |
User-Group对应表 |
|
ID |
ID |
|
Role |
USER_ |
|
USER_ |
GROUP_ |
现在的结构应该很清楚了。
更正:
NBPM_MEMEBERSHIP中的TYPE_是有用的,在源码中可以看到。NBPM_MEMEBERSHIP实际应该看成:
|
User-Role对应表
|
User-Group对应表
|
|
ID
|
ID
|
|
Role
|
USER_
|
|
USER_
|
GROUP_
|
|
|
TYPE_
|
TYPE_的参考源码,注意membership-type
{
/// <summary> allows to specify the next-actor in a process definition as an expression using the following syntax.
/// <p>The general syntax is firstArgument->nextArgument->nextArgument->...->nextArgument
/// </p>
/// <p>For the firstArgument, following constructions are valid :
/// <ul>
/// <li><b>previousActor</b> : </li>
/// <li><b>actor( <actorName> )</b> : </li>
/// <li><b>user( <userName> )</b> : </li>
/// <li><b>group( <groupName> )</b> : </li>
/// </ul>
/// </p>
/// <p>For the nextArgument's, following constructions are valid :
/// <ul>
/// <li><b>[User]->group( <membership-type> )</b> results in a Group</li>
/// <li><b>[Group]->role( <role> )</b> results in a User</li>
/// <li><b>[Group]->parentGroup</b> results in a Group</li>
/// </ul>
/// </p>
/// </summary>
public class AssignmentExpressionResolver : IAssignmentHandler
{
/// <summary> resolves an expression to a user or a group using the following syntax :
/// <p>The general syntax is firstArgument->nextArgument->nextArgument->...->nextArgument
/// </p>
/// <p>For the firstArgument, following constructions are valid :
/// <ul>
/// <li><b>previousActor</b> : </li>
/// <li><b>processInitiator</b> : </li>
/// <li><b>actor( <actorName> )</b> : </li>
/// <li><b>role( <attributeName> )</b> : </li>
/// <li><b>user( <userName> )</b> : </li>
/// <li><b>group( <groupName> )</b> : </li>
/// </ul>
/// </p>
/// <p>For the nextArgument's, following constructions are valid :
/// <ul>
/// <li><b>[User]->group( <membership-type> )</b> results in a Group</li>
/// <li><b>[Group]->role( <role> )</b> results in a User</li>
/// <li><b>[Group]->parentGroup</b> results in a Group</li>
/// </ul>
/// </p>
/// </summary>
public class ActorExpressionResolver
NetBpm 数据库(9)的更多相关文章
- NetBpm 目录
整理了一下网上的一些netbpm,虽然这项目现在不再更新了,还是想去学习一下,这个组件用时候很方便,比workFlow方便的多了 如果像jbpm那样一直更新就好了. 前两篇是个人的一个总结,后面一些是 ...
- NetBpm 组织架构(4)
大牛的杰作,赞一个 转自:NetBPM工作流的架构设计及实现浅析 读前的话:由于本文涉及内容颇多,若有地方读来不很明白,建议先跳过,整体上有个认识后,再回过头来理解.作者认识有限,若有错误,欢迎斧正: ...
- JSP应用开发 -------- 电纸书(未完待续)
http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术 第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...
- NetBPM的安装 -转
NetBPM的安装还是比较简单的,有比较详细的文档. 1.当然是先下载运行程序了, netbpm-0.8.3.1.zip ,官方网站:http://www.netbpm.org:2.然后解压后自己看 ...
- .Net 三款工作流引擎比较:WWF、netBPM 和 ccflow
下面将对目前比较主流的三款工作流进行介绍和比较,然后通过三款流程引擎分别设计一个较典型的流程来给大家分别演示这三款创建流程的过程.这三款工作流程引擎分别是 Windows Workflow Found ...
- NetBpm如何指定下一流程处理人(8)
NETBPM如何指定下一流程处理人 本着“软件以应用为本”(潘加宇老师对我的影响在这一点上很深.)的原则,我为ERP搭建了一个用NETBPM作的支持网站,想着能够看着软件得以应用,自是非常高兴. 不过 ...
- NetBpm Q&A(7)
原文:NetBPM工作流的一个示例:请假审批 前言 在NetBPM的实践与应用中,大家一定会遇到各种各样的问题,笔者特建此帖, 聚集了一些典型问题,并作了初步解答.本帖将不断更新,大家有什么问题,可以 ...
- NetBpm XML解读(5)
原文: nPdl的翻译 在看NetBPM的nPdl文档时做了个翻译,一来是让自己能更好的理解nPdl,二来是希望能得到关心NetBPM的同志的指导. 由于对工作流不熟悉,所以有不少术语翻译没有把 ...
- NetBpm 配置篇(2)
转载注明出处:http://www.cnblogs.com/anbylau2130/p/3877353.html 上一篇中介绍了Netbpm在IIS和CassiniWebServer服务器的安装 通过 ...
随机推荐
- JDBC-批处理操作
javaweb学习总结(三十六)——使用JDBC进行批处理 在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效 ...
- 【Java集合源码剖析】HashMap源码剖析
转载出处:http://blog.csdn.net/ns_code/article/details/36034955 HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-va ...
- 给data设置数据
console.log(JSON.stringify(that.data.navigator[0].content) + "--____+" + JSON.stringify(th ...
- LEARNING TO NAVIGATE IN COMPLEX ENVIRONMENTS
任务是地图里面导航,让agent从起始点到达指定位置. 用了supervised learning + reinforcement learning + lstm 用supervised learni ...
- C语言中重要的小知识汇总
用于整理记录一些C语言下的小知识点: 1. 在C语言中,怎么查看一个数据类型占用了多少个字节大小呢? 可以使用sizeof(int)/sizeof(double)等来查看某数据类型到底用了几个字节: ...
- Unity下Iso和Persp两种模式的区别
Iso模式 平行视野.在Iso模式下,不论物体距离摄像头远近都给人的感觉是一样大的. Persp模式 透视视野.在persp模式下,物体在scene界面上所呈现的画面是给人一种距离摄像头近的物体显示的 ...
- (原)在firefly_rk3288开发板上解决openGL在设置32位色深以后出现花屏的问题
转载请注明出处:http://www.cnblogs.com/lihaiping/p/5567141.html 在做openGL测试的过程中,根据论坛上的帖子,在使用/bin/fbset -a -no ...
- CI框架 -- 文件结构
这个本来是很基础的东西,基本上用过CI的人都知道这些,原本是不消说的~但是因为毕业论文是关于CodeIgniter的,所以我必须把大大小小的东西都写出来做成记录~ CodeInigter,一个轻量,功 ...
- svn -- svn图标解析
1.代表服务器端与客户端文件相同,没有任何更改 2.当前文件如果有修改,那么将显示如下图标 3.当前要提交的文件,与服务器上其他人提交的文件有冲突,那么将显示如下图标 4.当前文件,在服务器上已被删除 ...
- Linux定时任务工具crontab详解及系统时间同步
Linux配置自动时间同步 linux下时间同步的两种方法分享 tail -f /var/log/cron linux下定时执行任务的方法 在LINUX中你应该先输入crontab -e,然后就会有 ...