activiti学习(一)user与groupAPI

本文介绍使用Activiti工作流引擎进行用户与组的管理,包括用户和组的创建、查询、更新及删除等操作,并演示如何在流程任务中指定候选用户与组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.用户与组的创建以及用户与组的关系均通过identityService获取。

/**
 *  用户与组的API演示 
 */
public class IdentityServiceTest {

    @Rule
    //创建activitiRule时会默认通过activiti.cfg.xml创建activitiEngine
    public ActivitiRule activitiRule = new ActivitiRule();

    /**
     *  有关user的API演示 
     */
    @Test
    public void testUser() throws Exception{

        //通过activitiRule获取identityService
        IdentityService identityService = activitiRule.getIdentityService();

        //创建id为zp的用户
        User user = identityService.newUser("zrt");

        //设置用户相关信息
        user.setFirstName("ritian");
        user.setLastName("zhao");
        user.setEmail("71919752@qq.com");
        user.setPassword("123456789");

        //保存用户到数据库
        identityService.saveUser(user);

        //通过用户id查询用户
        User userInDb = identityService.createUserQuery().userId("zrt").singleResult();
        assertNotNull(userInDb);

        //删除用户
        identityService.deleteUser("zrt");
        userInDb = identityService.createUserQuery().userId("zrt").singleResult();
        assertNull(userInDb);
    }

    /**
     *  有关group的API演示 
     */
    @Test
    public void testGroup(){

        //通过activitiRule获取identityService
        IdentityService identityService = activitiRule.getIdentityService();

        //创建组并设置相关信息
        Group group = identityService.newGroup("student");
        group.setName("学生");
        group.setType("assignment");

        //保存组到数据库
        identityService.saveGroup(group);

        //通过组id查询组
        Group groupInDb = identityService.createGroupQuery().groupId("student").singleResult();
        assertNotNull(groupInDb);

        identityService.deleteGroup("student");
        groupInDb = identityService.createGroupQuery().groupId("student").singleResult();
        assertNull(groupInDb);
    }

    /**
     *  用户与组的关系 
     */
    @Test
    public void testUserAndGroup(){
        //通过activitiRule获取identityService
        IdentityService identityService = activitiRule.getIdentityService();

        //创建组并设置相关信息
        Group group = identityService.newGroup("student");
        group.setName("学生");
        group.setType("assignment");
        identityService.saveGroup(group);

        //创建用户并设置相关信息
        User user = identityService.newUser("zrt");
        user.setFirstName("ritian");
        user.setLastName("zhao");
        user.setEmail("71919@qq.com");
        user.setPassword("123456789");
        identityService.saveUser(user);

        //把zrt加到组student中
        identityService.createMembership("zrt", "student");

        //查询zrt所在的组
        Group groupContainsZRT = identityService.createGroupQuery().groupMember("zrt").singleResult();
        assertNotNull(groupContainsZRT);
        assertEquals("student",groupContainsZRT.getId());

        User userInGroup = identityService.createUserQuery().memberOfGroup("student").singleResult();
        assertNotNull(userInGroup);
        assertEquals("zrt",userInGroup.getId());

        identityService.deleteUser("zrt");
        identityService.deleteGroup("student"); 
    }

}

2.用户与组在流程中的应用
创建一个简单的流程
这里写图片描述
XML配置

<process id="userAndGroupInUserTask" name="My process" isExecutable="true">
    <startEvent id="startevent1" name="Start"></startEvent>
    <userTask id="usertask1" name="用户任务中的用户与组" activiti:candidateGroups="deptLeader">
    </userTask>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
  </process>

编写测试基类

/**
 *  测试基类 
 */
public abstract class AbstractTest {

    @Rule
    public ActivitiRule activitiRule = new ActivitiRule("activiti.cfg.xml");

    protected ProcessEngine processEngine;
    protected RepositoryService repositoryService;
    protected IdentityService identityService;
    protected TaskService taskService;
    protected RuntimeService runtimeService;
    protected HistoryService historyService;
    protected FormService formService;
    protected ManagementService managementService;

    /**
     *  开始测试 
     */
    @BeforeClass
    public static void setUpForClass() throws Exception{
        System.out.println("++++++++++++++++++++开始测试++++++++++++++++++++");
    }

    /**
     *  测试结束 
     */
    @AfterClass
    public static void testOverForClass() throws Exception{
        System.out.println("++++++++++++++++++++测试结束++++++++++++++++++++");
    }

    /**
     *  初始化变量 
     */
    @Before
    public void setUp() throws Exception{
        processEngine = activitiRule.getProcessEngine();
        repositoryService = activitiRule.getRepositoryService();
        identityService = activitiRule.getIdentityService();
        taskService = activitiRule.getTaskService();
        runtimeService = activitiRule.getRuntimeService();
        historyService = activitiRule.getHistoryService();
        formService = activitiRule.getFormService();
        managementService = activitiRule.getManagementService();

    }
}

