原文: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_

EMAIL

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

namespace NetBpm.Workflow.Delegation.Impl.Assignment
{
    /// <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( &lt;actorName&gt; )</b> : </li>
    /// <li><b>user( &lt;userName&gt; )</b> : </li>
    /// <li><b>group( &lt;groupName&gt; )</b> : </li>
    /// </ul>
    /// </p> 
    /// <p>For the nextArgument's, following constructions are valid :
    /// <ul>
    /// <li><b>[User]->group( &lt;membership-type&gt; )</b> results in a Group</li>
    /// <li><b>[Group]->role( &lt;role&gt; )</b> results in a User</li>
    /// <li><b>[Group]->parentGroup</b> results in a Group</li>
    /// </ul>
    /// </p> 
    /// </summary>
    public class AssignmentExpressionResolver : IAssignmentHandler
namespace NetBpm.Workflow.Delegation.Impl
{
    /// <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( &lt;actorName&gt; )</b> : </li>
    /// <li><b>role( &lt;attributeName&gt; )</b> : </li>
    /// <li><b>user( &lt;userName&gt; )</b> : </li>
    /// <li><b>group( &lt;groupName&gt; )</b> : </li>
    /// </ul>
    /// </p> 
    /// <p>For the nextArgument's, following constructions are valid :
    /// <ul>
    /// <li><b>[User]->group( &lt;membership-type&gt; )</b> results in a Group</li>
    /// <li><b>[Group]->role( &lt;role&gt; )</b> results in a User</li>
    /// <li><b>[Group]->parentGroup</b> results in a Group</li>
    /// </ul>
    /// </p> 
    /// </summary>
    public class ActorExpressionResolver

NetBpm 数据库(9)的更多相关文章

  1. NetBpm 目录

    整理了一下网上的一些netbpm,虽然这项目现在不再更新了,还是想去学习一下,这个组件用时候很方便,比workFlow方便的多了 如果像jbpm那样一直更新就好了. 前两篇是个人的一个总结,后面一些是 ...

  2. NetBpm 组织架构(4)

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

  3. JSP应用开发 -------- 电纸书(未完待续)

    http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术   第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...

  4. NetBPM的安装 -转

    NetBPM的安装还是比较简单的,有比较详细的文档. 1.当然是先下载运行程序了, netbpm-0.8.3.1.zip ,官方网站:http://www.netbpm.org:2.然后解压后自己看 ...

  5. .Net 三款工作流引擎比较:WWF、netBPM 和 ccflow

    下面将对目前比较主流的三款工作流进行介绍和比较,然后通过三款流程引擎分别设计一个较典型的流程来给大家分别演示这三款创建流程的过程.这三款工作流程引擎分别是 Windows Workflow Found ...

  6. NetBpm如何指定下一流程处理人(8)

    NETBPM如何指定下一流程处理人 本着“软件以应用为本”(潘加宇老师对我的影响在这一点上很深.)的原则,我为ERP搭建了一个用NETBPM作的支持网站,想着能够看着软件得以应用,自是非常高兴. 不过 ...

  7. NetBpm Q&A(7)

    原文:NetBPM工作流的一个示例:请假审批 前言 在NetBPM的实践与应用中,大家一定会遇到各种各样的问题,笔者特建此帖, 聚集了一些典型问题,并作了初步解答.本帖将不断更新,大家有什么问题,可以 ...

  8. NetBpm XML解读(5)

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

  9. NetBpm 配置篇(2)

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

随机推荐

  1. Pycharm新建文件时自动添加基础信息

    位置:File->settings->Editor->File and Code Templates->Python Script 添加以下代码: #!/usr/bin/env ...

  2. python json dumps与loads有可能犯的错误

    json.dumps() 是将一个Python数据结构转换为一个JSON编码的字符串 json.loads() 是将一个JSON编码的字符串转换为一个Python数据结构     如下: >&g ...

  3. Laravel 定时任务

    一 .创建Command文件 php artisan make:console RefreshToken 创建app/Console/Commands 下创建RefreshToken.php 取一个名 ...

  4. Java设计模式(12)迭代模式(Iterator模式)

    上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟, ...

  5. Java零拷贝

    1.摘要 零拷贝的“零”是指用户态和内核态间copy数据的次数为零. 传统的数据copy(文件到文件.client到server等)涉及到四次用户态内核态切换.四次copy.四次copy中,两次在用户 ...

  6. 关于Unity中天空盒的使用

    天空盒 是一个盒子,一个正方形的盒子.其实本身也是一种shader,需要材质球做载体. 1: 一个场景是由6幅正方形的纹理图无缝拼接而成, 在视野看来位于真实的视野一样;2: 两种天空盒: 场景天空盒 ...

  7. 【Centos】systemd入门教程

    systemd使用教程 常用指令 运行一个服务: systemctl start <服务名> 关闭一个服务: systemctl stop <服务名> 重启一个服务: syst ...

  8. fsck 工具 ——检查 与修复 Linux系统上的文件系统

    可能由于昨天关电脑断电源的问题, 后来开机,直接出现如下界面: 心里想,不会吧,电脑怎么又出问题了吧(上周的时候,手贱,把装系统的硬盘分区设为了非活动分区,电脑就启动不来了,后来手动引导起来的:): ...

  9. 文本处理三剑客之 sed详解

    1.简介 sed是非交互式的编辑器,它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...

  10. 【阿里云】WindowsServer2012 搭建FTP站点 图文记录

    配置说明: 服务商:阿里云 系统: WindowsServer2012 一:配置FTP服务器 1.进入操作系统,直接从启动栏打开服务器管理器,选择添加功能和角色 2.选择服务器 3.勾选FTP服务器选 ...