架构
CRM/SFA应用很大程度不同于其它的OFBizBiz应用,OFBIZ应用设计为一组可以整合在一起适合各种商业活动的进程,CRM/SFA应用设计为支持角色/活动的全部活动在CRM应用中,这样子,它将带来与其它应用的很多不同点
1.CRM/SFA的商业逻辑粒度小于其它OFBiz,而且通常会调用很多其它应用中的action。如当创建一个帐户时,CRM/SFA应用将调用另一个OFBiz服务创建Party、PartyGroup、PartyRole、PartyRelationship等等
2.在OFBiz其它应用中高度抽象的数据模型在这里表达成更传统直观的概念。示例,“Party”被表达成为account ,lead, contact, team, 或 team member, 它们拥有不同的用户界面和业务逻辑。
3.OFBiz的“WorkEffort”面向用户时表达为“Activity”,而且只是事件和业务可作为“Activity”,其它的 “WorkEffort”例如制造产品过程在CRM/SFA中不显示出来。
4.它拥有PartyRelationship.securityGroupId定义多个参与者之间权限的不同的安全模型(示例,组成员A是否有权访问B帐户?)它使用了不同的安全方法(查看“Security Documentation”了解详细信息)
用户界面原则
CRM/SFA应用有一个不同于其它OFBiz应用的界面原则。简单来说,此原则就是 建立一个容易让用户明白和使用的界面,好过让用户不停的思考如何使用。
示例,“work effort”是一个OFBiz中的a task, a project, an event, 或a manufacturing production step,在OFBiz的WorkEffort应用中让用户自己创建它时选择对应的实例选项,而在这里,WorkEffort被分离在不同的人机界面上显示各自的特性。
大多数使用者,不会想“我打算创建一个work effort在参与者X和Y之间”,他们通常想“我为参与者X和Y在明天上午建立一个约会”。这样CRM/SFA应用提供创建约会界面并加入参与者X和Y,在此界面启动约会及完成它。
所以这意味着有些在OFBiz中允许的操作在CRM/SFA界面中不再被允许。示例,在OFBiz创建一个“EVENT”类型的work effor时可把它关联到货运或产品制作过程。这些信息在OFBiz的work effort中是可见字段,尽管work effort在event中并无这些关联字段。另一面,在CRM/SFA中界面看不到这些字段
这样的功能减少带来的是操作的易于理解,且也让一些日常的操作减少不必要的步骤。
另一个UI原则是将很多分离的步骤合而为一个操作步骤。最好的例子是当你创建一个联系人时,你可以在一个屏幕内输入所有联系人信息,而系统会自动的根据信息创建参与者、联系信息及关联项,将很多分离在不同OFBiz中的应用合而为一。
最后,我们打算避免用户点击回退、向前去查看信息,所以太多数屏幕都把信息显示在同一个屏幕里,而不是提供很多的信息标签
编码约定
另外,创建CRM/SFA应用,我们还有一些与其它不同的编码约定:
1.强制要求将视图与数据准备分离,我们限制视图层如freemaker页/XML只承担展现数据功能。这样意味着在form组件中不会存在”action”标签。
2.在屏幕组件定义中,使用beanshell脚本比<entity-one> XML操作更好。
3.Minilang脚本在一个方法中不要超过十行。使用java来编写复杂的商业逻辑。不要在minilang中使用<or>、<and>及计算。
4.保证代码块简捷。一般的,如果你的方法超过两百行,建议你考虑如何重构它。
5.为你的代码加上注释。描述你编码的目的和结果,而不仅是你做了什么。示例,如果你编写了如下代码
invoiceId=null;
不要注释写成://设置InvoiceId为null
而应该写成://invoiceId应该为空,否则服务不会创建一个新的发票
6.使用较长的变量/方法名称,如:computeForecastParentPeriod,而不是一个很短无意义的名称。
7.使用意指你所调用的实体对象的变量名,而不仅是一个缩略的变量名。 示例,如果你获得一个orderItems集合,变量名不要仅叫做”item”——可以叫它们”orderItems”或”nextOrderItem”,诸如此类。如果你获得一个OrderPaymentPreference实体,不要命名为“payments”,因为Payment实体同你命名的这个对象不是同一个东西。
8.在FTL、表单组件、beanshell和Java服务中使用java来帮助将复杂的逻辑进行分离。
9.将代码分离在应用的不同目录中,将表单、屏幕组件XML文档放在widgets目录中,将JAVA包放在src/目录下,FTL放在webapp/crmsfa/,BSH脚本放在webapp/crmsfa/WEB-INF/actions/中…
10.在服务XML中加了相关注释指出需注意的事项或此服务可能发生的意外
本文档译自opentaps v0.9 manual,本人翻译,欢迎转载,请注明出处.