热线电话

020-89773035

工作时间:

9:30-18:30

微信公众账号

NC是用友面向集团企业的世界级高端管理软件,目前NC基于8000家集团企业客户的实力,使其在同类产品市场占有率已经达到亚太第一,面向大型企业集团和成长中的集团企业的信息化需求,用友NC6的产品定位于大型企业管理与电子商务平台。他综合利用最新的互联网技术、云计算技术、移动应用技术等,通过构建大企业私有云来全面满足集团企业管理、全产业链管控和电子商务运营,为集团企业提供了一个全新的支持合规化应用需求和创新需求,以及个性化配置、集成、实施、运维、管理一体化的大型企业管理与电子商务平台,不断帮助集团企业创新管理模式,引领商业变革,实现长期发展目标。
该产品的特点总结为:多级集团管控、全产业链协同、动态企业建模、大企业云平台。尽管NC在进行企业产业链协同上的管理存在比较不错的表现,但在其NC5、NC6产品在全产业链上的协同还存在一些不足,表现在:

  1. NC内部的流程进行外部数据交互需要二次开发。
  2. 流程引擎必须用NC的内部流程引擎,非BPMN2的标准,存在一些描述流程业务的不足。
  3. NC待办必须在NC系统内完成。
  4. 移动端上的待办需要单独二次开发。
  5. 中国式的流程支持比较困难(如退回、分发、跳转、催办、定时跳过、版本变更、表单权限控制等)。
  6. 全集团的流程共享(多子公司)共用。
  7. 流程审批中的不同人员的计算(根据业务线条、表单计算线条等)。
  8. 跨系统的业务数据审批变得比较困难。

集团公司流程业务审批都存在以下问题,特别已经使用了NC业务系统的情况下:

的客户群都希望定义一套集团内的统一流程,从而真正上实现集团业务单据的管理在NC上管理及归档统计,而其审批过程即交由企业的统一流程审批平台上进行审批,真正实现业务管理、流程管理上的分离,从而大大提成企业的运作效率。

业务条线具体场景
人事行政会议管理会议室申请
调薪申请员工调薪申请
资金财务费用报销员工费用报销
资产购置固定资产的采购
合同管理合同审批合同签订的审批流程
合同修订合同变更的审批流程
付款管理付款申请合同付款流程
其他处理政府保证金政府保证金支付流程

以具体的某一类应用为例,其不同的应用场景如下所示:

业务系统具体场景流程模型
合同管理系统付款申请流程软装工程保修质保金
工程质保金支付审批流程
工程合同(建筑工程总包合同)
专业分包合同(房产发包)
勘察工程合同、软装工程承揽协议
建设工程委托监理合同
信报箱制作安装工程合同
营销合同(制作类)
机电工程设计合同、消防设计合同、照明设计合同、供电设计合同、弱电设计合同等
公关类合同
报批报建类合同(含其他报建)
机电类报建、检测合同
检测类合同
营销合同(销售代理、分销合同)

NC存在各种业务单据,如:工程合同单据、费用申请合同。录入完成后,这些单据需要在集团内各部门相关负责人进行审批,可以PC端审批、手机端审批。一般来说,在NC或其他业务系统中进行单据录入时,会有比较多的数据,而不同业务的审批人员不需要过多关注一些无用的信息,而只需要关心其核心的业务信息即可。如成本工程师在审批工程合同时,就主要关心这个合同项的明细部分是否合符项目的需求及成本要求。其他信息不过多关注。

因此BPM端的表单信息与NC端的表单信息展示就会有不同的方式,目前我们提供的方案可以在NC上开发一个补丁,通过在NC上的表单展示模板,通过勾选需要在审批时需要展示的字段,形成录单启动流程时需要的JSON数据串,其推送到BPM端 ,BPM端根据配置的模板接收这些JSON数据,并且展示给对应的审批人员进行查看即可。

BPM接收的NC表单JSON格式如下:

表单的模板:

表单的权限数据的配置:

最终生成以下审批界面:

