普加甘特图开发指南(3)

二次开发工作
ProjectService类
ProjectService类是用来处理从数据库加载和保存项目的。里面有两个重要方法:LoadProject和SaveProject。
开发者往往需要改造这个类,修改项目加载和保存的实现方式,以满足开发的需要。
PlusProject并不关心和限制开发者如何加载和保存项目数据,只需要在创建和使用PlusProject时,提供好符合数据格式的JSON数据即可。
所以开发者可以使用任意的数据库,以及数据库操作方式,灵活性和可控性非常高。

加载数据
在ProjectService的LoadProject方法中,根据项目UID,加载项目数据和任务数据,并进行数据格式转换工作,最后得到一个Hashtable对象返回。
开发者可以参考LoadProject方法的代码,使用自己熟悉的数据库操作方式,比如IBatis、Hibernate等第三方类库,查询数据后,按项目数据结构进行格式转换工作。
需要注意的是,TaskDal内的ModelMapper方法,负责数据库字段和后端字段的对应转换。。
从数据库查询出任务列表后,需要进行一个for循环遍历操作,一一将任务属性转换为标准任务字段。
另外,获得任务列表后,需要生成树形结构数据。这个可以使用TreeHelper的标准方法来实现:

//任务列表
ArrayList tasks = SelectTasks(projectUID);
//列表转树形
tasks = TreeHelper.List2Tree(tasks, "children", "UID", "ParentTaskUID");
project["Tasks"] = tasks;```

最后,需要获取项目的“部门”和“负责人”信息。这两个方法开发者可以重写实现。(示例是生成静态的数据)

//部门, 负责人获取
project["Departments"] = GetDepartments(projectUID);
project["Principals"] = GetPrincipals(projectUID);

保存数据(全部)
在ProjectService有一个SaveProject方法。
其原理是:删除所有旧任务,新增所有新任务,达到更新任务的目的。

//删除任务
taskDal.DeleteAllByProjectId(id,trans);
//树形转列表        
ArrayList tasks =TreeHelper.Tree2List((ArrayList)dataProject["Tasks"],"-1", "children", "UID", "ParentTaskUID");
//保存任务表
taskDal.Insert(task,trans);

保存数据(局部)
在ProjectService有一个SaveProject方法。(和上个方法参数不同)
其原理是:遍历所有任务(包括被删除的),判断任务的"_state"属性状态,分别做"增/删/改"数据库操作。

//树形转列表
ArrayList tasks = TreeUtil.ToList((ArrayList)dataProject["Tasks"],"-1", "children", "UID", "ParentTaskUID");
//把被删除的任务,加入遍历的集合中
ArrayList removedTasks = (ArrayList)dataProject["RemovedTasks"];
if (removedTasks != null)
{
    tasks.AddRange(removedTasks);
}
//获取变动的任务, 分别保存
foreach (Hashtable task in tasks)
{
    string state = Convert.ToString(task["_state"]);
if (state == "") continue;  
//如果任务没有变动,则不更新

    task["ProjectUID"] = projectUID;                
    switch (state)
    {
        case "added":       //新增
            ......
            break;
        case "modified":    //修改
            ......
            break;
        case "removed":     //删除                       
	    ......
            break;
    }
}

PlusProject提供了保存全部和保存局部两种方式的完整代码。开发者可以参考,并使用自己的方式实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值