编写测试类

public class UserAndGroupInUserTaskTest extends AbstractTest {
    /**
     *  每个test方法开始前
     *  初始化创建用户、组并将它们联系起来 
     */
    @Before
    public void setUp() throws Exception{
        //初始化7个service
        super.setUp();

        //创建并保存组
        Group group = identityService.newGroup("deptLeader");
        group.setName("部门领导");
        group.setType("assignment");
        identityService.saveGroup(group);

        //创建并保存用户
        User user = identityService.newUser("zrt");
        user.setFirstName("ritian");
        user.setLastName("zhao");
        user.setEmail("71919752@qq.com");
        user.setPassword("123456789");
        identityService.saveUser(user);

        //将用户加入到组中
        identityService.createMembership("zp", "deptLeader");
    }

    /**
     *  每个test方法结束后,删除关系,组,用户 
     */
    @After
    public void afterInvokeTestMethod(){
        identityService.deleteMembership("zrt", "deptLeader");
        identityService.deleteUser("zrt");
        identityService.deleteGroup("deptLeader");
    }


    @Test
    @Deployment(resources = {"bpmn/chapter5_001.bpmn"})
    public void testUserAndGroupInUserTask(){
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("userAndGroupInUserTask");
        assertNotNull(processInstance);
        Task task = taskService.createTaskQuery().taskCandidateUser("zrt").singleResult();
        taskService.claim(task.getId(), "zrt");
        taskService.complete(task.getId());
    }
}
首先,Activity是Android系统中的四大件之,可以用于显示View。Activity是用记交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了。 在深入了解Activity之前,我们先要知道下MVC设计模式,在JAVAEE 中MVC设计模式已经很经典了,而且分的也比较清晰了,但是在Android中,好多人对MVC在Android开发中的应用不是很清楚,下面我就先来介绍下MVC在Android开发中的应用: M(Model 模型):Model是应用程序的主体部分,所有的业务逻辑都应该写在这里,在Android中Model层JavaEE中的变化不大,如:对数据库的操作,对网络等的操作都放在该层(但不是说它们都放在同个包中,可以分开放,但它们统称为Model层)。 V(View 视图):是应用程序中负责生成用户界面的部分,也是在整个MVC架构中用户可以看到的层,接收用户输入,显示处理结果;在Android应用中般采用XML文件里德界面的描述,使用的时候可以非常方便的引入,当然也可以使用JavaScript+Html等方式作为View。 C(Controller控制层)android的控制层的重任就要落在众多的activity的肩上了,所以在这里就要建议大家不要在activity中写太多的代码,尽量能过activity交割Model业务逻辑层处理。 好了,在介绍过Android应用开发中的MVC架构后,我们就可以很明确的知道,在Android中Activity主要是用来做控制的,它可以选择要显示的View,也可以从View中获取数据然后把数据传给Model层进行处理,最后再来显示出处理结果。 介绍过Activity的主要作用后,那么我们就要详细说下Activity了。 Activity生命周期图 Activity 的生命周期是被以下的函数控制的。 public class Activity extends ApplicationContext { protected void onCreate(Bundle icicle); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onFreeze(Bundle outIcicle); protected void onPause(); protected void onStop(); protected void onDestroy(); } onCreate(Bundle) 函数是你进行初始化的地方,这个也是执行 setContentView(View)函数的地方,setContentView(View)函数可以传入个由XML 编制的UI界面,可以使UI和具体实现完全分离。 onPause()函数是处理用户离开当前 Activity 的地方。更重要的是,任何在当前 Activity中的任何改变都要在这个函数中提交。 Activity有四种状态: 活动状态,当Activity处于Stack(栈)顶时,就是手机当前的现实屏幕,这是 Activity就 处于activity或者运行状态。 运行但是失去焦点,当Activity还处于运行状态时,但是屏幕是有另外个Activity 处于文档处于焦点状态,当前的Activity就处于pause。 停止,当Activity被另个Activity完全覆盖的时候,就被停止了,其实就是虽然在 运行,但是用户却看不见。 结束,当Activity处于pause或者stop时,系统可以结束 Activity,回收资源,这 是Activity就是处于结束状态了。 处于结束状态的是Activity,如果要使用户可见,只要重启才可以。 Activity的响应时间 当前Activity所在的线程为主线程,它的响应时间为5秒,如果在当前运行的Activity中进行耗时的操作且响应时间起过5秒,那么程序就会报ANR错误。所以,这也是不建议在Activity中写太多复杂代码的原因之。 当然,有些代码只能写在Activity中,不然就运行不了(它们不是生命周期方法),比如你想要获得android系统或者硬件的些信息,就必须在Activity中写出来,如果单独写个工具类获得不了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值