同样,在BPM平台上通过配置手机表单,可生成手机表单上的审批界面,其解析原理跟PC表单一样,用户只需要配置对应的手机模板即可,如下图所示:

【说明】
为了实现审批的更清楚处理,一般来说,把审批明细的关键信息以附件的形式

NC与BPM流程数据交互示意图

我们目标是把NC作为业务单据的处理中心,把JSAAS作为BPM的流程审批中心,他们之间则通过Spring MVC Restful Web Service(JSON)实现数据交互。
注意:NC单据的很多数据及其档案类型(数据字典)数据比较多,一般是放在NC端。BPM端不需要进行业务数据存储,但在审批时,需要把关键的业务数据显示给审批人员,以支持其进行业务的决策。

接口开发

BPM提供的接口有:

  1. 接收NC的数据JSON并且启动业务流程实例。
  2. 更新审批表单的JSON数据。
  3. 作废流程实例的接口。

BPM回调NC的接口有:

  1. 流程启动时回调NC接口锁定单据状态为提交态
  2. 流程驳回发起人时回调NC的接口把单据状态改为自由态
  3. 流程审批通过结束时调用NC的接口实现单据的状态改为通过。

如何在BPM中配置调用NC的接口,BPM中提供了不同的流程事件配置,可以调用外部的接口:

事件触发配置

BPM提供多种事件的脚本入口 :

  1. 流程启动事件
  2. 流程完成事件
  3. 流程取消事件
  4. 流程任务创建事件
  5. 流程任务完成事件
  6. 任务人员指派事件

通过不同的事件,我们可以在流程审批的过程中,可以调用外部或其他系统的事件,并且同时推送流程审批过程上的相关数据。
一般来说,我们都在这相应的位置上配置好相对的脚本库,以实现对应的外部功能调用,如:

BPM会提供一些常用的上下文变量环境,以实现在脚本环境中可以拿到所有的审批表单的数据,同时通过Http/JMS/MAIL/FTP/JDBC等多种协议手段实现数据推送。这里可以扩展更多的可视化配置,通过Groovy脚本实现强大的数据交互功能,但注意的是,这里有事务的处理问题,一般来说是流程会根据调用脚本抛出的异常进行回滚。
【说明】
这些接口配置完成后,其后续无需要再开发,可重用于不同的NC5系列的项目上。

作为平台的内部流程中心,平台需要实现统一登录认证,以实现统一入口审批。要实现单点登录,首先需要统一平台的用户账号,甚至其组织架构,JSAAS平台提供两种方案:
BPM的用户组织架构实现接口,如大部分企业其内部的启用均是来自集团内的统一用户中心进行用户读取(如从AD域读取)
用户组织架构通过BPM平台上来进行设置,总体上来说,平台内的组织架构分为三种实体类型,用户、用户组、关系。通过它来描述不同的用户组织架构。

组织架构接口实现

用户接口
public interface UserService {
/**
* 按用户ID取用户
* @param userId
* @return IUser
*/
IUser getByUserId(String userId);
/**
* 按用户名取用户
* @param username
* @return IUser
*/
IUser getByUsername(String username);
/**
* 根据组ID和组类型获取关联的用户。
* @param groupId 用户组Id
* @param groupType 用户组类型
* @return List
*/
List getByGroupIdAndType(String groupId,String groupType);

/**
* 根据组ID获取用户数据。
* @param groupId
* @return
*/
List getByGroupId(String groupId);

}
用户组接口

