SAP的ERP一直是其他ERP软件厂商争相学习和模仿的目标,但是模仿的过程是曲折的,很多时候只能学习其中的一个部分,或者因为生态或者运营体系的差异导致根本没有进行下去,笔者结合自己对于SAP产品的理解,采用由粗到细,由浅入深的方式对SAP的应用架构进行剖析。
从总体来看,SAP的企业管理软件分为两个部分, ERP和LOB应用, ERP是企业产供销核心应用,也是企业管理软件的backbone,用以支持整个公司的运营;LOB应用则是面向销售,采购,供应链等公司业务部分,是对ERP对应模块的功能扩展。这部分功能最终后ERP的对应模块进行集成。
视角进一步向下进入到ERP部分,这部分主要分为企业营运,财务和人力资源管理三个大的子应用。企业营运这部分是ERP的核心,SAP称为Enterprise Core Component,主要包括: SD, MM, PP, LE和QM几个模块;财务部分包含财务会计,管理会计,财务供应链管理和司库管理;人力资源管理HCM的功能包括HR基本功能(如薪酬,绩效等)HR服务(员工自助等),HR扩展(在线招聘等功能)。
我来继续来到ECC部分,以MM为例,对于一个模块的功能,SAP应用的基本架构除了主数据外,业务逻辑是Request--》Order---》Task---》Invoice等财务凭证的逻辑进行设计。Request部分主要的目的收集各种业务的来源,提供其他模块的集成接口,然后针对所有的request,业务部分从业务优化和管理优化的角度来分拆或者合并创建order,order代表一个一个确认需要做的事情的追踪,order有不同的状态,release的order是已经ready需要业务部门执行的,如果业务部分需要细化Order执行的管理,跟根据一个预制的模型产生各种Task,针对task可以进行分配,跟踪和确认。当所有的Task完成就会产生相应的财务凭证来触发财务记账。
Request和Order这种对象在SAP系统称之为Business Object,这是从业务到技术实现的一个定义,借用了面向对象设计的概念。过去SAP产品内部各个模块采用自己的方式来进行业务实现,但是经过几十年的积累和内部技术竞争。BOPF这个框架脱颖而出作为SAP内部产品进行业务实现的统一框架。BOPF的伟大之处是统一个产品内部的业务实现方式,规范业务结构,统一业务功能的划分和代码的逻辑组织。根据BOPF的思想,一个BO有Header(Root Node),还有其他的Node,Node之间有Association,Node可以理解为一个子表。业务的逻辑定义在Node之上,业务逻辑按照Action, Validation,Determination进行区分,避免没有经验的开发任务把一大堆代码堆砌在一个方法里面,不容易复用,也可能导致复杂的业务逻辑混乱。BO的状态转移通过状态机定义Status和Action之间的转移逻辑,从而保证也业务实现的合理性,模块化,可以复用。