• 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_

    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
  • 相关阅读:
    python 的时间复杂度
    python之进制转换
    进程、线程、协程
    [GO]gtk的windows环境搭建
    [GO]并的爬取捧腹的段子
    [GO]并发的网络爬虫
    [GO]百度贴吧的爬虫
    [operator]jenkins+gitlab/Webhook自动构建发布
    [GO]并发实现聊天室服务器
    [GO]文件的收发服务器
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3878070.html
Copyright © 2020-2023  润新知