/**
* 用户组服务。
* @author ray
*
*/
public interface GroupService {
/**
* 根据用户ID和组类别获取该用户所在的组织。
*
* 例如:张三在可以有多个岗位,这里就获取岗位他的岗位列表。
*
* @param groupType用户组类型
* @param userId用户ID
* @return
*/
List getByTypeAndUserId(String groupType,String userId);
/**
*根据用户ID获取用户当前所在的组,这个包括他所有的组。
*
* 比如这个用户有如下的组:
* role(角色): 角色列表
* pos(岗位) : 岗位列表
* org(部门) : 部门列表
*
* @param userId用户ID
* @return返回一个Map,键为维度类型,值为组列表。
*/
Map> getGroupsMapByUserId(String userId);

/**
* 获取用户组织。
* @param userId
* @return
*/
Map> getGroupIdsMapByUserId(String userId);
/**
* 根据用户ID获取用户所属的组,这里不对组类别进行区分,返回统一的组织列表,可能包括角色,部门等。
* @param userId
* @return
*/
List getGroupsByUserId(String userId);
/**
* 根据用户组返回组ID的列表。
* @param userId
* @return
*/
List getGroupsIdByUserId(String userId);
/**
* 返回用户的主组织。
* @param userId
* @return
*/
IGroup getMainByUserId(String userId);
/**
* 根据组织ID和类型获取组织对象。
*
* @param groupType
* @param groupId
* @return
*/
IGroup getById(String groupType,String groupId);
/**
* 根据组ID获取用户组。
* @param groupType
* @param groupId
* @return
*/
IGroup getById(String groupId);
/**
* 根据组织ID和类型获取组织对象。
* @param groupType 组织类型
* @param code组织别名
* @return
*/
IGroup getByCode(String groupType,String code);

/**
* 返回当前的组织类型。
*
* 返回平台支持的组织类型:
* 比如:
* role:角色
* pos: 岗位
* org: 部门
*
* @return
*/
List getGroupTypes();

}

用户查找人员接口

/**
* 流程人员计算服务类
* @author csx
* @Email: chshxuan@163.com
* @Copyright (c) 2014-2016 广州红迅软件有限公司(http://localhost)
* 本源代码受软件著作法保护,请在授权允许范围内使用。
*/
public interface BpmIdentityCalService {
/**
* 模拟计算
*/
public final String SIMULATE_CAL=”SIMULATE_CAL”;

/**
* 计算节点的人员
* @param actDefId 流程定义Id
* @param nodeId 流程节点Id
* @param vars 流程变量
* @return
*/
Collection calNodeUsersOrGroups(String actDefId,String nodeId,Map vars);

/**
* 计算节点的用户及组
* @param actDefId
* @param nodeId
* @param bpmSolUsers
* @param vars
* @return
*/
Set calNodeUsersOrGroups(String actDefId,String nodeId,List bpmSolUsers,Map vars);
}

组织架构同步管理

组织架构管理

用户关系管理(如汇报)

通过这种灵活的配置关系,比较容易实现审批人员的配置。

当实现了单点登录后,可以把集团内部的所有审批事项放置BPM中心来完成,这块就是流程统一审批了。可以把平台所有事项放置审批门户上,当用户登录时,马上可以看到自己的待办事项,从而进行审批即可。审批门户一般都是与企业内部的EIP一般是同一套东西,只是在上面增加一个审批入口而已,如:

在BPM审批过程中,一些NC单据审批需要依赖大量的线下纸质材料的扫描件,以辅助审批人员进行单据核审时,可以有效进行审核,这时就需要在审批过程中上传附件及展示附件。JSAAS的表单设计器中可提供附件的控件,用户只需要在需要上传附件的单据中插件该控件即可。支持Office文档、图片、PDF文件类型,在审批过程上,上传如下所示:

在审批展示时,其展示如下:

附件的存储

关于审批附件的存储,需要根据平台的用户的审批量,从而决定是否采用单独的文件服务器来进行存储,对于一般的审批量,如每月的文件附件量小于1G的,可以与WEB服务器共用,对于量大的,可以使用单独的文件服务器。而NC中若需要使用查看NC单据的图片,方案有:

  1. NC应用作改造,把附件存放在统一的文件服务器上
  2. 提交业务表单时,把其附件的数据以文件路径及名称与业务数据一起传过来
  3. BPM直接获得路径即可以读取该附件

另一方案,NC不存附件,当查看审批及附件依据时,则通过BPM对应的审批单据来查看,其方案如下所示:

  1. BPM与NC附件是同一份,数据一致性好。
  2. BPM不需要任二次开发,提供二次开发接口。
  3. NC只需要维护审批表单ID。